Seră inteligentă cu monitorizare video [620169]

Universitatea POLITEHNICA din București
Facultatea de Electronică, Telecomunicații si Tehnologia
Informației

Seră inteligentă cu monitorizare video

Lucr are de diplomă

Prezentată ca cerință parțială pentru obținerea
titlului de Inginer în
domeniul Electronică, Telecomunicații și Tehnologia Informației
programul de studii Electronic ă Aplicată

Conducător științific Absolvent
Ș.L.Dr.Ing. Bogdan Alexandrescu Dumitrache Alina -Mihaela

Anul 2 020

Cuprins

Cuprins ………………………….. ………………………….. ………………………….. ………………………….. …….7
Lista figurilor ………………………….. ………………………….. ………………………….. ………………………… 9
Lista tabelelor ………………………….. ………………………….. ………………………….. ……………………… 11
Lista acronimelor ………………………….. ………………………….. ………………………….. …………………. 13
Introducere ………………………….. ………………………….. ………………………….. ………………………….. 15
Capitolul 1 – Prezentarea componentelor hardwa re utilizate ………………………….. …………………. 17
1.1 Raspberry Pi 3B+ ………………………….. ………………………….. ………………………….. …………. 17
1.2 Senzorul de umiditate rezistiv ………………………….. ………………………….. …………………….. 19
1.3 Pompa de curent continuu ………………………….. ………………………….. ………………………….. 20
1.4 Driver -ul de motor dual în punte H ………………………….. ………………………….. ……………… 20
1.5 Senzorul de temperatura și umiditate DHT11 ………………………….. ………………………….. … 21
1.6 Fotorezistorul ………………………….. ………………………….. ………………………….. ………………. 21
1.7 Raspberry Pi Camera V2 ………………………….. ………………………….. ………………………….. .. 22
Capitolul 2 –Tehnologii software utilizate ………………………….. ………………………….. …………….. 23
2.1 Sistemul de operare Raspbian ………………………….. ………………………….. …………………….. 23
2.2 Limbajul de programare Python ………………………….. ………………………….. ………………….. 24
2.3 Librăria OpenCV ………………………….. ………………………….. ………………………….. …………. 25
2.4 Conectarea la internet, configurarea pentru Gmail și securitatea ………………………….. ……. 26
2.5 SMTP ………………………….. ………………………….. ………………………….. ………………………… 27
Capitolul 3 – Udarea plantelor ………………………….. ………………………….. ………………………….. … 29
3.1 Observarea factorilor de mediu ………………………….. ………………………….. …………………… 29
3.2 Schema electrică și conectarea la Raspberry Pi ………………………….. ………………………….. 30
3.3 Implementarea soluției ………………………….. ………………………….. ………………………….. ….. 31
3.4 Concluzii generale după implementare ………………………….. ………………………….. …………. 35
Capitolul 4 – Iluminarea plantelor ………………………….. ………………………….. ……………………….. 36
4.1 Observarea factorilor de mediu ………………………….. ………………………….. …………………… 37
4.2 Schema electrică și conectarea la Raspberry Pi ………………………….. ………………………….. 37
4.3 Implementarea soluției ………………………….. ………………………….. ………………………….. ….. 38
Capitolul 5 – Monitorizarea serei ………………………….. ………………………….. ……………………….. 41

5.1 Monitorizarea temperaturii și a umidității aerului ………………………….. ……………………….. 42
5.2 Monitorizarea video ………………………….. ………………………….. ………………………….. ……… 46
5.3 Monitorizarea creșterii plantei ………………………….. ………………………….. …………………….. 50
Capitolul 6 – Asambla rea finala a serei ………………………….. ………………………….. ……………….. 59
Concluzii generale ………………………….. ………………………….. ………………………….. ………………… 63
Posibilități viitoare de dezvoltare ………………………….. ………………………….. …………………………. 65
Bibliografie ………………………….. ………………………….. ………………………….. …………………………. 67
Anexa A ………………………….. ………………………….. ………………………….. ………………………….. …. 69
Anexa B ………………………….. ………………………….. ………………………….. ………………………….. …. 73
Anexa C ………………………….. ………………………….. ………………………….. ………………………….. …. 79
Anexa D ………………………….. ………………………….. ………………………….. ………………………….. …. 81

Lista figurilor

Figura 1 -1 Prezentare Raspberry Pi și numerotarea pinilor ………………………….. …………………… 18
Figura 1 -2 Senzorul de umiditate a solului de tip rezistiv ………………………….. …………………….. 19
Figura 1 -3 Pompa de curent continuu ……………………………………………………………………………… 20
Figura 1 -4 Driver -ul de motor dual în punte H ………………………….. ………………………….. ……….. 20
Figura 1 -5 Prezentare DHT11 ………………………….. ………………………….. ………………………….. .. 21
Figura 1 -6 Modulul de camera pentru Raspberry Pi V2 ………………………….. ………………………. 22
Figura 2 -1 Contul cre at asociat ………………………….. ………………………….. ………………………….. . 26
Figura 2 -2 Autentificare sSMTP ………………………….. ………………………….. ………………………….. 27
Figura 2 -3 Testare mail ………………………….. ………………………….. ………………………….. …………. 28
Figura 3 -1 Urmărirea umiditatii solului ………………………….. ………………………….. ………………… 29
Figura 3 -2 Schema electrică pentru udarea plantelor ………………………….. ………………………….. .. 30
Figura 3 -3 Organigrama software pentru udarea p lantelor ………………………….. …………………… 32
Figura 3 -4 Notificare sera – Udare plante ………………………….. ………………………….. ……………… 34
Figura 4 -1Schema electrică pentru iluminarea plantelor ………………………….. ………………………. 37
Figura 4 -2 Organigrama software pentru iluminarea plantelor ………………………….. ………………. 38
Figura 4 -3 Notificare sera – Iluminare ………………………….. ………………………….. ………………….. 39
Figura 5 -1Schema sistemului de monitorizare ………………………….. ………………………….. ……….. 41
Figura 5 -2 Organigrama software pentru monitorizarea temperaturii ………………………….. ……… 43
Figura 5-3 Notificari sera și alerte sera pentru temperatura și umiditate ………………………….. ….. 45
Figura 5 -4 Gasirea adresei IP locale ………………………….. ………………………….. …………………….. 47
Figura 5 -5 Accesare w eb – transmisiune video ………………………….. ………………………….. ………. 48
Figura 5 -6 Accesare de pe mobil – transmisiune video ………………………….. ………………………… 48
Figura 5 -7 Captura extrasa din transmisiunea video ………………………….. ………………………….. … 49
Figura 5 -8 Principiul de masurare al inaltimii plantelor ………………………….. ……………………….. 50
Figura 5 -9 Prelucrari ale imaginii realizate pe Planta 1 ………………………….. ………………………… 52
Figura 5 -10 Prelucrari ale imaginii realizate pe Planta 2 ………………………….. ………………………. 53
Figura 5 -11 Comparatie detectare intre Planta 1 și Planta 2 ………………………….. ………………….. 54
Figura 5 -12 Solutie detectare pentru Planta 2 ………………………….. ………………………….. ………… 54
Figura 5 -13 Exemple de detectare pentru obiectul cunos cut………………………….. ………………….. 55
Figura 5 -14 Notificari sera – Inaltimea plantei ………………………….. ………………………….. ……….. 56
Figura 5 -15 Mail -uri pentru masurea plantei ………………………….. ………………………….. ………….. 57
Figura 6 -1 Conceptul de realizare fizică a serei ………………………….. ………………………….. ……… 59
Figura 6 -2 Schema electrică a proiectului ………………………….. ………………………….. ……………… 60
Figura 6 -3 Mail -urile de notificare ………………………….. ………………………….. ………………………. 62
Figura 6 -4 Realizarea finala a proiectului ………………………………………………………………………….62

Figura C -1 Exemple recunoastere – Planta 1 ………………………….. ………………………….. ………….. 79
Figura C -2 Exemple recunoastere – Planta 2 ………………………….. ………………………….. ………….. 79
Figura D -1 Diagrama Gantt a lucrarii ………………………….. ………………………….. …………………… 81

Lista tabel elor

Tabel 3 -1 Observa rea solului pe o perioada de 3 saptamani ………………………….. ………………….. 29
Tabel 3 -2 Controlul pompei de curent conti nuu folosind dr iver-ul dual ………………………….. ….. 34
Tabel 5 -1 Cazurile de temperatura și umiditate și tratarea lor ………………………….. ………………. 42
Tabel B -1 Imagini captate la masurarea Plantei 1 ………………………….. ………………………….. …… 74
Tabel B -2 Lungime inregi strata la masurarea Pantei 1 ………………………….. …………………………. 75
Tabel B -3 Imagini inregistrate la masurarea Plantei 2 ………………………….. ………………………….. 76
Tabel B -4 Lungime inregistrata la masurarea P lantei 2 ………………………….. ………………………… 77
Tabel B -5 Masurare și detectare defectuasa Planta 3 ………………………….. ………………………….. . 78

Lista acronime lor

– BGR: Blue Green Red – albastru verde roșu
– CPU: Central Processing Unit – unitate centrala de procesare
– CSI: Camera Serial Interface – interfață seriala pentru camera
– GND: Ground – împământare
– GPIO: General -Purpose Input/Output – intrări /ieșiri cu scop general
-HTTP: Hypertext Transfer Protocol – protocol de transfer al hipertextelor
-IoT: Internet of T hings – Internetul lucrurilor
-IP: Internet Protocol – protocol de internet
-JPEG: Joint Photogra phic Experts Group – grupul experților în fotografie reunit
-LAN : Local Area Network – rețea locala
-LED : Light -Emitting Diode – dioda emițătoare de lumina
-MJPEG: Motion JPEG – JPEG în mișcare
-OSI: Open System Interconnection – interconectarea sistemelor deschise
-RAM : Random Access Memory – memorie cu acces aleator
-RH: Relative Humidity – umiditate relativă
-SBC : Single Board Computer – calculator realizat pe o singura placa
-SMTP : Simple Mail Transfer Protocol – protocol de transfer mail simplu
-TCP: Transmission Control Protocol – protocol de transmisie cu control
-UDP : User Datagram Protocol – protocolul datagramelor utilizator
-USB : Universal Serial B us – bus serial universal
-VGA : Video Graphic Array – matrice grafica video
-VPN : Virtual Private Network – rețea privata virtuala

15
Introducere

Creșterea plantelor este o activitate plăcută și apreciată pe scară largă , însă un program bine
stabilit pentru întreținerea acestora este greu de menținut si urmat. Viața cotidiană nu pe rmite
multora timp pentru pasiuni sau activități de recreere, din acest motiv sistemele automate sunt din
ce în ce mai căutate și mai ușor de utilizat. Sistemele automate au rolul de a facilita anumite
procese, dându -i utilizatorului mai multă libertate în proiectele sale, mai multe opțiuni dar si mai
multă încredere în activitatea întreprinsă , deoarece este asistat permanent.
Multe persoane ar dori sa aibă o mica grădină în propria lor casa, dar responsabilitatea în plus
și realizarea unui progra m de udare a plantelor sau mutarea lor într-un loc mai luminos atunci când
este întuneric , duc la scăderea numărului de oameni care cresc plante . Lipsa unei bune maniere de
îngrijire a plantelor duce de asemenea la moartea sau îmbolnăvirea plantelor, care vor fi mai apoi
abandonate de către proprietar.
Lucrarea își propune rezolvarea acestor probleme întâmpinate de persoanele care doresc o
mica gradina accesibilă , fără a depune prea mult efort. Sera inteligenta cu monitorizare video ,
bazată pe Ras pberry Pi are menirea de a facilita creșterea si îngrijirea plantelor, menținând
condițiile optime pentru plante, fără intervenția utilizatorului. Legătura cu utilizatorul va fi
realizată în contul personal de mail al acestuia, metodă care nu necesita descărcarea altor aplicații
sau programe. Este un mediu la care majoritatea persoanelor au acces și știu cum sa -l acceseze și
folosească .
Temperatura și umiditatea aerului vor fi măsurate l a o ora setată de utilizator , datele vor fi
prelevate și reținute pentru a fi transmise utilizatorului. Aceste date vor fi analizate și se vor trimite
alerte către utilizator pentru cazurile cu temperatura prea ridicata sau umiditate ce ar putea pune
plant a în pericol. Monitorizarea temperaturii și a umidității aerului , are ca scop principal protejarea
plantei și prevenirea îmbolnăvirii acesteia.
Se va tine cont de condițiile de lumina ambientala și umiditate a solului și se va aprinde o bara
de LED -uri, respectiv se va acționa o pompa, pentru iluminarea și udarea p lantelor. Toate acestea
se vor aduce la cunoștința utilizatorului prin mail -uri de notificare către acesta.
Progresul și creșterea plantelor vor fi urmărite cu o camera montată în proximitatea
plantelor care va măsura înălțimea și va retine da tele. Măsurarea plantelor se va face automat,
captând o imagine care urmează a fi prelucrată și apoi analizată . Lungimea plantei va fi transmisa
utilizatorului prin email la fel ca orice alta schimbare în parametrii serei sau o acțiun e întreprinsă
pentru r emedierea factorilor de mediu.
Utilizatorul va putea vedea plantele în timp real oricând dorește tot prin intermediul camerei.
Se va realiza o transmisiune video accesibilă utilizatoru lui atât pe un browser web cât și pe
telefonul mobil. Aceasta mon itorizare are ca scop aducerea în atenția utilizatorului a defecte lor

16
plantei c e pot fi recunoscute doar dacă acesta examinează planta. Prin intermediul transmisiunii
video acesta va putea examina, în detaliu planta fără a fi necesar sa se afle fizic lângă aceasta.
Lucrarea este structurata în șase capitole. Primul capitol prezintă componentele hardware
utilizate, pen tru realizarea fizică a serei. Al doilea capitol prezintă tehnicile software, pregătirea
sistemului de operare și limbajul de pr ogramare utilizat. Al treilea capitol va descrie procedura de
udare a plantelor , iar capitolul patru va prezenta procedura de i luminare , apoi legăturile cu
utilizatorul. Aceste doua capitole conțin atât detalii de realizare fizică dar și de implementare a
programului și mail -urile către utilizator. Capitolul cinci va prezenta monitorizarea temperaturii
și a umidității relative, vizualizarea în timp real a plantelor dar și urmărirea creșterii plantelor.
Capitolul șase va fi reprezentat de asamblarea serei și de detaliile de proiectare ale acesteia.
La sfârșitul lucrării vor fi atașate codurile Python realizate și încărcate pe Raspberry Pi, cu
mențiunea ca parola de email a fost înlocuită cu aliasul „PAROLA” din motive de siguranță a
contului de email creat de mine.
Anexa A va cuprinde codurile cu mențiuni și explicați , în Anexa B se vor găsi măsurători
executate pe 3 tipuri de plante cu caracteristici diferite și observarea eficientei algoritmului de
măsurare . Anexa C cuprinde exemple de recun oaștere pentru 2 tipuri de plante. Anexa D este
dedicată împărțirii timpului alocat proie ctului și va conține diagrama Gantt .

17
Capitolul 1 – Prezentarea componentelor hardware utilizate

În acest capitol vor fi prezentate componentele hardware utilizate pentru realizarea acestui
proiect, modul lor de funcționare , rolul în cadrul acestui sistem și motivarea alegerii lor pe baza
specificațiilor și caracteristicilor de construcție ale acestora.
Componentele hardware vor fi descrise din punct de vedere al funcționalității , al principiului de
bază și cum influențează contextul folosirii lor în proiect. Va fi descrisa abordarea utilizată și
justificată alegerea fiecărei component e hardware care a intrat în realizarea serei. Alegerea
componentelo r hardware s -a făcut pe baza unor criterii atât de funcționalitate dar și de realizare
fizică (exemplu: dimensiunea redusa a unor componente sau prezența găurilor pentru montarea
pe suprafețe plate).

