Uporaba temperaturnega senzorja LM35
Na analogni vhod A0 razvojne plošče Arduino Uno bomo priključili temperaturni senzor LM35. Temperaturni senzor LM 35 smo že spoznali pri vaji Merjenje in prikaz temperature na LCD.
Najprej bomo izdelali virtualni instrument, ki bo meril in prikazoval temperaturo v °C. Temperatura se naj prikazuje na termometru (Thermometer) in na grafikonu (Waveform Chart). Če temperatura preseže vrednost 30°C, se naj na Čelni plošči vklopi simulacijska LED dioda (Boolean Round LED). Temperatura se naj izmeri vsakih 300 ms.
Slika 1: Blok diagram
Napetost na izbranem analognem vhodu A0 (izhod temperaturnega senzorja LM35) pomnožimo z 100 zato, ker ima temperaturni senzor karakteristiko 10 mV / 1°C. Z uporabo primerjalnika (Greater?) primerjamo izmerjeno temperaturo z nastavljeno vrednostjo, ki znaša 30°C. Če izmerjena temperatura preseže vrednost 30°C, vklopi LED dioda.
Zanka While se ponovi vsakih 300 ms. Vsakih 300 ms se torej izvede meritev temperature.
Za prikaz morebitne napake smo tokrat uporabili blok Simple Error Handler.vi (Functions > Programming > Dialog & User Interface > Simple Error Handler.vi), ki nam v dialognem oknu opiše napako, če je do nje prišlo.
Slika 2: Čelna plošča
Regulacija temperature v prostoru:
Izdelajmo virtualni instrument v okolju LabVIEW, ki bo komuniciral z Arduino Uno za regulacijo temperature v prostoru. Uporabili bomo senzor temperature LM35. Za grelec bomo uporabili upor, ki bo nameščen nepostedno ob senzorju. Tok ki teče skozi upor bo le tega segreval, upor pa bo segreval temperaturni senzor LM35. Za hlajenje bomo uporabili računalniški ventilator (12 V). Rdeča LED dioda naj sveti takrat, ko je vklopljen grelec, zelena LED dioda pa naj sveti takrat, ko je vklopljen ventilator.
Naloga naj deluje po neslednjih zahtevah:
Želeno temeraturo (višjo od temperature okolice) v prostoru nastavljamo s kontrolo na Čelni plošči (vmesniku).
Tolerančno območje nastavimo s kontrolo na Čelni plošči.
Če je nastavljena želena temperatura 30°C in tolerančno območje 1°C pomeni, da naj se temperatura v prostoru giblje od 29°C do 31°C. Grelec greje do temperature 31°C, ventilator hladi do temperature 29°C.
Hitrost tipanja (preverjanja, merjenja) temperature v sekundah lahko nastavimo s kontrolo na Čelni plošči.
Temperatura se naj na vmesniku prikazuje na grafikonu in na termometru. Na grafu naj bo nastavljeno temperaturno območje od 15°C do 40°C, na termometru pa od 10°C do 40°C.
Priključke, kamor bomo na Arduino Uno priključili grelec, ventilator in temperaturni senzor LM35 nastavimo na Čelni plošči (vmesniku).
Na Čelni plošči naj bosta nameščeni dve simulacijski LED diodi, ki prikazujeta stanje grelca in stanje ventilatorja.
Na vezju, priključenem na Arduino Uno (glej el. načrt) naj bo vklopljena rdeča LED dioda v času gretja in zelena LED dioda v času hlajenja.
Virtualni instrument zaustavimo s pritiskom na tipko stop, ki se nahaja na Čelni plošči. Ko virtualni instrument zaustavimo, se morata izklopiti tako ventilator kot grelec. Enako velja za simulacijski LED diodi.
Ko virtualni instrument ponovno zaženemo, se mora prikazovanje časa na časovni osi grafa začeti od 0.
Slika 3: Elektronski načrt in priključitev elementov na razvojno ploščo Arduino Uno
Kot je razvidno iz spodnjega posnetka, bomo izhod temperaturnega senzorja LM35 priključili na analogni pin A0, grelec na digitalni pin 2 in ventilator na digitalni pin 3 razvojne plošče Arduino Uno:
Poglejmo najprej algoritem programa v Blok diagramu in razlago.
Slika 4: Algoritem programa za regulacijo temperature v prostoru, Blok diagram
Vsi okvirji uporabljene strukture Case:
Slika 5: Zunanja struktura Case, selektor izbire True
Slika 6: Zunanja struktura Case, selektor izbire False, notranja struktura Case, selektor izbire True
Slika 7: Zunanja struktura Case, selektor izbire False, notranja struktura Case, selektor izbire False
Uporabili smo programsko strukturo Ploščata sekvenca (Flat Sequence Structure).
Sekvenca (Sequence) oziroma zaporedje je programska struktura, ki je namenjena določitvi vrstnega reda izvajanja kode. Uporablja se v primerih, ko je pomemben vrstni red izvajanja posameznih segmentov kode. Obstajata dve vrsti sekvenc:
Ploščata sekvenca (Flat Sequence)
Zložena sekvenca (Stacked Sequence)
Sekvenca je sestavljena iz več okvirjev. Pri zloženi sekvenci so okvirji zloženi en nad drugim, tako da je viden samo en okvir, pri ploščati sekvenci pa so okvirji nameščeni drug ob drugem in so tako vidni vsi okvirji.
Sekvenco kreiramo z orodjem Flat Sequence ali Stacked Sequence, ki se nahajata na paleti Functions > Programming > Structures. Privzeto se ob namestitvi sekvence kreira en okvir. Okvirje dodajamo z opcijama Add Frame After ali Add Frame Before v priročnem meniju strukture.
Sekvenca izvaja okvirje zaporedno in je tekom izvajanja ni mogoče prekiniti. Pri uporabi sekvenc je včasih potrebno podatke iz enega okvirja prenesti v drug okvir. Ploščate sekvence omogočajo kreiranje direktne povezave med objekti, ki se nahajajo v različnih okvirjih. Ob tem se na robu med okvirji kreira tunel.
Algoritem (koda programa) v našem primeru vsebuje sekvenco s tremi okvirji:
Levi okvir sekvence:
Določimo začetne nastavitve, kjer določimo COM vrata za komunikacijo LabVEW z Arduinom, hitrost prenosa podatkov, tip Arduinove ploščice in serijsko komunikacijo.
Določimo digitalna pina razvojne plošče Arduino Uno, kamor priključimo grelec in ventilator. Določimo da sta ta dva pina izhodna.
Pobrišemo zgodovino prikazovanja poteka temperature na grafu (Waveform Chart History). Funkcijski blok dobimo tako, da v priročnem meniju Waveform Chart izberemo Create > Proprety Node > History Data in ga odložimo v prvi okvir sekvence. Nato se z miško postavimo nad odložen objekt (Waveform Chart History) in po pritisku na desno tipko miške v priročnem meniju izberemo Change All To Write. Na njegovem levem priključku (History Data) kreiramo konstanto.
Slika 8: Funkcijskemu bloku Waveform Chart History spremenimo vlogo iz Read na Write.
Sredinski okvir sekvence:
Namestimo zanko While.
S kontrolo Čas tipanja temp. lahko nastavljamo čas iteracij zanke While, ko se zanka While ponovi. Ker želimo s kontrolo nastavljati čas v sekundah, moramo vrednost kontrole pomnožiti s 1000.
Na Čelni plošči kreiramo: graf (Conrols > Modern > Graph > Waveform Chart), termometer (Conrols > Modern > Numeric > Thermometer), dve simulacijski LED diodi (Conrols > Modern > Boolean > Round LED), kontrolo za nastavljanje časa ponavljanja zanke While (Conrols > Modern > Numeric > Numeric Clntrol), ter kontroli za nastavljanje želene temperature in tolerance. Vsem kreiranim objektom v njihovih priročnih menijih spremenimo ime. V Blok diagramu spremenimo pogled kreiranim objektom tako, da v njihivih priročnih menijih odznačimo Wiew As Icon.
Ob vsakem obhodu zanke While analogni vhod, kamor je priključen senzor LM35, preverja trenutno temperaturo.
Če je trenutna temperatura manjša od nastavljene želene temperature in tolerance (izbirni priključek zunanje strukture Case), se bo izvedel okvir True zunanje strukture Case. S pomočjo Booleanove konstante True vklopimo simulacijsko LED diodo za grelec in izklopimo simulacijsko LED diodo za ventilator.
Če je trenutna temperatura večja od nastavljene želene temperature in tolerance (izbirni priključek notranje strukture Case), se bo izvedel okvir False zunanje strukture Case in okvir True notranje strukture Case. S pomočjo Booleanove konstante False izklopimo simulacijsko LED diodo za grelec in vklopimo simulacijsko LED diodo za ventilator.
Vsaki simulacijski LED diodi kreiramo lokalno spremenljivko in jima v njunem priročnem meniju izberemo Change To Read. S pomočjo teh dveh lokalnih spremenljivk vklapljamo oziroma izklapljamo grelec in ventilator (na digitalna izhodna pina Arduinove ploščice pošiljamo 0 V oziroma 5 V).
Ko pritisnemo na tipko stop, ustavimo izvajanje zanke While. Preden se zaključi izvajanje sredinskega okvirja sekvence, pošljemo na oba izhodna digitalna pina 0 V in s tem izklopimo ventilator in grelec.
Slika 9: Lokalni spremenljivki vklapljata oziroma izklapljata grelec in ventilator.
Desni okvir sekvence:
Ta se izvede zadnji. Prekinemo komunikacijo z Arduino Uno.
Namestimo blok Simple Error Handler.vi (Functions > Programming > Dialog & User Interface > Simple Error Handler.vi), ki nam v dialognem oknu opiše napake, če je do njih prišlo. Za združitev vseh treh linij smo uporabili blok Merge Errors (Functions > Programming > Dialog & User Interface > Merge Errors). Po potrebi blok razširimo. To storimo tako, da se z miško postavimo na njegov spodji rob ter ga s povlečenjem razširimo.
Izklopimo obe simulacijski LED diode, ki predstavljata grelec in ventilator. Namestimo Boolovo konstanto False (Functions > Programming >Boolean > False Constant). Nato kreiramo dve lokalni spremenljivki, eno za simulacijsko LED diodo ki predstavlja grelec in drugo za LED diodo, ki predstavlja ventilator. To storimo tako, da se z miško postavimo nad Booleanov indikator LED diodo (grelec oz. ventilator), ki se nahajata v zanko while ter v njunem priročnem meniju izberemo Create > Local Variable. Lokalni spremenljivki povežemo s konstanto False.
Slika 10: Lokalni spremenljivki, povezani z Booleanovo konstanto False.
Čelna plošča
Posamezne kontrole smo namestili v kontrolo Tab Control (Controls > Modern > Containers > Tab Control) tako, da smo jih povlekli na izbrano stran Tab Control. V priročnem meniju Tab Control izbiramo dodajanje strani (Add Page After ali Add Page Before), omogočimo različne barve posameznih strani (Advanced > Allow Muliple Colors), izbiramo položaj zavihkov (Advanced > Tab Location > Right) in ostale stvari.
Okvir vmesnika izberemo Controls > Modern > Decorations > Vertical Smooth Box. Ko ga primerno razširimo, ga označimo in pošljemo v ozadje (orodna vrstica Reorder > Move To Back. Če smo s položajem vseh objektov vmesnika zadovoljni, celotni vmesnik označimo (zunaj vmesnika pritisnemo na levo tipko miške in jo pridržimo ter z miško povlečemo preko celotnega vmesnika) in ga nato zaklenemo (orodna vrstica Reorder > Lock), da posameznih objektov na vmesniku in celotnega vmesnika ne moramo več premikati.