15.07.2013

Arduino+LabView = SIA(Sistem de Irigare Automatizat)

Salut! In acest articol am sa va prezint un proiect realizat de mine,un sistem de irigare automat utilizand LabVIEW versiunea student si interfata LIFA(LabView Interface for Arduino).Pentru implementarea practica,vom utiliza o placa Arduino cu ajutorul careia vom citi tensiunile senzorilor de temperatura,lumina si umiditate.Tensiunile vor fi convertite in unitati de masura specifice.Pentru a verifica daca programul functioneaza,la iesire vom conecta un led.
Pentru a comanda o electrovalva sau un motor ac spre exemplu este necesar un modul extern,acest subiect va fi tratat in articolul viitor.
Modul de functionare a programului:
   Programul se seteaza la o ora si data dorita la care se doreste pornirea/oprirea.
   In cazul in care temperatura,lumina sau umiditatea ajunge la o valoare limita impusa de utilizator programul se va opri.Aceste limite pot fi introduse in butoanele de control TMP OFF LIMIT/LIGHT OFF LIMIT/HUM OFF LIMIT.
   De asemenea programul poate fi pus in stare de pauza prin apasarea butonului PAUSE/START.
   Tensiunile de pe senzori pot fi citite de pe panoul frontal la indicatoarele VOLTAGE TMP/LIGHT/HUM.Temperatura poate fi citita in grade Celsius de pe indicatorul de tip termometru TMP,iar umiditatea se exprima in umditate relativa RH%.Intensitatea luminii se citeste de pe indicatorul LIGHT pe o scara de la 1 la 10.
   Selectia intrarilor senzorilor se face din butoanele de control alegand pinii intrarea din meniu.
BOM:
1.Senzor de umiditate (SYH-2RS)
2. Senzor de temperatura (LM35)
3.Fotorezistor
4.Rezistente (2x500, 1X100, 1x1k,1x5k)
5.Arduino UNO
6.Fire si 1 led

Schemele utilizate

1.Schema pentru masurarea umiditatii

2.Schema pentru masurarea luminii

3.Schema pentru masurarea temperaturii


   Pentru schema 1 si 2 tensiunea se calculeaza prin divizare.

   Pentru calculul temperaturii se utilizeaza formula :
grad C = (Vout[mV])/10
   AN0,AN1,AN2 reprezinta intratile placii arduino.

4.Schema bloc a sistemului

5.Programul in Labview


Modul de functionare a schemei

1.Blocul de achizitionare a datei si orei in timp real

fig.1
   In figura 1 este reprezentat blocul de achizitionare a datei si orei in timp real.In figura a este reprezentat schema in diagrama bloc,aceasta afiseaza o valoare numerica a orei in formatul pe care il specificati.In figura b este afisat timpul in panoul frontal.
   %X-comanda utilizata pentru achizitionarea orei de la PC
   %m/%d/%Y-comanda utilizata pentru formatarea datei:luna/zi/an.

2.Blocul pentru setarea orei si datei


fig.2
   Figura 2 a si b reprezinta modul de setare a orei si a datei la care se doreste pornirea,respectiv oprirea programului.
    Blocul a1 achizitioneaza timpul si ora de la pc prin blocul a2(Get Date/Time in seconds).Acesta este comparat cu o limita superioara(a3) sau inferioara(a4) impusa de utilizator(vezi fig c),daca datele x se afla in valoarea limitelor inferioare la iesire(?) valoarea va fi TRUE.In momentul in care x se afla in limita superioara valoarea la iesire va fi FALSE.Blocul a5 efectueaza operatia de SI logic intre valoarea de la iesire(?) si a6 care este un buton de tip toggle utilizat pentru pauza(PAUSE).
   Iesirea din blocul a5 este legata la o structura de tip(SC) CASE,daca conditia impusa da ora si data este adevarata programul va rula,in caz contrar programul va fi oprit.
   In imaginea este prezentata rularea programului in conditia TRUE respectiv FALSE(fig.3 si fig.4).
fig.3
fig.4

3.Blocul pentru achizitionarea si conversie a temperaturii

   Blocul a1 este utilizat pentru achizitia tensiunii(vezi fig5.c) de la senzorul de temperatura prin convertorul analog-numeric al placii de achizitie,ulterior valoarea numerica este transformata in grade celsius utilizand FORMULA(a3) si afisata pe termometrul virtual(fig.5 b/a4).