1.1 Raspberry Pi 3B+

Acest proiect se bazează pe Raspberry Pi care este un SBC (Single Board Computer) foarte
versatil și care poate fi folosită în foarte multe tipuri de aplicații , întrecând un microcontroler ca
varietate de utilizare.
SBC -ul este una dintre cele mai populare alegeri în proiecte de tip „embedded” dar și din
noul domeniu „IoT”. Prețul acestuia este unul mic pentru puterea acestuia de procesare și
funcțiile variate pe care le poate îndeplini în cadrul unui sistem.
Asemănarea lui cu un „calculator” clasic îl face o a legere sigura în proiecte de diverse tipuri și
complexități . Interfața lui este accesibilă iar programarea este intuitivă . Suportul celor de la
Raspberry Pi și dezvoltarea continuă a comunității aduce noi posibilități în materie de proiecte,
program e și aplicații pentru domenii bine cunoscute.
Raspberry Pi 3 B+ este modelul folosită pentru acest proiect și reprezintă a treia generație de
Raspberry Pi și este un mini -calculator realizat pe o singura placa, ce poate fi folosită într-o
gama largă de aplicaț ii.
Acesta are un CPU pe 64 de biți de tip Quad Core 1.2GHz Broadcom BCM2837 , memorie
RAM de 1GB , un port Ethernet , patru porturi USB 2.0 folosite pentru conectarea perifericelor,
un port HDMI , un port CSI pe ntru conectarea camerei . Sistemul de operare se va afla stocat pe
un card MicroSD, care se va introduce în slot-ul dedicat de pe Raspberry Pi. SBC -ul va fi
alimentat la 2,5A folosind un cablu dedicat.

18
Figura 1-1

Pe Raspberry Pi va rula sistemul de operare Raspbian în varianta Desktop, descărcat și
instalat de pe site -ul oficial al dezvoltatorilor Ra spberry Pi. Am ales utilizarea variantei Desktop
deoarece voi utiliza mediul de dezvoltare Geany, pus gratuit la dispoziția utilizatorilor de
Raspbian. Acesta a facilitat editarea codului sursă utilizat pentru funcționarea serei. Această
variantă de sistem de operare permite și accesarea terminalului și scrierea comenzilor ca pe orice
versiune de Linux . Terminalul va fi intens folosită pentru descărcarea librăriilor , aducerea
sistemului de o perare la ultima versiune, rularea codului și testarea funcționalităților [1].
În cadrul serei realizate Raspberry Pi are rolul de microcontroler pentru partea de menținere a
condițiilor pentru plante și de server video , pentru monitorizarea video și urmărirea procesului de
creștere în înălțime .
Am ales Raspberry Pi 3B+ în loc de alt microcontroler deoarece partea de monitorizare video
și prelucrare video se pot extinde mai mult cu acest dispozitiv.
Pe placa exista 40 de pini de tip GPIO , fiind pini digitali, care pot fi folosiți ca intrare sau
ieșire . Pinii au nume asociate ce nu respecta ordinea în care ei sunt dispuși fizic. Denumirile și
funcțiile lor de baza se pot vizualiza în Figura 1 -1, împreună cu așezarea lor fizică . Intre aceștia
se găsesc 2 pini de tensiune 5V, 2 pini de tensiune 3,3V și 8 pini de tensiune 0V. Acești pini nu
sunt configurabili având doar tensiunile de ieșire stabilite, însă ceilalți pini suporta tensiuni de
intrare și ieșire de până la 3,3V . Configurarea pinilor se realizează după cum urmează . Dacă un
pin este configurat ca ieșire acesta poate avea două nivele de tensiune : nivel înalt și nivel scăzut
(engleză : „high” și „low”) semnificând 3,3V și respectiv 0V, iar dacă acesta este setat ca intrare
el va fi citit tot după aceste doua nivele de tensiune (3,3V și 0V). Pinii mai pot avea diferite
funcții , diferite de cele menționate mai sus, unele putând fi folosite pe oricare dintre pini, altele

19
doar pe pini specifici. Pr intre aceste funcții regăsim funcția PWM , utilizată și în acest proiect
pentru controlul pompei de curent continuu. Exista doua tipuri de PWM disponibil cu ajutorul
pinilor de pe placa. Primul tip este PWM realizat de hardware și poate fi folosită numai p e pinii
dedicați GPIO12, GPIO13, GPIO18, GPIO 19. Al doilea tip de PWM este realizat de software și
poate fi folosită pe toți pinii.
Deși sunt numeroși , pinii de tip GPIO prezenți pe Raspberry Pi nu suporta mai mult de 16mA
fiecare și 51mA în total. Ac este limitări au fost luate în considerare în acest proiect pentru
protejarea SBC -ului dar și a componentelor utilizate.
Programarea pinilor de tip GPIO se poate face folosind mai multe limbaje de programare cum
ar fi C, C++, Python, Scratch. În acest proiect programarea pinilor s -a realizat în Python ,
utilizând librăria RPi.GPIO. Aceasta librărie permite folosirea pinilor ca intrări sau ieșiri și
facilitează citirea de la aceștia [2].
1.2 Senzorul de umiditate rezistiv

Direct în sol va fi montat un senzor de umiditate de tip rezistiv care este folosită într-o gama largă
de aplicații cum ar fi mici proiecte de agricultură sau creșterea plantelor în apartament. Acesta
reprezintă o metoda convenabilă , ușor de folosită și care nu reprezintă niciun risc pentru plantă ,
neafectând -o în mod direct. Alegerea acestui senzor a fost făcută pe baza modului de funcționare ,
a dimensiunilor sale reduse și a prețului accesibil. Fiind un senzor cu ieșire atât digitala cât și
analogica, conectarea la Raspberry Pi a putut fi făcută folosind ieșirea digitala fără a fi nevoie de
folosire unui convertor analog -digital. Scopul lui în acest proiect este de a oferi date de intrare în
Raspberry Pi cu ajutorul cărora se va controla udarea plantelor.
Figura 1-2
Senzorul are doua probe care introduse în sol vor măsura rezistența în funcție de cantitatea de
apa din sol. Solul uscat va avea o conductivitate mai scăzută decât solul umed, iar schimbările
vor fi resimțite la măsurarea rezistenței . Aliment area acestui senzor s-a făcut la 5V, așa cum este
recomanda t [3].

20
1.3 Pompa de curent continuu
Pompa comandată pentru udarea plantelor este o pompa de curent continuu care va fi
introdusă intru-un bazin cu apă și va avea un furtun conectat, al cărui capăt va fi introdus în
ghiveciul plantei. Acest model de pompă este unul ce se introduce vertical în bazin și va scoate
apa la comandă atunci când este nevoie. Carcasa acesteia și modul de construire este unul
amfibiu ce permite scufundarea totală în apă.
Figura 1 -3
Alegerea modelului a fost făcută pe baza specificațiilor , a dimensiunilor reduse ( înălțime de
4.26 cm și lățime maximă de 3,85 cm ) și datorită faptului ca este o pomp a silențioasa . Pompa
are o tensiune maximă de alimentare de 4,5V, curentul maxim fiind de 0,18 A , având
capacitatea de pompare este de până la 100L/h [4]
1.4 Driver -ul de motor dual în punte H

Bazat pe cipul MX1508 ,driver -ul poate controla maxim două motoare de curent continuu sau
un singur motor de tip stepper. Intrările pentru comandă sunt A1, A2 pentru motorul 1, respectiv
B1 și B2 pentru motorul 2. Prin combinații ale semnalelor de intrare se pot obține cele doua
sensuri de funcționare ale motoarel or (înainte și înapoi ), frână sau așteptar e. Există și
posibilitatea de a controla viteza motorului pr intr-un semnal PWM.
În cadrul acestei sere el va controla doar un singur motor de curent continuu iar scopul lui
principal este protejarea plăcii Raspb erry Pi.
Alimentarea acestui driver se poate face intre 2V și 10V, intrările suportă tensiuni intre 1,8 V și
7V iar curentul de lucru este de până la 1,5A.
Alegerea acestui driver s -a făcut pe baza dimensiunilor sale reduse , durabilității , protecți ei
pentru motor și datorită faptului ca are un consum mic de energie [5].

Figura 1 -4

21
1.5 Senzorul de temperatura și umiditate DHT11

Pentru înregistrarea temperaturii și a umidității din seră am utilizat senzorul de temperatură și
umiditate DHT11. Acesta este un senzor care poate citi continuu temperatura și umiditatea pe
care le va transmite la microcontroler pentru a fi vizualizate de utilizator.

Figura 1-5

Acest senzor măsoară temperatura aerului intre 0 °C și 50 °C cu o acuratețe de ±2.0°C și
umiditatea aerului intre 20% și 90% RH (umiditate relativă ) cu o acuratețe de ±5.0% RH. Are un
consum mic de p utere și este un senzor stabil pe termen lung. Acesta a fost ales pe baza
performanțelor foarte bune în aplicații ce nu necesita condiții extreme, cum ar fi sera de
apartament. Dimensiunile reduse și posibilitatea de montare pe supra fețe reprezintă un alt avantaj
al folosirii acestui senzor în cadrul acestui proiect [5].
1.6 Fotorezistorul

Pentru monitorizarea cantității de lumină pe care o primesc plantele vom folosi un fotorezistor
care va indica prezenta sau absenta luminii. Fotorezistorul este o componentă pasivă care are un
principiu de funcționare foarte simplu, o precizie buna și este ușor de folosită . Rezistenta
acestuia variază în funcție de lumina căzuta pe suprafața lui sensibila și scade cu cât lumina este
mai puterni că. În aceasta aplicați e ieșirea fotorezistorului va fi criteriul de comutație pentru bara
de LED -uri ce va asigura lumina plantelor și va avea doua stări specificate : „Lumina” și
„Întuneric ” [6].

22
1.7 Raspberry Pi Camera V2

Figura 1-6

Modulul de camera este special conceput pentru Raspberry Pi și este folosită în foarte multe
aplicații ce necesita înregistrare video sau captare de imagini. Aplicațiile pot fi dezvoltate în
foarte multe feluri, fiind foarte ușor de lucrat cu aceasta camera inteligenta.
Camera folosită în acest proiect reprezintă versiunea numărul 2 (V2) a camerei originale pentru
Raspberry Pi. Ea este bazată pe un senzor Sony IMX219 de 8Mp și poate fi folosită pentru
înregistrare video de c alitate înaltă sau fotografi i. Librăriile puse la dispoziție pentru această
cameră sunt diverse și pot fi folosite în foarte multe tipuri de aplicații ce necesita camera.
Sunt suportate modurile 1080p 30, 720p60 și VGA90 pentru înregistrare video și performează
bine și în condiții de luminozitate mai scăzută . Se conectează la Raspberry Pi pr intr-un cablu de
tip „ribbon” care este foarte flexibil și permite mutarea camerei și poziționarea ei după
necesitate. Cablul este conectat la portul CSI pe Raspberry Pi.
Manevrarea camerei trebuie făcută cu grija deoarece aceasta este sensibila la electricit atea
statica. Ea trebuie conectată numai când Raspberry Pi este nealimentat pentru a evita accidentele ,
precum atingerea camerei de pinii GPIO și distrugerea c ompleta a senzorului [7].

23
Capitolul 2 –Tehnologii software utilizate

2.1 Sistemul de operare Raspbian

Pentru accesarea Raspberry Pi și folosirea acestuia ca centrul serei inteligente este necesară
instalarea sistemului de operare Ras pbian, disponibil gratuit pe site -ul oficial al producătorului .
Raspbian este un sistem de operare complet gratuit bazat pe Debian, optimizat pentru
funcționarea pe Raspberry Pi și este sistemul de operare recomandat pentru acest dispozitiv.
Acest software vine cu peste 35000 de pachete, software pre -compilat și adunat într-un format
atrăgăt or, accesibil, ușor de instalat și folosită . Raspbian este un proiect al comunității active
aflat sub îmbunătățire și modificare continuă , într-un efort de a aduce utili zatorilor un produs
final complet [8].
Instalarea Raspbian este una simplă și ghidată pentru a avea acces la toate resursele puse la
dispoziție de acest sistem de operare. De pe site -ul oficial Raspberry Pi se descarcă arhiva
conținând varianta de Raspb ian aleasă . Aceasta poate fi Desktop sau Lite. Varianta Desktop
oferă mai multe opțiuni și accesare mai facila, în timp ce varianta Lite este axata pe terminal,
fiind un bun mijloc de învățare . Deși în aceasta lucrare se va folosi va rianta Desktop, majorit atea
comenzilor vor fi prin intermediul terminalului pentru o mai buna înțelegere a comenzilor și a
utilizărilor acestora.
După descărcarea arhivei aceasta se copiază pe un card de tip MicroSD și se dezarhivează
conținutul direct pe cardul de memorie . Cardul se va introduce în Raspberry Pi atunci când
acesta nu este alimentat. Se introduc pe rând toate dispozitivele periferice ce se doresc a fi
utilizate: monitor, mouse, tastatură . Se pornește alimentarea și se așteaptă ca inst alarea
sistemului de op erare sa se facă automat, fără intervenția utilizatorului. Timpul este accesibil, iar
placa poate fi utilizată imediat după .
Atunci când sistemul de operare și -a completat instalarea, utilizatorul este rugat sa facă prima
autentificare, care are loc folosind numele de utilizator și parola implicite. Acestea sunt găsite
tot pe site -ul oficial Raspberry Pi și pot fi modificate de cate ori și în ce fel dorește utilizatorul.
Prima autentificar e are loc astfel:

Username: pi
Password: raspberry

După prima autentificare utilizatorul poate folosi toate programele pre -instalate și toate
funcționalitățile acestui sistem de operare [9].
Înainte de începerea propriu -zisa a realizării programelor folosind editorul Geany, vom
actualiza sistemul de opera re și pachetele cât de des este posibil, pentru a fi mereu la curent cu
ultima versiune și ultimele modificări . Pentru acest pas Raspberry Pi va trebui conectat la
internet, fie folosind un cablu de Ethernet fie folosind conexiunea wireless la o rețea din
apropiere.

24
Deoarece folosim varianta Desktop a sistemului de operare Raspbian se va găsi și folosi
LXTerminal . Toate comenzile vor fi introduse manual în acesta.
Pentru a ne a sigura ca Raspberry Pi are pe el ultima versiune de pachete disponibi le vom
folosi următoarele comenzi:

sudo apt -get update
sudo apt -get upgrade
sudo reboot
Prima comanda va actualiza index -urile pachetelor, a doua comanda va face actualizarea
propriu -zisa în timp ce a treia comanda este pentru restartarea plăcii . Coma nda „apt” este folosită
sa instaleze software pe sistemul de operare Raspbian. După ce Raspbe rry Pi pornește din nou,
utilizatorul își poate folosi în continuare toate resursele, fiind sigur ca toate pachetele sunt la
ultima versiune.
Folosirea „sudo” da acces utilizatorului sa facă schimbări permanente având privilegiul de
„root”. Aceasta com anda da temporar acest acces pe contul utilizatorului sa facă aceste
schimbări . Comenzile precedate de „sudo” trebuie date cu foarte mare atenție , deoarece folosir ea
greșită poate atrage consecințe grave și face schimbări ireparabile la nivelul sistemului de
operare [1 0].
După realizarea de scripturi folosind un mediu de dezvoltare (ex: Geany) sau chiar direct
terminalul și salvarea acestora, ele se vor rula folos ind următoarele comenzi . În acest proiect
codul va fi scris integral folosind limbajul de pro gramare Python și toate comenzile sunt adaptate
pentru acest mod de utilizare. Pentru fișierele salvate în directorul principal se va proceda astfel:

ls
Directoa rele și fișiere aflate aici vor fi listate.
python nume_fisier.py
După aceasta comanda script -ul de Python va rula și utilizatorul va putea observa rezultatele
direct în consola apărută și sesiza diferite erori.
2.2 Limbajul de programare Python

Pentru realizarea codului acestui proiect se va folosi integral lim bajul de programare Python .
Acesta este un limbaj foarte popular, conform statisticilor recente și deși este apărut de
aproximativ 30 de ani rămâne încă unul dintre limbajele de programare care domină piața . Gama
largă de utilizare a acestui limbaj accesibil nu se limitează doar la aplicații web, iar el poate fi
folosită în aplicații de tip „embedded”. În cadrul acestui proiect se utilizează limbajul de
programare Python într-o aplicație de tip „embedded”. Folosirea acestuia are numeroase avantaje
printre care și rularea codului realizat în Python pe orice sistem de operare. În acest caz este
necesară rularea pe Ras pbian, care este o distribuție de Linux modificata.
Limbajul Py thon se remarca prin conceptul sau de bază, adică indentarea. Indentarea reprezintă
aranjarea codului după un anumit set de reguli astfel încât acesta sa fie interpretat de compilator.

25
Avantajul acestei metode de scriere este ca duce la scăderea numărului de linii de cod dintr -o
aplicație complexă . În același timp, aceasta metoda prezintă și un mare dezavantaj. Acela de a
avea linii de cod inde ntate după alte reguli, când acestea trebuia interpretate în mod diferit.
Corectitudinea și eficienta codului depind în întregime de programator și de atenția acordata
indentării .
Un alt avantaj al acestui limbaj de programare este reprezentat de numărul mare de biblioteci și
diversitatea acestora. Fiecare membru al unei comunități bazate pe o resursa de tip „open -source ”
(fără licență comerciala) poate contribui la dezvoltarea de noi soluții , creând astfel noi
oportunități pentru diverse game de aplicații . În acest proiect librăriile Python utilizate vor fi
descrise în capitolele aferente folosirii lor. [11] [12].
Pentru instalarea Python 3 pe Ras pberry Pi se folosește următoarea comanda dată în terminal
[13]:
sudo apt -get install python3 pip
2.3 Librăria OpenCV
OpenCV , (pe scurt de la Open Source Computer Vision Library) reprezintă o librărie de tip
„open source” folosită în foarte multe aplicații de inteligență artificială , recunoaștere și analiză
de conținut . Scopul acestei librarii este de a accelera procesul de percepție și a aduce aplicații
complexe în toate domeniile ce necesita acest tip de librărie .
Utilizată pe scara largă chiar și de marii dezvoltatori de aplicații precum Google sau
Microsoft . OpenCV a contribuit la îmbunătățirea acestui sector de aplicații și are o comunitate
de contribuitori destul de mare.
Librăria OpenCV este gratuită și poate fi utilizată în scopuri academice dar și comerciale,
făcând astfel mai ușoare dezvoltarea și inovarea. Conținând peste 2500 de algoritmi diverși ,
aceasta librărie se poate folosi la aplicații precum recunoașterea facială , detectarea mișcării ,
detectarea o biectelor, urmărirea obiectelor dar și prelucrarea imaginilor pentru o calitate mai
buna sau reproducerea modelelor 3D.
OpenCV are interfețe pentru Python, C ++, Java și MATLAB și poate fi folosită pe Windows,
Linux , Android și Mac OS și aplicațiile pe ca re se axează sunt cele de video în timp real.
În acest proiect librăria va fi folosită pentru recunoașterea conturului plantei, recunoaștere ce
va fi mai încolo folosită pentru măsurare . Folosirea librăriei a fost aleasă în acest proiect datorită
popula rității ei si datorită faptului ca este foarte versatilă [14].

26
2.4 Conectarea la internet, configurarea pentru Gmail și securitatea

Raspberry Pi va fi conectat în permanenta la o rețea wireless, deci conexiunea fizică prin
Ethernet nu este necesară, ba chiar ar aglomera incinta limitata ca spațiu a serei. Conectarea la
rețeaua wireless se realizează ca pe orice alt dispozitiv prin al egerea rețelei și introducerea
parolei.
Pentru a putea trimite și primi mail -uri vom utiliza serviciul Gmail, pus gratuit la dispoziție
utilizatorilor de către Google. Utilizatorii pot accesa Gmail pe orice platforma și pe orice sistem
de operare chiar și din alte aplicații de mail, nu neapărat cea de la Google. În octombrie 2018
serviciul avea peste 1,5 miliarde de utilizatori și este printre cele mai populare servicii de mail
[15].
În aceasta aplicație folosirea Gmail pe toate dispozitivele reprez intă un avantaj deoarece
utilizatorul poate verifica notificările atât de telefon cât și pe orice alt dispozitiv, fără a exista
limitări și fără a fi necesară instalarea altor aplicații .
Se va crea o adresă de email dedicată de pe care vom trimite mai l în contul utilizatorului sau
orice cont necesar. În acest proiect s -a ales trimiterea mail -urilor tot către cont ul dedicat,
deoarece am efectuat multe teste, iar multe mail -uri ar fi aglomerat căsuța unui mail utilizat în
mod curent. După faza de testare se va trece la un mail des utilizat pentru ca notificările vor fi
destul de rare și în număr mic, atât cât este n ecesar pentru transmiterea datelor esențiale .
Crearea contului se face în mod normal urmând pașii recomandați de Google, cei de verificare
a identității și cei de securitate.

Figura 2-1

Deși contul este gata de a fi folosit , este nevoie de accesarea setărilor de securitate din cont.
Modul de trimitere a mail -urilor din acest proiect este văzut de serviciul Gmail ca fiind de
securitate scăzută și trebuie sa permitem și conectarea acestui cont prin aplicații de securitate mai
joasa.

27
2.5 SMTP
Pentru transmiterea mail -urilor de notificare către utilizator este necesară utilizarea unui
protocol de mail. În continuare este prezentat protocolul utilizat și particularitățile acestui a.
SMTP (Simple Mail Transfer Protocol) reprezintă protocolul standard pentru servicii de tip
mail.
Este un protocol întâlnit la nivelul Aplicație al stivei TCP/IP și asigura transmisia și livrarea
unui email prin intermediul Internetului. Acest pr otocol se întâlnește în aplicații de mail care au
ca și componente patru elemente cheie: clientul (utilizatorul), server -ul, agentul de transfer și
agentul de livrare.
Utilizarea acestui protocol pe Raspberry Pi se poate face direct din terminal, însă aceasta
metoda nu este potrivita pentru aceasta aplicație , de aceea trimiterea mail -ului va fi integrata în
codul aplicației .
Se va folosi librăria Python „smtplib” pentru instrucțiunile specifice iar pe Raspberry Pi se va
instala serviciul SMTP folosin d:
sudo apt -get install ssmtp
După instalarea serviciului se va folosi:
sudo apt/etc/ssmtp/ssmtp.conf
Această comandă accesează setările . Aici vom introduce toate datele aferente contului creat
special pentru acest proiect.

Figura 2-2

28
După introducerea datelor vom folosi comanda următoare pentru a testa toate funcționalitățile :
echo “hello” | mail -s “test” rasp.pi.929@gmail.com

După ce aceasta comandă a fost dată se va accesa contul de Gmail c reat pentru a verifica dacă
mail-ul de test a ajuns la destinație .

Figura 2-3

Serviciul SMTP a fost corect instalat pe Raspberry Pi și mail -urile se trimis corespunzător .
După aceasta etapa vom putea integra și folosi serviciul SMTP în codul aplicației care va fi
adaptat pentru a corespunde cerințelor aplicației .

29
Capitolul 3 – Udarea plantelor
3.1 Observarea factorilor de mediu
Primul și cel mai important aspect din întreținerea condițiilor plantei este udarea acestora.
Multe plante de apartament se recomanda a fi udate cel puțin o dată pe săptămâna pentru a fi
sănătoase și a se putea dezvolta. Planta folosită și studiată în acest proiect este o plantă de Ya con,
care nu este o plantă de apartament, aceasta are nevoie de condiții diferite. Înainte de începerea
realizării proiectului am ținut planta sub observaț ie pentru a vedea cât de des este necesară
udarea. În condițiile de apartament , solul devenea foarte uscat odată la trei zile, iar planta începea
sa dea semne ca nu are suficientă apă, frunzele erau lăsate în jos din cauza lipsei de umiditate a
solului. Senzorul de umiditate din pământ semnala lipsa de umiditate tot la un interval de trei
zile. S -a realizat o calibra re a acestuia pentru a nu fi depășit acest termen de 3 zile.

Tabel 3 -1

Figura 3 -1

Ziua Umiditatea solului Activare senzor sol
1 Proaspăt udat NU
2 Moderat NU
3 Aproape uscat DA
4 Proaspăt udat NU
5 Umed NU
6 Aproape uscat DA
7 Proaspăt udat NU
8 Umed NU
9 Moderat NU
10 Aproape uscat DA
11 Proaspăt udat NU
12 Moderat NU
13 Aproape uscat DA
14 Proaspăt udat NU
15 Moderat NU
16 Aproape uscat DA
17 Proaspăt udat NU
18 Umed NU
19 Aproape uscat DA
20 Proaspăt udat NU

30
3.2 Schema electrică și conectarea la Rasp berry Pi

Montajul realiz at fizic pentru procedura de udare a plantelor este prezentată în acest
subcapitol și se regăsește în schema din figura 3 -2.
Udarea plantelor se va face cu ajutorul pompei prezentate în subcapitolul 1.3. Pompa
submersibila va fi pusă într-un recipient cu apă, ușor de reumplut de către utilizator, și suficient
de mare pentru a întreține umiditatea solului pentru o perioadă de timp mai mare . În acest caz,
utilizatorul poate sa nu fie prezent pentru un timp îndelungat (de exemplu: este într-o călătorie )
iar plantele vor fi udate la intervalul necesar dezvoltării lor. Un furtun va fi atașat și securizat de
ghiveciul plantei astfel încât sa nu își schimbe poziția din cauza apei date de pompa. Dacă
furtunul se mișcă în timpul udării este posibil ca apa să ajungă pe Raspberry Pi sau pe modulele
din seră. Eveniment ce nu este dorit sub niciun fel, iar evitarea acestuia și siguranța plăcii și a
modulelo r sunt esențiale pentru buna funcționare a serei.

Figura 3 -2

Conform datelor de la producător , pompa de curent continuu poate avea un curent maxim de
180mA , care este mult peste limita de 16mA per pin pentru conectarea de componente la

31
Raspberry Pi. Pentru protejarea plăcii și acționarea corecta a pompei de curent continuu se va
folosi driver -ul de motor prezentat în subcapitolul 1.4. Controlul pomp ei și modurile de acționare
vor fi descrise în subcapitolul 3.3. Driverul va fi alimentat la o sursa te tensiune continua de 5V
pentru a reduce consumul total de energie de la Raspberry Pi. Una di ntre caracteristicile de baza
ale acestu i driver de motor es te ca în timpul de „standby” ( așteptare ), el consuma curenți extrem
de mici, de ordinul micro amperilor.
Conectarea acestuia la Raspberry Pi se va face legând cele 2 intrări , marcate IN1 și IN2 la
GPIO 7 respectiv GPIO 27, în timp c e ieșirile OUT1 și OUT2 vor fi conectate la alimentarea
respectiv firul de nul al pompei. GPIO 7 va fi setat ca PWM de tip software pentru a limita astfel
viteza pompei.
Acționarea pompei se va face pe baza semnalului digital primit de la senzorul de u miditate
introdus în sol. Acesta este montat lângă planta , cât mai aproape de rădăcina , așa cum este
indicat. Ieșirea digitală a acestuia va fi conectată la GPIO 21 de pe Raspberry Pi și va fi citi t la
interval de o secunda. Conform datelor de producător senzorul va consuma maxim 15mA,
valoare ce nu pune în pericol placa sau senzorul. Dacă apa este prezentă în sol, rezistența va
scădea deoarece solul umed va conduce curentul mai bine decât solul us cat, iar senzorul va
semnala imediat acest aspect . Raspberr y Pi va răspunde cu comanda pentru driver și pompa va fi
acționată . După ce apa furnizată de pompă a ajuns în ghiveci senzorul de umiditate va simți
prezenta apei, va transmite semnalul către Rasp berry Pi iar acesta va da comanda de oprire a
pompei.

3.3 Implementarea soluției

Luând în calcul evoluția umidității solului pe perioada observata, soluția software va
răspunde întocmai cerințelor . Verificarea senzorului de umiditate a solului va fi făcută în mod
continuu la o secunda. În program se va in troduce un numărător , care va numără secundele
fiecărei acționari a pompei. Dacă solul este uscat acest numărător va fi incrementat odată la o
secundă atâta timp cât este acționată pompa. Când numărătorul ajunge la 2 secunde se va iniția
procedura de trans mitere a mai -lului către utilizator.
Programul este bazat pe organigrama prezentată în figura 3 -3 și va fi atașat în Anexa A a
acestei lucrări .

32
Figura 3-3

Se vor folosi următoarele librarii Python :RPi.GPIO, time, smtplib. RPi.GPIO face legătura
dintre cod și pinii fizici existenți pe Raspberry Pi și face posibilă codarea și utilizarea acestora.
Librăria „time” va fi utilizată pentru funcția „sleep”. Aceasta funcție va det ermina timpul intre
citirile succesive de la senzorul de umiditate. Librăria „smtplib” va fi folosită pentru funcțiile de
trimitere mail și configurări .
Se folosește comanda :
GPIO.setwarnings(False)

Aceasta dezactivează mesajele de tip „warning” c are pot apărea datorită pinilor folosiți în alte
programe și rămași setați într-un anumit mod.
Pentru accesar ea pinilor și configurarea lor s -a ales modul BCM, dat prin comanda:
GPIO.setmode(GPIO.BCM)

Se vor folosi denumirile pinilor pentru accesa re, nu numărul care este atribuit fiecărui pin.
Accesarea folosind numărul se va face folosind comanda modifica ta cu „BOARD” [17] .
Programul începe cu configurarea pinilor de intrare și ieșire folosind sintaxa:

33
GPIO.setup(numar_GPIO,stare)

Starea poate fi de forma GPIO.OUT sau GPIO. IN pentru ieșiri respectiv intrări digitale .
Conform conectării fizice GPIO 21 va fi configurat ca intrare iar GPIO 27 și GPIO 07 vor fi
configurate ca ieșiri .
Urmează configurarea GPIO7 ca PWM software cu frecve nta setată în linia de cod de mai jos,
care rămâne nemodificata. Frecventa de start va fi 100 Hz, pentru testare.

pwm=GPIO.PWM ( 07,100)
pwm. start (0)

Pe GPIO 7 se va porni PWM -ul din momentul 0 si vom verifica funcționalitatea pompei
folosind următoa rele comenzi . La pornirea programului pentru timp de o secunda vom verifica
funcționalitatea pompei. Testul acesta s -a efectuat fără submersia pompei în apa. GPIO7 si
GPIO27 vor fi inițializați cu valorile inițiale TRUE si respectiv TRUE, pentru a fi folos ite
conform tabelului 3 -2.
GPIO.output(07, True)
GPIO.output(27, True)

