Table of Contents

Monitorizare plante

- Arpășanu Emilia-Oana, 331CA

Cu siguranță mai există cel puțin o persoană care este înconjurată de mici (sau mari) prietene necuvântătoare verzi, cu rădăcină, tulpină, frunze și chiar și flori. De cele mai multe ori, acestea sunt parcă uitate de lume: le neglijăm gândindu-ne că dacă nu observăm ceva greșit, ele sunt în regulă. Timpul trece și putem constata la un moment dat că locul în care au stat nu le-a priit și că doar ni s-a părut că le-am udat când a trebuit. Așadar, dacă ele ne încântă privirile și ne dau la schimb oxigen în locul dioxidului de carbon, de ce nu le-am putea oferi înapoi măcar puțină grijă? Mai ales că, în plină eră a tehnologiei și a microprocesoarelor, putem identifica soluții practice și eficiente care să ne ajute.

Introducere

Proiectul are ca scop citirea multiplilor parametri ce afectează în mod direct starea unei plante (umiditate sol și aer, cantitatea de lumină, temperatura ambientală) pentru a determina mai apoi următoarele acțiuni necesare menite îngrijirii. Informațiile sunt afișate utilizatorului prin intermediul unui ecran LCD. Pentru a menține un nivel al umidității solului în parametrii normali am inclus o pompă de apă ce trage apa dintr-un rezervor și umezește solul ghiveciului.

Descriere generală

Pentru a determina parametrii descriși mai sus se utilizează mai mulți senzori, selectarea tipului de informație afișat utilizatorului având loc cu ajutorul unui buton și a întreruperilor. Tipul informațiilor este semnalizat de un led RGB ce se aprinde cu o culoare specifică. Pompa de apă pornește (și trage apa pentru o peridoadă finită de timp) dacă gradul de umiditate scade sub un anumit prag, acesta fiind calculat frecvent prin implementarea unui timer (o dată la 4 secunde).

Hardware Design

Listă de componente necesare:

Conectarea componentelor arată cam așa (schema electrică a fost realizată cu ajutorul Tinkercad):

Pinii au fost conectați astfel:

În final, proiectul arată așa:

Software Design

Am dezvoltat programul ce a fost uploadat în cadrul Arduino IDE, fiind familiarizată cu acesta în urma proiectului de la DEEA (are o interfață mai prietenoasă și mai ușor de utilizat). În cadrul acestuia am inclus două biblioteci pentru o gestionare facilă a componentelor:

  1. LiquidCrystal.h (preinstalată odată cu IDE-ul), pentru alocarea pinilor fizici și afișarea informațiilor;
  2. DHT.h (DHT sensor library by Adafruit), pentru citirea umidității și a temperaturii ambientale.

Programul este compus în principal din 3 logici distincte:

ISR (TIMER1_COMPA_vect)
{
  // citire valoare de la senzorul de umiditate al solului (pin analogic)
  int val = analogRead(moisturePin);
 
  // convertire valoare citita in procentaj
  int moisture = (100 - ((val / 1023.00) * 100));
 
  // valoare de prag a umiditatii
  if (moisture < 40) 
  {
    digitalWrite(motorPin, HIGH); // pornire pompa
    digitalWrite(blinkPin, HIGH); // aprindere led de la senzorul de umiditate al solului
  }
  else 
    {
      digitalWrite(motorPin, LOW);  // oprire pompa
      digitalWrite(blinkPin, LOW);  // stingere led de la senzorul de umiditate al solului
 
      // deoarece nu as vrea sa se afiseze nimic in timpul udarii plantei, ma asigur ca
      // dupa oprire pentru putin timp nu se afiseaza nimic in continuare
      lcd.clear();
      delay(1000);
    }
}
void buttonPressed()
{                                                   
  // daca semnalul s-a stabilizat la actionarea butonului,
  // se actualizeaza contorul ce numara apasarile si ultimul timestamp al apasarii
  if (millis() - lastDebounceTime > debounceDelay)
  {
    pressCounter++;
    lastDebounceTime = millis();
  }
}
void loop() 
{
  // verific daca pompa este pornita
  int val = digitalRead(motorPin);
 
  // daca pompa inca este pornita, ma asigur ca nu afisez nimic
  if(val == HIGH)
  {
    lcd.noDisplay();
    lcd.clear();
  }
  else  // daca pompa s-a oprit, revin la afisarea informatiilor
  {
    lcd.display();
    // cursor stanga-sus
    lcd.home();
 
    // actualizare corecta a selectiei
    if (sel != pressCounter)
      sel = pressCounter;
 
    if(sel >= 3)  // pentru a avea selectie circulara
    {
      sel = 0;
      pressCounter = 0;
    }
 
    if(!sel)
    {
      // se afiseaza umiditatea si temperatura ambientala
      // ...
    }
 
    if(sel == 1)
    {
      // se afiseaza valoare intensitatii luminoase si caracterizarea acesteia
      // (intuneric/lumina slaba/normala/tare/ foarte tare)
      // ...
    }
 
    if(sel == 2)
    {
      // se afiseaza gradul de umiditate al solului si caracterizarea acesteia (normala/scazuta)
      // ...
    }
}

Rezultate Obţinute

În urma pornirii circuitului se pot observa următoarele rezultate:

La următoarele apăsări se va cicla prin cele 3 tipuri de informație conform exemplelor de mai sus.

Un demo complet al utilizării proiectului poate fi văzut aici: Demo dispozitiv de monitorizare al plantelor

Concluzii

Proiectul a avut dificultate medie, fiind nevoie de atenție la conectarea componentelor, gestionarea senzorilor și aranjarea per ansamblu pentru a avea un rezultat fiabil. Partea importantă a programului a constat în timer și întreruperi, acestea reprezentând elementele de bază funcționării corecte. Chiar dacă ansamblul este voluminos și a durat mai mult timp finisarea, plănuța de aloe vera din demo este cu siguranță udată corespunzător acum, stând într-un loc prielnic, cu soare și temperatură medie constantă. Ceea ce a ajutat cel mai mult a fost faptul că am lucrat concomitent la partea de hardware și de software, pentru a putea depana mai ușor și a nu acumula prea multe probleme la sfârșit. Scopul a fost în general atins, mai ales că una dintre provocări a fost să mă descurc cu piesele pe care le aveam deja și cu ce mai aveam prin casă pentru a lucra cât mai curat și econom.

Download

Întreg programul descris mai sus se află aici: program.zip

Jurnal

Bibliografie/Resurse

  1. https://kits.plusivo.com/microcontroller-super-starter-kit/claim.html - ghid introductiv Plusivo (pentru funcționare + legare LCD, fotorezistență)
  2. https://learn.littlebirdelectronics.com.au/arduino/automatic-plant-watering-with-arduino - legare + funcționare pompă, releu, senzor de umiditate sol

Export to PDF