Differences

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

Link to this comparison view

pm:prj2026:victor.stoica0203:stefan.gherghel [2026/05/18 12:29]
stefan.gherghel [Software Design]
pm:prj2026:victor.stoica0203:stefan.gherghel [2026/05/19 21:42] (current)
stefan.gherghel [Bill of Materials]
Line 42: Line 42:
   * în cazul unei baterii descărcate (LED-ul RGB pulsează roșu).   * în cazul unei baterii descărcate (LED-ul RGB pulsează roșu).
  
-**Mod automat (bazat pe umiditate)**+**Mod automat (bazat pe umiditate) ​- HUMIDITY**
  
 În acest mod, sistemul realizează udarea în funcție de nivelul de umiditate al solului. În acest mod, sistemul realizează udarea în funcție de nivelul de umiditate al solului.
Line 51: Line 51:
  
  
-**Mod periodic (pe bază de timp)**+**Mod periodic (pe bază de timp) - TIMED**
  
 În acest mod, udarea se realizează la un interval regulat de timp, indiferent de valoarea umidității. În acest mod, udarea se realizează la un interval regulat de timp, indiferent de valoarea umidității.
Line 60: Line 60:
  
  
-**Mod manual**+**Mod manual ​- MANUAL**
  
 În acest mod, utilizatorul are control direct asupra pompei. În acest mod, utilizatorul are control direct asupra pompei.
Line 67: Line 67:
  
  
-**Meniuri**+**Afișare**
  
 Sunt prezente două tipuri de meniuri afișate pe ecranul OLED (schimbarea lor are loc prin apăsarea unui buton). Sunt prezente două tipuri de meniuri afișate pe ecranul OLED (schimbarea lor are loc prin apăsarea unui buton).
-  * **Meniul ​principal:​** afișează temperatura,​ nivelul umidității,​ modul de funcționare și tensiunea bateriei. +  * **Ecran principal ​- STANDARD:** afișează temperatura,​ nivelul umidității,​ modul de funcționare și tensiunea bateriei. 
-  * **Meniul ​de setări:** afișeaza listele de valori prestabilitate pentru intervalul de timp de udare și pragul de umiditate. Prin utilizarea a doua butoane se pot seta noile valori.+  * **Ecranul ​de setări ​- MENU:** afișeaza listele de valori prestabilitate pentru intervalul de timp de udare și pragul de umiditate. Prin utilizarea a doua butoane se pot seta noile valori
 + 
 +Al treilea ecran - **WATERING** - este afișat atunci când display-ul nu este în Standby și are loc o udare.
  
 **Standby** **Standby**