Pompa ar trebui sa răspundă timp de o secunda, pentru a vedea ca nu este nimic în neregula cu
ea.
După efectuarea testării se vor face configurările pentru transmiterea email -ului. Se va inițializa
serverul si se va autentifica mail -ul creat special p entru notificări . Se va crea tipul de mesaj si va
avea forma dorita de SUBIECT si TEXT.

server=smtplib. SMTP ('smtp.gmail.com',587)
server. starttls ( )
server. login("rasp.pi.929@gmai l.com",”PAROLA")

SUBIECT="Notificari sera"
TEXT="Planta a fost udata."
msg='Subject: {} \n\n {}'.format(SUBIECT,TEXT)

Se va inițializa numărătorul la valoarea 0, acesta va fi folosită pentru a număra secundele în
care pompa este activ ă si plantele su nt udate.
După toate aceste inițializări si configurări vom crea o bucla infinita care va citi ieșirea
senzorului de umiditate

34
S-a luat în considerare viteza pompei și controlul ei astfel încât cantitatea de apă sa fie
limitată . Controlul pompei s -a făcut luând în considerare următoarele combinații ale semnalelor
de pe GPIO 07 și GPIO27 [18].

IN1 (GPIO7) IN2(GPIO27) Acțiune pompa
1 0 Înainte
0 1 Înapoi
0 0 Așteptare
1 1 Oprire

Tabel 3 -2
Din acest tabel vom folosi doar stările „Înainte ” și „Oprire”. La acest model de pompa
acționarea inversă („Înapoi ”) nu este posibilă și în aceasta aplicație ea nu ar fi fost relevantă .
Când senzorul de umiditate va raporta un sol uscat, se va schimba factorul de umplere al
pwm -ului la 50% iar GPIO 07 și GPIO27 vor avea valorile TRUE respectiv FALSE.

pwm.ChangeDutyCycle(50)

Numărătorul “num” va contoriza secundele pentru care exista semnal pe GPIO21. Când
numărătorul a ajuns la 2 secunde, se va folosire următoarea comanda pentru a trimite mail -ul
creat si configurat mai sus.
server.sendmail("rasp.pi.929@gmail.com"," DESTINATAR ",msg)

Problema întâmpinat ă la aceasta etapă a fost trimiterea prea multor mail -uri atât timp cât
pompa era activ ă și uda plantele. Trimiterea unui mail în momentul exact al acționarii pompei
conducea la trimiterea a mai multor mail -uri consecutive care inundau căsuța poștală a
utilizatorului. Aces t aspect neplăcut a fost rezolvat cu implementarea numărătorului și trimiterea
mail-ului doar la după 2 secunde după începerea udării plantelor.

Figura 3-4

35

După fiecare citire realizată în bucla de „while” programul va aștepta o secundă până la
următoarea citire. Din librăria time se va folosi funcția sleep care va opri activi tățile timp de o
secundă . Structura comenzii este următoarea :
time.sleep(1)
În cazul în care planta a fost deja udata sau solul nu este încă uscat, numărătorul va fi resetat
la valoarea inițiala de 0 iar programul va verifica din nou peste o secunda. Pentru a evita
eventualele probleme apărute cu oprirea pompei după ce aceasta a fost acționată ea va fi forțata
sa se oprească . GPIO7 și GPIO27 vor avea ambii valoarea TRUE, forțând motorul sa frânez e.
Fără aceasta comanda asupra motorului programul nu a funcționat corespunzător . PWM -ul va fi
de asemenea oprit deoarece în acest caz folosirea lui nu este necesa ră. Se va folosi [19]
următoarea comanda :
pwm.stop()

La sfârșitul programului vom închid e server -ul de mail și vom efectua o „ curățare ” asupra
pinilor, dacă aceștia nu vor mai fi folosiți și pentru a nu fi ținuți ocupați de alte programe, care
pot cer e acces la aceleași resurse:
server.quit()
GPIO.cleanup()

3.4 Concluzii generale după implementare

După implementarea algoritmului si realizarea soluției fizice se constată că intervalul de
aproximativ de 3 zile se respectă si la udarea plantelor fol osind pompa de curent continuu. Planta
este udată corespunzăto r și nu prezintă semne de lipsa de apă.
Senzorul de umiditate a solului de tip rezistiv are avantaje în cadrul acestui proiect însă
folosirea lui intensa și aflarea acestuia în sol pe perio ade îndelungate poate duce la funcționarea
defectuoasă sau la scăderea preciziei.
Folosind senzorul de umiditate rezistiv planta nu este pusă în pericol deoarece acest senzor nu
conține substanțe care ar putea dauna dezvoltării plantei . Folosirea acest uia pe timp îndelungat
are următoarele dezavantaje majore. În continuare se vor explica aceste dezavantaje și se vor
oferi soluții de remediere de lungă durată .

36
Folosirea senzorului de umiditate rezistiv pe o perioada lungă de timp va duce la det eriorarea
probelor inserate în sol. S tratul de metal de pe acestea va începe să se subțieze și să dispară pe
porțiuni . Acest fenomen se întâmplă deoarece proprietățile solului și apa folosită la udare duc la
corodarea senzorului și la scăderea performante lor acestuia.
Remedierea acestei probleme este reprezentată de înlocuirea senzorului când acesta își pierde
complet proprietățile iar stratul de metal prezent pe probe este afectat iremediabil. Scăderea
preciziei nu reprezintă o problema imediata în folosirea acestui senzor deoarece în acest tip de
aplicație precizia acestuia nu este necesară ; se dorește doar detectarea apei în cantități mai mari.
Dacă senzorul își va pierde proprietățile total și stratul de metal prezent pe probe va fi vizibil
afectat, înlocuirea acestuia se poate face ușor și fără alte complicații . Cele doua fire care leagă
senzorul de modulul ieșire vor fi deconectate de la senzorul afectat și cel nou va fi atașat și
inserat în sol.
În concluzie acest inconvenient nu este unul care ar reprezenta un pericol real și imediat însă la
utilizarea de lungă durata a serei se vor constata probleme cu acesta iar înlocuirea este necesară .

Capitolul 4 – Iluminarea plantelor

37
4.1 Observarea factorilor de mediu
Pentru observarea factorilor de mediu s -a realizat testarea folosind foto rezistorul conectată la
Raspberry Pi pentru a vedea cam în jurul cărei ore semnalul dat către SBC va fi „1”.
Am urmărit semnalul de la fotorezistor timp de 2 săptămâni , doar la lumina naturala.
Conform testului fotorezistorul sesiza o descreștere a luminii în jur de ora 19:00, când
intensitatea luminii scădea considera bil.
Ținând cont de acest aspect procedura de notificare a utilizatorului nu putea fi corelata cu cea
pentru udarea plantelor, deoarece cel puțin o notificare pe zi va fi de la lumina, iar cele de la
acționarea pompei pentru udarea plantei ar fi mult m ai rare.
În concluzie dacă nu intervin alți factori ( lumina de la un bec din încăpere sau alte surse de
lumina) bara de LED -uri va fi aprinsă o dată pe zi și se va trimite un singur mail de notificare.

4.2 Schema electrică și conectarea la Rasp berry Pi
Montajul fizic pentru iluminarea plantelor este realizat conform schemei din figura 4 -1 și este
detaliat ă în acest subcapitol.

Figura 4-1

Fotorezistorul va fi intrarea acestui montaj și va avea două stări „1” și „0”, în funcție de
semnalul primit de la el Raspberry Pi va acționa cele dou a LED -uri pentru iluminarea serei.

38
LED -urile vor fi lipite pe o plăcuță și montate astfel încât planta s a primească cât mai multă
lumină .
Pentru limitarea curentului prin fotorezistor se va folosi un rezistor de 10 KΩ legat intre
alimentare de 5V prov enita de la Raspberry Pi și GPIO23 pe care se va face citirea. La utilizarea
LED -urilor s -au folosit rezis toare de 470 Ω pentru limitarea curentului și protejarea LED -urilor.
Ținând cont de dimensiunile de proiectare ale serei lumina provenita de la ele 2 LED -uri este
suficienta și limitele de curent impuse de Raspberry Pi sunt re spectate . Prin fiecare LED v a trece
un curent de aproximativ 7mA. Legarea celor doua LED -uri la un singur pin ar fi generat un
curent destul de apropiat cu limita de 16mA per pin . Per total ansamblul nu depășește nicio
specificație impusa și poate funcționa corespunzător .

4.3 Impl ementarea soluției

Figura 4-2

Soluția va fi implementata folosind principiul prezentat în organigrama din figura 4 -2. Citirea
va fi făcută în mod continuu de la fotorezistor și pe baza acestei citiri se vor lua deciziile și se va
comunica utilizatoru lui.

39
În codul realizat pentru aceasta soluție ne vom baza pe datele de la fotorezistor pentru a lua
decizii, astfel pinul GPIO23 va fi inițializat ca fiind intrare digitala. Pentru aprinderea celor doua
LED -uri se vor utiliza pinii GPIO24 și GPIO5, declarați ca ieșiri digitale.
Mail -ul trimis va fi de forma aceasta, iar subiectul va fi identic ca cel de la udarea plantelor:
„Notificări sera”. Acest subiect a fost ales special pentru a ocupa puțin spațiu deoarece un text
prea lung nu ar fi încăput pe ecranele telefoanelor în aplicațiile de mail.

server=smtplib.SMTP('smtp.gmail.com',587)
server.starttls()
server.login("rasp.pi.929@gmail.com"," PAROLA")
SUBJECT="Notificari sera"
TEXT="Lumina pentru crestere a fost aprinsă."
msg='Subject: {} \n\n {}'.format(SUBJECT,TEXT)

GPIO24 și GPIO7 car e corespund celor două LED -uri vor avea 2 stări posibile. („High”,
„Low). Citirea de la fotorezistor se va face într-o bucla infinita, iar în cazul unei lumini scăzute
detectate se vor seta cele două ieșiri ca fii nd „High”. În caz contrar la o lumina buna, ce este
propice dezvoltării și creșterii plantei, cele două ieșiri vor fi setate pe „Low”.
În realizarea acestei soluții am întâlnit aceeași problemă a mail -urilor multiple transmise către
utilizator, pentr u fiecare secundă în care lumina este aprinsă . În cazul în care iluminarea ar
rămâne peste întreaga noapte, utilizatorul ar vedea un număr mare de email -uri în căsuța sa.
Acest aspect nedorit a fost rezolvat folosind metoda numărătorului prezentată în subcapitolul 3.3.
Un numărător denumit „num” va fi introdus în program și va număra secundele pentru care
lumina este aprinsă . În cazul în care lumina se stinge, numărătorul se va reseta la valoarea inițială
de 0.
Trimiterea email -ului se va face numai când „num” atinge valoarea de 2 secunde. Astfel orice
tranziție bruscă este evitată și utilizatorul va fi notificat doar o singură dată atunci când LED –
urile se vor aprinde.
Figura 4 -3

Figura 4 -3 reprezintă vizualizarea mail -ului facuta de către utilizator. Acest email este unul de
notificare care va fi trimis numai când lumina a fost aprinsă pentru mi nim doua secunde.

40
Iluminarea plantelor folosind LED -uri este una dintre metodele des întâlnite în industrie și este
una dintre cele mai bune metode de creștere a plantelor.
În acest proiect s -a ales iluminarea folosind LED -uri deoarece LED -urile su nt un tip de
iluminat accesibil și lumina acestora nu este în niciun fel dăunătoar e plantelor.

41
Capitolul 5 – Monitorizarea serei

În acest capitol vor fi prezentate metodele de monitorizare și cum acestea pot reduce riscul
îmbolnăvirii plantelor, dac ă acestea sunt expuse factorilor de mediu peste limitele acceptate.
Temperatura ambiantă joaca un rol foarte important în creșterea și dezvoltarea plantelor.
Temperaturile de peste 24°C sunt prea mari pentru a fi suportate de către plantele aflate în
interiorul apartamentului. Aceste temperaturi însă nu afectează plantele, dacă ele sunt poziționate
într-un spațiu deschis sau în aer lib er. În condițiile de exterior plantele vor putea suporta aceste
temperaturi mari datorită razelor soarelui care sunt ben efice creșterii și a umidității mai ridicate
în spațiu deschis. O temperatură mare și o umiditate scăzută în apartament nu sunt benefice și
vor determ ina anumite semne vizibile pe planta, ce indica factori de mediu prea duri pentru o
dezvoltare așa cum se dorește . Un prim semn ar fi orientarea frunzelor în jos, d in cauza
umidității scăzute și a căldurii acesta e ste un indicator ușor de observat și remediat. Îngălbenirea
frunzelor sau apariția unor pete de culoare pe frunze sau tulpină reprezintă un alt semn al de
alarmă asupra factorilor de mediu. Acesta d in urma este mult mai grav decât orientarea frunzelor
în jos și arată că planta a fost afectată mai mult și pe o perioada mai îndelungată și remedierea nu
va fi atât de ușoară [24].
Monitorizarea temperat urii și a umidității folos ind senzorul DHT11 are ca scop măsurarea
temperaturii la ora la care aceasta at inge un maxim și notificarea utilizatorului de existenta unui
pericol pentru planta.
Monitorizarea video, pr in „video stream ing” oferă utilizatorulu i posibilitatea de a observa
planta în detaliu, chiar dacă el se afla la distanta. Semnele ca planta nu are condițiile necesare sau
că s-a întâmplat ceva cu aceasta vor fi vizibile iar utilizatorul poate acționa cu prima ocazie.

Figura 5-1

42
5.1 Monitorizarea temperaturii și a umidității aerului

În acest proiect prevenirea îmbolnăvirilor și protejarea plantei se vor face folos ind metodele de
moni torizare prezentate în acest subcapitol și în subcap itolul 5. 2.
Monitorizarea temperaturii se va face luând în calcul condițiile de apartament. Temperaturile
recomandate pentru plante în interiorul apartamentului sunt în gama 15 °C – 24 °C [24].
Tempe raturile mai scăzute de 15 °C nu reprezintă o proble mă în acest context deoarece interiorul
casei este mereu încălzit , iar o temperatură mai mică de 15 °C într-un apartament nu este un
pericol real.
În acest caz vom lua în considerare doar temperaturile înalte ce pot fi dăunătoare pentru plante ,
cele pes te 24 °C.
În interiorul serei va fi montat senzorul de umiditate și temperatura DHT11. Acesta va măsura
temperatura aerului și umiditatea relativă , le va trimite către Raspberry Pi unde acestea vor fi
analizate.
Senzorul și programul asociat lui nu v or lucra în permanenta, deoarece ar fi mult prea multe
date care nu ar avea relevanta pentru utilizator. Trebuie luată în calcul temperatura maximă
aferenta unei zile și aproximativ ora la care aceasta este înregistrată . În general ora la care se
atinge te mperatura maximă în decursul unei zile este at insa intre orele 15:00 și 16:00 în fiecare
zi. Se va lua în calcul acest interval și se va înregistra o măsurătoare cu senzorului la ora 15:00.
Aceasta temperatura va fi reținută și transmisa utilizatorului. Dacă este peste valoarea de 24 °C se
va trimite un email de „ Alerta” către utilizator, indicând ca temperatura în proximitatea plantei
este prea ridicat a și aceasta poate avea de suferit d in cauza expunerii îndelungate . umiditatea
relativă va fi și ea măsurat ă și transmisa utilizatorului.
Umiditatea relativă trebuie sa se situeze intre 50% și 60% pentru o bună dezvoltare a plantelor.
Umiditatea scăzut ă va face resimțită temperatura mare d in apartament și poate opri aproape
complet procesul de creștere . O u miditate relativă mai mare de 80% este critica și poate duce la
apariția bolilor de orig ini fungice sau dezvoltarea paraziților . [26] Aceasta va fi luată în
considerare și se vor realiza alerte specifice pentru cele 4 cazuri posibile ale factorilor de medi u.

Caz Temperatura Umiditate relativă Planta Email
1 T >24 °C U∈(50% – 60%) Afectată Alertă temperatura
2 T >24 °C U ∉(50% – 60%) Afectată Alertă temperatură și umiditate
3 T <24 °C U∈(50% – 60%) Neafectata Notificare – parametrii favorabili
4 T <24 °C U ∉(50% – 60%) Afectată Alertă umiditate

Tabel 5 -1
Conform tabelului 5 -1 se vor realiza patru tipuri de email -uri, trei de alertă și unul pentru
notificare. Toate email -urile vor conține temperatura curentă și umiditatea relativă înregistrate la
ora de vârf (15:00). Email -urile de alertă vor conține și o recomandare pentru utilizator, pentru a
nu pune planta în pericol.
Se începe cu conectarea senzorului DHT11 la Raspberry Pi. Pen tru protejarea acestuia și
pentru protejar ea SBC -ului vom folosi un rezistor de „pull -up”. Rezistorul de „pull -up” are rolul

43
se conectează între alimentare și p inul utilizat pentru a asigura o citire de tip „High” când
semnalul nu este activ.
Calculu l pentru rezistorul de „ pull-up” se face pornind de la legea lui Ohm:
𝑉=𝐼∙𝑅 (5.1)
Vom adapta formula pentru calculul lui Rp:
𝑅𝑝=𝑉𝑐𝑐
𝐼
𝐼 =0,0005 𝐴= 0,5 𝑚𝐴
𝑅𝑝= 5𝑉
0,5𝑚𝐴=10𝐾Ω
Unde Rp este valoarea rezist orului de „pull-up”, I este valoarea curentului dorit iar Vcc este
valoarea tensiunii de alimentare pentru DHT1 1.
Rezistorul de 10KΩ se va introduce intre pinii 1 si 2 ai senzorului. P inul 1 reprez intă
alimentarea si va fi legat la 5V pe Raspberry Pi iar pinul 2 este num it „DATA ” și va fi conectat
la GPIO 04.
GPIO 04 reprezintă intrarea care va primi date de la senzor. P inul 3 al senzorului DHT11 nu
este utilizat și acesta va fi lăsat liber. P inul 4 este cel de „GND” și va fi conectat la un p in de
„GND” de pe Raspberry Pi.
Figura 5-2

44
Codul va fi bazat pe organigrama d in figura 5-2 și va fi detaliat în acest subcapitol. Codul va
realiza o măsurătoare a temperaturii și umidității și va crea și trimite unul d intre cele patru tipuri
de email prezentate în Tabelul 5 -1.
Senzorul DHT11 funcționează cu o librărie suport care trebuie instalată și adusă la ultima
versiune pe Raspberry Pi.
Se va utiliza următoarea comanda pentru instalarea librăriei DHT pentru Python .
sudo pip3 install Adafruit_DHT
În realizarea programului vom folosi următoarele librarii: ADAFRUIT_DHT, librăria time și
librăria smtplib. Librăria ADAFRUIT_DHT reprezintă librăria dedicată care facilitează citirea de
la senzorul DHT11 folosit în aceasta lucrare pentru monitorizarea temperaturii și a umidității
aerului.
Înainte de începerea programului propriu zis se vor folosi configurările pentru trimiterea mail –
ului și autentificarea cu contul Gmail creat pentru acest proiect. Autentificarea are rolul de a
atribui SBC -ului o adresa de mail de pe care sa se conecteze și pr in intermediul căreia sa trimită
un e-mail către oricar e alta adresa de e -mail se dorește .
Se vor declara apoi p inul folosit GPIO 04 și senzorul folosit DHT11.
Se vor crea trei variabile care au rolul de indica valorile benefice de temperatura și umiditate
după care s -a ghidat programul și aceasta lucra re.

DHT_SENSOR = Adafruit_DHT.DHT11
DHT_PIN= 04

t_baza = 24.00
h_mare = 60.00
h_mic = 50.00

t_baza reprezintă tempe ratura de 24 °C, care dacă este depășită va pune în pericol planta.
h_mare și h_mic reprezintă capetele intervalului de umiditate acceptata pentru plante, respectiv
50% și 60%.
După aceste declarații se va face citirea temperaturii și a umidității relative pe GPIO16.
Aceasta citire va avea loc o s ingura dată și datele vor fi păstrate pentru a fi comparate cu valorile
menționate mai sus.
Codul urmează organigrama d in figura 5 -2 și realizează comparații intre parametri încadrându -i
în cele patru cazuri posibile ale condițiilor de mediu. În fiecare caz detectat se va crea conținutul
mail-ului adaptat la cazul respectiv folosind următoarea linie de cod.

SUBJECT="Alerta/Notificare Sera!"
TEXT="Temperatura este " + str(temperature) + " C" +" \n
Umiditatea este " + str(humidity) + "%" + “ Observatii +
Recomandari "

45
Subiectul mail-ului va fi „Alerta sera!” respectiv „Notificare sera” pentru cazurile în care
temperatura și umiditatea nu sunt în gamele prezentate și respectiv pentru a -l înștiința pe
utiliza tor că parametrii au valori normale pentru dezvoltarea plantelor.
La sfârșitul programului se va trimite un s ingur mail, al cărui subiect și mesaj au fost decise
mai sus în urma comparării parametrilor actuali cu cei propice pentru dezvoltarea plantelo r.

msg='Subject: {} \n\n {}'.format(SUBJECT,TEXT)
server.sendmail("rasp .pi.929@gmail.com","rasp.pi.929@gmail.com",
msg)

Mesajul creat si subiectul vor alcătui “msg” o variabila care va ret ine întreg formatul și textul
mail-ului. Se va trimite un mail care va aduce în atenția utilizatorul ui ca planta are condiții de
dezvoltare normale sau aceasta trebuie mutata într-un loc mai ferit de căldura sau cu o umiditate
relativă mai scăzută sau mai ridicata.
Figura 5-3
În figura 5 -3 sunt prezentate ce le patru tipuri de mail -uri asociate fiecărui caz prezentat în
tabelul 5 -1. Unul d intre aceste mail -uri va fi trimis către utilizator în fiecare zi la ora 15:00 cu
condițiile de mediu.
Pentru rularea acestui script în fiecare zi la ora 15:00 se va folo si comanda:
sudo nano /etc/crontab

0 15 * * * pi python3 /home/pi/monit.p y

46
5.2 Monitorizare a video
Transmisiunea video reprez intă procesul pr in care imag inile dintr -un punct sunt trimise în mod
continuu, către un alt dispozitiv. Dispozitivul care inițiază transmisiunea are rolul de server iar
dispozitivul care primește imag inile transmise se numește client. Transmisiunea în mod direct
este mult mai eficientă decât descărcarea fișierelor pentru o analiz are ulterioară . La descărcarea
fișierului video întregul fișier va fi salvat pe dispozitiv, ocupând memorie și mărind timpii de
așteptare . Fișierul video care trebuie analizat nu va putea fi redat în timpul descărcării . Acest
aspect conduce la întârzieri foarte mari pentru fișierele video care sunt de mărime mare.
La transmisiunea în direct și accesarea acestuia folos ind un „browser” întregul conținut este
disponibil imediat doar accesând pagina din browser , fără a mai avea nevoie de alți pași
adiționali . Video -ul se va încărca porțiune cu porțiune pentru a fi redat utilizatorului, limitând
astfel timpii foarte mari necesari descărcării . Informația necesară pentru acest proces, va fi
încărcata de „browser” și nu v a fi salvată local.
Transmisiunea video se realizează cu ajutorul protocolului de transport UDP (User Datagram
Protocol) . Informația la acest nivel este sub formă de segmente și este pregătită de transportul
prin internet, la acest pas. Acesta funcțio nează la nivelul 4 al stive i OSI și se bazează pe
principiul transmisiei d intr-o locație în alta fără verificare sau retransmitere în caz de segmente
pierdute.
Deși aceasta metoda nu de transport nu este convenabila pentru cazurile în care la recepție
avem nevoie de datele integrale, complete și corecte (exemplu: afișarea unui mail, în care nu pot
lipsi caractere sau alte elemente), are ca avantaj rapiditatea. UDP este folosită pentru video
stream ing, audio stream ing și apeluri video sau audio, deoare ce la pierderea unor segmen te,
mesajul poate fi reconstruit la fel de b ine (exemplu: în cazul unei transmisiuni video, dacă nu vor
ajunge la dest inație câteva cadre, conținutul video -ului va putea fi înțeles de către urmăritorii săi.
Scopul acestei proceduri în cadrul proiectul ui este de a oferi utilizatorului pos ibilitatea de a
vedea în timp real imag ini cu sera pr in intermediul oricărui browser web. Se va realiza o
transmisiune care poate fi accesata p rin LAN dar se va putea ext inde la accesare posibila de
oriunde atunci când utilizatorul folosește un servic iu de VPN sau de tunel direct intre el și
Raspberry Pi.
Procedura de „video stream ing” peste web este destul de complicată din cauză că standar dele
video nu sunt general acceptate de toate browserele și toate platformel e. Folosirea HTTP -ului în
acest context este justificată de scopul inițial pentru care acesta a fost creat. Protocolul HTTP a
fost creat pentru a fi un protocol de pag ini web un iversal acceptat. Inițial multe facilitați puse la
dispoziția programatorulu i de către acest protocol nu erau posibile. [21]
Menționez ca script -ul utilizat în acest subcapitol este preluat d in documentația oficiala pentru
modulul de camera compatibil cu Raspberry Pi . Am înțeles funcționarea acestui script și toate
componentele lui însă modulul este foarte pretențios din punct de vedere al codării , iar scrierea
de la zero a unui astfel de cod ar fi avut foar te multe probleme, atât la trecerea intre protocoale
cât și de conectare a modului fizic. Codul a fost preluat și adaptat pe ntru această aplicație , iar
site-ul generic creat în HTML a fost adaptat sa reflecte numele și scopul aplicației .
Conform docum entației prezentate codul este adaptat pentru a folosi un format de comprimare
video mai simplu MJPEG. MJPEG (Motion JPEG) este un format de compresie video în care
fiecare cadru sau câmp digital de secvențe video este comprimat separat ca un fișier de tip JPEG.

47
JPEG (Jo int Photographic Experts Group) este un format de imag ine foarte popular și utilizat la
scara largă și supor tat pe aproape toate dispozitivele și toate sistemele de operare. Acest format
poate avea diferite niveluri de comprimare, datorită acestui fapt JPEG este aproape ideal pentru
grafici pe web. Numărul de culori suportate este de peste 16 milioane, făcând imaginile sa aibă
calitate și detalii de culoare foarte bune. Acest aspect îl face foarte popular ca format de stocare
pentru camerele digitale. Modulul Raspberry Pi Camera V2 folosește acest tip de format pentru
realizarea pozelor.
Script -ul este realiz at în Python 3 pentru partea de transmisiune video iar pentru afișarea
corespunzătoare pe pag ina web, este scris în HTML. Se folosesc librăriile „io”, „picamera”,
„logg ing”, „socketserver” , „thread ing” ,”http”. Librăria „io” este folosită pentru interfața rea cu
dispozitivele periferice, iar librăria „picamera” este folosită pentru o interfața intre limbajul de
program are Python și modulul de camera pentru Raspberry Pi [22]. „logg ing” este o librărie ce
facilitează autentificarea diferitelor module și este standard intre toate modulele Python.
Codul realizează și finisează aspectul pag inii HTML care va fi folosită pentru a vizualiza
transmisiunea în timp real cu sera, realizată de modulul de camera. Principiul codului este acela
de a inițializa sesiune a, de a pregăti contextul și de a transmite imag inile cont inuu. „ Stream ”-ul
este creat și direcționat către pag ina creată și există verificări , care vor afișa mesaje de eroare în
caz ca unele elemente nu returnează răspunsul dorit.
Accesarea transmisiun ii video se va face folos ind adresa IP locala atribuita plăcii Raspberry Pi.
Pentru aflarea acesteia se va accesa term inalul și se va introduce următoarea comandă :
ifconfig
Numele acestei comenzi este „ interface configuration” și este folosită pentru a vizualiza și
configura interfețe de rețea disponibile pe Raspberry Pi. După rularea acestei comenzi se vor
afișa rezultatele conform figurii 5 -4.
Figura 5-4

În dreptul interfeței wlan0 se găsește adresa IP care trebuie folosită . În acest caz Raspberry Pi
va fi conectat la internet folos ind rețeaua „wireless” disponibilă în apartament .

48
Se va utiliza aceasta adresa pentru a accesa transmisiunea video, folos ind orice „browser” web .
Adresa folosită pentru accesare va fi de forma: http://ADRESA_IP:8000
Portul 8000 este frecvent utilizat pentru servicii de „stream ing”, port alternativ pentru
protocolul HTTP sau chiar pentru adm inistrarea web pr in HTTP.
Cum se poate vedea și în figura 5 -4 adresa IP alocată dispozitivului Raspberry Pi în rețeaua
locală este : 192.169.1. 5. Folos ind adresa de accesare prezentată mai sus se va introduce în
browser -ul dorit pentru accesarea imag inilor în direct cu sera.

Figura 5-5

Figura 5-6

49
În figura 5 -5 este prezentată accesarea site -ului în varianta „Desktop” folos ind un browser web
de pe cal culatorul personal. Afișarea este corespunzătoare , mișcarea este fluidă , iar întârzierea de
transmisiune este de 1 secunda. Această întârziere nu afectează cu nimic experiența
utilizatorului, deoarece nu este o întârziere mare și este aproape nesesizabilă .
În figura 5 -6 se poate observa monitorizarea video, accesată de pe telefon. Transmisiunea video
este centrată și dacă utilizatorul dorește sa acceseze aceasta pag ina de pe telefon, nu va avea
nicio problemă.
La transmisiune însă calitatea imag inilor este limitată, acesta fi ind un dezavantaj al acestei
metode. În cazul acestui proiect calitatea medie a transmisiunii nu afectează experiența
utilizatorului dacă acesta ar dori sa vadă în ce stare se află planta. Eventualele probleme cu
planta vor put ea fi sesizate de utilizator fără probleme (de exemplu, orientarea frunzelor sau
direcția în care planta tinde sa se întindă către lum ina). Odată constatate aceste probleme
utilizatorul va putea sa acționeze cu prima ocazie și sa mute planta într-un loc care este propice
dezvoltării ei.
Figura 5 -7 reprezintă o imag ine extrasa d in transmisiunea video. Se p ot observa detalii pe
frunzele plantei și cât aceasta a crescut. Dacă este ceva în neregula cu frunzel e sau apar semne
vizibile pe tulp ina sau pe frunze, deși imag inea este limitata ca rezoluție , acestea se pot depista la
timp.

Figura 5-7

Rezoluția camerei pentru transmisie este de 640×480 și este fixata. Aceasta rezoluție
reprezintă rezoluția standardului VGA (Video Graphic Array). Acest standard este folosit atât
pentru camere cât și pentru cabluri.
Pentru observarea defectelor m inore apărute pe corpul plantei și doar urmărirea acesteia
rezoluția VGA este potrivita și nu are dezavantaje majore.

50
5.3 Monitorizarea creșterii plantei

Pentru urmărirea creșterii plantei în acest proiect se va utili za modulul de camera Raspberry Pi
pentru a capta o imag ine care mai apoi va fi prelucrată și se vor recunoaște obiectele d in cadrul
imag inii pentru a aproxima înălțimea plantei. Notificarea utilizatorului se va face folos ind un
mail care va fi trimis către acesta și va conține dimensiunea plantei exprimata în milimetri.
Menționez ca pentru realizarea codului d in acest sub capitol , algoritmul și prelucrările la care
este supusa imag inea sunt preluate din revista oficiala Raspberry Pi. C odul a fost preluat și
adaptat pentru necesitățile serei. Am înțeles algoritmul de lucru și prelucrările la care este supusa
imag inea. Codul în sine reprezintă o varianta rapida, ca timp de procesare iar alte modificări
asupra algoritmului ar fi îngreunat procesul și ar fi mărit timpii de lucru. Codul modificat și
adaptat este atașat în Anexa A, pentru evidențierea contribuțiilor aduse [27].
Principiul de funcționare în linii mari este prezentat teoretic în figura 5 -8. Imag inea plantei
după ce se va recunoaște va fi compara cu dimensiunile unui obiect cunoscu t și prin calcule se va
determ ina înălțimea acesteia. La obiectul cunoscut va fi știuta lățimea acestuia notata „l” și
introdusă în datele de program, la rularea acestuia. Alegerea obiectului este c ruciala pentru
aproximarea corecta și apropiata de înălțimea reala a plantei. Obiectul trebuie sa fie unul de baza,
fără prea multe laturi și dimensiunea acestuia sa fie comparabila cu planta. Un obiect de
dimensiuni prea mici poate atrage după sine calcul e incorecte și o aproximare greșita a înălțimii
plantei. Procedeul de alegere al obiectului de referință dar și funcționarea programului vor fi
detaliate în acest subcapitol.

Figura 5-8

51
Se va folosi librăria OpenCV care va fi instalată folos ind comanda:
pip install opencv -contrib-python==4.1.0.25
Se va folosi versiune 4.1.0.25 deoarece noua versiune de OpenCV (4.1.1) nu este încă stabilă și
prezintă erori de instalare și folosire c are nu pot fi evitate. Instalarea acestei librarii este una de
lungă durată dar care se face fără intervenția utilizatorului.
Algoritmul folosit în codul utilizat presupune mai întâi pregătirea imag inii prin prelucrări care
vor fi detaliate mai jos.
Se va începe cu crearea argumentului „ -l” care va fi introdus în terminal odată cu comanda de
rulare a programului. Pentru acest argument se vor folosi funcțiile implicite d in librărie „argparse”.
Se va declara „ lățimea ” , „l” și se va defini tipul aceste ia ca fi ind float. „l” reprezintă lățimea
obiectului ale cărui dimensiuni sunt cunoscute.
Cu ajutorul modulului de camera se va realiza captura unei imag inii la rezoluția stabilita d e 1440
x 912. Aceasta imag ine va fi reținută pentru o vizualizare ulterioară modificărilor și prelucrărilor .
Formatul pozei va fi de tip „ BGR ” care reprezintă schema de culori (BGR – Blue, Green, Red).
Prima prelucrare asupra imag inii este reprezentată de transformarea d in formatul culoare în
formatul cu nuanțe de gri (gr eyscale). În acest tip de transformare fiecare pixel colorat este
transformat în echivalentul sau pe o scara de la alb la negru, unde nuanțele de gri reprezintă
nivelurile intermediare care vor oferi imag inii un aspect apropiat de cel inițial . Imag inea obținuta
în urma conversiei la nuanțe de gri este reținută și salvată sub numele „greyscale”. Aceasta
transformare s -a realizat folos ind funcția cv2.cvtColor() d in librăria OpenCV. Aceasta funcție este
folosită pentru schimbări de culoare asupra imag inii și tranziții de culoare care dep ind de
argumentele date în aceasta funcție .
Folos ind imag inea obținută și salvată sub numele „greyscale” se va realiza o altă prelucrar e
menită sa îmbunătățească proprietățile imag inii. Prelucrarea de tip „Gaussian blur” ( netezire
Gauss iană) reprezintă netezirea imag inii ca rezultat al aplicării unei funcții Gaussiene. Scopul
acestei prelucrări este sa reducă zgomotul care este în imag ine și sa reducă detaliile. Pentru
măsurarea înălțimii plantei este necesar acest pas deoa rece avem nevoie ca detaliile
nesemnificative (de exemplu: obiecte nedorite în măsurare ) sa fie estompate. Imag inea de analizat
trebuie sa aibă un nivel de zgomot mic și folos ind aceasta prelucrare îmbunătățim calitatea
informației din imag ine [28]. Aceast a prelucrare se va realiza cu funcția cv2.GaussianBlur().
Argumentele acestei funcții sunt lungimea și lățimea kernelului care reprezintă numere întregi și
impare și imag inea pe care se va aplica aceasta transformare. . Kernelul filtrului este reprezenta t
de o matrice ce conține cifra 1 pe fiecare poziție . Lungimea și lățimea kernelului sunt dimensiunile
acestei matrice . După aplicarea acestei transformăr i se va salva imag inea obținuta tot sub
denumirea de „greyscale” , înlocuind imag inea anterioara.
După realizarea celor doua prelucrări pe imag ine se va folosi funcția cv2.Canny() . Aceasta
funcție are la baza un algoritm de detectarea marg inilor. În final după aplicarea acestei funcții se
vor obține marg inile conținute în imag ine, puternic evidențiate [29]. Este nevoie de aplicarea
acestei funcții pentru detectarea obiectelor d in imag ine cât mai b ine. Rezultatul funcției „canny ”
va fi salvat și pe acesta se vor mai aplica alte funcții în continuare. Parametrii de intrare ai funcției
cv2.Canny () au fost modificați și adaptați pentru o mai buna recunoaștere a plantelor. Valorile
finale care se vor regăsi în lucrare sunt 10 și 140. Aceste doua valori reprezintă „Valoarea m inima”

52
și „Valoarea maximă ” date ca intrare aceste funcții . Dacă un punct va fi aflat pe ste valoarea
maximă el este considerat o marg ine sigura. Orice valoare aflata intre valoare m inima și valoarea
maximă care nu e ste legata de o marg ine sigura nu va fi considerata marg ine.
Se va folosi dilatarea care reprezintă o operație morfologica car e are rolul de a modifica o imag ine
după un anumit element structural impus în proces. Aceasta se va face folos ind cv2.dilate() . Efectul
creat de dilatare este de a mari formele obținute în imag ine pentru accentuarea acestora . Rezultatul
dilatării va fi su pus erodării folos ind funcția cv2.erode() pentru a strânge formele obținute păstrând
marg inile acestora [30]. După folosirea celor doua operații consecutive se observa ca marg inile
detectate de funcția cv2.Canny() sunt mult mai b ine accentuate iar formele sunt mai drepte și mai
ușor de detectat.
După aceste prelucrări , pe imag inea obținuta se vor detecta și sorta contururile. Acestea vor fi
organizate de la 1 la r și apoi se vor crea dreptunghiurile care vor încadra obiectele aflate în
imag ine. Conturu l reprezintă o curba care încercuiește un element prezent într-o imag ine urmând
marg inile acestuia în mod cont inuu. Contururile sunt un element esențial în detectarea și
recunoașterea obiectelor [31].
Etapele pr in care trece imag inea pot fi vizualizate în figura 5-9 și figura 5 -10. Etapa 1 –
reprezintă captura imag inii inițiale , etapa 2 este trecerea la nuanțe de gri , etapa 3 este aplicarea
netezirii Gaussiene, etapa 4 este detectarea contururilor, etapa 5 este dilatarea imag inii iar etapa 6
este erodarea imag inii. Imag inea finala și obiectele recunoscute în cadrul acesteia reprezintă
ultima imag ine regăsită în figuri.

Figura 5-9

53

Figura 5-10

Pentru obținerea contururilor ca fi ind elemente distincte și pentru găsirea obiectelor de interes
din imag ine se va folosi funcția cv2.f indContours( ). Se vor specifica imag inea de ieșire , modul
de găsire și tipul de aproximație .
Modul de aproximație este ales ca fi ind cv2.CHA IN_APPROX_SIMPLE , deoarece a cest mod
de aproximație va aproxima doar cu patru puncte corespondente celor patru vârfuri ale
dreptunghiurilor care vor aproxima obiectele.
Acest mod de aproxima ție nu este unul cont inuu și salvează timp de procesare și memorie de
program. O metoda cont inua, deși are avantaje fata de aceasta ar fi îngreunat algoritmul și ar fi
mărit timpii de procesare. Metoda folosită are rezultatele dorite fără a încărca program ul și a
suplimenta calculele sau prelucrar ea.
În program este nevoie de o condiție pentru numărul de obiecte detectate . Obiectele găsite în
imag ine trebuie sa fie m inim doua într-un caz ideal : obiectul cunoscut și planta. Obiectele
recunoscute vor fi de obicei mai multe deoarece plantele au structuri neregulate și recunoașterea
acestora ca un s ingur obiect compact este dificila.
Lum ina, poziționarea plantei, așezarea camerei, unghiul camerei și distanta la care aceasta este
față de plantă influen țează detectarea. Unul d intre cei mai impo rtanți factori pentru o detectare
corectă a plantei este lum ina. Lum ina trebuie sa fie suficientă atât pe obiectele de detectat cât și
pe fundal sa existe cât mai puține umbre. Umbrele pot apărea ca obiecte și vor intra în detectare,
putând afecta măsurători le.
Camera va fi situata la aproximativ 40 cm de planta și orientata la un unghi de 90° pentru a nu
influenta detectarea și măsurarea plantei și a obiectului.
Planta studiata va fi în permanenta așezata în sera realizată și acolo va fi și măsurată .
Elementele aflate în sera nu afectează măsurătorile dacă acestea sunt plasate la un nivel aflat sub
înălțimea plantei. De exemplu, în realizarea serei bara de LED -uri care va fi așezata în spatele

54
plantei și aceast a poate alter a măsurătorile pentru plantele de dimensiune mai mica. În figura
5-11 este evidențiat acest dezavantaj și cum el poate afecta măsurătorile unor plante de
dimensiune redusă .

Figura 5-11

Se poate observa că planta de Yacon (d in a doua jumătate a figurii) nu va avea detectarea sau
măsurarea afectată de bara de LED -uri montată pe sera. În prima jumătate a pozei este prezentată
garofița care are dimensiuni redus e iar pozițio narea barei de LED -uri deasupra acesteia afectează
detectarea acesteia.
Soluția în acest caz este reprezentată de adaptarea serei la dimensiunile garofiței . Sera a fost
conceputa pentru dimensiunile plantei de Yacon iar garofița a fost folosită doar pentru testare.
Dacă planta dorita a fi ținuta în sera va fi de dimensiuni mai mici bara de LED -uri se va muta
astfel încât sa nu afecteze în niciun fel măsurăto rile. Pentru realizarea măsurătorilor și testelor
folos ind garofița bara de LED -uri a fost acoperita pentru a nu afecta detectarea. Mai multe
rezultate și capturi de ecran pentru aceste plante studiate se regăsesc în Anexa B.
În figura 5 -12 se poate observa detectarea plantei mai mici ( în acest caz garofița ) care se
realizează fără nicio problema, când se acoperă bara de LED -uri. Aceasta acoperire constituie
doar o soluție temporară pentru realizarea acestor măsurători . O soluție permanenta este ce a
poziționării barii de LED -uri la nivelul plantei.

Figura 5 -12

55
Alegerea obiectului cunoscut a fost făcută pe baza celor doua criterii menționate anterior :
forma și dimensiunile acestuia. Forma obiectului va fi una dreptunghiulara pentru a arăta
poziționarea corecta a acestuia dar și pentru evidențierea unghiului sub care camera va capta
imag ini. Obiectul ales va avea culoarea neagra pentru a fi ușor de recunoscut și diferențiat și va
avea o lungime de 11 cm și o lățime de 2cm. Lungimea de 11 cm este o dimensiune care poate fi
comparată cu dimensiunile plantelor studiate în acest proiect, și nu alterează în niciun fel
rezultatele obținute . În figura 5 -13 sunt prezentate diferite poziționări ale obiectului cunoscut și
evidențierea greșelilor de poziționare și corectarea acestora.

Figura 5-13

Poziționările 1,2,3 sunt aproape perfecte și conduc la aproximări bune ale dimensiunilor
plantei. Poziționarea conform cazului 4 prezint ă o mica abatere de la forma dreptunghiulara
inițială însă nu afectează calculele și măsurarea plantei. Poziționarea numărul 5 se abate de la
forma dreptunghiulară deoarece obiectul cunoscut nu este poziționat perfect vertical. Aceasta
poziționare nu afectează măsurătorile . Poziționarea 6 reprezintă o problema d in punct de vedere
al distantei fata de camera dar și de așezarea verticala a obiectului. Acesta va părea de o lățime
mai mare și va afecta calculele. Poziționarea 7 prezintă obiectul inclinat față de cameră , nefi ind
paralel cu orientarea acesteia. Obiectul va părea de dimensiuni mai reduse, afectând calculele.
Poziționarea 8 reprezintă plasarea obiectului prea aproape de camera. Acesta este perceput
distorsionat și nu este recunoscut ca fi ind un obi ect în imag ine, deoarece focalizarea pe el nu va
avea loc.
Așezarea corespunzătoare a obiectului este necesară pentru o măsurare corecta a plantei.
Obiectul trebuie așezat cât mai departe de planta pentru a nu se suprapune cu aceasta și în partea
stânga a ecranulu i pentru a fi primul obiect recunoscut de algoritm.
În Anexa C sunt atașate diferite moduri de recunoaștere pentru plantele 1 și 2.
Odată găsite toate obiectele prin detectarea contururilor acestora ele vor fi organizate de la 1 la
n și se va verifica condiția ca acestea sa fie mai mult de doua.
Folos ind funcția cv2.approxPolyDP( ) va aproxima o curba sau un poligon cu o alta curba sau
un poligon, care va reține punctele găsite și extrase. Precizia va fi introdusă în argumen tele
funcției și va fi specificată la valoarea 3 [32].
Se vor crea dreptunghiuri de aproximare folos ind cv2.bound ingRect () care vor fi reținute în
matricea boundRect. Funcția va calcula distantele d intre coordonatele date. Acestea încadrează
poziția obiectelor și mențin dimensiunile lor.

56
Pentru aproximarea dimensiunilor se va calcula câți milimetrii conține un pixel folos ind
obiectul cunoscut și recunoașterea lui stocata în matricea boundRect.
Poziția fiecărui obiect va fi analizată comparând -se fiecare cu 2 poziții cunoscute (cea mai de
sus și cea mai de jos) și se vor ordona în funcție de înălțimea la care sunt situate. Se vor stoca
valorile f inale în doua variabile car e vor ret ine cel mai de sus dreptunghi și cel mai de jos
dreptunghi.
Aces te prelucrări se vor face excluzând primul dreptunghi care reprezintă obiectul cunoscut.
Înălțimea plantei va fi estimata folos ind scăderea intre dreptunghiurile semnalate „ce l mai sus”
și cel mai „jos”. Înălțimea plantei va fi reținută pentru prelucră ri ulterioare.
Pe ecran se va deschide o fereastră nouă în care se va afișa o copie a imaginii originale care
peste ea va avea un strat ce va conține obiectele încadrate în dreptunghiuri albastre. Pentru
crearea acestora se va utiliza funcția cv2.recta ngle() care va unii punctele reținute și va crea
dreptunghiurile care vor încadra obiectele. Imag inea va fi de dimensiune stabilita (1280 x720) la
afișare .
Înălțimea plantei va fi transmisa către utilizator folos ind:

SUBJECT="Notificari sera"
TEXT="Inaltimea plantei este {0:.0f} mm".format(plantHeight)
msg='Subject: {} \n\n {}'.format(SUBJECT,TEXT)
server.sendmail("rasp.pi.929@gmail.com","rasp.pi.929@gmail.com",
msg)

În figura 5-14 este prezentată structura mail -ului așa cum va fi văzut de către utilizator în
contul sau de Gmail. Formatul mail -ului este asemenea celorlalte notificări primite de la sera si
este ușor de citit atât pe mobil cât si pe calculator.

Figura 5-14

57
Pentru testarea corectitud inii măsurătorilor și a transmiterii mail -urilor s -au efectuat pe planta
de Yacon 15 măsurători consecutive ale căror rezultate pot fi vizualizate în figura 5 -15.

Figura 5-15

Calcu lele și capturile de ecran atașate acestor măsurători sunt detaliate și explicate în Anexa
B. Acest număr mare de mail -uri nu este unul care va fi primit în mod normal de către u tilizator
deoarece pe zi se va face o singură măsurătoare al cărei rezultat va fi trimis către utilizator.
În fiecare zi se va măsura planta la ora 11:00 și dimensiunea acesteia va fi transmisa către
utilizator folos ind email -ul propriu.

58
Pentr u aplicarea acestui cod se va scoate afișarea imag inii finale pe ecran pentru ca utilizatorul
nu va putea avea acces la aceasta dacă nu are un monitor conectat. Procesul, detectarea și
calculele rămân neschimbate iar măsurarea se va desfășura în aceleași condiții .
Pentru rularea scriptului în fiecare zi la ora 11:00 se va edita fișierul cron adăugând :

0 11 * * * pi python3 /home/pi/ masurare .py -l 20

Astfel codul va fi rulat în fiecare zi la ora 11:00 când lumina ambientala este buna iar
utilizatorul va putea urmări creșterea plantei în email -urile sale.

59
Capitolul 6 – Asamblarea finala a serei

Se va realiza o incinta din policarbonat solid care va găzdui planta dar și componentele
electronice necesare pentru întreținerea condițiilor din sera și monitorizarea plantei. Aceasta va fi
realizată din trei placi de dimensiune 30cm x 40 cm x 2mm îmbinate ca în figura 6 -1. În figura
6-1 sunt prezentate construirea serei și modul de așezare al componentelor iar în figura 6 -2 este
prezentată schema f inala și generala a proiectului.
Întreținerea condițiilor plantei se va realiza folos ind ilum inarea și udarea acesteia, sisteme care
for fi montate pe sera pentru interconectare.
În ghiveciul plantei va fi introdus senzorul de umiditate rezistiv care va trimite date către
Raspberry Pi. Acesta va primi pe GPIO21 ( cum se poate observa în figura 6 -2) datele de la
senzorul rezistiv și va lua decizia de udare sau nu a plantelor. Se va acționa driverul de motor
folos ind pinii GPIO07 și GPIO27 pentru a controla pompa care va uda plantele. Driver -ul de
motor va fi aliment at de la o sursa de tensiune cont inua separata, pentru a nu încărca SBC -ul.
Odată acționata pompa și udata planta utilizatorul va fi notificat de starea serei. Pompa va fi
introdusă într-un recipient cu apa care va conține apa suficientă pentru a putea uda planta pentru
un timp mai îndelun gat.
Pentru menținerea condițiilor de lum ina se va folosi fotorezistorul care va fi montat pe o
laterala interioara a serei (cum se poate observa în figura 6 -1). Orientarea acestuia se va face
către tavan pentru a nu f i influențat de alte surse de lum ina, cum ar fi bara de LED -uri.
Fotorezistorul va avea curentul limitat folos ind un rezistor de 10k Ω. Valoarea curentului pr in
fotorezistor va fi de 0,5mA. Bara de LED -uri va fi montată la nivelul plantei de peretele centra l
al serei. LED -urile sunt conecta te la GPIO05 și respectiv GPIO24 la Raspberry Pi. Curentul pr in
ele se va limita la valoare de 7mA folos ind rezistoare de 470 Ω .
Figura 6-1

60

Figura 6-2

Citirea de la fotorezistor se va face pe p inul GPIO23 și pe baza acesteia se va lua decizia de
iluminare sau nu a plantelor. După iluminarea plantelor utilizatorul va fi notificat de starea serei
prin email.
Monitorizarea serei se va realiza urmărind temperatura și umiditatea d in incinta, plant a în
permanență cu ajutorul camerei video și monitorizând creșterea și progresul în înălțime al platei.
Senzorul de temperatură și umiditate va fi așezat lângă un perete al serei și va fi alimentat de la
Raspberry Pi. Se va utiliza un rezistor de pull -up de 10k Ω intre pinii 1 și 2 ai senzorului.
Raspberry Pi va citi datele de la DHT11 pe p inul GPIO04 și va afișa și prelucra datele. Acestea
se vor transmite căt re utilizator însoțite de alerte dacă în seră nu sunt îndeplinite condițiile pentru
temperatura și umiditate a relativă acceptabile pentru dezvoltarea plantei.
Utilizatorul va putea urmări sera în permanență accesând pagina web creată pentru
transmisiunea video cu sera. Pentru asigurarea transmisiunii video este necesară conectarea
Raspberry Pi la internet și montarea camerei pentru vizualizarea corespunzătoare . Monitorizarea
video are ca scop aducerea în atenția utilizator ului a unor probleme ale plantei sesizabile doar
dacă aceste se afla lângă plantă . Văzând ca planta are probleme în dezvoltarea ei, utilizatorul
poate sa acționeze pentru salvarea plantei sau recuperarea ei.

61
Progresul plantei în înălțime va fi urmărit folos ind camera și utilizatorul va fi notificat în
fiecare zi de înălțimea atinsă de plantă . Pentru efectuarea acestei măsurători în seră trebuie
introduse obiectul cunoscut față de care se va face compararea și o bandă de culoare neutra ce va
acop eri ghiveciul și firele existente în sera. Pregătirea serei pentru măsurarea plantei nu afectează
măsurarea în niciun fel și ajuta la încadrarea mai buna a plantei. Materialele folosite pentru
acoperirea ghiveciului și realizarea suportului pentru obiectul cunoscut sunt reprezentate de
carton și hârtie de culoare alba.
Planta d in sera poate fi înlocuită cu orice planta și pro gramele realizate se vor comporta la f el
în oricare d intre cazuri. Pentru plantele de dimensiuni mai mici se va muta bara de LED -uri ca
aceasta sa fie la nivelul lor și dacă obiectul cunoscut pentru măsurare nu este potrivit , acesta se
poate înlocui oricân d cu unul adecvat. Un obiect prea mic va duce la aproximări greșite ce pot
induce în eroare utilizatorul.
După asamblarea serei și f inalizarea sistemului se va realiza un program care va stabili când vor
rula codurile de monitorizare astfel încât utilizatorul sa fie notificat doar o dată pe zi, în fiecare zi
de parametrii necesari. Aceste ore pot fi schimbate oricând folosind metoda prezentată în acest
capitol (modificarea și editarea fișierului „cron”).
În acest proiect alegerea celor doua ore pen tru rularea codurilor de monitorizare este o alegere
întemeiată și bazată pe criteriile prezentate. Factorii precum lumina care ar putea afecta
măsurătorile au fost luați în calcul pe parcursul zilei. De asemenea intervalul orar în care se
înregistrează temperatura maximă a zilei a fost prin cipalul criteriu pentru programarea orei la
care va rula codul de monitorizare al temperaturii și umidității relative.
Urmărirea progresului și starea serei se vor face foarte ușor, în contul de Gmail sau accesarea
transmisiunii video în browser -ul de internet folosită de utilizator. Nu este necesară instalarea de
aplicații suplimentare, utilizatorul va avea notificările venite de la sera într-un singur loc,
accesibil de pe orice dispozitiv.
La sfârș itul fiecare zil e utilizatorul va avea cel puțin 3 email -uri de la sera. Primul email va fi
cel de măsurare a plantei care se va trimite la ora 11:00, atunci când lumina este foarte buna. La
ora 15:00 se va măsura temperatura d in sera și apoi umiditatea ac esteia. Acestea se vor regăsi în
mail și cu mențiuni sau alerte la detectarea unui parametru care nu este în gamele specificate la
început . Lum ina se va apr inde cel puțin o dată pe zi în sera atunci când se face întuneric în
incinta și utilizatorul va fi n otificat pr in email. Udarea plantei se va face la aproximativ 3 zile
deci utilizatorul va primi aceasta notificare mult mai rar.
Notificările reprezintă modul prin care utilizatorul este pus în legătură cu ce starea plantelor
dar și acțiunile întreprinse pentru mențin erea condițiilor bune pentru dezvoltare. Textul acestora
este scurt , la obiect și are rol strict informativ. Utilizatorul va ști ca planta este în siguranță , este
sănătoasă și este luminată și udată constant.
Email -urile pot fi accesate pe orice dispo zitiv și conținutul lor va fi sugestiv pentru datele
transmise.
Email -urile de alertă vor avea adăugat în titlul din subiect semnul „!” pentru a atrage atenția
utilizatorului asupra faptului ca sera are nevoie de intervenția lui și că planta poate avea de
suferit din cauza temperaturii sau a umidității ce a depășit valorile acceptate.
În figura 6 -3 se pot vedea mail -urile primite de utilizator în ordinea venirii acestora în varian ta
accesata de pe browser.

62

Figura 6-3

În acest exemplu se pot vedea cele trei mail -uri de notificare primite de utilizator cât și un mail
de alerta , marcat diferit pentru a putea fi sos în evidenta.
Asamblarea finala a proiectului se poate r egăsi în figura 6 -4 iar componentele și pregătirea serei
sunt în figura exact cum au fost prezentate în acest capitol. Odată poziționată sera și toate
elementele ei, inclusiv obiectul de detectat și cartonul care ajuta la încadrarea plantei, aceasta nu
va mai fi mișcată , pentru a nu afecta recunoașterea plantei.

Figura 6 -4

63
Concluzii generale

În urma realizării practice a proiectului de licență au fost îndeplinite cu succes toate obiectivele
propuse; acela de a crea un sistem complet car e menține condițiile pentru dezvoltarea plantei și
monitorizează atât factorii de mediu cât și dezvoltarea plantei fără a fi nevoia interv enției
utilizatorului. Sera bazată pe Raspberry Pi va întreține planta care este plasata în interior și va
notifica u tilizatorul pr in email.
Cum s -a propus inițial proiectul a fost realizat și testat, luând în calcul cel mai important factor:
sănătate a plantei și buna dezvoltare a acesteia.
|În cadrul acestui proiect am avut următoarele contribuții :
• îndeplinirea tuturor obiectivelor propuse
• alegerea senzorilor și a modulelor conform cerințelor proiectului
• observarea condițiilor inițiale și a stării plantei
• realizarea codurilor de întreținere
• crearea legăturii dintre utilizator și sera pr in intermediu l email -ului
• adaptarea și optimizarea codului de recunoaștere și măsurare a plantei
• realizarea monitorizărilor precizate și aducerea lor în vederea u tilizatorului
• crearea unui program de monitorizare luând în calcul factorii de mediu
• testarea recunoaște rii și măsurării pe diferite plante
• adaptarea serei la condiții de recunoaștere a plantei
• realizarea fizică a incintei din policarbonat solid și asamb larea sistemului
• testarea serei și aducerea de îmbunătățiri finale

Acest proiect a reprezentat o ocazie sa proiectez și sa realizez un sistem complet pentru
întreținerea plantelor pe care îl voi folosi pentru planta mea de apartament . Am învățat sa luc rez
organizat și sa îmi pun ord ine în idei, structurându -le. Împărțirea timpului în mod corespunzător
a fost necesară pentru f inalizarea acestui proiect. Voi atașa diagrama Gantt în Anexa C unde se
pot vedea etapele realizării desfășurate în timp.
Am învăț at sa lucrez pe sistemul de operare Raspbian și sa folosesc terminalul pentru
comenzile necesare. Limbajul de programare Python este unul accesibil însă necesita multă
atenție la indentarea codului. Acest limbaj a fost studiat parțial în anul IV în cadru l disciplinei
„Tehnologii de programare în internet” împreună cu noțiuni de baza despre Raspberry Pi. În
fazele incipiente ale proiectului aceste noțiuni învățate în cadrul disciplinei au fost o bază solidă
pentru programarea SBC -ului.
Proiectul a re prezentat o activitate de lungă durata atât ca și asamblare, testare și optimizare dar
și ca documentare asupra diverșilor factori ce influențează buna dezvoltare a plantelor.
Rezultatele obținute în urma realizării și testării serei au fost favorabile . Plan tele utilizate nu au

64
arătat semne de deteriorare sau îmbolnăvire pe parcursul așezării lor în incinta, dezvoltând -se în
mod normal.
Scopul acestui proiect era reprezentat de crearea unui sistem care întreține și monitorizează
plantele fără ca utilizat orul sa fie nevoit sa intervină , însă toate acțiunile trebuiau aduse la
cunoștința acestuia. După realizarea serei, toate punctele prez entate inițial au fost atinse si
sistemul funcționează așa cum s -a dorit inițial .

65
Posibilități viitoare de dezvoltare

Sera inteligenta va putea fi îmbunătățită pe viitor atât din punct de vedere software dar și
hardware. Voi preciza câteva îmbunătățiri viitoare ce pot fi aduse și cum aceasta va putea fi
extinsă :
• Trecerea la o variantă mai prec isa de senzori; la care nu am avut acces din punct de
vedere financiar
• Îmbunătățire a algoritmului de recunoaștere astfel încât acesta sa nu mai fie atât de
sensibil la poziționare
• Extinderea serei pentru a putea găzdui mai multe și plante și a întreține condițiile pentru
acestea
• Folosirea unei camere mai performante care poate înregistra în format HD sau mai
ridicat, pentru mai observarea mai multor detalii la transmisiunea video
• Realizarea unui sistem de răcire sau umbrire a plantelor
• Detectarea și analiz area florilor /fructelor și notificarea utilizatorului de starea acestora
• Notificar ea mai multor utilizatori , realizând un grup de email
• Reținerea datelor măsurate într-o baza de date sau într-un document pentru a fi urmărit
progresul de creștere

66

67
Bibliografie

[1] „Raspberry Pi 3B” https://www.raspberrypi.org/products/raspberry -pi-3-model -b/ [Accesat
20.04.2020]
[2] „GPIO” https://www.raspb errypi.org/documentation/usage/gpio/ [Accesat 20.04.2020]
[3] „Moisture Sensor” https://wiki.eprolabs.com/ index.php?title=Mo isture_Sensor [Accesat
16.02.2020]
[4] „Motor driver” https://laborjag.com/venta/ardu ino/mini-victory -l298n -mx1508 -pwm -2-
channel -dc-motor -driver/ [Accesat 19.03.2020]
[5] „DHT11” https://robu. în/product/dht -11-digital -temperature -humidity -sensor/ [Accesat
12.05.2020]
[6] „Photoresistor” https://www.sciencedirect.com/topics/eng ineering/photoresistors [Accesat
25.05.2020]
[7]”Camera V2” https://www.raspberrypi.org/product s/camera -module -v2/ [Accesat 27.04. 2020]
[8] „Raspian ” https://www.raspberrypi.org/documentation/raspbian/ [Accesat 03.05.2020]
[9] „Raspian Install” https://www.raspberrypi.org/documentation/ installation/ installing-
images/README.md [Accesat 03.05.2020]
[10]”Commands” https://www.raspberrypi.org/documentation/usage/term inal/ [Accesat
03.05.2020]
[11] „Python – generic aspects ” https://docs.python.org/3/us ing/cmdl ine.html [Accesat
27.05.2020]
[12] „Python Intro” https://docs.python.org/3/library/ intro.html [Accesat 27.05.2020]
[13] „ Installing Python 3” https://www.raspber rypi.org/documentation/l inux/software/python.md
[Accesat 14.02.2020]
[14] „OpenCV” https://opencv.org/about/ [Acc esat 27.05.2020]
[15] „Gmail About” https://www .google.com/gmail/about/ [Accesat 14.04.2020]
[16] „SMTP on Raspberry Pi” https://shop.sb -components.co.uk/blogs/posts/how -to-send-an-e-
mail-via-raspberry -pi [Accesat 15.04.2020]
[17] „P INS” https://raspi.tv/2013/rpi -gpio-basics -4-setting-up-rpi-gpio-number ing-systems -and-
inputs [Accesat 19.05.2020]
[18] „Motor control” https://www. instructables.com/id/Tutorial -for-Dual -Channel -DC-Motor -Driver –
Board -PW/ [Accesat 12.04.2020]
[19] „PWM” https://sourceforge.net/p/raspberry -gpio-python/wiki/PWM/ [Accesat 11.04.2020]

