Automatizarea Unui Expresor de Cafea cu Platforma Arduino

„Învățătura este o comoară care își urmează stăpânul pretutindeni.”

Proverb popular

REZUMATUL PROIECTULUI

Proiectul susținut constă în automatizarea unui expresor de cafea folosit atât casnic cât si spre comercializare de cafea în magazine, baruri, etc. Din motive ce țin de durata realizării cafelei si nu numai, s-a recurs la o metodă simplă de creare a unui sistem automat ce poate ușura munca celui care prepară cafeaua.

Pentru a prepara un espresso, atenția celui care execută acest proces trebuie îndreptată tot timpul către expresor. De accea procesul de preparare sustrage persoana de la alte activități. Expresoarele vin dotate cu butoane ON/OFF ce permit obținerea cafelei doar dacă acestea sunt pornite pe durata creării cafelei.

Cu ajutorul platformei Arduino se elimină timpul supravegherii expresorului. Automatizarea constă în reglarea automată a procesului de creare prin setarea de timpi pentru care componentele interne să lucreze nesupraveghiate.

Acesta platforma permite interconectarea elementelor expresorului și aduce îmbunătățiri acestuia, lucruri ce pot ajuta atât persoana care folosește aparatul cât și persoana care ține evidența numărului de cafele consumate și a funcționării corecte a aparatului.

Termenii cheie: platforma Arduino, metode de automatizare a expresoarelor de cafea, controlul sistemului automatizat cu ajutorul calculatorului

MULȚUMIRI

Doresc să mulțumesc pe această cale domnului profesorului îndrumător Ionuț Cristian RESCEANU, cu ajutorul căruia am realizat acest proiect și sub îndrumarea căruia am descoperit o nouă poartă către lumea electronicii. Susținerea si gandirea dânsului m-au ghidat către finalizarea acestui plan si m-au ajutat sa îmi creez o gândire inginerească.

PROLOG

CUPRINSUL

1 INTRODUCERE

1.1 CAFEAUA ESPRESSO

1.2 PLATFORMA ARDUINO

1.3 PROCESUL DE AUTOMATIZARE

2 EXPRESORUL TERRY OPALE

2.1 TERRY OPALE

2.2 MONODOZE DE CAFEA TIP E.S.E

2.3 COMPONENTE TERRY OPALE

2.3.1 Pompă ULKA EX5

2.3.2 Supapă electromagnetică pentru surplus de presiune

2.3.3 Rezistența de încălzire

2.3.4 Termostate

3 PLATFORMA ARDUINO

3.1 ARDUINO UNO

3.2 COMPONENTE ARDUINO

3.2.1 Placă 2 relee SPDT

3.2.2 SHIELD LCD 16X2………………………………….

3.2.3 ATMEGA328 CU ARDUINO BOOTLOADER UNO

3.3 ELEMENTE ADIȚIONALE UTILIZATE PENTRU CONECTAREA PLĂCII ARDUINO CU ELEMENTELE EXPRESORULUI

3.3.1 Transformator 220V la 12V

3.3.2 Punte redresoare WL04F

3.3.3 Condesator filtraj

3.3.4 Stabilizator de tensiune L7809CV

3.3.5 Termometru digital DS18B20

3.4 MODULE CE POT FI IMPLEMENTATE PE EXPRESOR

3.4.1 Modul WI-FI – WiFly Shield.

3.4.2 Modul GSM

3.4.3 Acceptor monede programabil

3.4.4 Imprimantă termică

4 STRUCTURA PROGRAMULUI

4.1 INIȚIALIZAREA VARIABILELOR

4.2 FUNCȚIA SETUP()

4.3 FUNCȚIA LOOP() – FUNCTIA PRINCIPALĂ.

4.4 ALTE FUNCȚII……………

4.4.1 detecteazaInput()

4.4.2 tipApasare ()

4.4.3 afisareEcran()

4.4.4 preparaCafea()

4.4.5 setareTimpCafea()

4.4.6 afisareDurata()

4.4.7 setari()

4.4.8 returneazaTextSetari()

5 CONCLUZII

6 BIBLIOGRAFIE

7 REFERINȚE WEB

A. CODUL SURSĂ

B. ANEXE

LISTA FIGURILOR

FIGURA 1.1 PREZENTARE CAFEA ESPRESSO……………………………………………………………………………………1

FIGURA 1.2 PLACA ARDUINO VEDERE DE SUS………………………………………………………………………………..4

FIGURA 2.1.1 EXPRESOR TERRY OPALE……………………………………………………………………………………………9

FIGURA 2.1.2 EXPRESOR TERRY OPALE DESCRIERE……………………………………………………………………..10

FIGURA 2.1.3 EXPRESOR TERRY OPALE DESCRIERE BUTOANE……………………………………………………11

FIGURA 2.2 MONODOZĂ DE CAFEA TIP E.S.E (7G CAFEA)…………………………………………………………….12

FIGURA 2.3.1.1 POMPA DE ALIMENTARE CU APĂ………………………………………………………………………….13

FIGURA 2.3.1.2 RAPORTUL PRESIUNE/VOLUM AL POMPEI……………………………………………………………13

FIGURA 2.3.1.3 DATELE TEHNICE ALE POMPEI DE ALIMENTARE CU APĂ…………………………………..14

FIGURA 2.3.2 ELECTROVALAVĂ DE SUPRAPRESIUNE…………………………………………………………………..15

FIGURA 2.3.3 REZISTENȚA DE ÎNCĂLZIRE A APEI …………………………………………………………………………16

FIGURA 2.3.4 TERMOSTAT DE CONECTARE/DECONECTARE A REZISTENȚEI DE ÎNCĂLZIRE A APEI…………………………………………………………………………………………………………………………………………………..17

FIGURA 3.1 PLATFORMA ARDUINO………………………………………………………………………………………………..18

FIGURA 3.2.1.1 PLACĂ 2 RELEE SPDT PENTRU ACȚIONAREA POMPEI ȘI A REZISTENȚEI EXPRESORULUI………………………………………………………………………………………………………………………………..20

FIGURA 3.2.1.2 PLACĂ 2 RELEE SPDT VEDERE DIN SPATE…………………………………………………………….20

FIGURA 3.2.2.1 MODUL LCD MONTAT PE O PLACA ARDUINO (VEDERE DIN FAȚĂ)………………………………………………………………………………………………………………………………………………..21

FIGURA 3.2.2.2 MODUL LCD MONTAT PE O PLACA ARDUINO (VEDERE DIN

SPATE)………………………………………………………………………………………………………………………………………………22

FIGURA 3.2.3 CIRCUITUL INTEGRAT ATMEGA328…………………………………………………………………………23

FIGURA 3.3.1 TRANSORMATOR DE TENSIUNE……………………………………………………………………………….24

FIGURA 3.3.2.1 PUNTE REDRESOARE………………………………………………………………………………………………24

FIGURA 3.3.2.2 SCHEMA PUNȚII REDRESOARE………………………………………………………………………………25

FIGURA 3.3.3 CONDESATOR FILTRAJ……………………………………………………………………………………………..25

FIGURA 3.3.4.1 STABILIZATORUL DE TENSIUNE……………………………………………………………………………25

FIGURA 3.3.4.2 SCHEMA DE PRINCIPIU…………………………………………………………………………………………..26

FIGURA 3.3.5 TERMOMETRU DIGITAL…………………………………………………………………………………………….26

FIGURA 3.4.1 MODUL DE WI-FI………………………………………………………………………………………………………..28

FIGURA 3.4.2 MODUL GSM/GPRS……………………………………………………………………………………………………..29

FIGURA 3.4.3 MODEL DE ACCEPTOR MONEDE……………………………………………………………………………….30

FIGURE 3.4.4 IMPRIMANTĂ TERMICĂ……………………………………………………………………………………………..30

FIGURA 4.4.3 TEXTUL AFIȘAT PE ECRAN CU AJUTORUL FUNCȚIEI

AFISAREECRAN() …………………………………………………………………………………………………………………………….39

FIGURA 4.4.4.1 MESAJELE DE PREPARARE A TIPULUI DE

ESPRESSO ………………………………………………………………………………………………………………………………………..40

FIGURA 4.4.4.2 MESAJUL AFIȘAT LA TERMINAREA PROCESULUI DE PREPARARE A

CAFELEI …………………………………………………………………………………………………………………………………………..42

FIGURA 4.4.5.1 MESAJELE ÎN MOMENTUL SETĂRII DURATEI DE PREPARARE A

CAFELEI ………………………………………………………………………………………………………………………………………42-43

FIGURA 4.4.5.2 MESAJUL AFIȘAT DUPĂ CE S-A SALVAT DURATA CAFELEI SELECTATE ………………………………………………………………………………………………………………………………………………………….44

FIGURA 4.4.7.1 MESAJE AFIȘATE ÎN MODUL SETĂRI LA NUMĂRUL DE CAFELE ………………………………………………………………………………………………………………………………………………………….45

FIGURA 4.4.7.2 MESAJUL AFIȘAT ÎN MODUL SETĂRI REPREZENTÂND TEPERATURA REZISTENȚEI……………………………………………………………………………………………………………………………………46

FIGURA 4.4.7.3 MESAJUL AFIȘAT CE CONȚINE TIMPII CAFELELOR ÎN MODUL SETĂRI……………………………………………………………………………………………………………………………………………..46

LISTA TABELELOR

TABEL 1.1 PARAMETRII TERMICI………………………………………………………………………………………………….2

TABEL 2.2 VOLUM RECOMANDAT…………………………………………………………………………………………………12

TABEL 3.1 SPECIFICAȚII PLATFORMĂ ARDUINO………………………………………………………………………….19

Introducere

1.1 CAFEAUA ESPRESSO

Figura 1.1 Prezentare cafea espresso

Espresso este o cafea preparată prin forțarea unei cantități mici de apă, aproape fiartă, sub presiune, prin boabe de cafea fin măcinate. Espresso este în general mai gros decât cafeaua preparată prin alte metode, are o concentrație mai mare de solide dizolvate și are “crema “deasupra (o spumă cu o consistență cremoasă).

Ca rezultat al procesului de preparare sub presiune, aromele și chimicalele dintr-o ceașcă obișnuită de espresso sunt foarte concentrate.

