Uporaba senzorjev, analogni vhodi, digitalni izhodi, PWM

V nalogi bomo uporabili naslednenzorje senzorje:

Vhodi:

Senzor plinov bomo priključili na konektor B, pin 3 (B/AI0).

Senzor svetlobe bomo priključili na konektor B, pin 5 (B/AI1).

Senzor gibanja bomo priključili na konektor A, pin 3 (A/AI0).

Senzor temperature bomo priključili na konektor B, pin 9 (B/AI3).

Izhodi:

Za vse izhodne elemente bomo uporabili LED diode, zaporedno vezane z upori 470 ohm. LED diode bodo simulirale delovanje naloge.

Zahteve za delovanje naloge:

Senzor plinov: V kolikor senzor zazna večjo koncentracijo plinov, vklopi ventilator. Mejna koncentracija plinov, ko vklopi ventilacija, se določi v programski kodi. Ventilator krmilimo s PWM signalom, večja kot je koncentracija plinov, hitreje se ventilator vrti. Na vmesniku (Čelna plošča) se naj prikazuje koncentracija plinov, indikacija vklopljenega oziroma izklopljenega ventilatorja, duty cycle PWM signala v območju od 0 % do 100 %, frekvenco PWM signala pa je prek vmesnika mogoče spreminjati v območju od 50 Hz do 100 Hz.

Senzor svetlobe, fotoupor LDR: Razsvetljava vklopi oziroma izklopi v odvisnosti od svetlobe, ki jo zaznava fotoupor LDR. Na vmesniku (Čelna plošča) naj bo prikazana napetost na fotouporu v območju od 0 V do 5 V ter simulacijska LED dioda, ki prikazuje stanje razsvetljave. Mejo, ko naj vklopi oziroma izklopi razsvetljava je možno spreminjati na vmesniku.

Senzor gibanja: V kolikor senzor gibanja zazna gibanje, vklopi razsvetljava oziroma piskač. Na vmesniku (Čelna plošča) naj bo prikazana indikacija stanja senzorja gibanja, simulacijska LED dioda, ki prikazuje stanje z ustreznim napisom (Zaznano gibanje oziroma Ni zaznanega gibanja) ter besedilno sporočilo ustrezne vsebine na drugi, večji simulacijski LED diodi, ki se prikaže, če je senzor zaznal gibanje.

Temperaturni senzor: Na vmesniku (Čelna plošča) se naj prikazuje izmerjena temperatura na termometru v °C (območje od 10 °C do 40 °C). Želeno temperaturo in temperaturno toleranco je mogoče nastaviti na vmesniku. Če temperatura pade pod spodnjo nastavljeno vrednost, vklopi grelec in izklopi, ko je dosežena zgornja nastavljena vrednost. Takrat vklopi ventilator, ki izklopi, ko temperatura pade pod spodnjo nastavljeno vrednost. Delovanje grelca in ventilatorja naj simulirata LED diodi na vmesniku.

Vklop / Izklop virtualnega instrumenta naj bo izvedeno s stikalom. Pred zagonom virtualnega instrumenta moramo stikalo vklopiti (ON). Virtualni instrument deluje, dokler ga s stikalom ne izklopimo (OFF). Po izklopu virtualnega instrumenta morajo vse simulacijske LED diode na vmesniku (Čelna plošča) izklopiti.

Privzete vrednosti:

Temperatura v prostoru: 25 °C.

Temperaturna toleranca: 1 °C.

Nastavitev vklopa razsvetljave v odvisnosti od svetlobe: 2,5 V.

Frekvenca PWM signala: 50 Hz.

Duty cycle PWM signala: 0 %.

Besedila sporočila na podlagi senzorja gibanja: izklopljena, sporočila se ne vidijo.

Vse simulacijske LED diode: izklopljene.

Poglejmo programsko kodo, izdelano v Blok Diagramu:

Slika 1: Uporaba senzorjev, analogni vhodi, digitalni izhodi, PWM, Blok diagram.

Slika 2: Uporaba senzorjev, analogni vhodi, digitalni izhodi, PWM, Čelna plošča.

Opis programske kode:

Prvi okvir sekvence Flat:

V prvem okvirju sekvence Flat določimo vhodne analogne kanale (pine), izhodne digitalne kanale (pine) in PWM izhodni kanal (pin). Za določitev analognih vhodnih pinov izberemo funkcijo Open.vi (Functionc > Programming > myRIO > Low Level > Analog Input 1 Sample > Open). Z miško se pribljižamo vhodnemu terminalu (Channel Names), pritisnemo na desno tipko miške ter kreiramo konstanto. V bistvu smo kreirali eno dimenzionalno polje, ki predstavlja zaporedje podatkov - vhodnih kanalov. Desni okvirček kreirane konstante razširimo ter na spustnem seznamu eno dimenzionalnega polja določimo kanale, analogne vhode (pine), ki jih bomo uporabili v nalogi. Na razpolago imamo vse analogne vhode modula myRIO, na vseh treh konektorjih.

Sika 3: Izbira analognih vhodov modula myRIO.

Na enak način izberemo PWM izhodni pin ter digitalne izhodne pine, ki jih bomo uporabili v nalogi. Pri izbiri PWM izhoda na podpaleti Low Level izberemo PWM > Open.vi, pri izbiri digitalnih izhodov pa na podpaleti Low Level izberemo Digital Input/Output 1 Sample > Open.vi.

Drugi okvir sekvence Flat:

V drugem okvirju sekvence Flat imamo nameščene zanke While.

Prva zanka While: Namestimo funkcijo Read.vi in ji na izhodnem terminalu Values kreiramo funkcijo Index Array. Ker imamo 4 vhodne kanale, funkcijo Index Array ustrezno razširimo. Vrstni red elementov funkcije Index Array ustreza vrstnemu redu izbranih analognih kanalov. Posameznim elementom kreiramo indikatorje in jih preimenujemo. Indikatorje lahko kreiramo v Blok diagramu ali na Čelni plošči. Če jih kreiramo v Blok diagramu, jih lahko spremenimo na Čelni plošči (v njihovem priročnem meniju izberemo Replace ter v ustrezni paleti izberemo ustrezni indikator, npr. termometer). Ob vklopu virtualnega instrumenta bodo izdikatorji prikazovali vrednosti na izbranih analognih vhodih. Ker uporabljamo analogni temperaturni senzor LM35, vrednost na analognem vhodu AI3 konektorja B pomnožimo s 100, da indikator prikazuje vrednosti v °C. Analogne vhode na konektorjih A in B lahko uporabimo za merjenje signalov napetosti od 0 V do 5 V.

Da sprostimo računalniški procesor, v zanko While namestimo časovno funkcijo Wait (ms) in ji na terminal milliseconds to wait pripeljemo vrednost 10. To pomeni, da bo LabVIEW najprej izvedel algoritm zanke While, nato pa bo procesor za 10 ms na voljo drugim opravilom, torej za 10 ms sprosti procesor.

Ker bomo z enim stikalom ustavili delovanje vseh While zank, moramo v priročnem meniju gumba (stikala) stop nastaviti njegovo delovanje. Na jezičku Operation pod Button behavior izberemo Switch when pressed (slika 4).

Slika 4: Operacije delovanja gumba stop.

Druga zanka While: Zanka je namenjena krmiljenju ventilacije v odvisnosti od koncentracije plinov, ki jih zaznava senzor plinov. Indikatorju Plin v prvi zanki While kreiramo lokalno spremenljivko (priročni meni indikatorja Plin > Create > Local Variable) in jo namestimo v drugo zanko While. Delovanje lokalne spremenljivke v njenen priročnem meniju spremenimo v Change to Read. Ventilator bomo krmilili s PWM signalom le, če bo koncentracija plinov narastla na takšno vrednost, da bo na analognem izhodu senzorja plinov napetost večja od 3 V. Uporabimo funkcijo In Range and Coerce (Functions > Programming > Comparison > In Range and Coerce). Vhodni terminal upper limit nastavimo na 5, lower limit pa na 3. V tem območju bo funkcija In Range and Coerce na izhod coerced(x) posredovala vse vrednosti med 3 in 5, ki jih dobi iz izhoda senzorja plinov. Te vrednosti dobi iz lokalne spremenljivke Plin na vhodni terminal x. Če je na vhodnem terninalu x vrednost med 3 in 5, se izvede okvir True programske strukture Case, sicer pa okvir False. V okviru True vrednosti med 3 in 5 pretvorimo v primerno vrednost duty cycle PWM signala, da se bo hitrost vrtenja ventilatorja primerno spreminjala. Paziti moramo tudi na to, da na vhod Duty Cycle funkcije PWM ne pripeljemo večje vrednosti od 1. Na ta vhod lahko pripeljemo le vrednosti od 0 do 1. Ker na vmesniku (Čelna plošča) prikazujemo duty cycle PWM signala v %, od 0 % do 100 %, moramo vrednost pred indikatorjem pomnožiti s 100. Na pogojni priključek zanke While poveženo lokalno spremenljivko gumba stop iz prve zanke While.