a2 este utilizat pentru configurarea portului de intrare a placii de achizitie.Senzorul de temperatura este conectat la intrarea Analog In 0 pe placa de achizitie.
fig.5

4.Blocul pentru achizitionare si conversie a intensitatii luminoase

   Blocul a1 este utilizat pentru achizitia tensiunii(vezi fig6.b) de la senzorul de lumina prin convertorul analog-numeric al placii de achizitie,ulterior valoarea numerica este reprezentat pe o scara de la 0 la 10 prin inmultirea tensiunii citite cu 10. (vezi fig 6.c);10 reprezentand intensitatea luminoasa maxima,intensitatea este reprezentata pe termometrul virtual(fig. 6c/a3).A2 este utilizat pentru configurarea portului de intrare al placii de achizitie.Senzorul de lumina este conectat la intrarea Analog PIN In 1 pe placa de achizitie.
fig.6

5.Blocul pentru achizitionarea si conversia umiditatii

   Blocul a1 este utilizat pentru achizitia tensiunii(vezi fig7.c) de la senzorul de umiditate prin convertorul analog-numeric al placii de achizitie,ulterior valoarea numerica este reprezentat pe o scara de la 0 la 100 prin inmultirea tensiunii citite cu 100. (vezi fig7.b);Umiditatea este reprezentata pe termometrul virtual(fig7.b/a3) si este exprimata in procent.A4 este utilizat pentru configurarea portului de intrare al placii de achizitie.Senzorul de lumina este conectat la intrarea Analog PIN In 2 pe placa de achizitie.
fig.7

6.Blocul conditionat de senzori

fig.8

   Dupa citirea datelor de la senzorii de temeperatura,lumina respectiv umiditate,sunt preluate valorile a,b,c.Acestea sunt comparate cu o valoare introdusa de utilizator TMP OFF LIMIT(limita maxima a temperaturii),LIGHT OFF LIMIT(limita maxima a intensitatii luminoase),RH% LIMIT(limita maxima a umiditatii relative).
   Valorile rezultate in urma comparatiilor sunt conectate la o poarta compusa OR,daca una dintre valorile rezultatelor in urma comparatiilor este adevarata se va indeplini conditia TRUE,la iesirea digitala 3 a placii de achizitie tensiunea va fi 0 volti(ledul nu se aprinde). 
   In cazul in care conditia este falsa,adica valorile a,b,c sunt mai mici decat valorile impuse de utilizator,la poarta compusa OR iesirea va fi FALSE,se va indeplini condita FALSE iar ledul se va aprinde.
fig.9

7.Blocul pentru reprezentarea graficului lumina-tensiune

fig.10
   Blocul este utilizat pentru reprezentarea intensitatii luminii(a) in functie de tensiunea citita de la senzor(b).Se utilizeaza functia Insert into Array(d) pentru a crea multimea.In punctele e si f se insereaza multimea prin registrii de deplsare iar in punctele a si b se insereaza elementul,randul,coloana din multimea inserata in e,f.Iesirea multimii se converteste in date dinamice utilizand Convert to Dynamic Data (c),iar datele sunt utilizate pentru crearea grafului prin functia BUILD XY GRAPH.

8.Buclele de rulare si functia lor

   Intreg programul ruleaza intr-o bucla WHILE.Programul ruleaza fara oprire pana la actionarea butonului STOP din panoul frontal.
   Structurile de tip CASE sunt necesare deoarece ne dorim sa conditionam pornirea/oprirea programului in functie de timp,sau de valorile citite de la senzori.
   Structura FLAT SEQUENCE se utilizeaza deoarece se doreste ca citirile de la senzori sa se execute secvential,una dupa cealalta cu un interval de 1000ms,in cazul in care nu se utilizeaza un interval de temporizare si o structura secventiala in fluxul de date,apar erori iar valorile afisate pe indicatoarele din panoul frontal apar variatii care fac citirea imposibil.
fig.11

Panoul Frontal in Labview

fig.12

Modul de conectare a senzorilor pe placa de test


fig.13

PIC