Krmiljenje LED diode s pomočjo labVIEW vmesnika

Programsko okolje LabVIEW (Laboratory Virtual Instrument Engineering Workbench) proizvajalca National Instruments (NI) je v celoti grafično zasnovano ter omogoča razvoj merilnih in testnih aplikacij. Programi napisani z orodjem LabVIEW se imenujejo virtualni instrumenti (VI). Vsak virtualni instrument je sestavljen iz čelne plošče in blok diagrama.

LabVIEW je blokvno orodje, kar pomeni, da se algoritem v tem programskem jeziku kodira blokovno oziroma z uporabo funkcij v obliki blokov, ki so med seboj povezani s povezavami. Vsebuje tudi Application Builder, ki omogoča kreiranje izvršne (exe) verzije, ki se lahko izvaja na računalniku, kjer razvojnega sistema LabVIEW ni nameščenega.

Ob zagonu programa LabVIEW se pojavi okno, kjer lahko izbiramo med kreiranjem novega projekta ali odpiranjem obstoječih, shranjenih projektov. Novi virtualni instrument (VI) kreiramo z izbiro: File > New VI. Ob tem se pojavita dve okni:

Čelna plošča ima privzeto sivo ozadje in je namenjena kreiranju uporabniškega vmesnika, Blok diagram pa kreiranju algoritma virtualnega instrumenta.

Slika 1: Čelna plošča (Front Palel)

Slika 2: Blok diagram (Block Diagram)

Čelna plošča (Front Panel) predstavlja uporabniški vmesnik virtualnega instrumenta (VI). Zgradimo ga iz objektov, ki se nahajajo na paleti kontrol in indikatorjev. Do te palete lahko dostopamo na dva ničina: Preko izbire menija View > Controls Palette ali pa kjerkoli v praznem prostoru Čelne plošče kliknemo desno tipko miške.

Slika 3: Paleta kontrol in indikatorjev

Paleta kontrol in indikatorjev je sestavljena iz več podpalet. Objekt (kontrolo ali indikator) namestimo na čelno ploščo tako, da ga izberemo in ga povlečemo na Čelno ploščo. Za vsak objekt, ki ga vstavimo na Čelno ploščo, se v Blok diagramu avtomatsko kreira priključek (Terminal). Priključki služijo za prenos podatkov med Čelno ploščo in Blok diagramom. Ime priključka v Blok diagramu je enako, kot je ime pripadajočega objekta na Čelni plošči. Iz oblike priključka lahko razberemo, ali pripada kontroli ali indikatorju.

Vhodni objekti, ki jim pravimo kontrole (Controls), predstavljajo vhodne podatke virtualnega instrumenta. Te objekte lahko med izvajanjem virtualnega instrumenta spreminjamo in s tem vplivamo na njegovo delovanje. Izhodni objekti, ki jim pravimo indikatorji (Indicators), pa služijo za prikaz podatkov. Med izvajanjem virtualnega instrumenta se izračunani podatki posredujejo indikatorjem, ki jih nato prikažejo v tekstovni ali grafični obliki.

Priključki (Terminal) kontrol imajo poudarjeno obrobo. Priključki vsebujejo majhen črni trikotnik, ki je na priključku kontrole usmerjen iz priključka, pri indikatorjih pa v priključek. Pri kontrolah se podatek pridobi iz objekta Čelne plošče in se preko priključka posreduje v Blok diagram. Pri indikatorjih se podatek pridobi iz Blok diagrama in se preko priključka prenese v pripadajoči objekt na Čelni plošči, kjer se prikaže.

Objektom čelne plošče in blok diagrama je možno preko menija objekta spreminjati njegove lastnosti. Do priročnega menija objekta dostopamo tako, da se s kurzorjem miške pomaknemo na objekt in pritisnemo na desno tipko miške.

Blok diagram (Block Diagram) je namanjen kodiranju algoritma virtualnega instrumenta (VI). Algoritem zgradimo iz objektov, ki se nahajajo na paleti funkcij, te objekte pa med seboj povežemo s povezavami. Do palete funkcij dostopamo na dva načina: Preko izbire menija View > Function Palette ali pa kjerkoli v praznem prostoru kliknemo desno tipko miške.