68
[21] „Web stream ing” https://pic amera.readthedocs.io/en/latest/recipes2 .html#web -stream ing
[Accesat 15.05.2020]
[22] „Picamera” https://picamera.readthedocs.io/en/release -1.13/ [Accesat 20.05.2020]
[23] „Logg ing” https://docs.python.org/2/library/logg ing.html [Accesat 20.05.2020]
[24] „Temperature and humidity” https://www.ho useplan tsexpert.com/ indoor-plants -temperature –
guide [Accesat 08.06.2020]
[25] „Daily temperature” https://www.thoughtco.com/high -and-low-temperature -timing-
3444247 [Accesat 0 8.06.2 020]
[26] „Humidity” https://home.howstuffworks.com/how -to-care-for-house -plants3 [Accesat
09.06.2020]
[27] „ Measure” https://magpi.raspberrypi.org/articles/monitor -plant -growth -ai-opencv [Accesat
8.02.2020]
[28] „ Image Filter ing” https://opencv -python –
tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_filter ing/py_filter ing.html [Accesat
11.06.2020]
[29] „ Canny Edge Detection ” https://opencv -python –
tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_canny/py_canny.html [Accesat
11.06.2020]
[30] „Morphological Transformation” https://opencv -python –
tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_morphological_ops/py_morphologi
cal_ops.html [Accesat 11.06.2020]
[31] „ Contours” https://opencv -python –
tutroals.readthedocs.io/en/latest/p y_tutorials/py_imgproc/py_contours/py_contours_beg in/py_c o
ntours_beg in.html [Accesat 11.06.2020]
[32]” Aprox Poly DP”
https://www.docs.opencv .org/2.4/modules/imgproc/doc/structural_analysis_and_shap e_descripto
rs.html [Accesat 12.06.2020]
[33] „ Bound Rectangles”
https://docs.opencv.org/3.4/da/d0c/tutorial_b ound ing_rects_circles.html [Accesat 12.06.2020]

