This shows you the differences between two versions of the page.
|
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-digital, ADC. | + | 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 ales, sistemul 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ă moduri, comutate printr-un singur buton. |
| - | În modul manual, utilizatorul poate porni irigarea apăsând un buton. Butonul 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 ales, sistemul 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 uscat, sistemul intră într-o pauză de siguranță pentru | ||
| + | a preveni suprasolicitarea pompei. | ||
| - | Sistemul folosește două LED-uri de stare. Primul LED indică faptul că umiditatea solului este sub pragul prestabilit, iar al doilea LED clipește pe durata procesului de irigare. Clipirea LED-ului este controlată folosind timere. | + | **Modul manual (MANUAL):** utilizatorul poate controla pompa prin apăsarea succesivă a |
| + | butonului. Prima 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 și 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ă, 3–6V 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țe 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 sistemului. Aceasta 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ăcii, iar 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 umiditate, gestionează mașina de stări și | ||
| + | controlează toate perifericele. | ||
| - | Modulul ESP8266 ESP-01 va fi folosit pentru transmiterea informațiilor prin WiFi. Deoarece ESP8266 funcționează la 3.3V, va fi utilizat un adaptor ESP-01 care include regulator de tensiune 3.3V și convertor de nivel logic, permițâ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 A0. Valoarea citită este |
| + | prelucrată cu modulul ADC, folosind 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 1602, conectat prin modulul I2C, va fi utilizat pentru afișarea locală a valorii umidității, a 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ța 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 Timere: gestionarea 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 PWM: controlul 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> | ||