Autor: Gherghel Ștefan-Ciprian
Grupă: 333CA
Sistemul de irigare este conceput pentru a monitoriza condițiile de mediu și a gestiona automat alimentarea cu apă a plantelor, oferind în același timp flexibilitate prin mai multe moduri de funcționare:
Interfața cu utilizatorul este realizată printr-un ecran OLED și butoane, permițând configurarea parametrilor (intervalul de timp sau valoarea prag a umidității), selectarea modului de funcționare și afișarea umidității solului cât și a temperaturii ambientale. Sistemul va evidenția situațiile limită (rezervor gol sau baterie descărcată) cu ajutorul unui led RGB care pulsează.
Motivația acestui proiect a pornit din nevoia de a-mi menține busuiocul din București sănătos și bine udat atunci când sunt plecat. Într-un context în care timpul disponibil pentru îngrijirea plantelor este adesea limitat, sistemul oferă o soluție practică pentru a susține creșterea și întreținerea acestora, chiar și în lipsa unei supravegheri constante.
Sistemul funcționează pe baza unui microcontroler (ATmega328P), care colectează și procesează datele provenite de la senzori și controlează acționarea pompei de apă în funcție de modul de funcționare selectat.
Conectate la microcontroler sunt următoarele componente:
Pentru siguranță și fiabilitate, sistemul include mecanisme de protecție:
Mod automat (bazat pe umiditate) - HUMIDITY
În acest mod, sistemul realizează udarea în funcție de nivelul de umiditate al solului.
Microcontrolerul citește periodic valoarea senzorului de umiditate. Valoarea obținută este comparată cu un prag minim. Utilizatorul poate selecta pragul de dintr-o listă prestabilită cu ajutorul butoanelor.
Dacă umiditatea scade sub pragul minim → pompa este activată pentru o durată fixă.
Mod periodic (pe bază de timp) - TIMED
În acest mod, udarea se realizează la un interval regulat de timp, indiferent de valoarea umidității.
Microcontrolerul utilizează timere interne pentru a măsura timpul scurs. Utilizatorul poate selecta intervalul de udare dintr-o listă prestabilită cu ajutorul butoanelor.
La atingerea intervalului → pompa este activată pentru o durată fixă iar apoi timerul este resetat.
Mod manual - MANUAL
În acest mod, utilizatorul are control direct asupra pompei.
Pompa este activată prin apăsarea unui buton și funcționează doar pe durata menținerii acestuia apăsat.
Afișare
Sunt prezente două tipuri de meniuri afișate pe ecranul OLED (schimbarea lor are loc prin apăsarea unui buton).
Al treilea ecran - WATERING - este afișat atunci când display-ul nu este în Standby și are loc o udare.
Standby
După un anumit interval de timp de inactivitate din partea utilizatorului ecranul se stinge și microcontroller-ul își limitează intr-o anumită măsură activitatea (spre exemplu nu mai citește temperatura).
| Componentă | Cantitate | Link | Preț unitar (RON) |
|---|---|---|---|
| Placă dezvoltare NANO v3 AtMega 328p | 1 | Link | 24.44 |
| Display OLED I2C | 1 | Link | 16.95 |
| Pompă apă submersibilă | 1 | Link | 7.62 |
| Furtun Pompă | 1 | Link | 6.36 |
| Releu | 1 | Link | 5.45 |
| Senzor temperatură LM35 | 1 | Link | 7.26 |
| Senzor higrometru capacitiv | 1 | Link | 5.49 |
| Senzor nivel lichid | 1 | Link | 1.78 |
| Breadboard | 1 | Link | 11.30 |
| Buton PCB | 4 | Link | 0.36 |
| LED RGB | 1 | Link | 1.51 |
| Suport 4AA | 1 | Link | 6.34 |
| Fire Dupont 10cm Tata-Tata | TBD | Link | 0.15 |
| Fire Dupont 20cm Tata-Mama | TBD | Link | 0.25 |
| Rezistență 470 | 2 | Link | 0.15 |
| Diodă 1N4007 | 1 | Link | 0.49 |
| Rezistență 10k | 2 | Link | 0.15 |
| Baterii AA | 4 | 2.00 | |
| Preț total | 104.66 RON |
Senzor temperatură
| Pin componentă | Pin arduino | Pin microcontroller | Mențiuni |
|---|---|---|---|
| GND | GDN | ||
| VCC | 5V | ||
| OUT | A0 | PC0 | ADC0 |
Senzor umiditate sol
| Pin componentă | Pin arduino | Pin microcontroller | Mențiuni |
|---|---|---|---|
| GND | GND | ||
| VCC | 5V | ||
| OUT | A2 | PC2 | ADC2 |
Senzor nivel apă
| Pin componentă | Pin arduino | Pin microcontroller | Mențiuni |
|---|---|---|---|
| GND | GND | ||
| VCC | 5V | ||
| OUT | A1 | PC1 | ADC1 |
LED RGB
| Pin componentă | Pin arduino | Pin microcontroller | Mențiuni |
|---|---|---|---|
| Anod | 5V | ||
| Red | 10 | PB2 | PWM |
| Blue | 9 | PB1 | PWM |
OLED
| Pin componentă | Pin arduino | Pin microcontroller | Mențiuni |
|---|---|---|---|
| GND | GND | ||
| VCC | 3V3 | ||
| SCL | A5 | PC5 | I2C |
| SDA | A4 | PC4 | I2C |
Modul releu
| Pin componentă | Pin arduino | Pin microcontroller | Mențiuni |
|---|---|---|---|
| GND | GND | ||
| VCC | 5V | ||
| IN | 8 | PB0 | Comandă digitală |
Prin releu este comandată pompa submersibilă.
Conectări
| Pin 1 | Pin 2 | Mentiuni |
|---|---|---|
| COM - releu | (+) - baterie | |
| NO - releu | (+) - pompă |
Pe bornele pompei se află o diodă 1N4007 pentru protejarea circuitului împotriva tensiunilor inverse.
Divizor tensiune
Divizorul de tensiune este utilizat pentru monitorizarea tensiunii pe baterie și este alcătuit din două rezistențe de 10k. Valoarea este citită de pe pinul A3(PC3) - ADC3.
Butoane
| Buton | Pin arduino | Pin microcontroller | Mențiuni |
|---|---|---|---|
| BTN1 | 2 | PD2 | INT0 |
| BTN2 | 3 | PD3 | INT1 |
| BTN3 | 4 | PD4 | PCINT20 |
| BTN4 | 7 | PD7 |
Butoanele au activată rezistența de pull-up.
Mediu de dezvoltare:
Biblioteci utilizate:
Adafruit_GFXAdafruit_SSD1306 - oferă funcții optimizate pentru afișarea a diferite forme geometrice și a bitmap-urilor. EEPROM - oferă metoda update() pentru a preveni scrierile redundante.Funcționare:
getFilteredADC(), care efectuează un set de citiri succesive, le sortează crescător, elimină extremele și calculează media aritmetică a valorilor rămase. 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ă).checkReturnFromError() verifică în fundal revenirea la parametrii normali (citiri ADC periodice) pentru stingerea LED-ului la puțin timp după soluționarea problemei.{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.{1, 2, 3, 4}.displayHandler():lastRelayCommand în interiorul ISR.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.PCINT20 - BTN3: Comută între ecranul STANDARD și cel de MENIU și acționează ca declanșator pentru trezirea din modul Standby.BTN4: Prin menținerea acestuia apăsat este activată udarea în modul MANUAL.standbyTime), ecranul OLED este stins complet prin comanda SSD1306_DISPLAYOFF.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.Timer2 configurat în modul CTC, întreruperea TIMER2_COMPA_vect incrementând variabila currentMillis la 1ms.Timer1 (Fast PWM) pe canalele OC1A și OC1B.Calibrare senzori:
Utilizare noțiuni laborator:
Timer2 pentru obținerea unei funcționalități echivalente cu millis().Element de noutate : Combinarea celor trei moduri de funcționare diferite.
Link-uri rezultate:
A se ignora valoarea afișată a temperaturii în videoclipuri deoarece am rupt unul dintre picioarele senzorului și nu era conectat.
Resurse Hardware
Resurse Software