Sistem de irigatie plante

Introducere

Proiectul este un sistem automat de irigare a plantelor care măsoară umiditatea solului și administrează cantitatea necesară de apă printr-un mecanism cu seringa acționată de un servo-motor și pompa de apă. Are scopul de asigurare a unui nivel optim de umiditate în ghivece mici, reducând risipa de apă și efortul utilizatorului. Intamplarea care mi-a dat directia pentru acest proiect a venit de la faptul ca am avut un bonsai care s-a uscat din cauză că nu am monitorizat umiditatea solului, iar aceasta experiență m-a inspirat să dezvolt un sistem automat de irigare care să prevină astfel de pierderi. Utilitatea acestui sistem este ca asigură umiditatea optimă a solului în absența supravegherii constante, prevenind uscarea plantelor.

Descriere generală

Diagrama bloc

ATmega328P preia măsurători ale umidității solului prin ADC, procesează valorile și le afișează pe ecranul LED. Când umiditatea scade sub prag, microcontroller-ul activează pompa pentru reumplerea seringii și apoi servo-motorul pentru administrarea precisă a apei pe un interval adaptat nevoilor plantei.

Hardware Design

3.1 Listă de piese

  • Microcontroller: ATmega328P
  • Senzor umiditate sol
  • Display LCD (I2C)
  • Servo-motor cu cremalieră
  • Pompa de apă mică
  • Rezervor apă
  • LED
  • Buton tactil (Reset)
  • Regulator de tensiune
  • Breadboard și fire jumper
  • Baterie 9V
  • Buzzer

3.2 Tabela conexiuni piese

Componentă Pin MCU (nume, nr.) Funcție
—————————– ————————————- —————————————
Senzor umiditate sol PC0 (ADC0, pin 23) ADC – măsurare umiditate sol
LCD 16×2 I2C (MCP23017) PC4 (SDA, pin 27) ↔ PC5 (SCL, pin 28) I2C – afișare umiditate + stare sol
Servo-motor cu cremalieră PB1 (OC1A PWM, pin 13) PWM – poziționare piston (buton manual)
Pompă de apă (prin releu) PB2 (pin 14) GPIO – comutare releu
Releu pompa IN ← PB2 (pin 14), VCC 5V, GND Activează pompa manual (cu buton)
LED roșu (sol uscat) PD5 (pin 9) GPIO – aprins când solul e uscat
LED galben (sol mediu) PD6 (pin 10) GPIO – aprins când solul e moderat
LED verde (sol umed) PD7 (pin 11) GPIO – aprins când solul e umed
Buton Servo – Înainte PD2 (INT0, pin 32) Digital input cu pull-up
Buton Servo – Înapoi PD3 (INT1, pin 1) Digital input cu pull-up
Buton Activare pompă PD4 (pin 2) Digital input cu pull-up

3.3 Schematic

3.4 Implementarea Hardware

3.5 Bill of Materials

Software Design

Stadiul actual al implementarii software

  • Toate functionalitatile de baza au fost implementate si testate:
  • Citirea umiditatii solului cu un senzor analogic
  • Afișarea valorii umiditatii si a starii solului (umed, mediu, uscat) pe un ecran LCD I2C
  • Aprinderea automata a unui LED corespunzator starii solului (rosu, galben sau verde)
  • Controlul manual al unui servo prin doua butoane (impinge/trage pistonul)
  • Activarea pompei de apa printr-un al treilea buton (pentru umplerea seringii)
  • Pompa este controlata printr-un releu conectat la microcontroller

Structura modulara (C++)

Proiectul este implementat modular, folosind clase separate pentru fiecare componenta:

  • SenzorUmiditate – gestioneaza citirea valorii de la senzorul de umiditate
  • AfisajLCD – gestioneaza initializarea si afisarea pe LCD (valoare + stare sol)
  • ControlServo – controleaza servo-motorul cu pozitii predefinite
  • PompaApa – gestioneaza activarea pompei prin GPIO/releu
  • LeduriStareSol – gestioneaza cele 3 LED-uri in functie de umiditate

Motivatia alegerii bibliotecilor

LiquidCrystal_I2C

  • Justificare: Permite comunicarea cu LCD-ul prin doar 2 fire (SDA/SCL) în loc de 6+ fire
  • Avantaj: Economisește pini digitali pentru alte componente
  • Performanță: Protocol I2C stabil și rapid pentru actualizări frecvente

Servo.h

  • Justificare: Biblioteca standard Arduino pentru controlul precis al servo-motorului
  • Funcționalitate: Generează semnale PWM cu timing exact pentru poziționarea servo-ului
  • Compatibilitate: Optimizată pentru ATmega328P

Elementul de noutate al proiectului

Sistemul permite controlul manual al unei irigari precise folosind o seringa actionata cu cremaliera. Proiectul combina logica manuala si indicatoare vizuale clare (LED-uri, LCD), fiind ideal pentru invatare si prototipare.

Utilizarea functionalitatilor din laborator

ADC (Analog-to-Digital Converter)

  • Aplicație: Citirea senzorului de umiditate (pin A0)
  • Implementare: analogRead() pentru conversia valorii analogice în digitală
  • Rezoluție: 10-bit (0-1023) pentru precizie mare

PWM (Pulse Width Modulation)

  • Aplicație: Controlul servo-motorului (pin 9)
  • Implementare: Biblioteca Servo generează semnale PWM de 50Hz
  • Funcție: Poziționarea precisă a pistonului seringii

I2C (Inter-Integrated Circuit)

  • Aplicație: Comunicația cu LCD-ul (pini SDA/SCL)
  • Avantaj: Comunicare serială cu doar 2 fire
  • Eficiență: Libereazã pini pentru alte componente

GPIO (General Purpose Input/Output)

  • Input: 3 butoane cu pull-up intern
  • Output: Control pompă (releu) și 3 LED-uri indicator
  • Debouncing: Implementat prin delay pentru stabilitate

Scheletul proiectului si interactiunea functionalitatilor

void loop() {
  int umiditate = senzor.citeste();
  lcd.afiseazaUmiditate(umiditate);
  lcd.afiseazaStare(umiditate);
  leduri.actualizeaza(umiditate);
  if (digitalRead(BUTON_INAINTE) == LOW) {
    servo.impinge();
  }
  if (digitalRead(BUTON_INAPOI) == LOW) {
    servo.trage();
  }
  if (digitalRead(BUTON_POMPA) == LOW) {
    pompa.porneste();
  } else {
    pompa.opreste();
  }
  delay(100);
}

Fluxul de date:

  • Senzor → ADC → Procesare → LCD + LED-uri
  • Butoane → GPIO → Logică control → Servo/Pompă
  • LCD ← I2C ← Microcontroller → PWM → Servo

Calibrarea senzorului de umiditate

  • Sol uscat: Măsurare în sol complet uscat → valoare ~800-1000
  • Sol umed: Măsurare în sol saturat cu apă → valoare ~200-400
  • Sol moderat: Măsurare în sol normal → valoare ~400-600

Valoarea citita este afisata si determinata textual + vizual prin LED-uri.

Demo

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/avaduva/andrei_mirel.birtia.txt · Last modified: 2025/05/26 20:11 by andrei_mirel.birtia
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