Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:miruna.iliescu [2026/05/06 16:59]
miruna.iliescu [Schema bloc]
pm:prj2026:bianca.popa1106:miruna.iliescu [2026/05/15 20:49] (current)
miruna.iliescu [Diagrama de semnal]
Line 1: Line 1:
-====== Sistem ​inteligent ​de monitorizare a umidității solului cu irigare automatămanuală ​și monitorizare prin WiFi ======+====== Sistem de monitorizare a umidității solului cu irigare automată ​și manuală ======
  
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul propune realizarea unui sistem inteligent pentru monitorizarea umidității solului și controlul procesului de irigare, folosind o placă Arduino, un senzor analogic de umiditate a solului și un modul WiFi ESP8266 ESP-01.+Proiectul propune realizarea unui sistem inteligent pentru monitorizarea umidității solului 
 +și controlul procesului de irigare, folosind o placă Arduino, un senzor analogic de umiditate 
 +a solului, un LCD 1602 și un buton pentru comutarea modurilor de funcționare.
  
-Scopul proiectului este automatizarea procesului de udare a unei plante, astfel încât sistemul să poată porni irigarea atunci când nivelul de umiditate al solului scade sub un prag prestabilit. În același timp, sistemul permite și pornirea manuală a irigării prin apăsarea unui buton.+Scopul proiectului este automatizarea procesului de udare a unei plante, astfel încât sistemul 
 +să poată porni irigarea atunci când nivelul de umiditate al solului scade sub un prag 
 +prestabilit. În același timp, sistemul permite și pornirea manuală a irigării prin apăsarea 
 +unui buton, fără a întrerupe funcționarea automată.
  
-Proiectul este util deoarece poate ajuta la întreținerea plantelor atunci când utilizatorul nu poate verifica manual starea solului. ​Prin integrarea modulului WiFi, informațiile despre umiditate și starea sistemului pot fi transmise către un telefon sau către o interfață de monitorizare. De asemenea, sistemul include un LCD 1602 pentru ​afișarea locală a informațiilor importante.+Proiectul este util deoarece poate ajuta la întreținerea plantelor atunci când utilizatorul 
 +nu poate verifica manual starea solului. LCD-ul 1602 asigură ​afișarea locală a informațiilor 
 +importante: umiditatea curentă, modul de funcționare și starea pompei.
  
-Proiectul utilizează concepte studiate în laboratoarele de Programarea Microprocesoarelor,​ precum GPIO, USART, întreruperi externe, timere, PWM și ADC.+Proiectul utilizează concepte studiate în laboratoarele de Programarea Microprocesoarelor,​ 
 +precum GPIO, USART, întreruperi externe, timere și ADC.
  
 ===== Descriere generală ===== ===== Descriere generală =====
  
-Sistemul este alcătuit din mai multe module hardware care comunică între ele prin intermediul plăcii Arduino-compatible. Senzorul de umiditate a solului oferă o valoare analogică proporțională cu nivelul de umiditate. Această valoare este citită de microcontroler folosind convertorul analog-digitalADC.+Sistemul este alcătuit din mai multe module hardware care comunică între ele prin intermediul 
 +plăcii Arduino-compatible. Senzorul de umiditate a solului oferă o valoare analogică 
 +proporțională cu nivelul de umiditate. Această valoare este citită de microcontroler 
 +folosind convertorul analog-digital ​(ADC).
  
-În modul automat, microcontrolerul verifică periodic valoarea citită de la senzor. Dacă umiditatea solului scade sub un prag alessistemul aprinde un LED de avertizare și pornește pompa de apă pentru o perioadă determinată. Pompa este controlată ​printr-un ​modul releu, deoarece nu poate fi alimentată direct dintr-un pin al plăcii Arduino.+Sistemul funcționează în două moduricomutate ​printr-un ​singur buton.
  
