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.
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
Structura modulara (C++)
Proiectul este implementat modular, folosind clase separate pentru fiecare componenta:
Motivatia alegerii bibliotecilor
LiquidCrystal_I2C
Servo.h
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)
PWM (Pulse Width Modulation)
I2C (Inter-Integrated Circuit)
GPIO (General Purpose Input/Output)
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:
Calibrarea senzorului de umiditate
Valoarea citita este afisata si determinata textual + vizual prin LED-uri.
Demo
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.