AquaGuardian System este un sistem inteligent creat pentru monitorizarea si automatizarea unui acvariu. Ideea proiectului a pornit din dorinta de a realiza un sistem capabil sa mentina conditii stabile si sigure pentru pesti prin monitorizarea permanenta a parametrilor importanti si automatizarea unor procese esentiale.
Scopul proiectului
Sistemul monitorizeaza constant parametri importanti ai acvariului, precum temperatura apei, nivelul apei si lumina ambientala, pentru a mentine un mediu sigur si stabil pentru pesti. Informatiile sunt afisate in timp real pe un LCD conectat prin I2C, astfel incat utilizatorul poate vedea rapid ce se intampla in acvariu.
Una dintre functiile principale ale proiectului este hranirea automata la ore fixe. Cu ajutorul modulului RTC DS3231, sistemul pastreaza timpul real si declanseaza automat hranirea la ore prestabilite, cum ar fi dimineata si seara. In plus, sistemul poate controla si iluminarea acvariului in functie de lumina detectatade senzorul LDR, contribuind la crearea unui mediu mai natural pentru pesti si plante.
Mi s-a parut un proiect interesant deoarece combina mai multe concepte importante din domeniul sistemelor embedded: senzori, intreruperi, ADC, PWM, UART si comunicatie I2C. In plus, consider ca este un proiect util deoarece poate ajuta orice persoana care are un acvariu sa mentina un mediu mai sigur si mai stabil pentru pesti, fara sa verifice constant fiecare parametru manual.
Sistemul integreaza mai multe module hardware si software care comunica intre ele pentru a asigura functionarea automata a acvariului si monitorizarea parametrilor importanti.
Comunicatia dintre module este realizata folosind mai multe interfete specifice sistemelor embedded:
| Componenta | Model | Interfata cu MCU | Functie |
|---|---|---|---|
| Microcontroller | ATmega328P Xplained Mini | - | Unitatea centrala a sistemului |
| RTC | DS3231 | I2C | Pastreaza timpul real si programeaza actiunile automate |
| Senzor temperatura | NTC waterproof | ADC | Monitorizeaza temperatura apei |
| Senzor nivel apa | HC-SR04 | GPIO | Masoara nivelul apei |
| Display LCD | LCD 16×2 I2C | I2C | Afiseaza informatii despre sistem |
| Servomotor | SG90 180° | PWM | Controleaza mecanismul de hranire |
| Modul releu | Releu 5V 1 canal | GPIO | Controleaza banda LED |
| Senzor lumina | LDR | ADC | Detecteaza lumina ambientala |
| Iluminare | Banda LED 12V | Alimentare externa prin releu | Iluminarea acvariului |
| Buton | Push Button | GPIO | Control manual al sistemului |
Modulul RTC DS3231 este utilizat pentru mentinerea timpului real chiar si atunci cand sistemul este oprit. Acesta permite programarea automata a hranirii si a iluminarii la anumite ore prestabilite.
RTC-ul comunica cu microcontrollerul prin interfata I2C:
Interfata I2C permite comunicatia seriala folosind doar doua fire de date, ceea ce reduce numarul de pini utilizati.
Senzorul NTC waterproof este utilizat pentru monitorizarea temperaturii apei din acvariu. Acesta functioneaza ca o rezistenta variabila dependenta de temperatura si este conectat intr-un divizor rezistiv impreuna cu un rezistor de 10kΩ.
Conectare:
Valorile analogice citite de microcontroller sunt convertite in temperatura si afisate pe display-ul LCD.
Senzorul ultrasonic HC-SR04 este utilizat pentru monitorizarea nivelului apei.
Conexiuni:
Distanta este calculata pe baza duratei semnalului receptionat.
Senzorul LDR detecteaza intensitatea luminii ambientale si permite controlul automat al iluminarii acvariului.
Conectare:
LDR-ul este utilizat impreuna cu un rezistor de 10kΩ intr-un divizor de tensiune.
Servomotorul SG90 controleaza mecanismul de hranire automata al pestilor.
Conectare:
PWM-ul permite controlul precis al unghiului de rotatie.
Display-ul LCD afiseaza informatii importante despre sistem, precum temperatura apei, nivelul apei si starea iluminarii.
Conexiuni I2C:
Utilizarea interfetei I2C reduce numarul de pini necesari conectarii.
Modulul releu controleaza banda LED de iluminare a acvariului.
Conectare:
Releul este activat automat in functie de valoarea citita de LDR sau manual prin buton.
Sistemul utilizeaza doua butoane pentru control manual:
Butonul de hranire utilizeaza intreruperi externe pentru detectarea rapida a apasarii.
| Componenta | Pin ATmega328P | Tip Interfata |
|---|---|---|
| RTC DS3231 | PC4 (SDA), PC5 (SCL) | I2C |
| LCD 16×2 I2C | PC4 (SDA), PC5 (SCL) | I2C |
| HC-SR04 | PD4 (TRIG), PD5 (ECHO) | GPIO |
| Senzor NTC waterproof | PC1 (ADC1 / A1) | ADC |
| LDR | PC0 (ADC0 / A0) | ADC |
| Modul releu | PD7 (D7) | GPIO |
| Banda LED 12V | Alimentare externa prin releu | Alimentare externa |
| Servomotor SG90 | PB1 (OC1A / D9) | PWM |
| Buton hranire | PD3 (INT1 / D3) | Intrerupere externa |
| Buton iluminare | PD6 (D6) | GPIO |
Partea software a proiectului a fost dezvoltata in limbajul C/C++ folosind framework-ul Arduino pentru microcontrollerul ATmega328P. Aplicatia integreaza mai multe functionalitati studiate in cadrul laboratoarelor PM si permite monitorizarea si automatizarea acvariului.
Proiectul utilizeaza mai multe concepte importante din sistemele embedded:
Lab 1 (USART)
Comunicatia seriala este utilizata pentru afisarea mesajelor de debug si monitorizarea parametrilor sistemului in timp real prin Serial Monitor. Sunt afisate valori precum temperatura apei, nivelul apei, valoarea LDR-ului si diferite mesaje de stare sau alerta.
Lab 2 (Intreruperi)
Sistemul utilizeaza intreruperi externe pentru detectarea rapida a apasarii butonului de hranire manuala. Acest lucru permite actionarea servomotorului fara polling continuu.
Lab 3 (Timere si PWM)
Servomotorul SG90 utilizat pentru mecanismul de hranire este controlat prin semnal PWM generat de microcontroller. RTC-ul DS3231 este utilizat pentru declansarea automata a hranirii la ore prestabilite.
Lab 4 (ADC)
Convertorul Analog-Digital este utilizat pentru citirea senzorului LDR si a senzorului NTC waterproof. Valorile citite sunt utilizate pentru monitorizarea temperaturii apei si pentru controlul automat al iluminarii.
Sistemul monitorizeaza permanent parametrii importanti ai acvariului si controleaza automat iluminarea si hranirea in functie de valorile senzorilor si de ora furnizata de RTC. Informatiile importante sunt afisate pe display-ul LCD si monitorizate prin terminalul serial.
Lab 6 (I2C)
Protocolul I2C este utilizat pentru comunicatia cu modulul RTC DS3231 si cu display-ul LCD 16×2. RTC-ul furnizeaza timpul real necesar pentru automatizarea hranirii, iar display-ul afiseaza informatii despre starea sistemului si valorile monitorizate.
Implementarea software a proiectului AquaGuardian a fost realizata in limbajul C/C++ utilizand framework-ul Arduino pentru microcontrollerul ATmega328P.
Programul este organizat modular, fiecare functionalitate importanta fiind implementata prin functii separate de initializare si control. Aplicatia ruleaza intr-o bucla infinita in care sunt cititi senzorii, sunt verificate conditiile de functionare si sunt controlate perifericele conectate.
GPIO si control hardware
Pinii microcontrollerului au fost configurati utilizand functiile pinMode, digitalWrite si digitalRead din framework-ul Arduino. Au fost configurate iesiri digitale pentru servomotor si releu, precum si intrari digitale cu pull-up intern pentru butoane.
Servomotorul conectat pe PB1 controleaza mecanismul de hranire, iar releul conectat pe PD7 controleaza iluminarea acvariului.
Serial Monitor
Comunicatia seriala este utilizata pentru afisarea mesajelor de debug si monitorizarea parametrilor sistemului in timp real prin Serial Monitor.
Prin terminalul serial sunt afisate:
Aceasta functionalitate a fost utilizata pentru testarea si validarea proiectului.
ADC
Convertorul Analog-Digital este utilizat pentru citirea senzorului LDR si a senzorului NTC waterproof. Valorile analogice sunt convertite in format digital si utilizate pentru controlul iluminarii si monitorizarea temperaturii apei.
LDR-ul este conectat pe PC0, iar senzorul NTC pe PC1.
Control PWM si RTC
Servomotorul SG90 este controlat folosind semnal PWM pentru actionarea mecanismului de hranire automata. Modulul RTC DS3231 furnizeaza timpul real necesar pentru declansarea automata a hranirii la ora prestabilita.
Monitorizare si automatizare
Nivelul apei este monitorizat folosind senzorul ultrasonic HC-SR04, iar iluminarea este controlata automat in functie de valoarea citita de senzorul LDR.
Sistemul realizeaza automat hranirea pestilor la ora prestabilita si permite control manual prin intermediul butoanelor.
Pentru iluminare a fost implementat un prag minim si maxim pentru evitarea aprinderii si stingerii repetate a benzii LED la variatii mici ale luminii ambientale.
Alegerea bibliotecilor
Au fost utilizate urmatoarele biblioteci:
Aceste biblioteci permit comunicatia I2C cu RTC-ul si display-ul LCD, controlul servomotorului si calculul temperaturii utilizand senzorul NTC.
Validare si optimizari
Fiecare modul hardware a fost testat individual folosind Serial Monitor pentru verificarea valorilor citite si a functionalitatii sistemului.
Au fost implementate debounce software pentru butoane si praguri diferite pentru aprinderea si stingerea iluminarii automate, reducand astfel fluctuatiile nedorite ale sistemului.
Sistemul AquaGuardian a fost implementat si testat cu succes pe microcontrollerul ATmega328P.
Proiectul permite monitorizarea temperaturii apei, a nivelului apei si a luminii ambientale in timp real. Valorile sunt afisate pe display-ul LCD si monitorizate prin Serial Monitor.
Iluminarea acvariului este controlata automat folosind senzorul LDR si un releu conectat la banda LED. Sistemul permite si control manual prin intermediul butoanelor.
Hranirea automata a pestilor functioneaza pe baza timpului furnizat de modulul RTC DS3231, iar servomotorul SG90 distribuie hrana la ore prestabilite.
Toate modulele hardware au fost testate individual si integrate cu succes in sistemul final.
AquaGuardian reprezinta un sistem inteligent capabil sa monitorizeze si sa automatizeze functii importante ale unui acvariu, contribuind la mentinerea unui mediu sigur si stabil pentru pesti.
Saptamana 1: Am ales ideea proiectului si am stabilit functionalitatile principale ale sistemului. In aceasta etapa am studiat componentele necesare si modul in care acestea pot comunica intre ele.
Saptamana 2: Am realizat planul proiectului, am ales modulele hardware necesare si am comandat componentele pentru realizarea sistemului.
Saptamana 3: Am realizat schema bloc a sistemului si am inceput redactarea documentatiei. De asemenea, am studiat conexiunile si protocoalele de comunicatie utilizate de fiecare modul.
Saptamana 4: Am realizat conexiunile hardware dintre componente si am testat individual fiecare modul: RTC, LCD, senzorul ultrasonic, senzorul LDR, senzorul NTC si servomotorul. De asemenea, am realizat schema electrica a sistemului.
Saptamana 5: Am implementat partea software a proiectului si am integrat toate functionalitatile sistemului. Au fost realizate automatizarea hranirii folosind RTC-ul, controlul automat al iluminarii, afisarea informatiilor pe LCD si monitorizarea parametrilor prin Serial Monitor. De asemenea, au fost realizate testarea si optimizarea functionarii sistemului.