Espresso este baza pentru alte băuturi, cum ar fi un caffe latte, cappuccino, caffe macchiato, caffe mocha sau caffe americano. Espresso are mai multă cofeină per unitate de volum decât cele mai multe băuturi, dar măsura de servire este de obicei mai mică.

Procesul de preparare

Espresso se face prin forțarea de apă fierbinte sub presiune mare prin cafea măcinată fin.

“Crema“ se produce prin emulsionarea uleiurilor din cafeaua măcinată într-un coloid, care nu apare în alte metode de preparare. Nu există un standard universal care să definească procesul de extragere al espresso-ului dar există mai multe definiții publicate care încearca să plaseze constrângeri referitoare la cantitatea și tipul de cafea măcinata folosită, temperatura și presiunea apei cât și rata de extracție.

În general, se folosește un aparat espresso pentru a prepara o astfel de cafea.

Parametrii termici prezentați de Institutul Național Italian de Espresso pentru a face un espresso certificat Italian sunt după cum urmează:

Tabel 1.1 Parametrii termici

Espresso prăjit

Espresso este atât o băutură din cafea cât și o metodă de preparare. Aceasta nu este un bob de cafea specific, boabe amestecate sau vre un nivel de prăjire. Orice bob sau prăjire pot fi utilizate pentru a produce espresso autentic. De exemplu, în sudul Italiei, o prăjire mai închisă este de preferat în general .

Mai departe spre nord, tendința se îndreaptă spre prăjiri mai ușoare în timp ce în afara Italiei este popular o gamă largă.

Popularitate

Espresso a crescut în popularitate în întreaga lume începând cu anii 1980. Cafenelele servesc mai multe variante prin adăugarea de sirop, frișcă, extracte de aromă, lapte de soia și condimente pentru mare prin cafea măcinată fin.

“Crema“ se produce prin emulsionarea uleiurilor din cafeaua măcinată într-un coloid, care nu apare în alte metode de preparare. Nu există un standard universal care să definească procesul de extragere al espresso-ului dar există mai multe definiții publicate care încearca să plaseze constrângeri referitoare la cantitatea și tipul de cafea măcinata folosită, temperatura și presiunea apei cât și rata de extracție.

În general, se folosește un aparat espresso pentru a prepara o astfel de cafea.

Parametrii termici prezentați de Institutul Național Italian de Espresso pentru a face un espresso certificat Italian sunt după cum urmează:

Tabel 1.1 Parametrii termici

Espresso prăjit

Espresso este atât o băutură din cafea cât și o metodă de preparare. Aceasta nu este un bob de cafea specific, boabe amestecate sau vre un nivel de prăjire. Orice bob sau prăjire pot fi utilizate pentru a produce espresso autentic. De exemplu, în sudul Italiei, o prăjire mai închisă este de preferat în general .

Mai departe spre nord, tendința se îndreaptă spre prăjiri mai ușoare în timp ce în afara Italiei este popular o gamă largă.

Popularitate

Espresso a crescut în popularitate în întreaga lume începând cu anii 1980. Cafenelele servesc mai multe variante prin adăugarea de sirop, frișcă, extracte de aromă, lapte de soia și condimente pentru băuturile lor. Pacificul American de N-V a fost privit ca șoferul din spatele acestui trend .

Popularitatea mai târziu extinsă în magazine în alte regiuni și în case ca mașini de bucătărie a devenit disponibilă la un cost moderat.

În alte părți ale lumii, espresso a fost mult timp metoda obișnuită de preparare a cafelei în restaurant, baruri și cafenele.

Cafenea vs.prepararea în casă

O trăsătură dinstinctivă de espresso, spre deosebire de cafea la filtru este asocierea cu espresso din cafenele, datorită atât echipamentelor de specialitate cât și aptitudinilor cerute, făcând astfel espresso să se bucure de o experiență socială. Mașinile de espresso de acasă au crescut în popularitate cu creșterea generală de interes în Espresso.

Astăzi,o gamă largă de echipamente de espresso pentru uz casnic pot fi găsite în bucătărie și magazine electrocasnice, la vânzătorii online și în magazine.

Prima mașină espresso pentru uz casnic a fost Gaggia Gilda. La scurt timp după aceasta, mașini similare, cum ar fi Faema Faemina, FEAR-La Peppina și VAM Caravel au urmat un factor similar de formă și principiu de funcționare. Până la apariția primelor mașini mici electrice de espresso pe bază de pompă cum ar fi Gaggia Baby și Quickmill 810, mașinile de espresso pentru uz casnic nu și-ar fi găsit adoptarea pe scară largă.

1.2 PLATFORMA ARDUINO

Figura 1.2 Placa Arduino vedere de sus

Arduino este un microcontroller cu o singură placă, destinat să facă aplicarea obiectelor sau mediilor interactive mai accesibile. Hardware–ul constă într-o placă de hardware open–source, conceput în jurul microcontroller-ului de 8 biți Atmel AVR sau a unui microcontroler de 32 biți Atmel ARM.

Modelele actuale sunt dotate cu o interfață USB, 6 pini analogici de intrare, precum și 14 pini digitali I/O care permit utilizatorului să atașeze diverse plăci de extensie .

Introdusă în 2005, platforma Arduino a fost proiectată pentru a oferi un mod ieftin și ușor pentru pasionați, studenți și profesioniști, pentru a crea dispozitive care interacționează cu mediul lor, folosind senzori și actuatori. Exemple comune pentru pasionații începători includ roboți simpli, termostate și detectoare de mișcare.

Arduino este dotat cu un mediu simplu de dezvoltare integrat (IDE) care rulează pe calculatoarele personale normale și permite utilizatorilor să scrie programe pentru Arduino folosind C sau C++. Prețurile actuale ale plăcii Arduino se învart în jurul valorii de 30 $ și cele ale “clonelor” la 9$. Plăcile Arduino pot fi achiziționate pre-asamblate sau ca, kit-uri “do-it-yourself”.

Informațiile de design ale hardware-ului sunt disponibile pentru cei care ar dori să asambleze un Arduino de mână.

A fost estimat la mijlocul anului 2011 că peste 300.000 de Arduino au fost produse comercial și că în 2013, 700.000 de placi oficiale au fost în mâinile utilizatorilor.

O placă arduino constă dintr-un microcontroler Atmel de 8 biți AVR cu componente complementare pentru a facilita programarea și încorporarea în alte circuite. Un aspect important al Arduino este modul standard prin care conectorii sunt expuși, permițând placa CPU să fie conectată la o varietate de module interschimbabile, cunoscute sub numele Shields .

Unele shield-uri comunică cu placa Arduino, direct pe diferiți pini, dar multe altele sunt individual conectate printr-o magistrală serială I2C, permițând mai multor shield-uri pentru a fi adăugate și folosite în paralel .

Cele mai multe plăci includ un regulator liniar de 5 volți și un oscilator de cristal de 16 MHz (sau rezonator ceramic, în unele variante).

Un microcontroler Arduino este, de asemenea, pre-programat cu un bootloader care simplifică încărcarea de programe de memorie flash on-chip, în comparație cu alte dispozitive care, de obicei, au nevoie de un programator extern. Acest lucru face ca folosirea unui Arduino să permită utilizarea unui calculator obișnuit ca programator.

La un nivel conceptual, atunci când se utilizează softul nativ Arduino, toate plăcile sunt programate printr-o conexiune serială RS-232, dar modul în care acest lucru este inplementat variază în funcție de versiunea de hardware.

Plăcile Arduino seriale conțin un circuit specializat pentru a converti semnalul din RS-232 la semnale de nivel TTL. Anumite variante, cum ar fi Arduino Mini și Boarduino neoficial folosesc o placă detașabilă USB la adaptorul serial sau cablu, Bluetooth sau alte metode .

Placa Arduino expune cei mai mulți pini de microcontroler I/O pentru utilizarea de către alte circuite.

Mai multe shield-uri sunt, de asemenea, disponibile în comerț. Există multe plăci compatibile cu Arduino și derivate din Arduino. Unele sunt funcțional echivalente cu un Arduino și pot fi utilizate interschimbabil. Multe alte plăci au la bază Arduino cu adaos de drivere de ieșire, de multe ori pentru a fi utilizate în învățământul de nivel școlar, pentru a simplifica construirea de cărucioare pentru copii și roboți mici.

Altele sunt echivalente electric dar schimbă factorul de formă, uneori, permite utilizarea în continuare a shield-urilor, uneori nu. Unele variante folosesc procesoare complet diferite, cu nivele de compatibilitate variate.

Această platformă, față de altele (ex. Raspberry PI), deși are limitări (memorie RAM și de stocare mică, procesor mic, puține I/O) iși găsește întrebuințarea la micile si mediile automatizări în gospodării, pentru facultate, aparate cu un grad de automatizare scazut, roboți, etc care iși au o destinație anume si care necesită stabilitate și usurință de programare.

Funcțiile acestei platforme pot fi extinse cu diferite module pentru crearea de noi I/O în cazurile în care este necesar acest lucru.

1.3 PROCESUL DE AUTOMATIZARE

Automatizarea este o ramură a tehnicii, al cărei scop este ca mașinile și instalațiile să lucreze automat, deci independente de o continuă și/sau directă intervenție a forței de muncă umane.

Cu cât acest țel este realizat mai optimal, cu atât este mai ridicat gradul de automatizare. In instalațiile automatizate operatorul uman preia sarcini de supraveghere, de aprovizionare cu material, de transport a produselor finite, de întreținere și alte activități similare. Noile realizări ale electrotehnicii (microprocesoare) accelerează hotărâtor procesele de automatizare.

Pe lângă protejarea forței de muncă umane de activități grele și monotone, automatizarea ridică calitatea produselor precum și productivitatea proceselor cu o reducere corespunzătoare a costurilor pentru resursele umane folosite.

Importanța automatizării

Automatizarea este o tehnică complementară indispensabilă în toate domeniile tehnicii. Metodele și soluțiile aplicate sunt un rezultat al modelării fenomenelor fizice reale.

Măsurători

Pentru fiecare mărime fizică au fost dezvoltate metode de măsurare specifice. Aceasta a condus la crearea unui mare număr de sensori de măsură. Exemplu: măsurarea debitului unui fluid bazată pe forța Coriolis. Valoarea măsurată este folosită de regulă ca semnal standardizat.

Comandă