69
Anexa A

Cod Pyrhon – sol.py
import RPi.GPIO as GPIO
import time
import smtplib

# autentificare
server=smtplib.SMTP('smtp.gmail.com',587)
server.starttls()
server.log in("rasp.pi.929@gmail.com"," PAROLA")

# creare mail
SUBJECT="Notificari sera"
TEXT="Planta a fost udata."
msg='Subject: {} \n\n {}'.format(SUBJECT,TEXT)
#initializare numarator
num=0
#initializare si declarare p ini; setare pwm software
GPIO.setwarn ings(False)
umiditate = 21

GPIO.setmode(GPIO.BCM)
GPIO.setup( umiditate , GPIO.ÎN)

GPIO.setup(27, GPIO.OUT)
GPIO.setup(07, GPIO.OUT)

pwm=GPIO.PWM(07,100)
pwm.start(0)

#citirea de la sen zorul de umiditate cu pauza de 1 secunda intre citiri
while True:
if GPIO. input (umiditate)

print ("sol uscat")
print ("udare plante")
num=num+1
pwm.ChangeDutyCycle(50)
GPIO.output(07, True)
GPIO.output(27, False)
if num == 2:
server.sendmail("rasp.pi.929@gmail.com","rasp.pi.929@gmail.com",msg)

