Sistem de irigare automată
Introducere
Proiectul constă în realizarea unui sistem care să monitorizeze umiditatea solului uneia sau mai multor plante, iar când solul se usucă sub un anumit prag, sistemul o să ude automat pământul. În paralel, sistemul va măsura temperatura locului în care este plasat, informațiile fiind afișate pe un ecran LCD.
Sistemul folosește un senzor de umiditate a solului care este înfipt în pământ, măsurătorile fiind trimise analogic către un microcontroler. Pentru a uda pământul am folosit o pompă de apă, alimentată separat prin o baterie de 9V, care este așezată într-un compartiment umplut cu suficientă apă. Pe ecranul LCD sunt afișate temperatura și umiditatea solului (în procente).
Motivația din spate a venit principal de la faptul că am vrut să lucrez cu componente pe care deja le aveam, ca o provocare pentru mine. De asemenea, am vrut să lucrez cu componente pe care nu prea le-am folosit (senzorul de umiditate, pompa de apă, ecranul LCD), pentru a afla mai mult despre ele. Specific, am ales acest proiect pentru că mi s-a părut că pot să-l folosesc și după ce este prezentat și că are loc suficient pentru a îl îmbunătăți și dezvolta ulterior.
Acest proiect poate fi util pentru persoanele care uită sau sunt plecate și nu reușesc să își ude plantele din motive personale. De asemenea, există persoane cu probleme medicale care poate nu pot să își ude singure plantele (ex. planta este așezată pe un raft sau într-un loc la înălțime și persoana nu poate ajunge să o ude). În plus, există plante care au nevoie de atenție ridicată și trebuie să fie udate constant pentru că altfel se usucă.
Descriere Generală
Sistemul funcționează astfel:
Microcontrolerul este conectat la o sursă de curent, iar toți senzorii se pornesc.
Microcontrolerul citește datele senzorului de umiditate a solului și a senzorului de temperatură și umiditate.
Dacă citirea analogică a senzorului de umiditate depășește un threshold setat, se încearcă pornirea pompei de apă.
Dacă, de asemenea, butonul pentru pornirea pompei de apă este setat pe ON, se pornește pompa de apă până când măsuratoarea analogică scade sub threshold.
Datele sunt afișate pe ecranul LCD
Se repetă procesul în loop până când microcontrolerul este deconectat de la sursa de curent.
Hardware Design
Lista de piese
Arduino Uno (Microcontrolerul sistemului. Nu este neapărat cel mai bun microcontroler pentru genul de proiect cu multe module, într-un use case real aș fi folosit un ESP, dar am reușit un workaround pentru a evita dificultăți în care se blochează un modul)
Probă sol FC-28 (Proba este înfiptă în solul de lângă plantă, la o adâncime suficientă cât să acopere toți senzorii (găurile de pe limbi) pentru o măsurătoare precisă. Dacă această adâncime nu este atinsă, poate fi introdus și la un unghi. Proba este conectată la modulul LM393)
Senzor umiditate sol LM393 (Acest modul recepționează semnalul de la probă, este interpretat, apoi măsurătoarea este trimisă printr-un semnal analogic la microcontroler într-o valoare între 0 și 1023)
Interfață I2C LCM1602 (Modulul este lipit de ecranul LCD și are rolul de a simplifica comunicarea cu acesta. Deoarece ecranul are 16 pini, legarea tuturor constituie lipirea multor fire și complicarea diagramei electrice. Prin adăugarea modulului, reducem numărul de pini la 4 și simplificăm semnificativ diagrama prin comunicarea cu I2C)
Releu 5V JQC-3FF-S-Z (Folosit pentru a porni și opri sursa de curent a pompei de apă. L-am folosit pentru a separa funcționarea pompei de microcontroler și restul circuitului. Când semnalul primit de la senzorul de umiditate trece de un threshold și dacă butonul de pornire a pompei este pe modul ON, un semnal este trimis de la microcontroler pe pinul IN al releului, acesta se deschide, iar pompa de apă poate să tragă curent de la baterie)
Baterie 9V (Bateria pompei de apă. Am ales să folosesc o alimentare separată pentru pompă deoarece microcontrolerul Arduino nu face față să comunice cu toți senzorii atunci când pompa este pornită. Am mai încercat să conectez pompa de la 5V la pinul 3V3 al placuței Arduino, ceea ce rezolvă parțial problema, comunicarea cu senzorii blocându-se mai rar)
1x LED (LED-ul este acționat printr-un pin PWM al plăcuței Arduino, semnificând nivelul de umiditate al solului ca o alternativă a ecranului LCD. Când umiditatea este mare, LED-ul luminează mai puțin)
1x Buton tactil (Butonul este folosit pentru a opri sau porni pompa de apă. L-am adăugat pentru cazul în care se dorește scoaterea probei de sol și mutarea ei la altă plantă. Astfel, previne pornirea pompei atunci când proba este scoasă din pământ, sau mai exact, când umiditatea scade brusc. Butonul leagă un pin al plăcuței Arduino pus la pull-up de GND și pinul detectează schimbările semnalului)
Electric Design
Software Design
Bibliotecile folosite sunt:
Arduino.h (Biblioteca standard pentru Arduino)
Adafruit_Sensor.h (Biblioteca pentru a folosi senzori Adafruit)
Adafruit_MPU6050.h (Biblioteca pentru a folosi senzorul MPU6050)
LiquidCrystal_I2C.h (Biblioteca pentru a folosi ecranul LCD 1602 folosind interfața I2C)
Prezentarea codului:
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(buttonPin), turnPumpOnOff, CHANGE);
pinMode(rainPin, INPUT);
pinMode(relayPin, OUTPUT);
bool status;
status = mpu.begin();
if (!status) {
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
while (1);
}
lcd.init();
lcd.backlight();
}
În turnPumpOnOff() doar vom seta flag-ul că s-a apăsat butonul.
Rezultate Obținute
Concluzii
A fost un proiect din care am învățat destul de multe și mi-am solidificat cunoștințe de hardware. Am avut câteva probleme care m-au făcut să caut mai amănunțit informații despre cum funcționează unele componente și consider că a fost un milestone pentru mine să realizez sistemul acesta.
Download
Bibliografie/Resurse