Această activitate începută cândva cu montaje de comandă și programare realizate cu legături electrice fizice (conductori) fixe care realizau un anumit program de lucru, se realizează în prezent în măsură predominantă cu instalații care utilizează un procesor electronic, sau chiar mai multe laolaltă, în care programul este memorat și diversele interblocări funcționale sunt virtual create.

Reglare

Interacțiunile într-un circuit de reglare au fost studiate și concluziile au fost generalizate pe tipuri de regulatoare, independent de domeniul de aplicare. Există numeroase rezolvări rezultate din aplicarea specifică a regulatoarelor.

Comunicare

Cu cât gradul de automatizare este mai ridicat, cu atât sunt necesari mai mulți "senzori" și "actori". Ca urmare rezultă o mare cantitate de date care trebuie prelucrate și comunicate. Această activitate este realizată prin intermediul sistemelor cu cablu locale (bus), la mare distanță (Ethernet) și cu mijloace fără fir. Pentru fiecare conexiune fizică au fost dezvoltate protocoale de transmisie corespunzătoare.

Deservire

Operatorul într-o instalație de automatizare este ajutat de un sistem de observație (vizualizare), care-i pune la dispoziție informațiile necesare pentru funcționarea mașinii sau instalației de care este răspunzător. Această vizualizare este denumită și "Interfață om-mașină".

Implementare

Specialistul în automatizare lucrează nemijlocit în contact cu constructorul mașinii și instalației, deoarece el necesită pe lîngă descrierea funcționării mașinii, schemele de instalații, de instrumente, de flux tehnologic, etc.

Expresorul terry opale

2.1 Terry Opale

Figura 2.1.1 Expresor Terry Opale

Designul unic al acestui aparat se datorează în special exteriorului său elegant, potrivit pentru acasă sau birou. În varianta Opale H2O este dotat cu o duză pentru apă caldă, detașabilă pentru o curățare ușoară, utilă pentru prepararea ceaiurilor sau a altor băuturi calde.

Produse in Italia, aceste aparate au o calitate superioară și oferă un sistem complet pentru a satisface orice client, fie el unu casnic sau cineva cu o afacere mică sau medie (bar, restaurant).

SPECIFICAȚII TEHNICE

Putere: 550W

Tensiune alimentare: 220÷240 V, c.a. , 50 Hz

Dimensiuni (Lxlxh): 282x374x320 mm

Greutate netă: 10 Kg

Culoare: negru/argintiu

Rezervor apă: detașabil, incasabil; capacitate: 2 L

Lungime cordon de alimentare: 1,5 m

Material schimbător căldură: alamă

Pompa: pompă cu vibrații; 17 bari

Termostat siguranță: termostat 145°C; restartare manuală

Monodoze recomandate: monodoze de cafea tip E.S.E. (45 mm) de 7 g cafea.

Aceste expresoare sunt proiectate să prepare cafea espresso folosind monodoze compatibile tip E.S.E. (45 mm) de 7 g cafea. Folosirea acestor expresoare prezintă avantaje majore față de metodele tradiționale de preparare a cafelei:

Permit oricărui consumator obținerea unei cafele de calitate, fără să aibă nevoie de pregătire sau cunoștințe de specialitate, deoarece cantitatea de cafea, de apă, presiunea de extracție și temperatura râmân constante.

Ușor de utilizat, astfel: se apasă butonul de pornire, se introduce monodoza în aparat și apoi se apasă butonul pentru prepararea cafelei. După obținerea cafelei, monodoza folosită se scoate și se aruncă.

Sunt fiabile și simplu de întreținut.

Figura 2.1.2 Expresor Terry Opale descriere

Pe partea din față a expresorului, în partea dreapta, se găsesc 3 butoane ON/OFF, dintre care 2 sunt cu contact permanent iar unul (in cazul modelelor ce vin cu dozator de apă caldă pentru ceai) este prevăzut cu contact temporar.

Primul buton folosește la pornirea, eventual oprirea aparatului (întregul sistem ce este reprezentat de rezistență, pompă, becuri și valve electromecanice). Unele modele au un buton prevăzut pe lateral pentru această funcție.

Al doilea buton este folosit în momentul în care monodoza este poziționată corect iar maneta de închidere a suportului pentru monodoze a fost așezată în poziția corectă. Atunci începe procesul de crearea a cafelei. Presiunea apei datorată pompei și a rezistenței fortează aroma din monodoză să strabată țeava de distribuire a cafelei, ajungând în final în pahar.

Al treilea buton este prevăzut doar la anumite modele, și este folosit pentru dirijarea apei calde pe dozatorul corespunzător. Acest buton alimentează, pe durata cât este apăsat, electrovalva mecanică ce dirijează fluxul de apă.

Figura 2.1.3 Expresor Terry Opale descriere butoane

Primele 2 butoane vor fi înlocuite cu butoane de contact temporar pentru a deservi ca și contacte pentru platforma Arduino.

Cele trei butoane sunt prevăzute cu becuri de avertizare luminoasă, ce deservesc la avertizarea utilizatorului ce funcție a fost selectată. Aceste becuri sunt alimentate la 220V, dar pentru automatizarea expresorului sus menționat, vor fi înlocuite cu LED-uri + rezistențe ce vor fi alimentate la 5V de la placa Arduino prin 3 ieșiri analogice.

2.2 MONODOZE DE CAFEA TIP E.S.E.

Figura 2.2 Monodoză de cafea tip E.S.E (7g cafea)

Materia primă – cafeaua boabe prăjită – este furnizată de un producător de renume din Italia, conform specificațiilor firmei și are mereu aceeași calitate.

Pentru a obține sortimentele de cafea preferate de clienții noștri, procesarea cafelei din boabe prăjite, se face cu utilaje noi, de ultimă generație, respectând în procesul de producție toate standardele europene de calitate și igienă.

Întregul proces de producție al monodozelor se desfășoară pe o linie complet automatizată. Cafeaua din boabe prăjite este măcinată, dozată volumetric, presată între două foi de hârtie filtrantă, obținându-se astfel monodoza. Fiecare monodoză este ambalată individual în ambalaj flow-pack în atmosferă protectoare, pentru prevenirea oxidării (alterarii) cafelei și păstrarea aromei.

Recomandări de preparare:

Pentru a obține o cafea espresso perfectă, autentică, trebuie ținut cont de volumul recomandat de apă necesar preparării fiecărui sortiment de cafea.

Tabel 2.2 Volum recomandat

● – perfect    ○ – bun     x – nerecomandat

2.3 COMPONENTE TERRY OPALE

2.3.1 Pompă ULKA EX5

Figura 2.3.1.1 Pompa de alimentare cu apă

Pompa de alimentare este una simplă, aceasta bazându-se pe vibrații care sunt datorate frecvenței tensiunii de alimentare: 50Hz. Aceasta este compusă dintr-o bobină și un element metalic care la apariția unui câmp magnetic variabil oscilează pe axul lui. Fiind atașat la o pompa de direcție manuală, acesta reușește sa înpingă apa pe direcția dorită.

Figura 2.3.1.2 Raportul presiune/volum al pompei

Caracteristici:

Tensiune: 230V 50Hz

Putere: 48W

Figura 2.3.1.3 Datele tehnice ale pompei de alimentare cu apă

2.3.2 Supapă electromagnetică pentru surplus de presiune

Figura 2.3.2 Electrovalavă de suprapresiune

Supapele solenoid sunt proiectate și fabricate pentru a oferi maximum de fiabilitate și durabilitate, cu garnituri și piese dezvoltate pentru temperaturi și presiuni ridicate și supuneri la tratamente anti-calcar. Ideal pentru sisteme de fabricare a berii, de cafea și de generatoare de abur.

Această supapă folosește la eliberearea presiunii din furtune atunci când:

– densitatea cafelei măcinate este mai mare decât cea prevazută, presiunea generată de pompă fiind mult mai mare decât cea de la ieșire.

– temperatura apei este maximă, iar ieșirea nu supartă nivel așa mare de evacuare.

Această supapă se foloseste în principal pentru protejarea pompei, cât și a furtunelor de legatură care sunt construite dintr-un material de plastic ce pot ceda în timp. La alte modele de aparate acestea folosesc și la dirijarea apei în cazul modelelor care sunt prevăzute cu tije pentru alimentarea cu apă, pentru crearea ceaiurilor, etc.

Au o întrebuințare multiplă. Pot fi folosite, în anumite cazuri, și de supapă de oprire a apei în cazul în care pompa este oprită. Această supapă electromecanică previne dezamorsarea pompei care duce ulterior la stricarea acesteia.

2.3.3 Rezistența de încălzire

Figura 2.3.3 Rezistența de încălzire a apei

Rezistența de încălzire funcționează la tensiunea de 220V, 50Hz, și are o putere de 600W. Aceasta funcționează pană în momentul atingerii pragului de 96 de grade, moment în care primul termostat intră în acțiune și oprește tensiunea de alimentare a rezistenței. Aceasta funcționează în cicluri regulate, cicluri care se schimbă în momentul în care se produce cafea.

2.3.4 Termostate

Figura 2.3.4 Termostat de conectare/deconectare a rezistenței de încălzire a apei

Sunt folosite 3 termostate, două la 95 de grade pentru a opri rezistența în cazul în care temperatura crește de această valoare, și un termostat la 145 de grade, folosit pentru protecție în cazul în care primele termostate vor ceda.

Aceste 3 termostate funcționează independent și continuu pentru a verifica temperatura blocului de încălzire a apei, rezistența functionând încontinuu, ea oprindu-se doar dacă se depășește temperatura primelor 2 termostate.

Cele 2 termostate de 95oC sunt conectate în paralel. Acest mod de conectare este folosit pentru a spori protectia aparatului în cazul în care unul dintre acestea cedează.

3 PLATFORMA ARDUINO

3.1 ARDUINO UNO

Figura 3.1 Platforma Arduino

Arduino UNO  este o platformă de procesare open-source, bazată pe software și hardware flexibil și simplu de folosit. Constă într-o platformă de mici dimensiuni (6.8 cm / 5.3 cm – în cea mai des întalnită variantă) construită în jurul unui procesor de semnal și este capabilă de a prelua date din mediul înconjurator printr-o serie de senzori și de a efectua acțiuni asupra mediului prin intermediul luminilor, motoarelor, servomotoarelor, și alte altor tipuri de dispozitive mecanice.

Procesorul este capabil să ruleze cod scris într-un limbaj de programare care este foarte similar cu limbajul C++.

Tabel 3.1 Specificații platformă Arduino

