- 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.
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.
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).
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:
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:
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) // ... } }
Î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.
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.
Întreg programul descris mai sus se află aici: program.zip