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:

  • Arduino Leonardo
  • Senzor de umiditate a solului analogic
  • Modul cu buzzer piezoelectric 5V
  • Pompa de apa 12V DC
  • Diodă 1N4007
  • Modul 2 relee comandate la 5V
  • Buton tactil
  • Alimentator 12V DC 2A

Export to PDF

Schema electrica:

Observatii hardware:

  • Alimentarea sistemului se face din două surse separate, prima este cablul USB implicit Arduino-ul care alimentează senzorul de umiditate, buzzerul, butonul și modulul cu 2 relee. Cea de-a doua surse de 12VDC 2A alimentează pompa.
  • In paralel cu pompa a fost conectata o diodă 1N4007 pentru a proteja sursa de alimentare, acesta fiind modul recomandat de conectare pentru consumatorii inductivi cum este motorul pompei
  • Butonul a fost conectat pe pinul D7, acesta fiind pinul compatibil cu funcția de întrerupere. Pentru acesta nu a fost folosită un rezistor fiind folosit unul intern PULLUP.
  • Releul a fost conectat pe un pin analogic chiar dacă el este comandat cu un semnal digital. Acest lucru a fost posibil deoarece pinii digitali a Arduino-ului pot fi folosiți ca pini digitali dar nu și viceversa.
Software Design
  • Citirea senzorilor

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%.

  • Citirea butonului

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.

  • Activarea buzzer-ului

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

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.

  • Afișarea datelor

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
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
Jurnal

21 Mai 2022: Finalizare proiect

24 Mai 2022: Finalizare documentatie

Bibliografie/Resurse
pm/prj2022/imacovei/bejinarutalidamanuela.txt · Last modified: 2022/05/27 12:23 by talida.bejinaru
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