This shows you the differences between two versions of the page.
pm:prj2023:apredescu:garduino [2023/05/30 00:47] flavia.craciun [Download] |
pm:prj2023:apredescu:garduino [2023/05/30 09:08] (current) flavia.craciun |
||
---|---|---|---|
Line 10: | Line 10: | ||
- | Garduino își propune să rezolve această problemă. Proiectul constă într-un sistem automatizat de întreținere a plantelor și de monitorizare a mediului ambiant în care acestea se află, urmărind parametrii precum temperatura și intensitatea luminoasă. Astfel, acesta reprezintă o soluție ideală pentru îngrijirea plantelor de interior, reducând riscul neglijenței și creând un mediu optim pentru creșterea și dezvoltarea lor. | + | Garduino își propune să rezolve această problemă. Proiectul constă într-un sistem automatizat de întreținere a plantelor și de monitorizare a mediului ambiant în care acestea se află, urmărind parametri precum temperatura și intensitatea luminoasă. Astfel, acesta reprezintă o soluție ideală pentru îngrijirea plantelor de interior, reducând riscul neglijenței și creând un mediu optim pentru creșterea și dezvoltarea lor. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Sistemul va folosi date primite de la diverși senzori pentru a monitoriza parametrii mediului ambiant și a satisface nevoile plantei. Cele două funcționalități principale constau în automatizarea irigării plantei și afișarea pe ecranul LCD a unor informații legate de încăperea în care se află planta. | + | Sistemul va folosi date primite de la diverși senzori pentru a monitoriza parametrii mediului ambiant și a satisface nevoile plantei. Cele două funcționalități principale constau în automatizarea irigării plantei și afișarea pe ecranul LCD a unor informații legate de condițiile din încăperea în care se află planta. |
Sistemul va utiliza date primite de la senzorii de umiditate a solului, de luminozitate și de temperatură și umiditate, iar la nevoie va activa automat o pompă pentru udarea plantei. În momentul în care parametrii detectați de senzor vor fi reglați, sistemul va înceta acționarea pompei. | Sistemul va utiliza date primite de la senzorii de umiditate a solului, de luminozitate și de temperatură și umiditate, iar la nevoie va activa automat o pompă pentru udarea plantei. În momentul în care parametrii detectați de senzor vor fi reglați, sistemul va înceta acționarea pompei. | ||
Line 49: | Line 49: | ||
Senzorul de temperatură a înregistrat citiri în intervalul 20-25 de grade Celsius și un nivel constant de umiditate de aproximativ 50%, valorile rămânând relativ stabile pe toată perioada simulării. Senzorul de umiditate a solului și senzorul de intensitate luminoasă au afișat citiri cuprinse în intervalul 0-1023 de unități, care vor fi mapate într-un interval de 0-100 pentru a reprezenta procente. | Senzorul de temperatură a înregistrat citiri în intervalul 20-25 de grade Celsius și un nivel constant de umiditate de aproximativ 50%, valorile rămânând relativ stabile pe toată perioada simulării. Senzorul de umiditate a solului și senzorul de intensitate luminoasă au afișat citiri cuprinse în intervalul 0-1023 de unități, care vor fi mapate într-un interval de 0-100 pentru a reprezenta procente. | ||
- | Modulul releu a funcționat conform intenției, activând pompa de apă în funcție de relația dintre datele preluate de senzori și valorile de prag predefinite, asigurând o irigare corespunzătoare. Ecranul LCD a oferit feedback în timp real, prezentând citirile senzorului de temperatura și umiditate, facilitând astfel monitorizarea sistemului. | + | Modulul releu a funcționat conform intenției, activând pompa de apă în funcție de relația dintre datele preluate de senzori și valorile de prag predefinite, asigurând o irigare corespunzătoare. Ecranul LCD a oferit feedback în timp real, prezentând citirile senzorului de temperatură și umiditate, facilitând astfel monitorizarea sistemului. |
În general, componentele hardware au demonstrat performanță și interacțiune fiabile, validând funcționalitatea sistemului Garduino. | În general, componentele hardware au demonstrat performanță și interacțiune fiabile, validând funcționalitatea sistemului Garduino. | ||
Line 61: | Line 61: | ||
</note> | </note> | ||
- | === Diagrama logica === | + | === Diagrama logică === |
{{schema_logica_garduino.jpg?700x600}} | {{schema_logica_garduino.jpg?700x600}} | ||
Line 68: | Line 68: | ||
Pentru a avea o modularitate mai bună și a facilita reutilizabilitatea codului, programul a fost organizat în mai multe funcții: | Pentru a avea o modularitate mai bună și a facilita reutilizabilitatea codului, programul a fost organizat în mai multe funcții: | ||
- | * **setup()** \\ Este inițializat senzorul DHT și sunt configurate afișajul LCD-ului și ADC-ul. De asemenea, este definit pinul de ieșire al pompei și se asigură faptul că aceasta este oprită. Întreruperile sunt dezactivate temporar în timpul inițializării (//init_timer()//) și configurării (//configure_timer()//) timere-lor, apoi sunt reactivate. \\ \\ Unul dintre timere este folosit de către convertorul analog-digital pentru a citi periodic valorile senzorilor de intensitate luminoasă și umiditate a solului, iar celălalt este folosit pentru a temporiza funcționarea pompei. Acesta va înregistra intervalul de timp de când a fost pornită pompa, iar în cazul în care aceasta depășește un anumit prag (raportat la un interval de timp mediu de funcționare în condiții normale), va opri pompa pentru a nu iriga planta mai mult decât este necesar. \\ \\ | + | * **setup()** \\ Este inițializat senzorul DHT și sunt configurate afișajul LCD-ului și ADC-ul. De asemenea, este definit pinul de ieșire al pompei și se asigură faptul că aceasta este oprită. Întreruperile sunt dezactivate temporar în timpul inițializării (//init_timer()//) și configurării (//configure_timer()//) timere-lor, apoi sunt reactivate. \\ \\ Unul dintre timere este folosit de către convertorul analog-digital pentru a citi periodic valorile senzorilor de intensitate luminoasă și umiditate a solului, iar celălalt este folosit pentru a temporiza funcționarea pompei. Acesta va înregistra intervalul de timp de când a fost pornită pompa, iar în cazul în care depășește un anumit prag (raportat la un interval de timp mediu de funcționare în condiții normale), va opri pompa pentru a nu iriga planta mai mult decât este necesar. \\ \\ |
- | * **loop()** \\ Controlează fluxul principal de execuție și apelează o serie de funcții care implementează funcționalitățile de baza: citirea senzorilor, afișarea pe LCD, verificarea valorilor citite de senzori pentru a controla starea pompei și monitorizarea intervalului de funcționare a acesteia. \\ \\ <code C> | + | * **loop()** \\ Controlează fluxul principal de execuție și apelează o serie de funcții care implementează funcționalitățile de bază: citirea senzorilor, afișarea pe LCD, verificarea valorilor citite de senzori pentru a controla starea pompei și monitorizarea intervalului de funcționare a acesteia. \\ \\ <code C> |
void loop() { | void loop() { | ||
Line 79: | Line 79: | ||
lcd.clear(); | lcd.clear(); | ||
lcd.setCursor(0, 0); | lcd.setCursor(0, 0); | ||
- | lcd.print("Pump broken!"); | + | lcd.print("Broken pump!"); |
} else { | } else { | ||
// Read sensor values | // Read sensor values | ||
Line 114: | Line 114: | ||
</code> | </code> | ||
* **printStatus()** \\ Utilizată pentru afișarea pe LCD atât a valorilor temperaturii și umidității aerului, cât și a stării pompei și a timpului său de funcționare, după caz. \\ \\ | * **printStatus()** \\ Utilizată pentru afișarea pe LCD atât a valorilor temperaturii și umidității aerului, cât și a stării pompei și a timpului său de funcționare, după caz. \\ \\ | ||
- | * **checkConditions()** \\ Pe baza unor praguri predefinite, se verifică valorile citite de senzori și este controlată starea pompei în mod corespunzător. Mai întâi este verificată valoarea umidității solului întrucât această este cea mai importantă, apoi temperatura și umiditatea aerului și ulterior intensitatea luminoasă. Cele două din urmă asigură faptul că irigația are loc într-un moment potrivit al zilei, evitând orele cele mai călduroase care pot cauza arderea frunzelor plantei. \\ \\ | + | * **checkConditions()** \\ Pe baza unor praguri predefinite, se verifică valorile citite de senzori și este controlată starea pompei în mod corespunzător. Mai întâi este verificată valoarea umidității solului, întrucât aceasta este cea mai importantă, apoi temperatura și umiditatea aerului și ulterior intensitatea luminoasă. Cele două din urmă asigură faptul că irigația are loc într-un moment potrivit al zilei, evitând orele cele mai călduroase, care pot cauza arderea frunzelor plantei. \\ \\ |
- | * **startPump()** și **stopPump()** \\ Controlează modul de funcționare al pompei, setând pinul de ieșire al acesteia pe LOW, respectiv HIGH și afișează statusul pompei în momentul pornirii sau opririi acesteia. \\ \\ | + | * **startPump()** și **stopPump()** \\ Controlează modul de funcționare a pompei, setând pinul de ieșire al acesteia pe LOW, respectiv HIGH și afișează statusul pompei în momentul pornirii sau opririi acesteia. \\ \\ |
- | * **checkPump()** \\ Implemenetează o verificare suplimentară a funcționarii pompei pentrul cazul în care senzorii se defectează. Astfel, dacă timpul curent de funcționare al pompei depășește 3 secunde (timpul mediu de funcționare în condiții normale), aceasta va fi oprită pentru a nu pune o cantitate prea mare de apă plantei. | + | * **checkPump()** \\ Implementează o verificare suplimentară a funcționării pompei pentrul cazul în care senzorii se defectează. Astfel, dacă timpul curent de funcționare a pompei depășește 3 secunde (timpul mediu de funcționare în condiții normale), aceasta va fi oprită pentru a nu pune o cantitate prea mare de apă plantei. |
Line 127: | Line 127: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | **TO-DO** | + | Realizarea acestui proiect mi-a pus la încercare o mulțime de abilități și m-a pus într-o serie de situații pe baza cărora am reușit să trag concluzii importante pentru viitoarele proiecte la care voi lucra. |
+ | În primul rând, pentru partea de hardware a fost esențial faptul că am comandat piesele din timp, întrucât unele dintre acestea au ajuns defecte și au trebuit comandate din nou. De asemenea, faptul că am început implementarea suficient de devreme m-a ajutat mult în momentul în care am realizat că aveam câteva componente lipsă (rezistențe, fire). Din procesul de legare a componentelor am învățat cât de importantă e alimentarea la sursa de tensiune potrivită și cum o alimentare necorespunzătoare interferează cu restul componentelor. | ||
+ | Pentru partea de software, cel mai complicat a fost lucrul cu regiștrii și întreruperi și debugging-ul problemelor generate în timpul acestui proces. De asemenea, stabilirea pragurilor pentru valorile senzorilor a fost puțin mai delicată, deoarece senzorii nu au o acuratețe prea bună, deci valorile definite nu corespund neapărat cu valori reale. | ||
+ | |||
+ | Stabilirea design-ului a fost o parte foarte distractivă, trebuind să trec prin cel puțin trei idei diferite de implementare înainte de a alege o formă finală. Până la urmă decizia design-ului final a fost luată punând în balanță atât aspectul practic, cât și existența unui model care să scoată în evidență planta. | ||
+ | |||
+ | În ciuda //numeroaselor// dificultăți pe care le-am întâmpinat (senzori stricați, pompă înfundată, bug-uri în cod, care au provocat ocazional mini inundații etc.), proiectul a fost unul foarte interesant și extrem de satisfăcător odată cu ajungerea la produsul final. Fiind primul proiect la care a trebuit să lucrez individual și la părțile hardware, software și la design, am întâmpinat diverse încercări, pe care fie am reușit să le rezolv, fie pentru care am fost nevoită să caut alternative. | ||
===== Download ===== | ===== Download ===== | ||
Atât codul sursă, cât și pozele cu schemele proiectului pot fi descărcate aici: {{garduino.zip}} | Atât codul sursă, cât și pozele cu schemele proiectului pot fi descărcate aici: {{garduino.zip}} | ||
- | Un demo de funcționare al proiectului poate fi descărcat (nu am putut uploada direct videoclipul) aici: {{garduino_demo.zip}} | + | Un demo de funcționare a proiectului poate fi descărcat aici: {{garduino_demo.zip}} (nu am putut uploada direct videoclipul) |
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||
Line 171: | Line 177: | ||
* Citire senzor DHT11: https://www.youtube.com/watch?v=yaOF9mILrRg | * Citire senzor DHT11: https://www.youtube.com/watch?v=yaOF9mILrRg | ||
- | * Intreruperi: http://www.gammon.com.au/interrupts | + | * Întreruperi: http://www.gammon.com.au/interrupts |
* Arduino UNO R3 datasheet: https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf | * Arduino UNO R3 datasheet: https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf | ||
- | * Laborator intreruperi: https://ocw.cs.pub.ro/courses/pm/lab/lab2-2023 | + | * Laborator întreruperi: https://ocw.cs.pub.ro/courses/pm/lab/lab2-2023 |
* Laborator timere: https://ocw.cs.pub.ro/courses/pm/lab/lab3-2023 | * Laborator timere: https://ocw.cs.pub.ro/courses/pm/lab/lab3-2023 | ||
* Laborator ADC: https://ocw.cs.pub.ro/courses/pm/lab/lab4-2022 | * Laborator ADC: https://ocw.cs.pub.ro/courses/pm/lab/lab4-2022 |