-În modul manualutilizatorul poate porni irigarea ​apăsând un butonButonul este conectat la un pin de întrerupere externă, astfel încât microcontrolerul poate reacționa imediat la apăsarea acestuia.+**Modul automat (AUTO):** microcontrolerul verifică periodic valoarea citită de la senzor. 
 +Dacă umiditatea solului scade sub pragul alessistemul aprinde LED-ul de stare și pornește 
 +pompa de apă pentru o perioadă determinată (un puls de udare)După fiecare puls, sistemul 
 +așteaptă o perioadă de absorbție înainte de a remăsura umiditatea. Dacă după un număr maxim 
 +de cicluri consecutive solul rămâne uscatsistemul intră într-o pauză de siguranță pentru 
 +a preveni suprasolicitarea pompei.
  
-Sistemul folosește două LED-uri de starePrimul LED indică faptul că umiditatea solului este sub pragul prestabilit,​ iar al doilea LED clipește pe durata procesului ​de irigareClipirea LED-ului este controlată folosind timere.+**Modul manual (MANUAL):** utilizatorul poate controla pompa prin apăsarea succesivă a 
 +butonuluiPrima apăsare comută sistemul în modul manual (pompa oprită). A doua apăsare 
 +pornește un ciclu de udare format din mai multe pulsuri scurte, cu pauze între ele — pauze 
 +în care butonul rămâne activ, permițând oprirea de urgențăA treia apăsare revine la 
 +modul automat.
  
-Pentru monitorizare locală, sistemul include un LCD 1602 conectat printr-un modul de interfață I2C. Pe LCD pot fi afișate valoarea curentă a umidității, modul de funcționare șstarea pompei.+Implementarea folosește o mașină de stări non-blocantă, fără nicio funcție de tip 
 +_delay_ms() în bucla principală. Timpii sunt gestionați printr-un contor de milisecunde 
 +propriu, bazat pe Timer1 în mod CTC.
  
-Pentru monitorizare la distanță, sistemul folosește ​un modul WiFi ESP8266 ESP-01. Acesta comunică cu placa Arduino ​prin USART și transmite informații despre starea sistemului către un telefon sau către o interfață ​web.+Pompa este controlată printr-un modul releu, deoarece nu poate fi alimentată direct 
 +dintr-un pin al plăcii Arduino. O diodă de protecție 1N4007 montată în paralel cu pompa 
 +protejează circuitul împotriva spike-urilor inductive generate de motorul pompei la 
 +pornire și oprire. 
 + 
 +LCD-ul 1602, conectat prin interfața I2C, afișează în timp real umiditatea solului, 
 +modul de funcționare curent și starea pompei.
  
 ==== Schema bloc ==== ==== Schema bloc ====
Line 29: Line 57:
 {{ :​pm:​prj2026:​bianca.popa1106:​miruna.iliescu:​schema_bloc.drawio.png?​700 |Schema bloc }} {{ :​pm:​prj2026:​bianca.popa1106:​miruna.iliescu:​schema_bloc.drawio.png?​700 |Schema bloc }}
  
-Schema bloc prezintă principalele module ale sistemului și modul în care acestea interacționează.+Schema bloc prezintă principalele module ale sistemului și modul în care acestea 
 +interacționează.
  
-Senzorul de umiditate a solului este conectat la placa Arduino-compatible ​printr-o intrare analogică, iar valoarea este citită folosind ADC. Butonul de pornire manuală ​este conectat la un pin de întrerupere externă.+Senzorul de umiditate a solului este conectat la placa Arduino printr-o intrare analogică, 
 +iar valoarea este citită folosind ADC. Butonul de comutare a modurilor ​este conectat la 
 +pinul de întrerupere externă ​INT0 (D2).
  
-Placa Arduino controlează LED-urile de stare prin pini GPIO. LED-ul pentru umiditate scăzută este aprins atunci când valoarea citită de la senzor este sub pragul ales, iar LED-ul pentru irigare activă clipește cât timp pompa funcționează. +Placa Arduino controlează LED-ul de stare și modulul releu prin pini GPIO. Pompa de apă 
- +este alimentată separat de la suportul ​cu 4 baterii AA, iar releul comută alimentarea 
-Pompa de apă este controlată printr-un modul releu. Releul este comandat de Arduino printr-un pin GPIO, iar pompa este alimentată separat de la un suport ​cu 4 baterii AA+acesteia. ​LCD-ul 1602 este conectat prin interfața I2C (pinii A4/A5).
- +
-LCD-ul 1602 este conectat prin interfața I2C și afișează informații despre starea sistemului. Modulul ESP8266 ESP-01, conectat prin adaptorul său, comunică prin USART cu placa Arduino și transmite datele prin WiFi către telefon sau către interfața de monitorizare.+
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 44: Line 73:
  
   * Placă Arduino-compatible,​ inclusă în kitul Plusivo   * Placă Arduino-compatible,​ inclusă în kitul Plusivo