3.2 COMPONENTE ARDUINO

3.2.1 Placă 2 relee SPDT:

Figura 3.2.1.1 Placă 2 relee SPDT pentru acționarea pompei și a rezistenței expresorului

Specificații:

Tensiune comandă: 5V

Tensiune cuplaj: 250V / 10 A

Detalii: 2 Relee Omron G5LE-14-DC5

Greutate :  33g

Figura 3.2.1.2 Placă 2 relee SPDT vedere din spate

3.2.2 Shield LCD 16X2

Figura 3.2.2.1 Modul LCD montat pe o placa Arduino (vedere din față)

Acest shield conține un ecran LCD 16 X 2 cu iluminare cu led, precum și un shield cu toate componentele necesare pentru conectarea la Arduino, gata lipit. Este complet asamblat și are pinii pentru Arduino deja lipiți. Acest lucru face extrem de simplă utilizarea lui. Produsul include LCD-ul 16 X 2 cu iluminare, shield-ul si pinii pentru Arduino.

Specificații:

* LCD-ul utilizează pinii digitali de la 2 pana la 7, astfel :

pinul digital 7 – RS LCD

pinul digital 6 – E LCD

pinul digital 5 – DB4 LCD

pinul digital 4 – DB5 LCD

pinul digital 3 – DB6 LCD

pinul digital 2 – DB7 LCD

Figura 3.2.2.2 Modul LCD montat pe o placa Arduino (vedere din spate)

3.2.3 ATmega328 cu Arduino Bootloader Uno

Figura 3.2.3 Circuitul integrat ATmega328

ATMega328 cu Arduino bootloader (Uno). Acest microcontroller vă permite să utilizați programe Arduino în proiectul dumneavoastră fără să utilizați o placa Arduino.  Pentru a putea funcționa cu Arduino IDE acest microcontroller are nevoie de un cristal extern de 16 Mhz sau de un rezonator, de o sursă de alimentare de 5V  și de o conexiune serială. Dacă nu sunteți confortabil cu conectarea tuturor componentelor  se poate folosi o  placa Arduino UNO care conține toate aceste componente deja conectate .

Microprocesorul de înaltă performanță Atmel 8-bit AVR RISC combină 32 KB de memorie flash cu capacități de citire-scriere, 1 KB EEPROM, 2 KB SRAM, 23 de intrări/ieșiri de uz general, 32 de regiștri, 3 contoare flexibile cu moduri de comparare, întreruperi interne și externe, programator serial USART, o interfață serială pe 2 fire, port serial SPI si 6 canale de convertoare A/D de 10biti.

Dispozitivul funcționează între 1.8 – 5.5 volți. Prin executarea de instrucțiuni puternice într-un singur ciclu de ceas, aparatul realizează debite ce se apropie de 1 MIPS pe MHz, echilibrând consumul de energie și viteza de procesare.

3.3 ELEMENTE ADIȚIONALE UTILIZATE PENTRU CONECTAREA PLĂCII ARDUINO CU ELEMENTELE EXPRESORULUI

3.3.1 Transformator 220V la 12V

Figura 3.3.1 Transormator de tensiune

Tensiune bobină primară: 220V

Tensiune bobină secundară :12V

Frecventa: 50Hz

Transformatorul de tensiune este folosit pentru conectarea plăcii Arduino la cablu de alimentare al expresorului. Tensiunea de 12V rezultată, este mai apoi redresată și filtrată cu un condesator de 4700µF, după care trece printr-un stabilizator de tensiune de 9V.

Toate aceste elemente de alimentare + redresare + stabilizare oferă la ieșire o tensiune stabilă de 9V și un curent maxim de 1A.

3.3.2 Punte redresoare WL04F

Figura 3.3.2.1 Punte redresoare

Tensiune maximă: 400V

Putere maximă: 1A

Temperatură de operare: -55oC +150oC

Figura 3.3.2.2 Schema punții redresoare

3.3.3 Condesator filtraj

Figura 3.3.3 Condesator filtraj

Tensiune: 35V

Capacitate: 4700µF

3.3.4 Stabilizator de tensiune L7809CV

Figura 3.3.4.1 Stabilizatorul de tensiune

Figura 3.3.4.2 Schema de principiu

Caracteristici:

Curent de ieșire: 1,5 A

Tensiune de ieșire: 9V

Protecția la supraincalzire

Protecția la scurtcircuit

Circuitul stabilizator de tensiune, este unul standard constituind dintr-un cirtcuit integrat specializat de tip L7809.

3.3.5 Termometru digital DS18B20

Figura 3.3.5 Termometru digital

GND – Masă

DQ – Data In/Out

VDD- Tensiunea de alimentare

Caracteristici:

prezintă interfață de tip „un fir” ce ajută la implementarea ușoară în diferite dispozitive, inclusiv Arduino

masoară tensiuni cuprinse între -55oC și +125oC

±0,5oC acuratețe între -10oC și +85oC

convertește temperatura în 12 biți la un interval de 750ms maxim

poate fi alimentat între 3.0V și 5.5V

Senzorul de temperatură DS18B20 de la Maxim (fostă Dallas) este un cip special conceput pentru măsurarea temperaturii în proiecte de o complexitate mică și medie. Pentru Arduino există o librărie special concepută pentru a face usoară citirea temperaturii din mediul ambiant.

În mod normal acest senzor ar fi conectat în următorul mod: pinul 1 la masă, pinul 3 la Vcc iar pinul 2 se folosește pentru a extrage datele. Totuși, acest termometru poate să iși extragă alimentarea cu tensiune direct de pe pinul de date, ceea ce înseamna că acesta se poate conecta la placa Arduino prin doar 2 fire.

În acest mod vom conecta pinul 1 si pinul 3 la masă, iar pinul 2 va fi conectat la placa de achiziție. Mai este necesar o rezistență de 4,7 KΩ care se va conecta de la Vcc la pinul de date pentru alimentarea senzorului.

3.4 MODULE CE POT FI IMPLEMENTATE PE EXPRESOR

3.4.1 Modul WI-FI – WiFly Shield

Figura 3.4.1 Modul de WI-FI

Placa de extensie WiFly extinde microcontroller-ul Arduino cu capabilități wifi 802.11b/g. Componentele principale ale acestei plăci de extensie este modulul wireless Roving Network's RN-131C  și chipul  SC16IS750 SPI-to-UART . Bridge-ul SPI-UART este folosit pentru a permite transmisiuni rapide de date și de a reduce sarcinile UART-ului de pe placa Arduino. 

Placa de extensie  se alimentează cu  3.3 V  de pe modulul Arduino.  Comunicarea dintre Arduino si WiFly se face peste SPI folosind pinii digitali 10-13(CS,MOSI,MISO,SCLK). Placa de extensie are o suprafață prototip cu gauri de 0.1".

Acesta placă poate fi conectată la Arduino cu scopul de a trimite date catre persoana care se ocupă de expresor, aceste date putând fi direct prelucrate fără a se mai face o inspecție care uneori durează. Dintre aceste aspecte care pot fi verificate mentionez:

numărul de cafele până la momentul respectiv.

ultima revizie tehnică și motivul pentru care a fost reparat aparatul.

dacă există defecțiune la o componentă anume, pentru a se ști dacă cumva trebuiesc înlocuite direct sau pe viitor.

un grafic de folosință al aparatului ce poate ajuta la dezvoltare viitoare și pentru a se face o idee despre costurile de reparație, întretinere si decalcarare.

3.4.2 Modul GSM

Figura 3.4.2 Modul GSM/GPRS

Specificații:

Tensiunea de alimentare: 5V

Frecvențe: 850 MHz, 900MHz, 1800MHz, 1900MHz

Modem: M10

Voce, SMS, GPRS

Antena incorporată

Acest modul poate extinde funcționalitatea modulului Wi-Fi. Toate datele pentru care reprezentantul firmei ar trebui să fie prezent sa le achiziționeze, se pot procura mult mai ușor cu ajutorul unui modul GSM.

În cazul unei defecțiuni ale aparatului, deși vânzătorul observă simptomele, nu se poate ști cu exactitate ce este defect decât până în momentul în care aparatul este trimis la reparații. Dacă aparatul este dotat cu senzori care monitorizează pompa, rezistența, electrovalvele de decuplare a rezistenței, etc, atunci platforma Arduino poate sa înstiințeze dinainte persoana de care apartine aparatul, și acesta poate veni pregătit.

Se elimină astfel timpi morți în care aparatul este trimis la reparat, și înlocuit cu altul până în momentul când acesta va fi gata. Iar dacă persoana care se ocupa de el este si pregătit în a-l repara, atunci totul se poate face la fața locului, cu timp cât mai puțin pierdut.

3.4.3 Acceptor monede programabil

Figura 3.4.3 Model de acceptor monede

Specificații:

Recunoaște 6 grupuri  de monede 

Acceptă monede de la 17-30.5mm în diametru și 1.25-3.2mm grosime

Curent 50mA@ 12VDC standby, 450mA în lucru

Pentru birouri se pot folosi expresoare cu acceptoare de monezi pentru ca angajații unei firme să iși poată prepara singuri cafeaua, eliminând astfel nevoia de a alege pe cineva care să se ocupe cu strânsul banilor.

3.4.4 Imprimantă termică

Figura 3.4.4 Imprimantă termică

Acest modul poate fi folosit împreună cu acceptorul de monede, și ajută la returnarea unei chitanțe doveditoare a procurării produsului. Pentru persoanele care sunt interesate de chitanță, returnarea acesteia la achiziționarea unui expresso, este un plus.

În caz de mentenanță, această imprimantă poate printa datele mentionate mai sus (număr de cafele, data ultimei mentenanțe, etc) ce se pot adăuga la factură sau se pot păstra pentru verificări ulterioare.

4 STRUCTURA PROGRAMULUI

INIȚIALIZAREA VARIABILELOR

În prima parte a programului se inițializează constantele și variabilele care corespund setării pinilor butoanelor, led-urilor cât și a releului de comandă a pompei. Structura părții de inițializare este următoarea:

Încărcarea librăriilor EEPROM.h, LiquidCrystal.h și crearea obiectului lcd().

#include <EEPROM.h>

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

Încărcarea librăriilor OneWire.h și DallasTemperature.h pentru senzorul de temperatură. Definirea pinului de achiziție de date (9). Crearea unei variabile sensors care conține obiectul ce preia și manipulează datele de la termometru.

