Aplicatie Integrata In C++ Pentru Utilizarea Cuptorului Electric Domestic
Aplicație integrată în C++ pentru utilizarea cuptorului electric domestic
1. Cuprins
1. Cuprins
2. Introducere
2.1. Prezentare generală.
2.2. Obiectiv.
2.3. Arhitecturi utilizate
2.3.1. Arduino
2.3.2. Android.
2.4. Structura
3. Android Bt_oven
3.1. Editor grafic al programului <APP INVENTOR>
3.2. Editor blocuri al programului <APP INVENTOR>
4. Arduino Bt_oven
4.1. Schema logica a programului arduino Bt_oven
4.2. Librariile folosite:
4.3. Caractere create
4.4. Initializarea variabilelor necesare programului
4.5. Setarile initiale
4.6. Functia de citire de temperatura
4.7. Functia de setare a canalelor la “Gatire Dinamica”
4.8. Functia de setare a canalelor la “Gatire Clasica”
4.9. Functia de setare a canalelor la “Gatire Clasica Asistata”
4.10. Functia “Gatire Dinamica”
4.11. Functia “Gatire Clasica”
4.12. Functia “Gatire Clasica Asistata”
4.13. Functia “Dezghetare”
4.14. Functia “Iesire”
4.15. Functia “Start”
4.16. Functia “MOD”
4.17. Functia “Minus 5 minute”
4.18. Functia “Plus 5 minute”
4.19. Functia “ON/OFF”
4.20. Functia “Ceas”
4.21. Functia “ButPlus()”
4.22. Functia “ButMinus()”
4.23. Bucla Principala
5. Interconectare
5.1. Inerconectare in cazul apasarii butonului “Defrost”
5.2. Inerconectare in cazul apasarii butonului “Dinamic Cooking”
5.3. Inerconectare in cazul apasarii butonului “Classic Cooking”
5.4. Inerconectare in cazul apasarii butonului “Classic Cooking + fan”
5.5. Inerconectare in cazul apasarii butonului “Tplus”
5.6. Inerconectare in cazul apasarii butonului “Tminus”
5.7. Inerconectare in cazul apasarii butonului “Plus5minute”
5.8. Inerconectare in cazul apasarii butonului “Minus5minute”
5.9. Inerconectare in cazul apasarii butonului “Power”
6. Lista de materiale
7. Concluzii
8. Bibliografie
Introducere
Prezentare generală.
Lucrarea de licență are ca scop crearea unei automatizări pentru un cuptor electric casnic astfel încât utilizatorul folosind telefonul său mobil să-l comande printr-o simplă conexiune Bluetooth. Desigur, această automatizare este condiționată de faptul că și cuptorul să aibă încorporat un modul Bluetooth care să permită manipularea interfeței prin intermediul acestuia. Această lucrare este utilă, de noutate și este atractivă din punct de vedere informatic, deoarece trendul actual este acela de a de a face orice folosind telefonul mobil
Obiectiv.
Datorită naturii foarte diferite a arhitecturilor folosite, lucrarea este formată din două medii de programe foarte diferite, fiecare depinzând de arhitectura specifică în funcție de modulul hardware al fiecărui dezvoltator
Crearea algoritmului pentru placa dezvoltator Arduino.
Crearea program Android .
Setări parametrii modul Bluetooth
Setări parametrii afisaj LCD
Arhitecturi utilizate
Arduino
Este o platformă electronică de tip open-source bazată pe clasa de microcontrolere programabile ATmega având elemente hardware și software ușor de utilizat. Este extrem de popular fiind destinat oricui dorește să realizeze proiecte interactive
Istoric.
“Arduino a început în 2005 ca un proiect pentru studenții de la Interacțiuni Institutul de Proiectare Ivrea în Ivrea, Italia. La acel moment elevii foloseau un " BASIC Stamp ", la un cost de 100 de dolari, considerat scump pentru elevi. Massimo Banzi, unul dintre fondatorii, a predat la Ivrea. Denumirea "Arduino", vine de la un bar din Ivrea, unde o parte din fondatori obișnuiau să se intâlnească. Barul în sine a fost numit dupa Arduino, Margrave de Ivrea rege al Italiei intre anii 1002-1014”
Hardware.
„O placa Arduino constă dintr-un microcontroler Atmel AVR 8 biți cu componente complementare care facilitează programarea și încorporarea în alte circuite. Un aspect important al Arduino este conectorii săi standard, care permite utilizatorilor să se conecteze placa CPU la o varietate de module add-on interschimbabile cunoscute sub numele de scuturi . Unele scuturi comunică cu placa Arduino direct pe diversi pini, dar multe scuturi sunt adresabile individual printr-o magistrală serială . Deci multe scuturi pot fi stivuite și utilizate în paralel. Arduino oficial au folosit megaAVR serie de chip-uri, în special ATmega8, ATmega168, ATmega328, ATmega1280, și ATmega2560. Majoritatea plăcilor includ un regulator liniar de 5 volți și un oscilator cristal (sau rezonator ceramic, în unele variante) de 16 MHz, deși unele proiecte, cum ar fi Lilypad rula la 8 MHz și renunțarea la regulatorul de tensiune la bord din cauza restricțiilor specifice formă-factor. Microcontrolerul Arduino este, de asemenea, pre-programat cu un încărcător de boot care simplifică încărcarea de programe in memorie flash, în comparație cu alte dispozitive care de obicei au nevoie de un programator extern. Acest lucru face folosirea unui Arduino mai simplă, permițând utilizarea unui calculator obișnuit ca programator.”
Software.
„Arduino Mediul de dezvoltare integrat (IDE) este o platforma cross-cerere scrisă în Java, și derivă din IDE pentru limbajul de programare Prelucrarea și electrică proiectelor. Acesta este conceput pentru a introduce programare la artiștilor și a altor nou-veniți care nu sunt familiarizați cu dezvoltarea de software. Acesta include un editor de cod cu caracteristici, cum ar fi evidențierea sintaxei, potrivire bretele, și indentare automată, și este de asemenea capabil de compilarea și încărcarea de programe la bord cu un singur clic. Un program sau cod scris pentru Arduino se numește schiță .
Programele Arduino sunt scrise în C sau C ++ . Arduino IDE vine cu o bibliotecă de software numită " Wiring "din cadrul proiectului electrică inițial, ceea ce face ca multe operații comune de intrare / ieșire mult mai ușoare. Utilizatorii trebuie doar să definească două funcții pentru a face un program rulabil ciclic „
setup ( ) : o funcție care ruleaza o singură dată, la începutul unui program care poate inițializa setările.
loop ( ) : o funcție apelată în mod repetat, până când placa este oprită.
Android
este o platformă software și un sistem de operare pentru dispozitive și telefoane mobile bazată pe nucleul Linux, dezvoltată inițial de compania Google, iar mai târziu de consorțiul comercial Open Handset Alliance.
Istoric.
“În iulie 2005 Google a achiziționat Android, Inc, o mică companie de tip startup cu sediul în Palo Alto, California, SUA. Cofondatorii companiei Android, care au
continuat să muncească la Google, au fost Andy Rubin (cofondator al Danger), Rich Miner (cofondator al Wildfire Communications, Inc), Nick Sears (fost vicepreședinte al T-Mobile) și Chris White (unul dintre primii ingineri ai WebTV). La acea dată se cunoștea foarte puțin despre Android, Inc., doar că făceau software pentru telefoane mobile. La Google, echipa condusă de Rubin a dezvoltat un sistem de operare pentru dispozitive mobile bazat pe Linux,(**)pe care l-au prezentat producătorilor de telefoane mobile și operatorilor de rețele de telefonie mobilă, cu perspectiva de a asigura un sistem flexibil, upgradabil.
La 5 noiembrie 2007 a fost făcut public Open Handset Alliance, un consorțiu incluzând Google, HTC, Intel, Motorola, Qualcomm, T-Mobile, Sprint Nextel și Nvidia, cu scopul de a dezvolta standarde deschise pentru dispozitive mobile.[2] Odată cu formarea Open Handset Alliance, OHA a dezvăluit de asemenea primul său produs, Android, o platformă pentru dispozitive mobile construită pe nucleul Linux, versiunea 2.6. ”
App Inventor
Un limbaj de programare vizuală inițiat de Google și preluat de MIT din 2012 Permite crearea unor aplicații pentru sistemul de operare Android gândit ca unealtă în programarea educațională.
“Aplicatia a fost pusă la dispoziție prin intermediul cererii din 12 iulie 2010, și a lansată public la 15 decembrie 2010 echipa Inventor App fiind condusă de Hal Abelson și Mark Friedman. În a doua jumătate a anului 2011, Google a lansat codul sursă, finalizarea serverului, si furnizarea de resurse de finanțare pentru crearea de Centrul MIT pentru mobil Learning, condusă de către creatorul App Inventor Hal Abelson și profesori de la MIT colegii Eric KLÖPFER și Mitchel Resnick. Versiunea MIT a fost lansată în martie 2012.
Open blocks este distribuit de Massachusetts Institute of Scheller Teacher Education Program Technology (STEP) și este derivat din master de cercetare Teza de Ricarose Roque. Profesorul Eric Klopfer si Daniel Wendel a sprijinit distribuirea programului Scheller blocuri deschise sub o licență MIT. Programarea vizuală Open blocks este strâns legată de StarLogo TNG, un proiect de STEP, și Scratch, un proiect al MIT Media Laboratory lui pe tot parcursul vieții Gradinita Group. App Inventor 2 înlocuit Open blocks cu Blockly, un editor de blocuri care rulează în browser.”
Modul de lucru fiind : live in browser, testare pe emulator și salvarea in cloud Fig.1.
Fig.1. Modul de lucru al App Inventor
Structura
Structura algoritmului pentru Arduino
Algoritmul pentru Arduino se programează in mediu de programare C++ având ca structură urmatoarele elemente:
Importul de librării
Inițializarea variabilelor
Inițializarea funcțiilor
Inițializarea modulului bluetooth
Inițializare display
Inițalizarea setărilor
Bucla
Structura algoritmului pentru Android
Algoritmul pentru Android l-am programat in limbajul de programare vizual open bloks Java numit App Inventor poartă numele de Bt_oven având ca structură urmatoarele elemente:
Inițializare display principal
Inițializare notificări
Inițializare comunicație modul integrat bluetooth al telefonului
Inițializare butoane
Inițializare display-urilor pentru informare progres
Capitolul I
1) Prezentarea aplicației
Aplicația permite utilizatorului să controleze funcțiile de bază ale cuptorul electric de pe telefonul mobil, acestea fiind : pornire/oprire, selecție funcție ,modificare temperatură și setare timp .
La pornirea aplicației ni se solicită pornirea modulului bluetooth încorporat în telefon și împerecherea telefonului cu dispozitivul pentru stabilirea comunicației.
Pornirea cuptorului se face prin selecția modului de gătire, timpul și temperatura au valori inițiale implicite, dar care pot fi modificate în timpul funcționării, urmând ca modificările aduse programului inițial să le vedem afișate atât pe display-ul telefonului cât și pe display-ul cuptorului, amplasarea butoanelor si display-urile se pot vedea in Fig.2.
Fig.2. Interfața grafică a aplicației BT_Oven
Android Bt_oven
Schema logică
Fig.3. Schema logică a programului android Bt_oven
Programul este compus din 2 elemente de bază :
Fig.4. Editorul grafic al programului <APP INVENTOR>
Fig.5. Editor blocuri funcții al programului <APP INVENTOR>
Editor grafic al programului <APP INVENTOR>
Este editorul în care facem interfața telefonului, aici aranjăm butoanele, forma lor, dimensiunea lor, denumirea, culoarea și poziția lor.
Fig.6. Butoanele pentru conectare / deconectare dipozitiv
Reglarea timpului ± 5 minute, Fig.7, la fiecare apăsare de buton adăugăm sau scădem 5 minute din timpul prestabilit.
Fig.7. Butoanele pentru ajustare timp
Reglarea temperaturii, Fig.8, acuratețea de reglare este de 1°C, fie că dorim scăderea sau urcarea temperaturii.
Fig.8. Butoanele pentru ajustarea temperaturii
Cu butonul de power, Fig.9, închidem aplicația dar și cuptorul.
Fig.9. Buton de power
Modul de gătire se selectează cu ajutorul butoanelor de funcții
Fig.10. Butoanele pentru selecția funcțiilor
În tabelul T.1.se găsesc semnificațiile fiecărui tip de gătire T.1.Tabelul cu lista de functii al aplicatiei
Display-urile, Fig.11, pentru: funcția selectata, temperatura la care rulează cuptorul si timpul rămas până la finalizarea programului.
Fig.11. Display-urile aplicatiei BT_Oven pentru android
Editor blocuri al programului <APP INVENTOR>
Este elementul in care se implementează blocurile de funcții Java, fucționali timpul funcționării, urmând ca modificările aduse programului inițial să le vedem afișate atât pe display-ul telefonului cât și pe display-ul cuptorului, amplasarea butoanelor si display-urile se pot vedea in Fig.2.
Fig.2. Interfața grafică a aplicației BT_Oven
Android Bt_oven
Schema logică
Fig.3. Schema logică a programului android Bt_oven
Programul este compus din 2 elemente de bază :
Fig.4. Editorul grafic al programului <APP INVENTOR>
Fig.5. Editor blocuri funcții al programului <APP INVENTOR>
Editor grafic al programului <APP INVENTOR>
Este editorul în care facem interfața telefonului, aici aranjăm butoanele, forma lor, dimensiunea lor, denumirea, culoarea și poziția lor.
Fig.6. Butoanele pentru conectare / deconectare dipozitiv
Reglarea timpului ± 5 minute, Fig.7, la fiecare apăsare de buton adăugăm sau scădem 5 minute din timpul prestabilit.
Fig.7. Butoanele pentru ajustare timp
Reglarea temperaturii, Fig.8, acuratețea de reglare este de 1°C, fie că dorim scăderea sau urcarea temperaturii.
Fig.8. Butoanele pentru ajustarea temperaturii
Cu butonul de power, Fig.9, închidem aplicația dar și cuptorul.
Fig.9. Buton de power
Modul de gătire se selectează cu ajutorul butoanelor de funcții
Fig.10. Butoanele pentru selecția funcțiilor
În tabelul T.1.se găsesc semnificațiile fiecărui tip de gătire T.1.Tabelul cu lista de functii al aplicatiei
Display-urile, Fig.11, pentru: funcția selectata, temperatura la care rulează cuptorul si timpul rămas până la finalizarea programului.
Fig.11. Display-urile aplicatiei BT_Oven pentru android
Editor blocuri al programului <APP INVENTOR>
Este elementul in care se implementează blocurile de funcții Java, fucționalitatea fiecarui buton, ficarui display și blocul timerului, componenta acestor blocuri este:
Blocul de notificare
Blocul 1, Fig.12, reprezintă blocul de funcții care inițializează interfata grafică catre utilizator și de asemenea verifică dacă modulul bluetooth este pornit, și dacă e necesar să ne afișeze o notificare care să ne atenționeze că aplicația are nevoie de modulul bluetooth să fie pornit, cu obțiunile “OK” și “EXIT” .
Fig.12. Blocul de notificare al programului BT_Oven
Blocul de obtiuni la notificare
Blocul 2, Fig.13, reprezintă blocul de funcții care tratează obțiunile din notificarea din blocul 1 Fig.12. dupa caz, dacă obțiunea este “OK” programul va rula totuși dar inainte ne va afișa mesajul “Bluetooth nu este activat și aplicația nu va funcționa”, iar dacă obțiunea este “exit” se inchide aplicația.
Fig.13. Blocul de obtiuni la notificare al programului BT_Oven
Blocurile lista de conectare
Blocurile 3 si 4, Fig.14, reprezintă blocurile de funcții care in momentul in care vom dori sa ne conectăm la un dispozitiv bluetooth ne vor alcătui o listă din care să alegem aparatul pe care dorim sa îl utilizăm.
Fig.14. Blocul lista de conectare al programului BT_Oven
Blocul de functii al butonului “Connect”
Blocul 5, Fig.15, reprezintă blocul de funcții care alocă acțiuni butonului “connect”, care la apăsare va verifica dacă modulul bluetooth este pornit, dacă nu este pornit ne va întâmpina cu mesajul “Activați Bluetooth” dacă este activat va deschide lista creată de catre blocul 3 din Fig.14.
Fig.15 Blocul de functii al butonului “Connect”
Blocul de functii al butonului “Defrost”
Blocul 6, Fig.16, reprezintă blocul de funcții care, la apasarea butonului “Defrost” execută urmatorii pași:
Verifică dacă sunt conectat la bluetooth
Dacă da, atunci :
Trimite prin bluetooth caracter “d”
Dezactivează butoanele “Tplus”si “Tminus”
Pornește ceasul
Afișează pe display-ul “Mod gătire” textul “Dezghetare”
Afișează temperatura primită de la bluetooth
Setează timpul la 15 minute
Dacă nu, atunci afișează notificarea “Conectați Bluetooth”
Fig.16. Blocul de functii al butonului “Defrost”
Blocul de functii al butonului “Dinamic Cooking”
Blocul 7, Fig.17, reprezintă blocul de funcții care, la apăsarea butonului “DC (dinamic cooking)” execută următorii pași:
Verifică dacă sunt conectat la bluetooth
Dacă da atunci:
Trimite prin bluetooth caracter “f”
Activează butoanele “Tplus”si “Tminus”
Porneste ceasul
Afișează pe display-ul “Mod gătire” textul “Gătire dinamică”
Afișează temperatura primită de la bluetooth
Setează timpul la 30 minute
3) Daca nu, atunci afisează notificarea “Conectați Bluetooth”
Fig.17. Blocul de functii al butonului “Dinamic Cooking”
Blocul de functii al butonului “Classic Cooking”
Blocul 8, Fig.18, reprezintă blocul de funcții care, la apăsarea butonului “CC (Classic Cooking)” execută următorii pași:
Verifică daca sunt conectat la bluetooth
Dacă da atunci:
Trimite prin bluetooth caracter “n”
Activează butoanele “Tplus”și “Tminus”
Pornește ceasul
Afișeaza pe display-ul “Mod gătire” textul “Gătire clasică”
Afișează temperatura primită de la bluetooth
Setează timpul la 30 minute
3) Dacă nu, atunci afișează notificarea “Conectați Bluetooth”
Fig.18. Blocul de functii al butonului “Classic Cooking”
Blocul de functii al butonului “Classic Cooking + fan”
Blocul 9, Fig.19, reprezinta blocul de functii care, la apasarea butonului “CCF (Classic Cooking + fan )” executa urmatorii pasi:
Verifica daca sunt conectat la bluetooth
Daca da atunci:
Trimite prin bluetooth caracter “n”
Activeaza butoanele “Tplus”si “Tminus”
Porneste ceasul
Afiseaza pe display-ul “Mod gatire” textul “Gatire clasica asistata”
Afiseaza temperatura primita de la bluetooth
Seteaza timpul la 30 minute
3) Daca nu, atunci afiseaza notificarea “Conectati Bluetooth”
Fig.19. Blocul de functii al butonului “Classic Cooking + fan”
Blocul de functii al butonului “Tplus”
Blocul 10, Fig.20, reprezinta blocul de functii care, la apasarea butonului “Tplus (temperatura plus )” executa urmatorii pasi:
Verifica daca sunt conectat la bluetooth
Daca da atunci:
Trimite prin bluetooth caracter “+”
Afiseaza temperatura primita de la bluetooth
3) Daca nu, atunci afiseaza notificarea “Conectati Bluetooth”
Fig.20. Blocul de functii al butonului “Tplus”
Blocul de functii al butonului “Tminus”
Blocul 11, Fig.21, reprezinta blocul de functii care, la apasarea butonului “Tminus (temperatura minus )” executa urmatorii pasi:
Verifica daca sunt conectat la bluetooth
Daca da atunci:
Trimite prin bluetooth caracter “-”
Afiseaza temperatura primita de la bluetooth
3) Daca nu, atunci afiseaza notificarea “Conectati Bluetooth”
Fig.21. Blocul de functii al butonului “Tminus”
Blocul de functii al butonului “Plus5min”
Blocul 12, Fig.22, reprezinta blocul de functii care, la apasarea butonului “plus5m (plus 5 minute )” executa urmatorii pasi:
Verifica daca sunt conectat la bluetooth.
Daca da atunci:
Trimite prin bluetooth caracter “p”.
Adauga 5 minute la timpul ramas.
3) Daca nu, atunci afiseaza notificarea “Conectati Bluetooth”.
Fig.22. Blocul de functii al butonului “Plus5min”
Blocul de functii al butonului “Minus5min”
Blocul 13, Fig.23, reprezinta blocul de functii care, la apasarea butonului “minus5m (minus 5 minute )” executa urmatorii pasi:
Verifica daca sunt conectat la bluetooth.
Daca da atunci:
Trimite prin bluetooth caracter “p”.
Adauga 5 minute la timpul ramas.
3) Daca nu, atunci afiseaza notificarea “Conectati Bluetooth”.
Fig.23. Blocul de functii al butonului “Minus5min”
Blocul de functii al butonului “Power”
Blocul 14, Fig.24, reprezinta blocul de functii care, la apasarea butonului “OFF” executa urmatorii pasi:
Trimite prin bluetooth caracterul “q”.
Inchide aplicatia
Fig.24. Blocul de functii al butonului “Power”
Blocul de functii al butonului “Deconnect”
Blocul 15, Fig.25, reprezinta blocul de functii care, la apasarea butonului “decon” va deconecta aparatul conectat prin bluetooth facand astfel libera conexiunea pentru un alt aparat
Fig.25. Blocul de functii al butonului “Deconnect”
Schema logica a timer-ului android Bt_oven
Fig.26. Schema logica a timer-ului android Bt_oven
Blocul de functii ale timer-ului aplicatiei BT_Oven
Blocul 16, Fig.27, reprezinta blocul de functii timer care foloseste 3 variabile globale :
Variabila “Time” reprezinta timpul total, este variabila asupra careia se intervine atunci cand dorim sa adaugam timp sau sa scadem din timp. Si este exprimata in secunde
Variabila “Minute_Ramase” este variabila care ia valoarea minutelor intregi calculate din timpul total
Variabila “Secunde_Ramase ” este variabila care ia valoarea secundelor ramase din timpul total dupa scaderea minutelor intregi
si alte 3 variabile locale, care se initializeaza si se folosesc strict pe perioada cat ruleaza bucla ceas acestea sunt :
Variabila “secunde” care este contorul de lucru .
Variabila “secunde in minut” cu ajutorul careia facem calculul pentru a obtine variabila “Secunde Ramase”
Variabila “minute in ora” cu ajutorul careia facem calculul pentru a obtine variabila “Minute Ramase”
Blocul ceas functioneaza astfel:
Bucla ceas
Verificam daca variabila global Time este diferita de 0
Initializam variabilele locale
Variabila “secunde” ia valoarea lui global “Time”
Din timpul total scoatem minutele intregi rezultatul sunt secundele ramase(global Secunde_Ramase)
Din timpul total scoatem orele intregi rezultatul sunt minutele ramase(global Minute_Ramase)
Afisez pe display “Dtimp” minutele si secundele ramase
Incremetare
Cand global Time ajunge la 0
Iesire bucla ceas
Afisez pe display “Dtimp” text “00:00”
Opresc functia ceas
Avertisment sonor
Afisez notificare
Fig.27. Blocul de functii ale timer-ului aplicatiei BT_Oven
Arduino Bt_oven
Schema logica a programului arduino Bt_oven
Librariile folosite:
Librariile necesare/importate pentru rularea cat mai optima a programului sunt:
"Button.h"
"Wire.h"
"LiquidCrystal.h"
"CountUpDownTimer.h"
Libraria “Button.h”
Este necesara pentru functionara optima a butoanelor conectate la modulul arduino, executa citirea digitala a starii fiecariu buton si evecuta actiunea stabilita in cod.
Comenzile folosite din aceasta librarie sunt:
void pulldown()
Stabileste butonului de tip “contact normal deschis” ”(contactul se inchide cand este actionat ).
boolean uniquePress()
Verifica daca starea butonului sa modificat si daca butonul este actionat. Va returna “true” doar o data cat timp butonul este actionat.
Libraria “Whire.h”
Este necesara pentru comunicatia cu modulul bluetooth, creaza un canal de comunicatie serial, stabileste protocolul, executa citirea si scrierea pe acest canal fara a influenta comunicatia prin portul USB.
Comenzile folosite din aceasta librarie sunt:
void print()
Scrie date de pe un dispozitiv “slave” ca răspuns la o cerere din partea unui “maester”.
void read()
Citeste date de pe un dispozitiv “slave” ca răspuns la o cerere din partea unui “maester”.
boolean available()
Verifica daca dispozitivul “slave” este conectat si disponibil pentru conunicatie. Va returna “true” daca da.
Libraria “LiquidCristal.h”
Este necesara pentru comunicatia cu display-ul LCD, creaza canalul de comunicatie stabileste protocoalele de transfer de date catre driverul display-ului, stabileste formatul datelor trimise care urmeaza a fii afisate.
Comenzile folosite din aceasta librarie sunt:
void print()
Afiseaza textul pe LCD.
void setCursor()
Deplaseaza corsorul display-ului conform coordonatelor stabilite de parametrii
void setBacklight()
Stabileste starea iluminatului afisajului.Valoarea 1 aprinde lumina iar valoarea 0 o va stinge
void clear()
Sterge textul de pe afisaj si stabileste cursorul in partea stanga sus
Libraria “CountUpDownTimer.h”
Este necesara pentru ceasul intern folosit pentru cronometrarea timpului de gatire, reglementeaza formatul in care se face cronometrarea tipul de cronometru dar si modul in care este adminstrat timpul
Comenzile folosite din aceasta librarie sunt:
void CountUpDownTimer(DOWN)
Stabileste tipul de contor, iar DOWN stabileste ca numaratoare inversa.
void SetTimer()
Seteaza valoarea timer-ului
void StartTimer()
Porneste secventa timer-ului
void ResetTimer()
Sterge valoarea timer-ului
boolean TimeCheck()
Verifica daca timer-ul corespunde cu o valoare anume. Returneaza “true” daca da
void ShowSeconds()
Returneaza numarul de secunde ramase dupa ce s-au extras din valoarea totala numarul de minute intregi.
void ShowMinutes()
Returneaza numarul de minute ramase dupa ce s-au extras din valoarea totala numarul de ore intregi.
Caractere create
Creez caracterul care reperezinta gradele celsius ( ° ), fiecare caracter de pe dislayul folosit este alcatuit din 40 de pixeli dispusi pe 5 coloane si 8 randuri, in algoritmul de mai jos stabilim in mod explicit pe fiecare rand care pixel sa fie aprins si care sa fie stins
Fig.29 .matricea de pixeli al caracterului format
“ byte dot[8] = {0b00011,0b00011,0b000000,0b000000,0b000000,0b000000,0b000000,0b000000}; ”
Initializarea variabilelor necesare programului
Initializes variabilele pe care le voi folosii atat in cadrul finctiilor cat si in
cadrul buclei principale :
int i ;
int x ;
int y ;
long contorAnterior = 0;
long interval = 1000;
byte press1Count = 0;
byte press2Count = 0;
int tempS;
int tempC;
float citireA;
CountUpDownTimer t(DOWN);
Initializez canalele fizice de comunicatie ale placii arduino, numerotarea canalelor incepe cu 0, iar butoanele sunt in functie de pozitia lor fizica pe placa, am folosit canalele care sunt mai aproape de butoane pentru a optimiza firele
LiquidCrystal lcd(0);
const int analogpin = 0;
Button button1 = Button(23, PULLDOWN);
Button button2 = Button(22, PULLDOWN);
Button button3 = Button(25, PULLDOWN);
Button button4 = Button(24, PULLDOWN);
Button button5 = Button(27, PULLDOWN);
Button button6 = Button(26, PULLDOWN);
int topheater = 46 ;
int bottomheater = 47 ;
int circularheater = 48 ;
int fan = 49;
Setarile initiale
Setarile initiale sunt setarile care se initalizeaza prima data la alimentarea placii arduino urmand sa fie valabile pe toata perioada cat placa este alimentata
void setup()
lcd.begin(16, 2); //Initializez display LCD
lcd.setBacklight(0); //Sting lumina display-ului
lcd.setCursor(3, 0); //Deplasez cursorul pe coordonata stabilita
lcd.print("Alimentat"); //Afisez un mesaj pentru control
lcd.createChar(1, dot); //Initializez primul caracter creat
analogReference(INTERNAL1V1); //Setez referinta pentru citirea analogica la valoarea
de1,1V pentru acutate maxima a zenzorului
Serial.begin(9600); //Initializez comunicatia seriala pentru Bluetooth
Pentru o optimizare cat mai buna a programului l-am organizat in blocuri numite
functii,mai jos voi creea functiile necesare pentru intreaga functionare a cuptorului
Incep cu citirea temperaturii prin intermediul canalului analogic 0, unde citireA este variabila care va lua valoarea citita pe portul analogic, vom folosi tensiunea de referinta de 1,1V
care impartita la rezolutia de 1024 obtinem 1,0742mV/treapta de citire, in documentatia senzorului LM35 gasim ca factorul liniar de variatie este de 10mV/°C deci rapotrul dintre factorul de variatie si rezolutia de citire 10/1,0742 = 9.31mV/°C
Functia de citire de temperatura
void TemperaturaA()
{
citireA = analogRead(analogpin);
tempC = citireA / 9.31;
}
Pentru fiecare din cele 4 moduri de gatire creez cate o functie, deoarece fiecare mod in parte are particularitaile sale si implicit si canalele de comunicatie difera de la un mod la altul,
Functia de setare a canalelor la “Gatire Dinamica”
Functia pentru setarea canalelor la functiile gatire dinamica si dezghetare, atata timp cat temperatura citita este mai mica decat temperatura setata elementul de incalzire este alimentat cand temperaturile se egalizeaza oprim alimentarea elementului de incalzire ramanand alimentat doar ventilatorul, astfel obtinem o histereza de 1°C
void IncalzireD()
{
if (tempS > tempC)
{
circularheater = HIGH;
fan = HIGH;
}
else
{
circularheater = LOW;
}
}
Functia de setare a canalelor la “Gatire Clasica”
Functia pentru setarea canalelor la functiei garire clasica, este o functie la care se folosesc elementele de incalzire superioare si inferioare fara ventilatie, de aceea in momentul in care temperatura citita este egala cu cea setata se opreste alimentarea ambelor elemente de incalzire, urmand sa pornesca din nou atunci cand temperatura citita scade sub cea setata
void IncalzireC()
{
if (tempS > tempC)
{
topheater = HIGH ;
bottomheater = HIGH ;
}
else
{
topheater = LOW ;
bottomheater = LOW ;
}
}
Functia de setare a canalelor la “Gatire Clasica Asistata”
Functia pentru setarea canalelor la functiei garire clasica asistata este similara cu cea de incalzire clasica, cu dieferenta ca la gatire clasica asistata ventilatorul ramane in functiune pe toata perioada de rulare al functiei, doar elementele de incalzire sunt oprite sau pornite in functie de temperatura
void IncalzireA()
{
if (tempS > tempC)
{
topheater = HIGH ;
bottomheater = HIGH ;
fan = HIGH;
}
else
{
topheater = LOW ;
bottomheater = LOW ;
}
}
Functia “Gatire Dinamica”
Functia “Gatire Dinamica” face urmatoarele operatiuni, seteaza temperatura de gatire la 170°C, timpul de gatire la 30min, aprinde lumina de backlight al display-ului, afiseaza numele functiei care ruleaza, afiseaza temperatura setata de gatire si trimite la serial valoarea temperaturii setate
void GatireD()
{
tempS = 170;
t.SetTimer(1800);
t.ResetTimer();
lcd.setBacklight(1);
lcd.setCursor(1, 0);
lcd.print("Gatire Dinamica");
lcd.setCursor(2, 1);
lcd.print(tempS);
lcd.setCursor(5, 1);
lcd.write(1);
lcd.setCursor(6, 1);
lcd.print("C");
Serial.print(tempS, DEC);
}
Functia “Gatire Clasica”
Functia “Gatire Clasica” face urmatoarele operatiuni, seteaza temperatura de gatire la 200°C, timpul de gatire la 30min, aprinde lumina de backlight al display-ului, afiseaza numele functiei care ruleaza, afiseaza temperatura setata de gatire si trimite la serial valoarea temperaturii setate
void GatireC()
{
tempS = 200;
t.ResetTimer();
t.SetTimer(1800);
lcd.setBacklight(1);
lcd.setCursor(1, 0);
lcd.print("Gatire Clasica");
lcd.setCursor(2, 1);
lcd.print(tempS);
lcd.setCursor(5, 1);
lcd.write(1);
lcd.setCursor(6, 1);
lcd.print("C");
Serial.print(tempS, DEC);
}
Functia “Gatire Clasica Asistata”
Functia “Gatire Clasica Asistata” face urmatoarele operatiuni, seteaza temperatura de gatire la 180°C, timpul de gatire la 30min, aprinde lumina de backlight al display-ului, afiseaza numele functiei care ruleaza, afiseaza temperatura de gatire si trimite la serial valoarea temperaturii setate
void GatireA()
{
tempS = 180;
t.ResetTimer();
t.SetTimer(1800);
lcd.setBacklight(1);
lcd.setCursor(0, 0);
lcd.print("Gatire C.asistat");
lcd.setCursor(2, 1);
lcd.print(tempS);
lcd.setCursor(5, 1);
lcd.write(1);
lcd.setCursor(6, 1);
lcd.print("C");
Serial.print(tempS, DEC);
}
Functia “Dezghetare”
Functia “Dezghetare” face urmatoarele operatiuni, seteaza temperatura de gatire la 30°C, timpul de gatire la 15min, aprinde lumina de backlight al display-ului, afiseaza numele functiei care ruleaza, afiseaza temperatura de gatire si trimite la serial valoarea temperaturii setate
void Dezghet()
{
tempS = 30;
t.ResetTimer();
t.SetTimer(900);
lcd.setBacklight(1);
lcd.setCursor(1, 0);
lcd.print("Dezghetare");
lcd.setCursor(2, 1);
lcd.print(tempS);
lcd.setCursor(4, 1);
lcd.write(1);
lcd.setCursor(5, 1);
lcd.print("C");
Serial.print(tempS, DEC);
}
Functia “Iesire”
Functia “ IESIRE ”executa oprirea programului si resetarea contoarelor
void iesire()
{
lcd.setBacklight(0);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Alimentat");
press1Count = 0;
press2Count = 0;
}
Functia “Start”
Functia “START” este functia care porneste rularea programului si ne afiseaza un mesaj de inceput.
void start()
{
lcd.setBacklight(1);
lcd.setCursor(1, 0);
lcd.print("Spor la gatit!");
lcd.setCursor(0, 1);
lcd.print("Alege mod gatire");
}
Functia “MOD”
Functia “MOD” este functia cere imi permite selectia de moduri de gatire prin derularea meniului, executa aceasta operatiune prin contorizarea numarului de apasari al butonului “MOD”, la o apasare ruleaza functia “Dezghetare”, la a doua apasare ruleaza functia “Gatire Dinamica”, la a treia apasare ruleaza functia “Gatire Clasica”, la a patra apasare ruleza functia “Gatire Clasica Asistata” si contorul revine la 0
void ButMod()
{
press2Count++;
switch (press2Count)
{
case 1:
lcd.clear();
//temp = 30;
Dezghet();
break;
case 2:
lcd.clear();
GatireD();
break;
case 3:
lcd.clear();
GatireC();
break;
case 4:
lcd.clear();
GatireA();
//press2Count = 0;
break;
case 5:
lcd.clear();
start();
press2Count = 0;
break;
}
}
Functia “Minus 5 minute”
Functia pentru setarea timpului cu 5 minute in minus fata de timpul ramas la apasarea butonul “ – ” al functiei ceas
void Minus5()
{
y = t.ShowMinutes() – 5;
t.SetTimer(t.ShowHours(), y, t.ShowSeconds());
}
Functia “Plus 5 minute”
Functia pentru setarea timpului cu 5 minute in plus fata de timpul ramas la apasarea butonul “ + ” al functiei ceas
void Plus5()
{
y = t.ShowMinutes() + 5;
t.SetTimer(t.ShowHours(), y, t.ShowSeconds());
}
Functia “ON/OFF”
Functia “ON/OFF ” este functia care porneste sau opreste cuptorul prin apasarea succesiva a butonului, la prima apasare porneste cuptorul la a doua il opreste la a teria il porneste iar si asa mai departe.
void ButOnOff()
{
press1Count++;
switch (press1Count)
{
case 1:
lcd.clear();
start();
break;
case 2:
lcd.clear();
iesire();
break;
}
}
Functia “Ceas”
Functia ceas este functia care executa numaratoare inversa in momentul in care este apelata, modul de functionare este urmatorul:
La initializarea variabilelor am initializat functia ceas ca numaratoare inversa
CountUpDownTimer t(DOWN);
folosim doua contoare unul curent si unu anterior si un interval, intervalul fiind tactul ceasului
contorul curent incepe sa numere milisecunde, cand diferenta dintre cele doua este egala cu intervalul, contorul anterior ia valoarea contorului curent, in acest fel contorul anterior isi modifica valoarea odata la 1000ms, ja fiecare modificare al contorului anterior afisez timpul in format “mm:ss”
void ceas()
{
if (press2Count != 0)
{
t.Timer();
unsigned long contorCurent = millis();
if (contorCurent – contorAnterior > interval)
{
contorAnterior = contorCurent;
lcd.setCursor(10, 1);
if (t.ShowMinutes() < 10)
{
lcd.print("0");
}
lcd.print(t.ShowMinutes());
lcd.print(":");
if (t.ShowSeconds() < 10)
{
lcd.print("0");
}
lcd.print(t.ShowSeconds());
}
else;
}
}
Functia “ButPlus()”
Functia pentru modificarea temperaturii initiale, crescator cu cate 1°C
void ButPlus()
{
if (press2Count != 1)
{
tempS = tempS + 1;
lcd.setCursor(2, 1);
lcd.print(tempS);
//Serial.print(" ");
Serial.print(tempS, DEC);
}
}
Functia “ButMinus()”
Functia pentru modificarea temperaturii initiale, descrescator cu cate 1°C
void ButMinus()
{
if (press2Count != 1)
{
tempS = tempS – 1;
lcd.setCursor(2, 1);
lcd.print(tempS);
//Serial.print(" ");
Serial.print(tempS, DEC);
}
}
Bucla Principala
Bucla principala functioneaza astfel:
Pornim functia cititre temperaturii,
Verific starea butonului numarul 1, daca este apasat rulez functia “ON/OFF”
Verific starea butonului numarul 2, verifica daca functia “ON/OFF” este in starea “ON” daca ambele conditii sunt indeplinite rulez functia “MOD”
Verific starea butonului numarul 3, daca este apasat rulez functia “ – °C ”
Verific starea butonului numarul 4, daca este apasat rulez functia “ + °C ”
Verific starea butonului numarul 5, verifica daca “ON/OFF” este in starea “ON” si daca am selectat mod gatire, cand toate conditii sunt indeplinite rulez functia “ – ”
Verific starea butonului numarul 6, verifica daca “ON/OFF” este in starea “ON” si daca am selectat mod gatire, cand toate conditii sunt indeplinite rulez functia “ + ”
void loop()
{
TemperaturaA();
if (button1.uniquePress())
{
ButOnOff();
}
if (button2.uniquePress())
{
if (press1Count != 0)
{
ButMod();
}
}
if (button3.uniquePress())
{
ButMinus();
}
if (button4.uniquePress())
{
ButPlus();
}
if (button5.uniquePress())
{
if (press1Count != 0)
{
if (press2Count != 0)
{
Minus5();
}
}
}
if (button6.uniquePress())
{
if (press1Count != 0)
{
if (press2Count != 0)
{
Plus5();
}
}
}
Interconectare
Datorita protocoalelor de comunicatie aplicatia android transmite caracterele in format ASCII, Arduino veridica aceasta valoare iar in functie de echivalent va rula functia corespunzatoare fiecarei valori, pentru a avea o corespoendenta intre setarile facute de la butoane si cele date de pe telefon mai trebue sa setam si contarele butoanelor “ON/OFF” si “MOD” conform functiei selectate
Inerconectare in cazul apasarii butonului “Defrost”
Cazul 1, la selectarea modului de gatire “Dezghetare” dupa ce sa verificat conexiunea, se trimite caracterul “d” si setam timpul implicit de dezghetare la 15 min,
Fig.16. Blocul de functii al butonului “Defrost”
caracterul “d” in format ASCII corespunde cu valoarea “100”, arduino verifica aceasta valoare si ruleaza functia “Dezghet”, seteaza valorea contorul butonului “ON/OFF” la valoarea 1 (ON) si contorul butonului “MOD” la valoare 1 echivalent al selectiei functiei “Dezghetare”
x = Serial.read();
if (x == 100)
{
lcd.clear();
Dezghet();
press1Count = 1;
press2Count = 1;
}
secventa de cod care interpreteaza caracterul “d” primit prin bluetooth
Inerconectare in cazul apasarii butonului “Dinamic Cooking”
Cazul 2, la selectarea modului de gatire “Gatire Dinamica” dupa ce sa verificat conexiunea, se trimite caracterul “f” si setam timpul implicit de gatire la 30 min,
Fig.17. Blocul de functii al butonului “Dinamic Cooking”
caracterul “f” in format ASCII corespunde cu valoarea “102”, arduino verifica aceasta valoare si ruleaza functia “Gatire Dinamica”, seteaza valorea contorul butonului “ON/OFF” la valoarea 1 (ON) si contorul butonului “MOD” la valoare 2 echivalent al selectiei functiei “Gatire Dinamica”
x = Serial.read();
if (x == 102)
{
lcd.clear();
GatireD();
press1Count = 1;
press2Count = 2;
}
secventa de cod care interpreteaza caracterul “f” primit prin bluetooth
Inerconectare in cazul apasarii butonului “Classic Cooking”
Cazul 3, la selectarea modului de gatire “Gatire Clasica” dupa ce sa verificat conexiunea, se trimite caracterul “n” si setam timpul implicit de gatire la 30 min,
Fig.18. Blocul de functii al butonului “Classic Cooking”
caracterul “n” in format ASCII corespunde cu valoarea “110”, arduino verifica aceasta valoare si ruleaza functia “Gatire Clasica”, seteaza valorea contorul butonului “ON/OFF” la valoarea 1 (ON) si contorul butonului “MOD” la valoare 3 echivalent al selectiei functiei “Gatire Clasica”
x = Serial.read();
if (x == 110)
{
lcd.clear();
GatireC();
press1Count = 1;
press2Count = 3;
}
secventa de cod care interpreteaza caracterul “n” primit prin bluetooth
Inerconectare in cazul apasarii butonului “Classic Cooking + fan”
Cazul 4, la selectarea modului de gatire “Gatire Clasica Asistata” dupa ce sa verificat conexiunea, se trimite caracterul “c” si setam timpul implicit de gatire la 30 min,
Fig.19. Blocul de functii al butonului “Classic Cooking + fan”
caracterul “c” in format ASCII corespunde cu valoarea “99”, arduino verifica aceasta valoare si ruleaza functia “Gatire Clasica Asistata”, seteaza valorea contorul butonului “ON/OFF” la valoarea 1 (ON) si contorul butonului “MOD” la valoare 4 echivalent al selectiei functiei “Gatire Clasica Asistata”
x = Serial.read();
if (x == 99)
{
lcd.clear();
GatireA();
press1Count = 1;
press2Count = 4;
}
secventa de cod care interpreteaza caracterul “c” primit prin bluetooth
Inerconectare in cazul apasarii butonului “Tplus”
Cazul 5, la selectarea modificarea temperaturii cu obtiunea “Temp + ” dupa ce sa verificat conexiunea, se trimite caracterul “+”
Fig.20. Blocul de functii al butonului “Tplus”
caracterul “+” in format ASCII corespunde cu valoarea “43”, arduino verifica aceasta valoare, mai verifica daca valorea contorul butonului “ON/OFF” este la valoarea 1 (ON) si daca functia “MOD” are mod de gatire selectat, daca sunt indeplinite aceste conditii ruleaza functia “ButPlus”
x = Serial.read();
if (x == 43)
{
if (press1Count != 0)
{
if( press2Count != 0)
{
ButPlus();
}
}
}
secventa de cod care interpreteaza caracterul “+” primit prin bluetooth
Inerconectare in cazul apasarii butonului “Tminus”
Cazul 6, la selectarea modificarii temperaturii cu obtiunea “Temp – ” dupa ce sa verificat conexiunea, se trimite caracterul “-”
Fig.21. Blocul de functii al butonului “Tminus”
caracterul “-” in format ASCII corespunde cu valoarea “45”, arduino verifica aceasta valoare, mai verifica daca valorea contorul butonului “ON/OFF” este la valoarea 1 (ON) si daca functia “MOD” are mod de gatire selectat, daca sunt indeplinite aceste conditii ruleaza functia “ButMinus”
x = Serial.read();
if (x == 43)
{
if (press1Count != 0)
{
if( press2Count != 0)
{
ButMinus();
}
}
}
secventa de cod care interpreteaza caracterul “-” primit prin bluetooth
Inerconectare in cazul apasarii butonului “Plus5minute”
Cazul 7, la selectarea modificarii timpului cu obtiunea “+5min ” dupa ce sa verificat conexiunea, se trimite caracterul “p”
Fig.22. Blocul de functii al butonului “Plus5min”
caracterul “p” in format ASCII corespunde cu valoarea “112”, arduino verifica aceasta valoare, mai verifica daca valorea contorul butonului “ON/OFF” este la valoarea 1 (ON) si daca functia “MOD” are mod de gatire selectat, daca sunt indeplinite aceste conditii ruleaza functia “Plus5”
x = Serial.read();
if (x == 112)
{
if (press1Count != 0)
{
if( press2Count != 0)
{
Plus5();
}
}
}
secventa de cod care interpreteaza caracterul “p” primit prin bluetooth
Inerconectare in cazul apasarii butonului “Minus5minute”
Cazul 8, la selectarea modificarii timpului cu obtiunea “-5min ” dupa ce sa verificat conexiunea, se trimite caracterul “r”
Fig.23. Blocul de functii al butonului “Minus5min”
caracterul “r” in format ASCII corespunde cu valoarea “114”, arduino verifica aceasta valoare, mai verifica daca valorea contorul butonului “ON/OFF” este la valoarea 1 (ON) si daca functia “MOD” are mod de gatire selectat, daca sunt indeplinite aceste conditii ruleaza functia “Minus5”
x = Serial.read();
if (x == 114)
{
if (press1Count != 0)
{
if( press2Count != 0)
{
Minus5();
}
}
}
secventa de cod care interpreteaza caracterul “r” primit prin bluetooth
Inerconectare in cazul apasarii butonului “Power”
Cazul 9, la apasarea butonului inchidere se trimite caracterul “q” si se inchide aplicatia
Fig.24. Blocul de functii al butonului “Power”
caracterul “q” in format ASCII corespunde cu valoarea “113”, arduino verifica aceasta valoare, mai verifica daca valorea contorul butonului “ON/OFF” este la valoarea 1 (ON) si daca functia “MOD” are mod de gatire selectat, daca sunt indeplinite aceste conditii ruleaza functia “iesire”
x = Serial.read();
if (x == 113)
{
if (press1Count != 0)
{
if( press2Count != 0)
{
iesire();
}
}
}
secventa de cod care interpreteaza caracterul “q” primit prin bluetooth
La finalul buclei verificam timer-ul, cand ajunge la 0 afiseaza mesaj de intampinare asteapta 3 secunde dupa care executa functia de iesire
if (press2Count != 0)
{
ceas();
if (t.TimeCheck(0, 0, 0))
{
lcd.setCursor(1, 1);
lcd.print("Preparatul este gata");
delay(3000) ;
iesire();
}
}
Lista de materiale
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Aplicatie Integrata In C++ Pentru Utilizarea Cuptorului Electric Domestic (ID: 149508)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