-  * Senzor analogic de umiditate a solului +  * Senzor analogic de umiditate a solului ​(FC-28)
-  * Modul WiFi ESP8266 ESP-01, varianta neagră +
-  * Modul adaptor pentru ESP-01, ESP8266, cu alimentare 5V și regulator 3.3V+
   * Modul releu cu un canal, comandat la 5V   * Modul releu cu un canal, comandat la 5V
-  * Pompă de apă submersibilă,​ 3-6V DC +  * Pompă de apă submersibilă,​ 36V DC 
-  * Furtun pentru pompă de apă, 6x8 mm, 1 metru+  * Diodă de protecție 1N4007 (protecție back-EMF motor pompă) 
 +  * Furtun pentru pompă de apă, 6×8 mm, 1 metru
   * Suport pentru 4 baterii AA, cu capac și întrerupător   * Suport pentru 4 baterii AA, cu capac și întrerupător
   * Baterii AA pentru alimentarea pompei   * Baterii AA pentru alimentarea pompei
-  * LCD 1602, 16x2, 5V, cu retroiluminare +  * LCD 1602, 16×2, 5V, cu retroiluminare 
-  * Modul interfață I2C pentru LCD 1602 +  * Modul interfață I2C pentru LCD 1602 (PCF8574) 
-  * Buton pentru ​pornirea manuală a irigării +  * Buton pentru ​comutarea modurilor de funcționare
-  * LED pentru semnalizarea umidității scăzute+
   * LED pentru semnalizarea irigării active   * LED pentru semnalizarea irigării active
-  * Rezistențpentru LED-uri și pentru ​circuitul butonului+  * Rezistență 220Ω pentru LED 
 +  * Rezistențe pull-up pentru ​buton
   * Breadboard   * Breadboard
   * Fire de legătură   * Fire de legătură
  
-Placa Arduino-compatible va reprezenta unitatea centrală de control a sistemuluiAceasta va citi valoarea analogică primită de la senzorul de umiditate și va decide dacă este necesară pornirea irigării.+{{ :​pm:​prj2026:​bianca.popa1106:​miruna.iliescu:​schema_hardware.png?​800 |Schema hardware }}
  
-Senzorul ​de umiditate va fi conectat la un pin analogic ​al plăciiiar valoarea sa va fi prelucrată cu ajutorul modulului ADC.+Placa Arduino-compatible reprezintă unitatea centrală ​de control a sistemului. Aceasta 
 +citește valoarea ​analogică ​de la senzorul de umiditategestionează mașina de stări și 
 +controlează toate perifericele.
  
-Modulul ESP8266 ESP-01 va fi folosit pentru transmiterea informațiilor prin WiFiDeoarece ESP8266 funcționează la 3.3Vva fi utilizat un adaptor ESP-01 care include regulator de tensiune 3.3V și convertor de nivel logicpermițând conectarea mai sigură la o placă Arduino care folosește niveluri logice de 5V.+Senzorul de umiditate a solului este conectat la pinul analogic A0Valoarea citită este 
 +prelucrată cu modulul ADCfolosind o medie pe 10 eșantioane cu eliminarea valorilor 
 +extreme (min și max)pentru reducerea zgomotului.
  
-Pompa de apă va fi controlată prin intermediul modulului ​releu. Releul permite pornirea și oprirea pompei fără ca aceasta să fie alimentată direct dintr-un pin al microcontrolerului. Pompa va fi alimentată separat ​folosind ​suportul cu 4 baterii AA.+Pompa de apă este controlată prin modulul ​releu (pinul D7). Releul permite pornirea și 
 +oprirea pompei fără ca aceasta să fie alimentată direct dintr-un pin al microcontrolerului. 
 +Pompa este alimentată separat ​de la suportul cu 4 baterii AA (aproximativ 6V). Dioda 
 +1N4007, montată în paralel cu terminalele pompei (catodul spre +), elimină spike-urile 
 +inductive generate de motorul DC la comutarea releului.
  