#include <OneWire.h>

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 9

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

Setarea pinilor pentru butoanele aflate pe fața expresorului (pini 11, 12 si 13 aferente cafelelor scurte, medii si lungi), respectiv pinul pentru butonul de setare care este situat în interiotul cutiei și este folosit în exclusivitate de către persoana care se ocupă de expresor (reprezentant firmă). Tot aici este declarată și variabila vector care va păstra locația pinilor led-urilor pentru fiecare buton de preparare cafea.

const int CLUNGA = 13;

const int CMEDIE = 12;

const int CSCURTA = 11;

const int SETARI = 10;

const int NR_CAFELE = 30;

int LED[3];

Inițializarea vectorilor de caractere ce vor conține mesajele afișate pe durata funcționării aparatului. Tot aici se instanțează și variabila care va conține durata în milisecunde pentru fiecare cafea în parte care va primi valorile din memoria EEPROM.

char MSG_PREPARARE[] = "Se prepara:";

char MSG_PREPARARE_CL[] = "espresso lung.";

char MSG_PREPARARE_CM[] = "espresso mediu.";

char MSG_PREPARARE_CS[] = "espresso scurt.";

int TIMP_PREPARARE[3];

Crearea variabilei globale în care va fi stocat tipul de apăsare pe butoanele de pe fața aparatului (apăsare scurtă – creare cafea, apăsare lungă – setare timp cafea). TIMP_APASARE este variabila în care se păstrează timpul necesar pentru ca o apăsare lungă să fie considerată realizată.

int TIP_APASARE = 0; // tipul de apasare a butoanelor (0 scurt, 1 lung)

int TIMP_APASARE = 2; //(sec) Timpul minim pentru care o apasare este considerata lunga

Setare pin pompă (cele 2 relee conectate în paralel ce închid sau deschid circuitul electric al pompei si electrovalvei).

const int POMPA = 8;

Setare mesaje de finalizare a unei cafele, durata acestui mesaj, cât și intervalul pentru care se poate seta o cafea să dureze.

char MSG_FINALIZ_1[] = "Ridicati cafeaua.";

char MSG_FINALIZ_2[] = "O zi buna!";

int MSG_FINALIZ_LENGTH = 4000; //(milisec) 4000 default

int DURATA_MAX_CAFEA = 100; //(sec) Durata maxima ce se poate seta pentru o cafea

int DURATA_MIN_CAFEA = 1; //(sec) Durata minima ce se poate seta pentru o cafea

Crearea meniului din setări. Aceste mesaje nu pot fi afișate toate pe ecranul LCD, de aceea s-a ales ca metodă de afisare câte un mesaj odată. Pentru schimbarea acestora se pot folosi butoanele de cafea lungă (sus), cafea medie (selectați) si cafea scurtă (jos).

char MENIU_SETARI_1[] = "1. Total cafele";

char MENIU_SETARI_2[] = "2. T. rezistenta";

char MENIU_SETARI_3[] = "3. Timpi cafea";

4.2 FUNCȚIA SETUP()

Funcția setup() se rulează atunci când un program începe. Se folosește pentru a inițializa variabile, moduri de pini, biblioteci, etc. Funcția setup() va rula doar o singură dată, după fiecare pornire sau resetare a plăcii Arduino.

Structura funcției setup():

Setare bandă pentru conexiunea serială si pornirea LCD-ului.

Serial.begin(9600);

lcd.begin(16, 2);

Setare timp de baza pentru cele 3 tipuri de cafea.

TIMP_PREPARARE[CLUNGA] = 8000; //(milisec)

TIMP_PREPARARE[CMEDIE] = 5000; //(milisec)

TIMP_PREPARARE[CSCURTA] = 2000; //(milisec)

Setare pini led-uri pentru butoanele aferente de pe fața expresorului.

LED[CLUNGA] = 16;

LED[CMEDIE] = 15;

LED[CSCURTA] = 14;

Configurarea pinilor să se comporte fie ca o intrare fie ca o ieșire. Functia digitalWrite() scrie valoare HIGH(1) sau LOW(0) la un pin care a fost setat ca ieșire. Dacă PIN-ul a fost configurat ca o ieșire cu pinMode (), tensiunea va fi setată la valoarea corespunzătoare: 5V pentru HIGH, 0V pentru LOW.

pinMode(CLUNGA, INPUT);

pinMode(CMEDIE, INPUT);

pinMode(CSCURTA, INPUT);

pinMode(LED[CLUNGA], OUTPUT);

pinMode(LED[CMEDIE], OUTPUT);

pinMode(LED[CSCURTA], OUTPUT);

digitalWrite(LED[CLUNGA], LOW);

digitalWrite(LED[CMEDIE], LOW);

digitalWrite(LED[CSCURTA], LOW);

pinMode(POMPA, OUTPUT);

Verificarea timpilor necesari pentru crearea cafelelor dacă au fost salvați în memoria EEPROM. Dacă nu atunci se preiau valorile de bază care au fost menționate mai sus.

if (EEPROM.read(CLUNGA) >= DURATA_MIN_CAFEA) TIMP_PREPARARE[CLUNGA] = (int)EEPROM.read(CLUNGA)*1000;

if (EEPROM.read(CMEDIE) >= DURATA_MIN_CAFEA) TIMP_PREPARARE[CMEDIE] = (int)EEPROM.read(CMEDIE)*1000;

if (EEPROM.read(CSCURTA)>= DURATA_MIN_CAFEA) TIMP_PREPARARE[CSCURTA] = (int)EEPROM.read(CSCURTA)*1000;

Pornire senzor de temperatură

sensors.begin();

4.3 FUNCȚIA LOOP() – FUNCTIA PRINCIPALĂ

Această funcție se rulează după funcția setup, diferența dintre acestea este că funcția loop se rulează încontinuu până în momentul când este oprită alimentarea sau butonul de reset va fi apăsat.

Aceasta funcție conține structura de bază pe care se bazează tot programul. La evenimente importante (apăsări de butoane, finalizări evenimente, etc) funcția loop() apelează funcții corespunzătoare pentru evenimentul respectiv care ori returnează o valoare anume, ori după terminarea acestora se revine la funcția principală.

Aici se folosește un delay de 100ms considerat interval optim de rulare a buclei, moment în care se pot asculta intrarile de la butoane pentru evenimente.

Structura:

Se asteaptă un eveniment de la cele 4 butoane: CLUNGA, CMEDIE, CSCURTA si SETARE.

Dacă nu este detectat nimic la aceste butoane, funcția detecteazaInput() returnează -1.

int input = detecteazaInput();

În momentul când un buton este apăsat atunci ecranul LCD este golit pentru afișarea de noi mesaje. Aici sunt separate cele trei butoane de determinare a tipului de cafea fața de butonul de setare. În momentul când este apăsat un buton de preparare cafea, se verifică dacă tipul de apăsare este unul scurt sau lung. În funcție de aceasta apăsare se apelează funcțiile setareTimpCafea() și preparaCafea(). Dacă se prepară cafea iar procesul nu a fost întrerupt, după terminare se vor afișa mesajele corespunzătoare.

if (input > -1){

afisareEcran(1, "");

afisareEcran(2, "");

if (input == CLUNGA || input == CMEDIE || input == CSCURTA){

if (TIP_APASARE == 1){

setareTimpCafea(input);

}

else {

int result = preparaCafea(input);

afisareEcran(1, "");

afisareEcran(2, "");

if (result == 1){

afisareEcran(1, MSG_FINALIZ_1);

afisareEcran(2, MSG_FINALIZ_2);

delay(MSG_FINALIZ_LENGTH);

}

}

}

else if(input == SETARI) setari();

afisareEcran(1, "");

afisareEcran(2, "");

}

afisareEcran(1, "Automat liber!");

afisareEcran(2, "Alfreo!");

Modulul de comandă al expresorului cu ajutorul calculatorului prin conexiunea serială este afișat mai jos. Prin această metodă expresorul poate fi controlat de la distanță cu LabView, MatLab sau PHP. Placa Arduino asteaptă comenzi sub formă de caractere (a – cafea lungă, b – cafea medie și c – cafea scurtă) care sunt transformate în cod ASCII. La primirea unei comenzi de la calculator, programul verifică natura acesteia și în funcție de cafeaua selectată apeleaza procedura de preparare cafea. Aici deasemenea se golește și ecranul LCD înainte de apelare a funcție de preparare cafea cât și după. O cafea preparată de la distanță poate fi anulată din butonul de pe panoul expresorului.

int serial_data = Serial.read();

if (serial_data != -1) {

Serial.println(serial_data);

int input = -1;

if (serial_data == 97) input = CLUNGA;

if (serial_data == 98) input = CMEDIE;

if (serial_data == 99) input = CSCURTA;

afisareEcran(1, "");

afisareEcran(2, "");

int result = preparaCafea(input);

afisareEcran(1, "");

afisareEcran(2, "");

if (result == 1){

afisareEcran(1, MSG_FINALIZ_1);

afisareEcran(2, MSG_FINALIZ_2);

delay(MSG_FINALIZ_LENGTH);

afisareEcran(1, "");

afisareEcran(2, "");

}

}

delay(100);

4.4 ALTE FUNCȚII

4.4.1 detecteazaInput()

Acestă funcție citește intrările pinilor pentru cele 4 butoane existente iar în cazul în care se detectează un eveniment de apăsare de buton, trece la validarea acestuia. Se verifică ce buton a fost apăsat și tipul de apăsare. Se setează variabila globală TIP_APASARE și se returnează pinul butonului care a fost apăsat.

În cazul în care nu este detectat nici un eveniment atunci funcția returnează valoarea -1.

int detecteazaInput(){

int input1 = !digitalRead(CLUNGA);

int input2 = !digitalRead(CMEDIE);

int input3 = !digitalRead(CSCURTA);

int input4 = digitalRead(SETARI);

if (input1 || input2 || input3 || input4){

if (input1) {

TIP_APASARE = tipApasare(CLUNGA);

return CLUNGA;

}

if (input2) {

TIP_APASARE = tipApasare(CMEDIE);

return CMEDIE;

}

if (input3) {

TIP_APASARE = tipApasare(CSCURTA);

return CSCURTA;

}

if (input4) return SETARI;

}

return -1;

}

4.4.2 tipApasare ()