Slika 4: Paleta funkcij

Posamezne opcije menijev in orodnih vrstic na tem mestu niso opisane, so pa opisane tam, kjer se tematika navezuje na njihovo uporabo.

Funkcijo namestimo v Blok diagram tako, da jo na paleti funkcij izberemo in povlečemo v Blok diagram.

V Blok diagramu virtualnega instrumenta se lahko nahajajo naslednji objekti:

Zaradi obširnosti bomo posamezne operacije, programiranje in oblikovanje vmesnika spoznavali sproti, odvisno od tega, kaj bomo pri naših programih potrebovali.

Z VI Package Manager-jem naložimo (instaliramo) LIFA (LabVIEW Interface for Arduino).

Slika 5: LIFA (LabVIEW Interface for Arduino)

Ko naložimo LIFA (LabVIEW Interface for Arduino), imamo na razpolago paleto kontrol, indikatorjev (slika 3) in funkcij (slika 5), ki jih potrebujemo za izdelavo in razvoj programov v okolju LabVIEW, ki bodo prek serijske komunikacije nadzorovali (krmilili vhode in izhode) Arduino Uno oz. Arduino Mega.

Za komunikacijo LabVIEW z Arduinom prek serijskega porta moramo imeti instalirane gonilnike NI-VISA (Virtual Instrument Software Architecture).

Odpremo okolje Arduino in v menijski vrstici izberemo Datoteka > Odpri... > Lokalni disk (C:) > Programske datoteke (x86) > National Instruments > LabVIEW (2014) > vi.lib > LabVIEW Interface for Arduino > Firmware > LIFA_Base.

Slika 6: V računalniku poiščemo in odpremo Arduino LIFA_Base

Odpre se Arduino skica LIFA_Base, kot je prikazano na sliki 7.

Slika 7: Arduino skica LIFA_Base

Lahko uporabimo razvojno ploščo Arduino Uno ali pa Arduino Mega. Mi bomo uporabili Arduino Uno, vrata pa so v našem primeru COM 5. Program LIFA_Base zapišemo v Arduino razvojno ploščo. Ko program zapišemo v Arduino Uno, lahko okolje Arduino zapremo, saj je program za komniciranje z LabVIEW zapisan v Arduino Uno.

Ker bomo z našo vajo krmilili LED diodo, jo preko upora 470 ohm priključimo na pin 8, katodo LED diode pa povežemo z maso (pin GND).

Odpremo okolje LabVIEW in kreiramo novi virtualni instrument (VI) z izbiro: File > New VI. Shranimo ga pod imenom Vklop, izklop LED diode preko labVIEW. V Blok diagram namestimo funkcijo Init.vi za inicializacijo z Arduino Uno. To storimo tako, da se z miško postavimo nad Blok diagram in s pritiskom na desno tipko miške odpremo paleto funkcij Functions. Na paleti Functions poiščemo Arduino > Init (Functions > Arduino > Init). Z miško izberemo Init, pritisnemo na levo tipko miške in funkcijski blok Init.vi zapeljemo v Blok diagram.

Slika 8: Na paleti Functions poiščemo Arduino > Init (Functions > Arduino > Init)

Funkcijskemu bloku Init.vi na levih priključkih določimo parametre: vrata COM 5 (v našem primeru), hitrost prenosa 115200 bit/s, razvojno ploščo Arduino Uno ter prenos prek USB serial. To storimo tako, da se s kurzorjem miške približamo levemu priključku funkcijskega bloka Init, kliknemo desno tipko na miški in izberemo Create > Constant (slika 9).

Slika 9: Kreiranje konstante na priključku bloka Init

S pomočjo spustnega seznama izberemo pravilno vrednost konstante. Če so npr. komunikacijska vrata Arduina COM 5, izberemo to vrednost.

Slika 10: Izbira vrednosti konstante COM 5 za komunikacijo med LabVIEW in Arduinom.