else:
print ("sol ud")
num=0
pwm.stop()
GPIO.output(07, True)
GPIO.output(27, True)

time.sleep(1)

server.quit()
GPIO.cleanup()

70

Cod Python – lum.py
import RPi.GPIO as GPIO
from time im port sleep
import smtplib

#autentificare
server=smtplib.SMTP('smtp.gmail.com',587)
server.starttls()
server.log in("rasp.pi.929@gmail.com"," PAROLA")

SUBJECT="Notificari sera"
TEXT="Lum ina pentru crestere a fost aprinsă."
msg='Subject: {} \n\n {}'.format(S UBJECT,TEXT)

GPIO.setwarn ings(False)
GPIO.setmode(GPIO.BCM)
num=0
Foto = 23
LED1= 24
LED2= 05
GPIO.setup( Foto,GPIO.ÎN ,pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED1,GPIO.OUT)
GPIO.setup(LED2,GPIO.OUT)

while True:
stare_lum ina = GPIO.input(Button)
print(button_state)
if stare_lum ina== 1:

num=num+1
GPIO.output(LED1,GPIO.HIGH)
GPIO.output(LED2,GPIO.HIGH)
if num == 2:

#trimitere email
server.sendmail("rasp.pi.929@gmail.com","rasp.pi.929@gmail.com",msg)
else:
num=0