Funcția tipApasare() verifică pentru pinul pe care l-a primit ca parametru dacă timpul de apăsare al butonului corespunzător este mai mic sau mai mare decât TIMP_APASARE (constanta setată la începutul programului).

int tipApasare(int pin){

int held = 0;

while (digitalRead(pin) == LOW && held < TIMP_APASARE*10){

delay(100);

held++;

}

if (held < TIMP_APASARE*10) return 0;

else return 1;

}

4.4.3 afisareEcran()

Se primesc ca parametrii numărul liniei și textul ce trebuie să conțină maxim 16 caractere. Această funcție este creată cu scopul de a afișa mai usor texte pe ecran atunci când dorim să afișăm exclusiv un vector de caractere.

În momentul în care dorim să ștergem o linie anume, atunci trimitem ca parametru un caracter gol, iar funcția va goli tot rândul de pe ecranul LCD.

Figura 4.4.3 Textul afișat pe ecran cu ajutorul funcției afisareEcran()

void afisareEcran(int linie, char text[16]){

if (linie == 1 || linie == 2 && sizeof(text) <= 16){

linie–;

lcd.setCursor(0, linie);

if (text == ""){text = " ";}

lcd.print(text);

}

}

4.4.4 preparaCafea()

Se primește ca parametru tipul cafelei dorite. În această funcție se validează tipul, se afisează mesajul corespunzător și se preia durata de preparare a cafelei. După aceea se trimite nivel HIGH pentru aprinderea becului ce corespunde butonului apăsat, se afisează mesajul de preparare a cafelei selectate și se va seta pinul releurilor in 1 (HIGH sau 5V).

Pe toată această perioadă dacă se detectează eveniment de la același buton care a fost apăsat pentru preparare, procesul de preparare va fi întrerupt. Numărul de cafele nu va fi incrementat. Funcția va returna 0 pentru a anunța că procesul a fost anulat.

În cazul în care procesul se finalizează cu succes numărul de cafele va fi incrementat în memoria EEPROM iar funcția va returna 1.

Figura 4.4.4.1 Mesajele de preparare a tipului de espresso

int preparaCafea(int tip){

if (tip == CLUNGA || tip == CMEDIE || tip == CSCURTA){

int timp = 100;

if (tip == CLUNGA){

afisareEcran(2, MSG_PREPARARE_CL);

timp = TIMP_PREPARARE[CLUNGA];

}

if (tip == CMEDIE){

afisareEcran(2, MSG_PREPARARE_CM);

timp = TIMP_PREPARARE[CMEDIE];

}

if (tip == CSCURTA){

afisareEcran(2, MSG_PREPARARE_CS);

timp = TIMP_PREPARARE[CSCURTA];

}

digitalWrite(LED[tip], HIGH);

afisareEcran(1, MSG_PREPARARE);

digitalWrite(POMPA, 1);

int inc_timp = 100;

int input = detecteazaInput();

while (input != tip){

delay(100);

inc_timp+=100;

input = detecteazaInput();

if (inc_timp >= timp) break;

}

digitalWrite(POMPA, 0);

digitalWrite(LED[tip], LOW);

if (inc_timp < timp) return 0;

else {

int nr_cafele = EEPROM.read(NR_CAFELE);

EEPROM.write(NR_CAFELE, nr_cafele+1);

return 1;

}

}

return 0;

}

Figura 4.4.4.2 Mesajul afișat la terminarea procesului de preparare a cafelei

4.4.5 setareTimpCafea()

În momentul în care un buton de preparare este apăsat și se detectează apăsare lungă, intră în acțiune funcția ce setează timpul la cafea. În funcție de butonul selectat funcția alege textul ce va fi afișat pe ecran și durata de preparare salvată în memoria EEPROM.

În acest mod se vor folosi butoanele de cafea lungă, medie și scurtă pentru a schimba durata cafelei după următorul mod:

Butonul cafelei selectate va fi folosit ca buton de salvare a datelor în memoria EEPROM.

Dacă este selectată cafeaua lungă atunci butoanele de cafea medie si scurtă vor fi folosite pe post de up/down pentru a schimba valoarea numerică trecut în secunde.

Dacă este selectată cafeaua medie atunci butoanele de cafea lungă și scurtă vor prelua funcția de up/down

Dacă este selectată cafeaua scurtă atunci butoanele de cafea lungă si cafea medie vor acționa ca butoane up/down.

La salvarea valorii în memorie se iese automat la ecranul principal.

Figura 4.4.5.1 Mesajele în momentul setării duratei de preparare a cafelei

void setareTimpCafea(int pin){

int durata = TIMP_PREPARARE[pin]/1000;

char tip_cafea[16];

if (pin == CLUNGA) strcpy(tip_cafea, "Expresso lung");

if (pin == CMEDIE) strcpy(tip_cafea, "Expresso mediu");

if (pin == CSCURTA) strcpy(tip_cafea, "Expresso scurt");

afisareEcran(1, tip_cafea);

afisareDurata(durata);

delay(1000);

int input = detecteazaInput();

while (input == -1){

delay(100);

input = detecteazaInput();

}

afisareEcran(1, "");

afisareEcran(2, "");

int up_button, down_button;

if (pin == CLUNGA){

up_button = CMEDIE;

down_button = CSCURTA;

}

if (pin == CMEDIE){

up_button = CLUNGA;

down_button = CSCURTA;

}

if (pin == CSCURTA){

up_button = CLUNGA;

down_button = CMEDIE;

}

while (input != pin){

if (input == up_button && durata < DURATA_MAX_CAFEA) durata++;

if (input == down_button && durata > DURATA_MIN_CAFEA) durata–;

afisareEcran(1, tip_cafea);

afisareDurata(durata);

delay(100);

input = detecteazaInput();

}

EEPROM.write(pin, durata);

TIMP_PREPARARE[pin] = durata*1000;

afisareEcran(1, "Date salvate!!!");

afisareEcran(2, "");

delay(1500);

}

Figura 4.4.5.2 Mesajul afișat după ce s-a salvat durata cafelei selectate

4.4.6 afisareDurata()

Aceasta funcție returnează durata cafelei pentru care butonul a fost apăsat cu o durată mai mare decât cea a variabilei TIMP_APASARE. Primește ca parametru durata cafelei și afisează pe ecran valoarea acesteia.

void afisareDurata(int durata){

afisareEcran(2, "Durata: ");

if (durata < 10){

lcd.setCursor(8, 1);

lcd.print(" ");

lcd.setCursor(9, 1);

lcd.print(durata);

}

else{

lcd.setCursor(8, 1);

lcd.print(durata);

}

lcd.setCursor(10, 1);

lcd.print("sec");

}

4.4.7 setari()

Aceasta funcție este folosită de catre persoana autorizată din cadrul firmei și oferă urmatoarele funcții:

Afișare numărul total de cafele care au fost realizate cu expresorul respectiv. Acesta reprezintă suma proceselor în care s-a realizat cafeaua fără a se anula într-un fel sau altul.

Figura 4.4.7.1 Mesaje afișate în modul setări la numărul de cafele

Afișarea temperaturii rezistenței pentru a se vizualiza buna funcționare a aparatului. Această temperatură este afisată în grade celsius, iar extragerea datelor se efectuează în aproximativ 0,5 secunde.

Figura 4.4.7.2 Mesajul afișat în modul setări reprezentând teperatura rezistenței

Afișarea timpului setat pentru fiecare cafea în parte util pentru a se crea o idee asupra percepției vânzătorului a ceea ce înseamnă dozaj mic, mediu și mare. Tot pe baza acestor timpi se poate investiga și perioadele când granulația cafelei a variat.

Figura 4.4.7.3 Mesajul afișat ce conține timpii cafelelor în modul setări

În acest mod, pentru a se naviga prin meniu se pot folosi butoanele cafea lungă și cafea scurtă pe post de butoane up/down iar ca selectare opțiune și ieșire din opțiune se folosește butonul de cafea medie. Pentru a iesi din setari trebuie acționat butonul special pentru aceasta optiune situat in cutia placii Arduino.

void setari(){

delay(200);

int poz = 1;

int modificare = 0;

afisareEcran(1, "Setari:");

int input = detecteazaInput();

afisareEcran(2 ,"");

while(input != SETARI){

lcd.setCursor(0, 1);

lcd.print(returneazaTextSetari(poz));

if (input == CLUNGA || input == CMEDIE || input == CSCURTA){

if (input == CLUNGA && poz > 1){

poz–;

modificare = 1;

}

if (input == CSCURTA && poz < 3){

poz++;

modificare = 1;

}

if (input == CMEDIE){

afisareEcran(2 ,"");

lcd.setCursor(0,1);

if (poz == 1){

lcd.print("Total: ");

lcd.setCursor(8,1);

lcd.print(EEPROM.read(NR_CAFELE));

}

if (poz == 2){

lcd.print("Temp: ");

sensors.requestTemperatures(); // Send the command to get temperatures

lcd.print(sensors.getTempCByIndex(0));

lcd.print("C");

}

if (poz == 3){

lcd.setCursor(0,1);

lcd.print("C. lunga: ");

lcd.print(TIMP_PREPARARE[CLUNGA]/1000);

lcd.print("s");

delay(2000);

afisareEcran(2 ,"");

lcd.setCursor(0,1);

lcd.print("C. medie: ");

lcd.print(TIMP_PREPARARE[CMEDIE]/1000);

lcd.print("s");

delay(2000);

afisareEcran(2 ,"");

lcd.setCursor(0,1);

lcd.print("C. scurta: ");

lcd.print(TIMP_PREPARARE[CSCURTA]/1000);

lcd.print("s");

}

while(detecteazaInput() != CMEDIE && detecteazaInput() != SETARI) delay(100);

afisareEcran(2 ,"");

}

}

if (modificare == 1){

afisareEcran(2 ,"");

lcd.setCursor(0, 1);

lcd.print(returneazaTextSetari(poz));

modificare = 0;

}

delay(100);

input = detecteazaInput();

}

}

4.4.8 returneazaTextSetari()

În funcție de poziția pe care se află la un moment dat utilizatorul (pozitia este reprezentaă de mesajul curent pe care acesta trebuie sa îl vizioneze pe ecran) aceasta funcție returnează mesajul pe LCD.

char* returneazaTextSetari(int poz){

if (poz>=1 && poz <=3){

if (poz == 1)return MENIU_SETARI_1;

if (poz == 2)return MENIU_SETARI_2;

if (poz == 3)return MENIU_SETARI_3;

}

return false;

}