Poiščemo še ostale objekte, ki jih potrebujemo in jih povežemo, kot prikazuje slika 11. Kontrolo Vklop/Izklop LED diode in indikator LED dioda namestimo na čelni plošči, kot je opisano spodaj, vse ostale pa v blok diagramu.

Slika 11: Vstavljeni in povezani vsi objekti v Blok diagramu

Opis posameznih objektov:

Functions > Arduino > Arduino. Z blokom Init.vi nastavimo (določimo) vhodne parametre,

VISA resource => nastavimo serijski port COM, s katerim komunicira Arduino.

Baud Rate (115200) => izberemo eno izmed privzetih vrednosti, ki jih določa Arduino.

Board Type (UNO) => izberemo uporabljeno razvojno ploščo. Uporabimo lahko Arduino Uno ali Arduino Mega.

Connection Type (USB/Serial) => izberemo USB/Serial.

Functions > Arduino > Low Level > Set Digital Pin Mode. Z blokom Set Digital Pin Mode.vi določimo vhodni oz. izhodni uporabljeni pin Arduino plošče.

Digital I/O Pin => Izberemo digitalni pin (v našem primeru pin 8, kamor smo priključili LED diodo).

Pin Mode (Input) => Izberemo Output saj je LED dioda izhodni element.

Functions > Arduino > Low Level > Digital Write Pin. Z blokom Digital Write Pin zapišemo digitalno vrednost (0 oz. 1) na določen izhodni pin Arduino plošče.

Digital I/O Pin (0) => Izbran digitalni pin, ki smo ga določili kot izhod v bloku Set Digital Pin Mode (v našem primeru je to pin 8).

Value (0) => Na priključek bloka pripeljemo vrednost, ki jo hočemo na pinu 8. Ta vrednost je lahko 0 (na pin pošljemo 0 V) ali 1 (na pin pošljemo 5 V).

Functions > Programming > Boolean > Bool to (0,1). Funkcija pretvori Booleanovo vrednost True oz. False v 16-bitno celoštevilčno vrednost 0 oziroma 1.

Functions > Arduino > Close. Z blokom Close prekinemo aktivno povezavo z Arduino ploščico.

Error out blok nam omogoča izpis in opis morebitne napake, do katere je prišlo med izvajanjem programa. Vstavimo ga tako, da se z miško priližamo priključku error out bloka Close, pritisnemo na desno tipko miške in v spustnem meniju izberemo Create > Indicator.

Po potrebi objekte v Blok diagramu (kontrolo, indikator in funkcije) premikamo na ustrezma mesta. Premikamo jih tako, sa se s kazalcem miške približamo objektu. Ko se križec spremeni v puščico, pritisnemo na levo tipko miške (objekt je obkrožen s črtasto črto). Tipko držimo pritisnjeno in objekt prestavimo na ustrezno mesto.

Kreiranje in upravljanje virtualnih instrumentov izvajamo s pomočjo orodij, ki se nahajajo na paleti orodij (Tools). V kolikor paleta orodij ni odprta, jo odpremo preko menija View > Tools Palette.

Slika 12: Tools Palette.

Izberemo orodje Automatic Tool Selection in povežemo terminale (priključke) objektov (Blokov) v Blok diagramu, kot je prikazano na sliki 11.

Indikator LED dioda in kontrolo Vklop/Izklop LED diode kreiramo na čelni plošči. S pritiskom na desno tipko miške odpremo paleto Controls.

Indikator LED dioda => Controls > Modern > Boolean > Square LED

Kontrola Vklop/Izklop LED => Controls > Modern > Boolean > Vert Rocker

Obema (Indikatorju LED dioda in kontroli Vklop/Izklop LED diode) v Blok diagramu spremenimo obliko tako, da v njunih priročnih menijih odznačimo View As Icon. Do priročnih menijev pridemo tako, da se s kurzorjem miške postavimo nad kontrolo oz. indikator in kliknemo desno tipko na miški.

Slika 13: Priročni meni kontrole