-LCD-ul 1602conectat prin modulul I2C, va fi utilizat pentru afișarea locală a valorii umidității, modului de funcționare ​și a stării pompei.+LCD-ul 1602 este conectat prin modulul I2C (adresa 0x27) la pinii A4 (SDA) și A5 (SCL). 
 +Modulul PCF8574 realizează conversia de la I2C la interfațparalelă a LCD-ului HD44780. 
 + 
 +Butonul este conectat pe pinul D2 (INT0), cu pull-up intern activat. Întreruperea externă 
 +se declanșează pe front descrescător (1→0), adică la apăsarea butonului. 
 + 
 +==== Diagrama de semnal ==== 
 + 
 +{{ :​pm:​prj2026:​bianca.popa1106:​miruna.iliescu:​protectie_emi.png?​1000 |Protectie EMI }} 
 + 
 +{{ :​pm:​prj2026:​bianca.popa1106:​miruna.iliescu:​ciclu_irigare_auto.png?1000 | Ciclu irigare AUTO }}
  
 ===== Software Design ===== ===== Software Design =====
  
-Această secțiune ​va fi completată în etapele următoare ale proiectului.+==== Arhitectura generală ==== 
 + 
 +Întregul software este structurat ca o **mașină de stări non-blocantă**. Bucla principală 
 +while(1) rulează continuu fără nicio instrucțiune ​_delay_ms(),​ permițând verificarea 
 +simultană a butonului, a timpilor de stare și a senzorului la fiecare iterație. 
 + 
 +Timpul este gestionat printr-un contor propriu de milisecunde (uptime_ms()),​ implementat 
 +folosind **Timer1 ​în mod CTC** cu prescaler 64 și OCR1A = 249, generând o întrerupere la 
 +fiecare 1 ms (pentru F_CPU = 16 MHz). 
 + 
 +==== Moduri de funcționare ==== 
 + 
 +Sistemul definește două moduri (system_mode_t):​ 
 + 
 +  * **MODE_AUTO**:​ irigare automată bazată pe citirile senzorului 
 +  * **MODE_MANUAL**:​ control manual al pompei prin buton 
 + 
 +În MODE_AUTO, mașina de stări (irrigation_state_t) parcurge: 
 + 
 +  * **STATE_IDLE**:​ citire senzor la intervale regulate; dacă umiditatea < prag → STATE_WATERING 
 +  * **STATE_WATERING**:​ pompă pornită pentru WATERING_TIME_MS;​ la expirare → STATE_ABSORB_WAIT 
 +  * **STATE_ABSORB_WAIT**:​ așteptare ABSORB_TIME_MS pentru absorbția apei → STATE_IDLE 
 +  * **STATE_SAFETY_WAIT**:​ pauză de siguranță după MAX_WATERING_CYCLES cicluri consecutive 
 + 
 +În MODE_MANUAL,​ pompa funcționează în pulsuri (MANUAL_PULSE_ON_MS activ, 
 +MANUAL_PULSE_OFF_MS pauză), cu MANUAL_PULSE_COUNT pulsuri per ciclu manual. 
 +Butonul rămâne activ în timpul pauzelor dintre pulsuri. 
 + 
 +==== Gestionarea butonului și protecție EMI ==== 
 + 
 +Butonul este conectat pe INT0 (D2) cu pull-up intern. ISR-ul verifică starea pinului 
 +în momentul declanșării (if (!(PIND & (1 << PD2)))) pentru a filtra false triggere 
 +cauzate de interferențe electromagnetice (EMI) generate de comutarea releului. 
 + 
 +Debouncing-ul software folosește un contor de milisecunde:​ apăsările detectate la mai 
 +puțin de 250 ms față de apăsarea anterioară sunt ignorate. 
 + 
 +La pornirea și oprirea pompei, butonul este mascat pentru 1000 ms 
 +(ignore_button_until_ms),​ acoperind perioada de inrush current a motorului care 
 +generează EMI. Această mască, combinată cu verificarea pinului în ISR și debouncing-ul 
 +de 250 ms, elimină practic toate false detectările.
  