GPIO.output(LED1,GPIO.LOW)
GPIO.output(LED2,GPIO.LOW)

sleep(1)

Cod Python monitorizare.py
import RPi.GPIO as GPIO
import Adafruit_DHT
import time
import sys
import smtplib

server=smtplib.SMTP('smtp.gmail.com',5 87)
server.starttls()
server.log in("rasp.pi.929@gmail.com", ”PAROLA")

DHT_SENSOR = Adafruit_DHT.DHT11
DHT_PIN= 4

71
t_baza = 24.00
h_mare = 60.00
h_mic = 50.00

if True:
humidity,temperature = Adafruit_DHT.read(DHT_SENSOR,DHT_P IN)
if humidity is not None and temperature is not None:
print("Temperatura={0:0.1f}C Umiditate={1:0.1f}%".format(temperature,humidity))
if (temperature > t_baza) and (humidity > h_mic) and (humidity < h_mare):
SUBJECT="Alerta Sera!"
TEXT="Temperatura est e " + str(temperature) + " C" +" \n Umiditatea este " +
str(humidity) + "%" + " \n Temperatura este peste 24 C. "+ " \n Mutati planta!"
elif (temperature < t_baza) and (humidity > h_mic) and (humidity < h_mare):
SUBJECT="Notificari sera"
TEXT="Temperatura este " + str(temperature) + " C" +" \n Umiditatea este " +
str(humidity) + "%" + " \n Temperatura si umiditatea sunt normale"
else :
if (temperature > t_baza):
SUBJECT="Alerta sera!"
TEXT="Temperatura est e " + str(temperature) + " C" +" \n Umiditatea este " +
str(humidity) + "%" + " \n Umiditatea relativă nu are o valoare admisibila." + " \n
Temperatura este peste 24 C" + " \n Mutati planta! "
else:
SUBJECT="Alerta sera!"
TEXT="Te mperatura este " + str(temperature) + " C" +" \n Umiditatea este " +
str(humidity) + "%" + " \n Umiditatea relativă nu are o valoare admisibila "
msg='Subject: {} \n\n {}'.format(SUBJECT,TEXT)
server.sendmail("rasp.pi.929@gmail.com","rasp.pi.929@gmail.com ",msg)

server.quit()

Cod Python masurare.py
import argparse
import imutils.contours
import cv2
from picamera.array import PiRGBArray
from picamera import PiCamera
from time import sleep
import smtplib

server=smtplib.SMTP('smtp.gmail.com',587)
server.st arttls()
server.log in("rasp.pi.929@gmail.com","Parola")

#l – reprezinta latimea obiectului cunoscut
parser = argparse.ArgumentParser(description= Masurare inaltime')
parser.add_argument(" -l", "–latime", type=float, required=True)
args = vars(parser.parse _args())

# Realizare fotografie
camera = PiCamera()
rawCapture = PiRGBArray(camera)
sleep(0.1)
camera.capture(rawCapture, format="bgr")
image = rawCapture.array

# Transformari pe imag ine
greyscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
greyscale = cv 2.GaussianBlur(greyscale, (7, 7), 0)

# Detectarea marg inilor si inchiderea gaurilor
canny_output = cv2.Canny(greyscale, 10, 140)

72
canny_output = cv2.dilate(canny_output, None, iterations=1)
canny_output = cv2.erode(canny_output, None, iterations=1)

# Se vor crea contururi organizate de la 1 la r
contours, _ = cv2.f indContours(canny_output, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
if len(contours) < 2:
print("Prea put ine obiecte ")
exit(0)

(contours, _) = imutils.contours.sort_contours(contours)
contours_poly = [None]*len(contours)

boundRect = [None]*len(contours)

for i, c în enumerate(contours):
contours_poly[i] = cv2.approxPolyDP(c, 3, True)
boundRect[i] = cv2.bound ingRect(contours_poly[i])

output_image = image.copy()
mmPerPixel = args[" latime"] / boundRect[0][2]
highestRect = 1000
lowestRect = 0

for i în range(1, len(contours)):

if boundRect[i][2] < 50 or boundRect[i][3] < 50:
continue

if highestRect > boundRect[i][1]:
highestRect = boundRect[i][1]

if lowestRect < (boundRect[i][1] + boundRect[i][3]):
lowestRect = (boundRect[i][1] + boundRect[i][3])

#Realizare dreptunghi pentru afisare
cv2.rectangle(output_image, ( int(boundRect[i][0]), int(boundRect[i][ 1])),
(int(boundRect[i][0] + boundRect[i][2]),
int(boundRect[i][1] + boundRect[i][3])), (255, 0, 0), 2)

# Calcularea inaltimii plantei – diferenta intre dreptunghiul situat cel mai sus si
dreptunghiul situat cel mai jos inmultit cu milimetrii asociati per pixel.

plantHeight = (lowestRect – highestRect) * mmPerPixel
print("Inaltimea plantei este {0:.0f}mm".format(plantHeight))

SUBJECT="Notificari sera"

TEXT="Inaltimea plantei este {0:.0f} mm".format(plantHeight)
msg='Subject: {} \n\n {}'.format(SUBJECT,TEXT)
server.sendmail("rasp.pi.929@gmail.com","rasp.pi.929@gmail.com",msg)

#afisarea imaginii finale care cuprinde recunoasterea si incadrarea

Rresized_image = cv2.resize(output_image, (1280, 720))

cv2.imshow("Image", resized_imag e)

cv2.waitKey(0)
server.quit()

73
Anexa B

Capturi de ecran realizate în procesul de măsurare a celor 3 plante folosite

Planta 1 – planta de Yacon

Structura: neregulata – Flori : –
Înălțime : mare – Culoare: preponderent verde
Frunze :late
Tulp ina: subțire
Recunoaștere : medie
Măsurare : buna

1

2

74

3
.

4
.

Tabel B -1
Observații :
În cele 4 poze atașate în tabelul B -1 se observa ca modificarea orientării plantei afectează
modul în care ea este percepută . Aceste măsurători au fost realizate cu modulul de camera fixat
la 90° și acesta nu se va mișca pe parcu rsul acestor măsurători .
Se constată că la fiecare mișcare a plantei și a orientării frunzelor aceasta va fi percepută diferit
însă măsurătorile nu vor fi afectate major. Numerel e sunt apropiate cum se poate vedea in
Tabelul B -2.
Pentru corectitud inea măsurătorilor odată așezata planta în poziția dorită aceasta nu va mai fi
mișcata pe parcursul măsu rătorilor .

75
Dimensiunea plantei de Yacon la momentul măsurării :
L=20,3cm (203 mm)
Media aritmetica celor 4 măsurători :
La=20,425 ( 204,25 mm)
Eroarea absolută :
e = |20,3 cm – 20,425 cm| = 0,125 cm (1,25 mm)
Eroarea relativă :
ε = 𝑒
𝐿 = 0,00 61=0,61%

Număr Rezultat

1

2

3

4

Tabel B -2

76

Planta 2 – Garofița (Dianthus) – flori roz

Structura: compactă – Flori : roz
Înălțime : medie – Culoare: verde , roz
Frunze : ascuțite
Tulp ina: multiplă , subțire
Recunoaștere : bună
Măsurare : bună

Tabel B -3

77

Număr Rezultat

1

2

Tabel B-4

Observații :

Această plantă are o structură mai compactă și mai ușor de detectat. Orientarea spre cameră nu
va afecta nici în acest caz măsurătorile .

Dimensiunea plantei la momentul măsurării :
L=12,6 cm (126 mm)
Media aritmetică celor 2 măsurători :
La=11,9 cm (119 mm)
Eroarea absoluta :
e = |12,6 cm – 11,9c m| = 0, 7 cm (7 mm)
Eroarea relativă :
ε = 𝑒
𝐿 = 0,0 555=5,55%

78
Planta 3 – Garofița (Dianthus) – flori roz și albe

Structura: compactă – Flori : roz si albe
Înălțime : medie – Culoare: verde, roz si alb
Frunze : ascuțite
Tulp ina: multiplă , subțire
Recunoaștere : problemă la florile albe
Măsurare : eronată

Tabel B -5
Observații :
Planta 3 care conține flori de culoare albă este greu de detectat iar măsurătorile nu se
efectuează corespunzător . Algoritmul care analizează marg inile și contururile a re probleme în
detectarea obiectelor albe pe fundal alb. Acesta reprezintă un dezavantaj al metodei folosite.
Soluție : folosirea un ui fundal de altă culoare pentru măsurarea plantei cu flori albe.
Înălțimea plantei la momentul măsurării : 17,2 cm (172 mm)
Deoarece Planta 3 nu a fost detectată corespunzător din cauza problemei cu fundalul alb, pe
datele obțin ute în urma măsurătorii ei nu se vor mai face calcule pentru aflarea erorilor.

79
Anexa C

Figura C -1

Figura C -2

80

Recunoașterea celor doua plan te s-a făcut corespunzător după ajustarea prelucrărilor și după
eliminarea factorilor care influențează măsurarea . În spatele serei trebuie sa fi e un cadru de
culoare alba care sa reducă șansele de detectare a altor obiecte în afara plantei.
În figura C-1 se poate observa că detectarea plantei de Yacon se realizează corect indiferent de
orientarea frunzelor acesteia.
Deși recunoașterea plantei se realezează diferit, adică dreptunghiurile care încadrează obiectele
imaginii corespunzătoare plantei a u poziții diferite și este foarte probabil ca la măsurări repetate
ele sa aibă așezări diferite în cadrul imaginii și numărul lor să varieze.
Detectarea celei de a doua plante s -a făcut în aceleași condiții de lumină și așezare și se poate
constata în figura C -2 ca recunoașterea ei nu variază chiar atât de mult datorită structurii ei
„adunate” și compacte.
În ambele cazuri studiate acest fapt nu influențează măsurarea și precizia măsurării . Poziția și
și dimensiunea dreptunghiurilor nu va afecta măsurătorile în niciun fel, decât în cazul unor
detectări greșite .

81
Anexa D

Figura D-1

Similar Posts