This is an old revision of the document!


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. 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 cobertste 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 condițional care verifica procentul de umiditate dacă este între valoare de 50% și 60%, dacă acest luru este adevarat el porneste buzzerul pe modul beep. Dacă acest lucru nu este adevărat și procentul este sub 50% porneste buzzerul pe continuu, dacă îl oprește. Al doilea condițional urmărește tot procentul de umiditate, dacă acesta este sub 50% porneste pompa, dacă nu o oprește și tine începe sa primească comanda de la buton, bool-ul acestuia.

  • Afișarea datelor

Procentul de umiditate este afișat pe calculator pe serial prin intermediul cablului usb. Acest lucru este făcut prin pornirea unei conexiuni seriale cu viteza de 9600 cu ajutorul funcției Serial.begin(). După ce procentul a fost calculat se afișează acesta și un text care indică ce este parametrul afișat folosind funcția Serial.print. În final pe ultima linie se afiseaza semnalul procentului este folosită o funcție diferită Serial.println. Acesta e diferită avand terminatia în care vine din engleza de la new line adică linie nouă. Acesta ne ajuta sa trecem la următoarea linie cand afisam datele astfel ele sunt afisate una sub alta.

pm/prj2022/imacovei/bejinarutalidamanuela.1653571079.txt.gz · Last modified: 2022/05/26 16:17 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