Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:apredescu:garduino [2023/05/30 01:28]
flavia.craciun [Concluzii]
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ălduroasecare 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 ​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 ​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 =====
  
-In ciuda //​numeroaselor//​ dificultati pe care le-am intampinat (senzori stricati, pompa infundata, bug-uri in cod, mini inundatii etc.), proiectul ​fost unul foarte interesant si extrem de satisfacator odata cu ajungerea ​la produsul final. Fiind primul proiect la care a trebuit sa lucrez de una singura si la partile hardware, software si la design, am avut de-a face cu destul ​de multe incercari, ​pe care fie am reusit sa le rezolv, fie pentru care am fost nevoita sa caut alternative.+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.
  
-In primul ​rand, pentru partea de hardware a fost esential ​faptul ​ca am comandat piesele din timp, intrucat ​unele din acestea au ajuns defecte ​si au trebuit comandate din nou. De asemenea, faptul ​ca am inceput ​implementarea suficient de devreme m-a ajutat mult in momentul ​in care am realizat ​ca aveam cateva ​componente ​lipsa (rezistente, fire). Din procesul de legare a componentelor am invatat cat de importanta ​e alimentarea la sursa de tensiune ​potrivita si cum interfereaza alimentarea necorespunzatoare ​cu restul componentelor+Î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 registrii si intreruperi si debugging-ul problemelor generate in timpul acestui proces. De asemenea stabilirea pragurilor pentru valorile senzorilor a fost putin mai delicata, deoarece senzorii nu au o acuratete prea buna, deci valorile definite nu necorespund neaparat cu valori reale. +
- +
-Stabilirea design-ului a fost o parte foarte distractiva,​ avand cel putin trei idei diferite de implementare. Intr-un final am luat decizia design-ului final punand in balanta atat practicabilitatea,​ cat si existenta unui model care sa scoata in evidenta planta.+
  
 +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 aici: {{garduino_demo.zip}} (nu am putut uploada direct videoclipul)+Un demo de funcționare ​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 178: 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
pm/prj2023/apredescu/garduino.1685399310.txt.gz · Last modified: 2023/05/30 01:28 by flavia.craciun
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0