Line 92: Line 94:
 | Senzor nivel lichid ​                    | 1     | [[https://​sigmanortec.ro/​Senzor-nivel-apa-lichid-p125423486|Link]]|1.78 | | Senzor nivel lichid ​                    | 1     | [[https://​sigmanortec.ro/​Senzor-nivel-apa-lichid-p125423486|Link]]|1.78 |
 | Breadboard ​                             | 1     | [[https://​sigmanortec.ro/​Breadboard-830-puncte-MB-102-p125923983?​SubmitCurrency=1&​id_currency=2&​gad_source=1&​gad_campaignid=23069763085&​gbraid=0AAAAAC3W72PBuF6Df89seiG5IBgyKFSyA&​gclid=CjwKCAjw5NvPBhAoEiwA_2egfvnjWx796G7XdKClzlANxI8qtKPl7Z6DwUZmnwgj5yPg7DoV3nerURoCL4oQAvD_BwE| Link]] |11.30 ​       | | Breadboard ​                             | 1     | [[https://​sigmanortec.ro/​Breadboard-830-puncte-MB-102-p125923983?​SubmitCurrency=1&​id_currency=2&​gad_source=1&​gad_campaignid=23069763085&​gbraid=0AAAAAC3W72PBuF6Df89seiG5IBgyKFSyA&​gclid=CjwKCAjw5NvPBhAoEiwA_2egfvnjWx796G7XdKClzlANxI8qtKPl7Z6DwUZmnwgj5yPg7DoV3nerURoCL4oQAvD_BwE| Link]] |11.30 ​       |
-| Buton PCB                               ​| ​    | [[https://​sigmanortec.ro/​buton-mini-6x6x5-4-pini?​SubmitCurrency=1&​id_currency=2&​gad_source=1&​gad_campaignid=23069763085&​gbraid=0AAAAAC3W72PBuF6Df89seiG5IBgyKFSyA&​gclid=CjwKCAjw5NvPBhAoEiwA_2egfmsItqpvT16gITwAPm81dIsD8kGZn3W0oWMjqXBfd4HNz3I-ESa7sxoCvIkQAvD_BwE| Link]]|0.36 ​        |+| Buton PCB                               ​| ​    | [[https://​sigmanortec.ro/​buton-mini-6x6x5-4-pini?​SubmitCurrency=1&​id_currency=2&​gad_source=1&​gad_campaignid=23069763085&​gbraid=0AAAAAC3W72PBuF6Df89seiG5IBgyKFSyA&​gclid=CjwKCAjw5NvPBhAoEiwA_2egfmsItqpvT16gITwAPm81dIsD8kGZn3W0oWMjqXBfd4HNz3I-ESa7sxoCvIkQAvD_BwE| Link]]|0.36 ​        |
 | LED RGB                                 | 1     | [[https://​sigmanortec.ro/​LED-RGB-5mm-4-pini-Anod-comun-p126008495| Link]]|1.51 | | LED RGB                                 | 1     | [[https://​sigmanortec.ro/​LED-RGB-5mm-4-pini-Anod-comun-p126008495| Link]]|1.51 |
 | Suport 4AA                              | 1     | [[https://​sigmanortec.ro/​Suport-4-baterii-AA-cu-capac-si-intrerupator-p172447738 | Link]]|6.34 ​        | | Suport 4AA                              | 1     | [[https://​sigmanortec.ro/​Suport-4-baterii-AA-cu-capac-si-intrerupator-p172447738 | Link]]|6.34 ​        |
 | Fire Dupont 10cm Tata-Tata ​            ​|TBD ​   | [[https://​sigmanortec.ro/​40-fire-Dupont-10cm-Tata-Tata-p210856288 | Link]]|0.15| | Fire Dupont 10cm Tata-Tata ​            ​|TBD ​   | [[https://​sigmanortec.ro/​40-fire-Dupont-10cm-Tata-Tata-p210856288 | Link]]|0.15|
 | Fire Dupont 20cm Tata-Mama ​            ​|TBD ​   | [[https://​sigmanortec.ro/​40-Fire-Dupont-20cm-Tata-Mama-p210854317 | Link]]|0.25| | Fire Dupont 20cm Tata-Mama ​            ​|TBD ​   | [[https://​sigmanortec.ro/​40-Fire-Dupont-20cm-Tata-Mama-p210854317 | Link]]|0.25|
-| Rezistență 470                          |  | [[https://​sigmanortec.ro/​Rezistor-p126025265| Link]]|0.15 ​        |+| Rezistență 470                          |  | [[https://​sigmanortec.ro/​Rezistor-p126025265| Link]]|0.15 ​        |
 | Diodă 1N4007 ​                           | 1  | [[https://​www.optimusdigital.ro/​ro/​componente-electronice-diode/​7457-dioda-1n4007.html?​search_query=dioda+1n4007&​results=3| Link]]|0.49 ​       | | Diodă 1N4007 ​                           | 1  | [[https://​www.optimusdigital.ro/​ro/​componente-electronice-diode/​7457-dioda-1n4007.html?​search_query=dioda+1n4007&​results=3| Link]]|0.49 ​       |
 | Rezistență 10k                          | 2  | [[https://​sigmanortec.ro/​Rezistor-p126025265| Link]]|0.15 ​        | | Rezistență 10k                          | 2  | [[https://​sigmanortec.ro/​Rezistor-p126025265| Link]]|0.15 ​        |
Line 105: Line 107:
 ==== Schema electrică ==== ==== Schema electrică ====
  
-{{ :​pm:​prj2026:​victor.stoica0203:​schema_e_gherghel_stefan.png?600 }}+{{ :​pm:​prj2026:​victor.stoica0203:​final_scheme_gherghel_2.png?600 }}
 ==== Pinout (principale conexiuni) ==== ==== Pinout (principale conexiuni) ====
  
Line 135: Line 137:
 ^ Pin componentă ^ Pin arduino ​ ^Pin microcontroller ​     ^ Mențiuni ​        ^ ^ Pin componentă ^ Pin arduino ​ ^Pin microcontroller ​     ^ Mențiuni ​        ^
 |  Anod            |  5V       ​| ​                        ​| ​         | |  Anod            |  5V       ​| ​                        ​| ​         |
-|  Red             |  11       ​| ​ PB3                       ​| ​ PWM        | +|  Red             ​| ​ 10       ​| ​ PB2                       ​| ​ PWM        |
-|  Green             |  10       ​| ​ PB2                       ​| ​ PWM        |+
 |  Blue             ​| ​ 9       ​| ​ PB1                       ​| ​ PWM        | |  Blue             ​| ​ 9       ​| ​ PB1                       ​| ​ PWM        |
  
Line 177: Line 178:
 |  BTN2            |  3       ​| ​ PD3                       ​| ​  ​INT1 ​      | |  BTN2            |  3       ​| ​ PD3                       ​| ​  ​INT1 ​      |
 |  BTN3             ​| ​ 4       ​| ​ PD4                       ​| ​ PCINT20 ​       | |  BTN3             ​| ​ 4       ​| ​ PD4                       ​| ​ PCINT20 ​       |
 +|  BTN4             ​| ​ 7       ​| ​ PD7                       ​| ​        |
 Butoanele au activată rezistența de pull-up. Butoanele au activată rezistența de pull-up.
  
Line 185: Line 186:
  
  
-**Mediu de dezvoltare:​** Arduino IDE (voiam să utilizez PlatformIO pentru a lucra ca la laborator dar am ales Arduino IDE pentru a utiliza bibliotecile Adafruit ale ecranului OLED) +**Mediu de dezvoltare:​**  
 +  ​* Arduino IDE (voiam să utilizez PlatformIO pentru a lucra ca la laborator dar am ales Arduino IDE pentru a utiliza bibliotecile Adafruit ale ecranului OLED) 
  
 **Biblioteci utilizate:​** **Biblioteci utilizate:​**
-  * Adafruit_GFX +  * ''​Adafruit_GFX''​ 
-  * Adafruit_SSD1306 -  +  * ''​Adafruit_SSD1306'' ​oferă funcții optimizate pentru afișarea a diferite forme geometrice și a bitmap-urilor. 
-  * EEPROM - +  *'' ​EEPROM'' ​oferă metoda ''​update()''​ pentru a preveni scrierile redundante.
  
 **Funcționare:​** **Funcționare:​**
Line 198: Line 200:
     * Pentru a elimina zgomotul electromagnetic generat de comutația releului, citirea senzorilor analogici se face cu funcția ''​getFilteredADC()'',​ care efectuează un set de citiri succesive, le sortează crescător, elimină extremele și calculează media aritmetică a valorilor rămase. ​     * Pentru a elimina zgomotul electromagnetic generat de comutația releului, citirea senzorilor analogici se face cu funcția ''​getFilteredADC()'',​ care efectuează un set de citiri succesive, le sortează crescător, elimină extremele și calculează media aritmetică a valorilor rămase. ​
     * Înainte de a cupla releul pompei se apelează funcțiile ''​checkWaterLevel()''​ și ''​checkVoltage()''​. Acestea forțează citiri ADC pentru a se asigura că este bateria este incărcată și este suficientă apă în rezervor. În funcție de starea de eroare LED-ul trece în ''​BLUE_FADE''​ (apă insuficientă) sau ''​RED_FADE''​ (baterie descărcată).     * Înainte de a cupla releul pompei se apelează funcțiile ''​checkWaterLevel()''​ și ''​checkVoltage()''​. Acestea forțează citiri ADC pentru a se asigura că este bateria este incărcată și este suficientă apă în rezervor. În funcție de starea de eroare LED-ul trece în ''​BLUE_FADE''​ (apă insuficientă) sau ''​RED_FADE''​ (baterie descărcată).
-    * Funcția ''​checkReturnFromError()''​ verifică în fundal revenirea la parametrii normali (citiri ADC periodice).+    * Funcția ''​checkReturnFromError()''​ verifică în fundal revenirea la parametrii normali (citiri ADC periodice) ​pentru stingerea LED-ului la puțin timp după soluționarea problemei.
   * **Moduri de funcționare:​**   * **Moduri de funcționare:​**
     * **HUMIDITY:​** Sistemul compară umiditatea curentă a solului cu pragul selectat din listă ''​{50%,​ 60%, 70%, 80%}''​. Dacă umiditatea scade sub prag se declanșează udarea. Include o perioadă de pauză ''​humidityCooldownTime''​ pentru a permite apei să se propage uniform în sol.     * **HUMIDITY:​** Sistemul compară umiditatea curentă a solului cu pragul selectat din listă ''​{50%,​ 60%, 70%, 80%}''​. Dacă umiditatea scade sub prag se declanșează udarea. Include o perioadă de pauză ''​humidityCooldownTime''​ pentru a permite apei să se propage uniform în sol.
Line 210: Line 212:
   * **Interacțiunea cu utilizatorul:​**   * **Interacțiunea cu utilizatorul:​**
     * Întreruperile sunt configurate cu regiștrii iar cele externe sunt pe frontul descrescător.     * Întreruperile sunt configurate cu regiștrii iar cele externe sunt pe frontul descrescător.
-    * Pentru evitarea declanșărilor neintenționate este utilizată variabila ''​lastRelayCommand''​.+    * Pentru evitarea declanșărilor neintenționate este utilizată variabila ''​lastRelayCommand'' ​în interiorul ISR.
     * ''​INT0 - BTN1'':​ Schimbă modul de funcționare în ecranul ''​STANDARD''​ sau selectează parametrul de modificat în ecranul ''​MENIU''​.     * ''​INT0 - BTN1'':​ Schimbă modul de funcționare în ecranul ''​STANDARD''​ sau selectează parametrul de modificat în ecranul ''​MENIU''​.
     * ''​INT1 - BTN2'':​ Incrementează ciclic indexul pragului de umiditate sau al intervalului de timp în ecranul ''​MENIU''​.     * ''​INT1 - BTN2'':​ Incrementează ciclic indexul pragului de umiditate sau al intervalului de timp în ecranul ''​MENIU''​.
Line 220: Line 222:
     * Prin intermediul funcției ''​updateEEPROM()'',​ stările curente ale variabilelor - ''​mode'',​ ''​humidityIndex''​ și ''​timedIndex''​ - sunt salvate automat în memorie (''​EEPROM_MODE_ADDR'',​ ''​EEPROM_HUMIDITY_ADDR'',​ ''​EEPROM_TIMED_ADDR''​). Această scriere se efectuează doar în momentul în care utilizatorul părăsește ecranul de ''​MENIU''​ sau când sistemul intră automat în starea de ''​Standby'',​ utilizând metoda ''​EEPROM.update()''​ pentru a scrie datele doar dacă acestea s-au modificat.     * Prin intermediul funcției ''​updateEEPROM()'',​ stările curente ale variabilelor - ''​mode'',​ ''​humidityIndex''​ și ''​timedIndex''​ - sunt salvate automat în memorie (''​EEPROM_MODE_ADDR'',​ ''​EEPROM_HUMIDITY_ADDR'',​ ''​EEPROM_TIMED_ADDR''​). Această scriere se efectuează doar în momentul în care utilizatorul părăsește ecranul de ''​MENIU''​ sau când sistemul intră automat în starea de ''​Standby'',​ utilizând metoda ''​EEPROM.update()''​ pentru a scrie datele doar dacă acestea s-au modificat.
   * **Temporizare:​**   * **Temporizare:​**
-    * Pentru gestionarea intervalelor de timp în bucla principală ​este apelat ​''​millis()''​, rezultatul fiind salvat ​în variabila ''​currentMillis'' ​care este folosită de restul funcțiilor (și de ISR-uri).+    * Pentru gestionarea intervalelor de timp este folosit un timer software implementat cu ajutorul ​''​Timer2'' ​configurat ​în modul ''​CTC'',​ întreruperea ''​TIMER2_COMPA_vect''​ incrementând ​variabila ''​currentMillis'' ​la 1ms.
   * **PWM:**   * **PWM:**
-    * Pentru PWM pe LED-ul RGB este folosită funcția din biblioteca Arduino ​''​analogWrite()''​.+    * Pentru PWM pe LED-ul RGB este folosit ​PWM hardware configurat prin ''​Timer1''​ (Fast PWM pe canalele ''​OC1A''​ și ''​OC1B''​.
  
 **Calibrare senzori:** **Calibrare senzori:**
Line 234: Line 236:
   * **PWM:** obținerea efectului de luminozitate variabilă pe LED-ul RGB.   * **PWM:** obținerea efectului de luminozitate variabilă pe LED-ul RGB.
   * **Întreruperi:​** evitarea polling-ului pe butoane.   * **Întreruperi:​** evitarea polling-ului pe butoane.
-  * **Timere:** funcția ''​millis()'' ​folosește intern ''​Timer0''​ iar aceasta este folosită pentru temporizare.+  * **Timere:​** ​se utilizează ''​Timer2''​ pentru obținerea unei funcționalități echivalente cu ''​millis()''​.
  
 ** Element de noutate **: Combinarea celor trei moduri de funcționare diferite. ** Element de noutate **: Combinarea celor trei moduri de funcționare diferite.
Line 258: Line 260:
 <​html>​ <​html>​
 <​center></​html>​ <​center></​html>​
-**Ecran ​MENIU**+**Ecran ​MENU**
 <​html>​ <​html>​
 </​center></​html>​ </​center></​html>​
-{{ :​pm:​prj2026:​victor.stoica0203:​display_3_gherghel.jpeg?​200 | Ecran MENIU}}+{{ :​pm:​prj2026:​victor.stoica0203:​display_3_gherghel.jpeg?​200 | Ecran MENU}}
  
 <​html>​ <​html>​
Line 294: Line 296:
   * 11.05.2026 - Toate conexiunile sunt realizate dar am stricat pompa (funcționează doar uneori).   * 11.05.2026 - Toate conexiunile sunt realizate dar am stricat pompa (funcționează doar uneori).
   * 17.05.2026 - Finalizare software. Videoclipuri realizate. Rupt picior senzor LM35.   * 17.05.2026 - Finalizare software. Videoclipuri realizate. Rupt picior senzor LM35.
 +  * 19.05.2026 - Realizat PWM și millis() cu regiștrii.
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2026/victor.stoica0203/stefan.gherghel.1779096566.txt.gz · Last modified: 2026/05/18 12:29 by stefan.gherghel
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