-Proiectul va utiliza următoarele concepte din laboratoare:​+==== Periferice utilizate ====
  
-  * Lab 0 GPIO: controlul LED-urilor ​de stare și al pinului de comandă ​pentru releu +  ​* **Lab 0 – GPIO**: controlul LED-ului de stare și al pinului de comandă ​al releului (D7) 
-  * Lab 1 USART: ​comunicarea cu modulul WiFi ESP8266 ​și testarea inițială prin Serial Monitor +  ​* **Lab 1 – USART**log serial pentru debugging; afișarea valorilor ADC, umidității și stării sistemului 
-  * Lab 2 Întreruperi ​și Timeregestionarea butonului prin întrerupere externă și verificarea periodică a umidității +  ​* **Lab 2 – Întreruperi ​externe**butonul pe INT0, front descrescător, cu ISR pentru setarea unui flag atomic 
-  * Lab 3 - Timere și PWMcontrolul duratei ​de irigare și clipirea LED-ului pentru irigare activă +  ​* **Lab 3 – Timer1 CTC**contor ​de milisecunde non-blocant; OCR1A = 249, prescaler 64, ISR incrementează system_millis 
-  * Lab 4 ADC: citirea ​valorii analogice de la senzorul de umiditate+  ​* **Lab 4 – ADC**: citirea ​senzorului FC-28 pe canalul A0; medie pe 10 eșantioane cu eliminarea min/max 
 +  * **TWI/​I2C**:​ comunicare cu LCD 1602 prin modulul PCF8574; driver propriu implementat în registre AVR
  
 ===== Rezultate ===== ===== Rezultate =====
  
-Această secțiune va fi completată după implementarea și testarea ​sistemului.+Această secțiune va fi completată după finalizarea testării ​sistemului.
  
 ===== Concluzii ===== ===== Concluzii =====
Line 98: Line 185:
  
   * Milestone 1: A fost creată pagina proiectului pe OCW. Au fost adăugate introducerea,​ descrierea generală, schema bloc și lista inițială de componente hardware.   * Milestone 1: A fost creată pagina proiectului pe OCW. Au fost adăugate introducerea,​ descrierea generală, schema bloc și lista inițială de componente hardware.
 +
 +  * Milestone 2: Realizarea hardware a sistemului. Au fost conectate și testate toate componentele fizice: senzorul de umiditate a solului pe pinul A0, butonul pe pinul D2 (INT0) cu pull-up intern, modulul releu pe pinul D7, LED-ul de stare, ​ LCD-ul 1602 prin modulul I2C (adresa 0x27) pe pinii A4/A5. Pompa submersibilă a fost conectată la ieșirea releului, alimentată separat din suportul cu 4 baterii AA. A fost montată o diodă de protecție 1N4007 în paralel cu terminalele pompei pentru eliminarea spike-urilor inductive generate de motorul DC la comutarea releului.
 +
 +  * Milestone 3: Implementare completă software: mașină de stări non-blocantă,​ mod AUTO cu cicluri de udare și absorbție, mod MANUAL cu pulsuri, protecție EMI pentru buton, driver I2C și LCD propriu.
  
 ===== Bibliografie / Resurse ===== ===== Bibliografie / Resurse =====
  
   * Template proiect PM: https://​ocw.cs.pub.ro/​courses/​pm/​pm/​prj2021/​template   * Template proiect PM: https://​ocw.cs.pub.ro/​courses/​pm/​pm/​prj2021/​template
-  * Documentație Arduino +  * Datasheet ATmega328P: https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf 
-  * Documentație ESP8266 ESP-01 +  * Datasheet PCF8574 (I2C LCD expander): https://​www.ti.com/​lit/​ds/​symlink/​pcf8574.pdf 
-  * Documentație ​LCD 1602 cu interfață I2C +  * Documentație senzor umiditate sol FC-28 
-  * Documentație senzor umiditate sol +  * Documentație LCD 1602 HD44780
-  * Datasheet microcontroler ATmega +
 <​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>​
  
  
pm/prj2026/bianca.popa1106/miruna.iliescu.1778075943.txt.gz · Last modified: 2026/05/06 16:59 by miruna.iliescu
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