Concluzii

Plecând de la necesitatea automatizării tuturor lucrurilor ce ne înconjoară, omul a căutat tot timpul o cale mai ușoara pentru a-l satisface ușurându-i munca si eliberându-l de stresul zilnic și monotonia care apar în lucruri repetitive.

Platforma Arduino este una completă ce oferă persoanei care o mânuiește un întreg arsenal de shield-uri cu ajutorul cărora se pot automatiza, manipula si modifica diferite lucruri, de la obiecte casnice, proiecte studențesti până la proiecte de mare amploare.

Expresorul Terry Opale este construit cu componente puține si fiabile dar care nu oferă mari posibilitati de extindere a utilizării acestuia. Cu ajutorul plăcii Arduino funcționalitatea expresorului poate fi extinsă și înbunătățită pentru a fi pe placul utilizatorului. Multe dintre shield-urile ce se gasesc pe platforma de automatizare pot fi implementate în acest aparat. În această lucrare s-au utilizat un număr redus de componente ți plăci add-on pentru placa de automatizare, dar gradul de îmbunătățire adus este unul ridicat.

Cu puține componente pasive am reușit sa fac leg[tura între placa Arduino și expresorul Terry Opale. Implementarea sistemului de automatizare nu a întâmpinat dificultăți datorită gradului scăzut de complexitate al plăcii, oferind astfel un raport timp/automatizare mult mai bun decît în cazul altor microcontrollere.

Manipularea și programarea acestei platforme mă ajută la dezvoltarea de proiecte noi precum automatizări mici de gospodărie, panouri din led-uri pentru afișarea de texte publicitare, automatizari în industria auto și nu numai.

Bibliografie

[MM10] – Arduino CookBook – Second Edition, Michael Margolis, 2010

[TI11] – Making Things Talk – 2nd edition, Tom Igoe, 2011

[JB14] – C programming for Arduino, Julien Bayle, 2014

[AWJB13] – Arduino Workshop, John Boxal, 2013

Referințe web

[BW13] – Bill Wong, How to buid a HUD for your car, 2013, disponibil on-line la adresa http://bwongtech.blogspot.co.uk/2013/02/how-to-build-hud-for-your-car.html

[WD11] – W. Durfee, Arduino Microcontroller Guide, 2011, disponibil on-line la adresa http://www.me.umn.edu/courses/me2011/arduino/arduinoGuide.pdf

[WD11] – david Kushner, The making of Arduino, 2011, disponibil on-line la adresa http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino

Codul sursă

#include <EEPROM.h>

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

// initializare senzor de temperatura

#include <OneWire.h>

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 9

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

// Setarea pinilor de comanda pentru cele 3 tipuri de cafea (lunga, medie si scurta)

const int CLUNGA = 13;

const int CMEDIE = 12;

const int CSCURTA = 11;

const int SETARI = 10;

const int NR_CAFELE = 30;

int LED[3];

char MSG_PREPARARE[] = "Se prepara:";

char MSG_PREPARARE_CL[] = "espresso lung.";

char MSG_PREPARARE_CM[] = "espresso mediu.";

char MSG_PREPARARE_CS[] = "espresso scurt.";

int TIMP_PREPARARE[3];

// Variabila in care se stochiaza tipul de apasare: 0 pt scurt sau 1 pt lung

int TIP_APASARE = 0; // tipul de apasare a butoanelor (0 scurt, 1 lung)

int TIMP_APASARE = 2; //(sec) Timpul minim pentru care o apasare este considerata lunga

const int POMPA = 8;

// Mesajul afisat dupa realizarea cafelei si durata acestuia in ms

char MSG_FINALIZ_1[] = "Ridicati cafeaua.";

char MSG_FINALIZ_2[] = "O zi buna!";

int MSG_FINALIZ_LENGTH = 4000; //(milisec) 4000 default

int DURATA_MAX_CAFEA = 100; //(sec) Durata maxima ce se poate seta pentru o cafea

int DURATA_MIN_CAFEA = 1; //(sec) Durata minima ce se poate seta pentru o cafea

char MENIU_SETARI_1[] = "1. Total cafele";

char MENIU_SETARI_2[] = "2. T. rezistenta";

char MENIU_SETARI_3[] = "3. Timpi cafea";

void setup() {

Serial.begin(9600);

lcd.begin(16, 2);

TIMP_PREPARARE[CLUNGA] = 8000; //(milisec)

TIMP_PREPARARE[CMEDIE] = 5000; //(milisec)

TIMP_PREPARARE[CSCURTA] = 2000; //(milisec)

LED[CLUNGA] = 16;

LED[CMEDIE] = 15;

LED[CSCURTA] = 14;

pinMode(CLUNGA, INPUT);

pinMode(CMEDIE, INPUT);

pinMode(CSCURTA, INPUT);

pinMode(LED[CLUNGA], OUTPUT);

pinMode(LED[CMEDIE], OUTPUT);

pinMode(LED[CSCURTA], OUTPUT);

digitalWrite(LED[CLUNGA], LOW);

digitalWrite(LED[CMEDIE], LOW);

digitalWrite(LED[CSCURTA], LOW);

pinMode(POMPA, OUTPUT);

// EEPROM.write(CLUNGA, 0);

// EEPROM.write(CMEDIE, 0);

// EEPROM.write(CSCURTA, 0);

// EEPROM.write(NR_CAFELE, 0);

if (EEPROM.read(CLUNGA) >= DURATA_MIN_CAFEA) TIMP_PREPARARE[CLUNGA] = (int)EEPROM.read(CLUNGA)*1000;

if (EEPROM.read(CMEDIE) >= DURATA_MIN_CAFEA) TIMP_PREPARARE[CMEDIE] = (int)EEPROM.read(CMEDIE)*1000;

if (EEPROM.read(CSCURTA)>= DURATA_MIN_CAFEA) TIMP_PREPARARE[CSCURTA] = (int)EEPROM.read(CSCURTA)*1000;

// pornire senzor de temperatura

sensors.begin();

}

/**

* functia principala

*/

void loop() {

int input = detecteazaInput();

if (input > -1){

afisareEcran(1, "");

afisareEcran(2, "");

if (input == CLUNGA || input == CMEDIE || input == CSCURTA){

if (TIP_APASARE == 1){

setareTimpCafea(input);

}

else {

int result = preparaCafea(input);

afisareEcran(1, "");

afisareEcran(2, "");

if (result == 1){

afisareEcran(1, MSG_FINALIZ_1);

afisareEcran(2, MSG_FINALIZ_2);

delay(MSG_FINALIZ_LENGTH);

}

}

}

else if(input == SETARI) setari();

afisareEcran(1, "");

afisareEcran(2, "");

}

afisareEcran(1, "Automat liber!");

afisareEcran(2, "Alfreo!");

int serial_data = Serial.read();

if (serial_data != -1) {

Serial.println(serial_data);

int input = -1;

if (serial_data == 97) input = CLUNGA;

if (serial_data == 98) input = CMEDIE;

if (serial_data == 99) input = CSCURTA;

afisareEcran(1, "");

afisareEcran(2, "");

int result = preparaCafea(input);

afisareEcran(1, "");

afisareEcran(2, "");

if (result == 1){

afisareEcran(1, MSG_FINALIZ_1);

afisareEcran(2, MSG_FINALIZ_2);

delay(MSG_FINALIZ_LENGTH);

afisareEcran(1, "");

afisareEcran(2, "");

}

}

delay(100);

}

/**

* functia care returneaza ce buton a fost apasat

* @return {int} – returneaza numarul pinului la care este conectat butonul

*/

int detecteazaInput(){

int input1 = !digitalRead(CLUNGA);

int input2 = !digitalRead(CMEDIE);

int input3 = !digitalRead(CSCURTA);

int input4 = digitalRead(SETARI);

if (input1 || input2 || input3 || input4){

if (input1) {

TIP_APASARE = tipApasare(CLUNGA);

return CLUNGA;

}

if (input2) {

TIP_APASARE = tipApasare(CMEDIE);

return CMEDIE;

}

if (input3) {

TIP_APASARE = tipApasare(CSCURTA);

return CSCURTA;

}

if (input4) return SETARI;

}

return -1;

}

/**

* functia care detecteaza daca s-a produs o apasare scurta sau una lunga

* @param {int} pin – pin-ul pe care s-a detectat apasarea

*

*/

int tipApasare(int pin){

int held = 0;

while (digitalRead(pin) == LOW && held < TIMP_APASARE*10){

delay(100);

held++;

}

if (held < TIMP_APASARE*10) return 0;

else return 1;

}

/**

* functia care se ocupa cu afisarea textului pe LCD

* @param {int} linie – numarul liniei pe care se va afisa textul

* @param {char[16]} – stringul care se va afisa pe display

*/

void afisareEcran(int linie, char text[16]){

if (linie == 1 || linie == 2 && sizeof(text) <= 16){

linie–;

lcd.setCursor(0, linie);

if (text == ""){text = " ";}

lcd.print(text);

}

}

/**

* functia care se ocupa de prepararea cafele

* @param {int} tip – pinul butonului care a fost apasat

*/

int preparaCafea(int tip){

if (tip == CLUNGA || tip == CMEDIE || tip == CSCURTA){

int timp = 100;

if (tip == CLUNGA){

afisareEcran(2, MSG_PREPARARE_CL);

timp = TIMP_PREPARARE[CLUNGA];

}

if (tip == CMEDIE){

afisareEcran(2, MSG_PREPARARE_CM);

timp = TIMP_PREPARARE[CMEDIE];

}

if (tip == CSCURTA){

afisareEcran(2, MSG_PREPARARE_CS);

timp = TIMP_PREPARARE[CSCURTA];

}

digitalWrite(LED[tip], HIGH);

afisareEcran(1, MSG_PREPARARE);

digitalWrite(POMPA, 1);

int inc_timp = 100;

int input = detecteazaInput();

while (input != tip){

delay(100);

inc_timp+=100;

input = detecteazaInput();

if (inc_timp >= timp) break;

}

digitalWrite(POMPA, 0);

digitalWrite(LED[tip], LOW);

if (inc_timp < timp) return 0;

else {

int nr_cafele = EEPROM.read(NR_CAFELE);

EEPROM.write(NR_CAFELE, nr_cafele+1);

return 1;

}

}

return 0;

}

/**

* functia care se ocupa de setarea timpului fiecarei cafele

* @param {int} pin – pin-ul butonului care a fost apasat lung

*/

void setareTimpCafea(int pin){

int durata = TIMP_PREPARARE[pin]/1000;

char tip_cafea[16];

if (pin == CLUNGA) strcpy(tip_cafea, "Expresso lung");

if (pin == CMEDIE) strcpy(tip_cafea, "Expresso mediu");

if (pin == CSCURTA) strcpy(tip_cafea, "Expresso scurt");

afisareEcran(1, tip_cafea);

afisareDurata(durata);

delay(1000);

int input = detecteazaInput();

while (input == -1){

delay(100);

input = detecteazaInput();

}

afisareEcran(1, "");

afisareEcran(2, "");

int up_button, down_button;

if (pin == CLUNGA){

up_button = CMEDIE;

down_button = CSCURTA;

}

if (pin == CMEDIE){

up_button = CLUNGA;

down_button = CSCURTA;

}

if (pin == CSCURTA){

up_button = CLUNGA;

down_button = CMEDIE;

}

while (input != pin){

if (input == up_button && durata < DURATA_MAX_CAFEA) durata++;

if (input == down_button && durata > DURATA_MIN_CAFEA) durata–;

afisareEcran(1, tip_cafea);

afisareDurata(durata);

delay(100);

input = detecteazaInput();

}

EEPROM.write(pin, durata);

TIMP_PREPARARE[pin] = durata*1000;

afisareEcran(1, "Date salvate!!!");

afisareEcran(2, "");

delay(1500);

}

/**

* functia care afiseaza durata cafelei in momentul cand aceasta este setata

* @param {int} durata – durata cafelei

*/

void afisareDurata(int durata){

afisareEcran(2, "Durata: ");

if (durata < 10){

lcd.setCursor(8, 1);

lcd.print(" ");

lcd.setCursor(9, 1);

lcd.print(durata);

}

else{

lcd.setCursor(8, 1);

lcd.print(durata);

}

lcd.setCursor(10, 1);

lcd.print("sec");

}

void setari(){

delay(200);

int poz = 1;

int modificare = 0;

afisareEcran(1, "Setari:");

int input = detecteazaInput();

afisareEcran(2 ,"");

while(input != SETARI){

lcd.setCursor(0, 1);

lcd.print(returneazaTextSetari(poz));

if (input == CLUNGA || input == CMEDIE || input == CSCURTA){

if (input == CLUNGA && poz > 1){

poz–;

modificare = 1;

}

if (input == CSCURTA && poz < 3){

poz++;

modificare = 1;

}

if (input == CMEDIE){

afisareEcran(2 ,"");

lcd.setCursor(0,1);

if (poz == 1){

lcd.print("Total: ");

lcd.setCursor(8,1);

lcd.print(EEPROM.read(NR_CAFELE));

}

if (poz == 2){

lcd.print("Temp: ");

sensors.requestTemperatures(); // Send the command to get temperatures

lcd.print(sensors.getTempCByIndex(0));

lcd.print("C");

}

if (poz == 3){

lcd.setCursor(0,1);

lcd.print("C. lunga: ");

lcd.print(TIMP_PREPARARE[CLUNGA]/1000);

lcd.print("s");

delay(2000);

afisareEcran(2 ,"");

lcd.setCursor(0,1);

lcd.print("C. medie: ");

lcd.print(TIMP_PREPARARE[CMEDIE]/1000);

lcd.print("s");

delay(2000);

afisareEcran(2 ,"");

lcd.setCursor(0,1);

lcd.print("C. scurta: ");

lcd.print(TIMP_PREPARARE[CSCURTA]/1000);

lcd.print("s");

}

while(detecteazaInput() != CMEDIE && detecteazaInput() != SETARI) delay(100);

afisareEcran(2 ,"");

}

}

if (modificare == 1){

afisareEcran(2 ,"");

lcd.setCursor(0, 1);

lcd.print(returneazaTextSetari(poz));

modificare = 0;

}

delay(100);

input = detecteazaInput();

}

}

char* returneazaTextSetari(int poz){

if (poz>=1 && poz <=3){

if (poz == 1)return MENIU_SETARI_1;

if (poz == 2)return MENIU_SETARI_2;

if (poz == 3)return MENIU_SETARI_3;

}

return false;

}

Anexe

Structure

setup()

loop()

Control Structures

if

if…else

for

switch case

while

do… while

break

continue

return

goto

Further Syntax

; (semicolon)

{} (curly braces)

// (single line comment)

/* */ (multi-line comment)

#define

#include

Arithmetic Operators

= (assignment operator)

+  (addition)

– (subtraction)

* (multiplication)

/ (division)

% (modulo)

Comparison Operators

== (equal to)

!= (not equal to)

< (less than)

> (greater than)

<= (less than or equal to)

>= (greater than or equal to)

Boolean Operators

&& (and)

|| (or)

! (not)

Pointer Access Operators

* dereference operator

& reference operator

Bitwise Operators

& (bitwise and)

| (bitwise or)

^ (bitwise xor)

~ (bitwise not)

<< (bitshift left)

>> (bitshift right)

Compound Operators

++ (increment)

– (decrement)

+= (compound addition)

-= (compound subtraction)

*= (compound multiplication)

/= (compound division)

&= (compound bitwise and)

|= (compound bitwise or)

Variables

Constants

HIGH | LOW

INPUT | OUTPUT| INPUT_PULLUP

true | false

integer constants

floating point constants

Data Types

void

boolean

char

unsigned char

byte

int

unsigned int

word

long

unsigned long

short

float

double

string – char array

String – object

array

Conversion

char()

byte()

int()

word()

long()

float()

Variable Scope & Qualifiers

variable scope

static

volatile

const

Utilities

sizeof()

Functions

Digital I/O

pinMode()

digitalWrite()

digitalRead()

Analog I/O

analogReference()

analogRead()

analogWrite() – PWM

Due only

analogReadResolution()

analogWriteResolution()

Advanced I/O

tone()

noTone()

shiftOut()

shiftIn()

pulseIn()

Time

millis()

micros()

delay()

delayMicroseconds()

Math

min()

max()

abs()

constrain()

map()

pow()

sqrt()

Trigonometry

sin()

cos()

tan()

Random Numbers

randomSeed()

random()

Bits and Bytes

lowByte()

highByte()

bitRead()

bitWrite()

bitSet()

bitClear()

bit()

External Interrupts

attachInterrupt()

detachInterrupt()

Interrupts

interrupts()

noInterrupts()

Communication

Serial

Stream

Index

A

Anexe………………………………………………………….65

B

Bibliografie………………………………………………….51

C

Concluzii……………………………………………………..50

Codul sursă…………………………………………………..53

E

Expresorul terry opale…………………………………….9

I

Introducere……………………………………………………1

P

Platforma arduino…………………………………………18

R

Referințe web……………………………………………….52

S

Structura programului……………………………………32

Bibliografie

[MM10] – Arduino CookBook – Second Edition, Michael Margolis, 2010

[TI11] – Making Things Talk – 2nd edition, Tom Igoe, 2011

[JB14] – C programming for Arduino, Julien Bayle, 2014

[AWJB13] – Arduino Workshop, John Boxal, 2013

Referințe web

[BW13] – Bill Wong, How to buid a HUD for your car, 2013, disponibil on-line la adresa http://bwongtech.blogspot.co.uk/2013/02/how-to-build-hud-for-your-car.html

[WD11] – W. Durfee, Arduino Microcontroller Guide, 2011, disponibil on-line la adresa http://www.me.umn.edu/courses/me2011/arduino/arduinoGuide.pdf

[WD11] – david Kushner, The making of Arduino, 2011, disponibil on-line la adresa http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino

Anexe

Structure

setup()

loop()

Control Structures

if

if…else

for

switch case

while

do… while

break

continue

return

goto

Further Syntax

; (semicolon)

{} (curly braces)

// (single line comment)

/* */ (multi-line comment)

#define

#include

Arithmetic Operators

= (assignment operator)

+  (addition)

– (subtraction)

* (multiplication)

/ (division)

% (modulo)

Comparison Operators

== (equal to)

!= (not equal to)

< (less than)

> (greater than)

<= (less than or equal to)

>= (greater than or equal to)

Boolean Operators

&& (and)

|| (or)

! (not)

Pointer Access Operators

* dereference operator

& reference operator

Bitwise Operators

& (bitwise and)

| (bitwise or)

^ (bitwise xor)

~ (bitwise not)

<< (bitshift left)

>> (bitshift right)

Compound Operators

++ (increment)

– (decrement)

+= (compound addition)

-= (compound subtraction)

*= (compound multiplication)

/= (compound division)

&= (compound bitwise and)

|= (compound bitwise or)

Variables

Constants

HIGH | LOW

INPUT | OUTPUT| INPUT_PULLUP

true | false

integer constants

floating point constants

Data Types

void

boolean

char

unsigned char

byte

int

unsigned int

word

long

unsigned long

short

float

double

string – char array

String – object

array

Conversion

char()

byte()

int()

word()

long()

float()

Variable Scope & Qualifiers

variable scope

static

volatile

const

Utilities

sizeof()

Functions

Digital I/O

pinMode()

digitalWrite()

digitalRead()

Analog I/O

analogReference()

analogRead()

analogWrite() – PWM

Due only

analogReadResolution()

analogWriteResolution()

Advanced I/O

tone()

noTone()

shiftOut()

shiftIn()

pulseIn()

Time

millis()

micros()

delay()

delayMicroseconds()

Math

min()

max()

abs()

constrain()

map()

pow()

sqrt()

Trigonometry

sin()

cos()

tan()

Random Numbers

randomSeed()

random()

Bits and Bytes

lowByte()

highByte()

bitRead()

bitWrite()

bitSet()

bitClear()

bit()

External Interrupts

attachInterrupt()

detachInterrupt()

Interrupts

interrupts()

noInterrupts()

Communication

Serial

Stream

Index

A

Anexe………………………………………………………….65

B

Bibliografie………………………………………………….51

C

Concluzii……………………………………………………..50

Codul sursă…………………………………………………..53

E

Expresorul terry opale…………………………………….9

I

Introducere……………………………………………………1

P

Platforma arduino…………………………………………18

R

Referințe web……………………………………………….52

S

Structura programului……………………………………32

Similar Posts