Ko imamo povezane vse objekte, kot prikazuje slika 11, lahko virtualni instrument zaženemo. Zaženemo ga s klikom na ikono Run v Blok diagramu ali na Čelni plošči, ki se nahaja v orodni vrstici. Vidimo, da se algoritem izvede le enkrat, potem pa se izvajanje virtualnega instrumenta ustavi. Zato uporabimo zanko While, ki se bo izvajala tako dolgo, dokler ne pritisnemo na tipko stop, ko izvajanje zanke While ustavimo.

Zanko While kreiramo z orodjem While Loop, ki se nahaja na podpaleti Function > Programming > Structures:

Slika 14: Orodje za kreiranje zanke While

Zanko lahko kreiramo kar na podlagi obstoječe kode in sicer tako, da z orodjem While Loop objamemo algoritem v blok diagramu, za katerega želimo, da se več krat ponovi:

Slika 15: Z orodjem While Loop objamemo del algoritma v blok diagramu

Ko spustimo tipko na miški, ko smo objeli želeni del algoritma, ki se naj več krat ponovi, dobi zanka While obiko, kot jo prikazuje slika 16:

Slika 16: Objeti del algoritma z zanko While

Zanka While vsebuje dva priključka, pogojni priključek (desno spodaj) in števec iteracij (levo spodaj). Na pogojni priključek moramo povezati logično vrednost (True ali False). S tem podatkom krmilimo izvajanje zanke. Pogojni priključek lahko v njegovem priročnem meniju nastavimo na vrednost Stop if True ali na Continue if True. Števec iteracij podaja informacijo o številu ponovitev zanke in teče od 0 naprej, kar pomeni, da je vrednost tega števca v prvi izvedbi zanke enaka 0.

LabVIEW izvaja zanko While tako, da najprej izvede algoritem zanke, nato pa preveri, če je izpolnjen pogoj za ponovno izvedbo zanke. Algoritem zanke While se torej izvede zagotovo vsaj 1- krat.

Na pogojni priključek zanke While bomo povezali kontrolni podatek logičnega tipa (Boolean), tipko stop, s pomočjo katere lahko ustavimo izvajanje zanke While.

LabVIEW porabi skoraj ves procesorski čas za izvajanje algoritma zanke. Zato je priporočljivo, da izvajanje zanke upočasnimo in s tem sprostimo procesor. Za časovni nadzor zanke bomo uporabili funkcijo Wait Until Next ms Multiple, ki se nahaja na paleti Functions > Programming > Timing. Če mu na levi priključek kreiramo konstanto z vrednostjo 10 pomeni, da se bo zanka While ponovila vsakih 10 ms.

Ob upoštevanju zgornjega, dobi koda virtualnega instrumenta Vklop, izklop LED diode preko labVIEW končno obliko:

Slika 17: Koda virtualnega instrumenta Vklop, izklop LED diode preko labVIEW

Prenos podatkov preko roba zanke While:

Pri prenosu podatkov preko roba zanke, se na robu kreira majhen kvadrat s črno obrobo in ozadjem v barvi podatkovnega tipa podatka. Temu kvadratu pravimo tunel (Tunnel). Predstavlja neke vrste pomnilniško lokacijo, saj se vanj zapisani podatki v njem začasno shranijo. V primeru, ko je podatek pripeljan v zanko, se podatek shrani v tunel, nato pa se v vsaki iteraciji zanke shranjena vrednost posreduje v notranjost zanke. Podatek se torej ob skoku v zanko zapiše v tunel, nato pa v vsakokratni iteraciji prebere. Ob prenosu podatka iz zanke, pa se v vsakokratni iteraciji zanke podatek posreduje v tunel in v njem shrani, prejšnja vrednost se prepiše z novo vrednostjo. Šele ko se izvajanje zanke zaključi, se zadnja zapisana vrednost posreduje preostanku Blok diagrama.

Čelno ploščo virtualnega instrumenta oblikujemo z namestitvijo posameznih objektov po lastni želji. Za okvir lahko uporabimo različne dekoracije, ki jih najdemo v podpaleti Decorations (Controls > Modern > Decorations).

Slika 18: Čelna plošča virtualnega instrumenta Vklop, izklop LED diode preko labVIEW