Slika 5: Okvir True programske strukture Case v drugi zanki While.

Tretja zanka While: Tretja zanka While je namenjena krmiljenju razsvetljave v odvisnosti od svetlobe. Če je vrednost napetosti na fotouporu (na analognem vhodu AI1 konektorja B) večja od izbrane napetosti (nastavljamo jo s kontrolo Nastavitev vklopa), se izvede okvir True programske strukture Case, sicer pa okvir False. V okvirju True z Booleanovo konstanto True vklopimo razsvetljavo, v okvirju False pa jo z Booleanovo konstanto False izklopimo.

Četrta zanka While: V četrti zanki While je nameščena funkcija Write.vi. Na njen vhodni terminal Values pripeljemo izhod funkcije Build Array (Functions > Programming > Array > Build Array). S funkcijo Build Array smo programsko kreirali polje podatkov. Na vhodne elemente funkcije Build Array pripeljemo vrednosti za krmiljenje posameznih digitalnih izhodov. Vrstni red elementov ustreza vrstnemu redi izbranih digitalnih izhodov. Če je npr. senzor svetlobe zaznal temo, se vklopi LED indikator Razsvetljava. Temu indikatorju smo kreirali lokalno spremenljivko, ki je povezana na prvi element funkcije Build Array. Zato bo myRIO poslal logično 1 (napetost 3,3 V) na digitalni izhod DIO0 konektorja C, saj je v eno dimenzionalnem polju kreiranih digitalnih izhodov na prvem mestu.

Peta zanka While: V peti zanki While krmilimo digitalni izhod DIO1 konektorja C v odvisnosti od tega, ali je senzor gibanja zaznal gibanje ali ne. Dodali smo dve simulacijski LED diodi, pravokotno in okroglo. V njunem priročnem meniju smo izbrali barve in napise, ki se prikažejo ob vklopu oziroma izklopu.

Šesta zanka While: V šesti zanki While krmilimo temperaturo v prostoru. Če je izmerjena temperatura manjša od želene (nastavljene) zmanjšana še za toleranco, se izvede okvir True zunanje programske strukture Case. V tem okvirju z Booleanovo konstanto True vklopimo grelec in zunaj programske strukture Case prek negatorja izklopimo ventilator.

Slika 6: Okvir True zunanje programske strukture Case, šesta zanka While.

Če pa izmerjena temperatura ni manjša od želene (nastavljene) zmanjšana še za toleranco, se izvede okvir False zunanje strukture Case v katerem preverjamo, ali je izmerjena temperatura večja od želene (nastavljene) povečana še za toleranco. Če je večja, se izvede okvir True notranje programske strukture Case, v katerem z Booleanovo konstanto False izklopimo Grelec in zunaj obeh programskih struktur Case prek negatorja vklopimo ventilator. Če izmerjena temperatura ni manjša od izmerjene minus toleranca in ni večja od željene (nastavljene) povečana še za toleranco, se izvede okvir False notranje programske strukture Case.

Slika 7: Okvirja True in False notranje programske strukture Case, šesta zanka While.

Tretji okvir sekvence Flat:

Ko s stikalom izklopimo izvajanje zank While, s funkcijami Close.vi prekinemo komunikacijo z vsemi analognimi vhodi, prekinemo komunikacijo s PWM izhodom in postavimo frekvenco ter duty cycle na vrednost 0 in prekinemo komunikacijo z vsemi digitalnimi izhodi ter jih postavimo na logično stanje 0. Nato se izvede tretji okvir sekvence Flat v katerem nastavimo privzete vrednosti:

Temperatura v prostoru: 25 °C.

Temperaturna toleranca: 1 °C.

Nastavitev vklopa razsvetljave v odvisnosti od svetlobe: 2,5 V.

Frekvenca PWM signala: 50 Hz.

Duty cycle PWM signala: 0 %.

Besedila sporočila na podlagi senzorja gibanja: izklopljena.

Vse simulacijske LED diode: izklopljene.

Četrti okvir sekvence Flat:

Resetiramo mdul myRIO.