Udarea automata a plantelor de apartament

Autor: Bejinaru Talida Manuela, 333CB

Introducere

In cadrul acestui proiect imi propun realizarea unui sistem care poate fi montat la cele mai comune vase pentru plante si care faciliteaza asigurarea umiditatii solului atat in mod automat, cat si manual, prin apasarea unui buton.

Descriere generala

Sistemul automat de pastrare a umiditatii folosește un senzor analogic ce detecteaza umiditatea 0-1023 ce va fi convertita în cod cu funcția map in 0-100% pentru a putea fi mai ușor de setat procentul. Cand umiditatea va scadea sub 50% Arduino-ul va activa un releu ce va controla pompa pana cand procentul de umiditate va fi adus la 50%. Cand nivelul umiditatii va fi între 50% și 60% buzzerul va fi acativat de 2 ori (tic-tic) iar cand va fi mai mic de 50% buzzerul va fi activat lung (tic). Daca dorim sa pornim manual sistemul, va fi apăsat butonul care va activa pompa si va suprascrie modul automat. Pompa va avea o dioda in paralel pentru a preveni curentul invers fiind un inductor. Procentul de umiditate va fi vizibil pe calculator, prin serial.

Schema bloc:

Hardware Design

Lista piese:

Export to PDF

Schema electrica:

Observatii hardware:

Software Design

Senzorul de umiditate este citit folosind funcția AnalogRead(), acesta oferă o valoare de la 0-1023 în funcție de semnalul analogic 0-5V. Pentru a putea interpreta aceasta valoare a fost folosită funcția map(), care converteste aceasta valoare în procent 0 100%.

Pentru a citi butonul a fost folosită o întrerupere. Acesta citește valoarea digitală provenită de la buton și a fost creată o funcție debounce() care are un timer folosind functia mills() care schimbă valoarea bool a releului (Îl activează sau dezactivează) dupa ce butonul a fost apasat pentru cel putin 200ms. Aceste delay este necesar deoarece apasarea poate avea o mică eroare de citire în primele ms și astfel ne asigurăm ca semnalul digital este unul stabil.

Buzzerul este acționat în două moduri. Primul este cel în care suna continuu și acest lucru este făcut cu funcția AnalogWrite() care îi aplică un semnal PWM. Al doilea mod este cel in care el se aude întrerupt fiind activat din secundă în secundă. Acest lucru este făcut prin funcția beep(). Acesta a fost creata tot folosind functia miils() care este un timer care schimbă semnalul PWM de la 80 la 0, 0 fiind oprit la fiecare secundă.

Comanda pompei se face in void loop() Aici este prezent un conditional care verifica procentul de umiditate dacă este între valoare de 50% și 60%, dacă acest luru este adevarat el porneste buzzerul pe modul beep. Daca acest lucru nu este adevarat și procentul este sub 50% porneste buzzerul pe continuu, dacă nu il oprește. Al doilea conditional urmarește tot procentul de umiditate, daca acesta este sub 50% porneste pompa, daca nu o opreste și incepe sa primeasca comanda de la buton, bool-ul acestuia.

Procentul de umiditate este afisat pe calculator pe serial prin intermediul cablului usb. Acest lucru este facut prin pornirea unei conexiuni seriale cu viteza de 9600 cu ajutorul functiei Serial.begin(). După ce procentul a fost calculat se afiseaza acesta si un text care indica ce este parametrul afisat folosind functia Serial.print. În final pe ultima linie se afiseaza semnalul procentului este folosita o functie diferita Serial.println. Acesta e diferita avand terminatia în care vine din engleza de la new line adică linie noua. Acesta ne ajuta sa trecem la următoarea linie cand afisam datele astfel ele sunt afisate una sub alta.

Schema logica:

Rezultate obtinute

https://youtu.be/lH-oTsqlWMU

Concluzii

Am creat un proiect functional pe care il pot folosi in casa. A fost o experienta interesanta, din care consider ca am invatat lucruri noi.

Download

Arhiva:

333cb_bejinarutalidamanuela_proiect_pm.zip

Jurnal

21 Mai 2022: Finalizare proiect

24 Mai 2022: Finalizare documentatie

Bibliografie/Resurse

Resurse Hardware:

Resurse Software:

Export to PDF