LED meghajtása Arduinóval

Szerzők: Makan Gergely, Somogyi Anikó, Dr. Mingesz Róbert és Mellár János
A tananyag elsősorban az Elektronikai alapok programozóknak és a Digitális architektúrák című kurzusokhoz készült, az elsajátításához szükséges idő: 45 perc.

Összefoglalás

A lecke a LED-ek Arduinóval történő meghajtásáról szól. Az Arduinón lévő LED használatához megfelelően be kell állítani a LED-et meghajtó mikrovezérlő kivezetést, majd pedig írni kell a kimenetet. Ezeket a lépéseket az Arduino függvényekkel egyszerűen megtehetjük. Külső LED-et tetszőleges kivezetésre köthetünk, kétféle logikai módban. Soros áramkorlátozó ellenállást mindig szükséges bekötni. A LED-eket tetszőleges periódusidővel lehet villogtatni megfelelő program írásával.

Tartalom

  • Ismétlés
  • LED-ek az Arduinón
  • Kivezetés konfigurálása
  • Programozás
  • Külső LED bekötése
  • LED villogtatása
  • LED-ek kétféle bekötési módja (szimuláció)
  • Arduino felprogramozása, LED villogtatása (videó)
  • Önellenőrző kérdések

Ismétlés

LED-ek az Arduinón

Az Arduino UNO áramköri lapon található egy programozható LED (programból be- és kikapcsolható LED), amit USER LED-nek is szoktak nevezni és a “L” felirat tartozik hozzá a áramköri lapon. Ezen kívül található még 3 db LED az áramköri lapon. Ebből egy a tápfeszültség meglétét jelzi (“ON”), kettő pedig a számítógéppel való kommunikációt jelzi és villognak a kommunikáció ideje alatt (az “RX”: a bejövő, a “TX”: a kimenő üzenetek esetén).

Az Arduino UNO áramköri lapon 4 db LED található, amik közül az “L” feliratú a programból is vezérelhető, ún. USER LED.

Ahhoz, hogy használni tudjuk a programból a USER LED-et, először tudnunk kell, hogy hányas számú kivezetésre van kötve. Az UNO lábkiosztásában megkeresve a LED szimbólumát kiderül, hogy a 13-as kivezetésre van kötve.

Kivezetés konfigurálása

Egy kivezetést a következő módokban használhatunk az UNO esetén:

  • digitális bemenet
  • digitális kimenet
  • analóg bemenet

A konfigurálást a setup függvényben szokás elvégezni. Ehhez a pinMode(pin, mode) függvényt használhatjuk. A függvény első paramétere a kivezetés száma, amit konfigurálni szeretnénk, a második a mód, amiknél használhatjuk az INTPUT (digitális bemenet), az INPUT_PULLUP (digitális bemenet felhúzó ellenállással) vagy az OUTPUT (digitális kimenet) konstansokat. Ha egy kivezetéshez nem írunk pinMode függvényt, akkor az analóg bemenetként használható.

Programozás

Ha használni szeretnénk a panelon lévő LED-et, akkor azt digitális kimenet módba kell konfigurálnunk a pinMode függvénnyel. Ezt a pinMode(13, OUTPUT); függvényhívással tehetjük meg, ami tehát a 13-as kivezetést digitális kimeneti módba állítja. Miután ezt megtettük a digitalWrite(pin, value) függvénnyel tudjuk logikai alacsonyra (a LOW konstanssal) vagy logikai magasra (a HIGH konstanssal) állítani a kimenetet. Ezt a setup függvényben vagy a loop függvényben is szokás használni. A következő függvényhívással például logikai magas jelszintet, tehát 5 V-os feszültséget tudunk kiadni a 13-as kivezetésre: digitalWrite(13, HIGH);. Ennek hatására a USER LED világítani kezd.

Külső LED bekötése

Külső LED-et tehát bármelyik kivezetésre köthetünk (ha a kódban digitális kimenetként konfiguráltuk). Fontos, hogy ebben az esetben (mint azt már korábban láthattuk) szükséges egy soros áramkorlátozó ellenállás is, hogy ne terheljük túl a kimenetet és a LED megengedett maximális áramerősségét se lépjük túl.

Kétféle módon vezérelhetjük a külső LED-et: úgynevezett pozitív (vagy egyenes) és negatív (vagy fordított) logikai módban, attól függően, hogy hogyan kötöttük be az Arduinóba. Az pozitív logikai mód azt jelenti, hogy a LED akkor világít, ha a hozzá kapcsolt kimenetre logikai magas értéket írunk, a negatív logikai bekötés esetén pedig akkor világít a LED, ha logikai alacsony értéket írunk a kimenetre. Ebben az esetben fordítva, a LED katódjára kötjük digitális kimenetet és az anódra pedig a logikai magas szintnek megfelelő fix feszültséget, az UNO esetén 5 V-ot. Tehát amikor logikai magasat írunk a kimenetre, akkor nem folyik áram, hiszen a LED mindkét kivezetésén ugyanakkora feszültség található, ha pedig logikai alacsonyat, akkor az azt jelenti, hogy egy a digitális kimenetbe befolyó áram indul el és a LED világítani fog. Ezek alapján látható, hogy a USER LED pozitív (egyenes) bekötésű.

A következő szimulációban a kétféle LED bekötési mód látható. A szimulációt elindíthatjuk a Szimuláció indítása gombbal és a külső LED-ek világítani fognak. A Kód gombra kattintva megnézhetjük a pozitív és negatív logikájú bekötésekhez tartozó kódot.

LED villogtatása

Az Arduino használata során fontos tudni, hogy egy digitális kimenet egészen addig megőrzi az aktuális állapotát, amíg meg nem változtatjuk a programból. Tehát, ha bekapcsolunk egy LED-et, akkor az egészen addig világítani fog, amíg ki nem kapcsoljuk, nem billen vissza egy adott idő után. Ha egy LED-et villogtatni szeretnénk, akkor tehát folyamatosan be és ki kellene kapcsolni az adott digitális kimenetet. Ezt a loop függvényben meg is lehet tenni két függvényhívással:

void loop() { digitalWrite(13, HIGH); digitalWrite(13, LOW); }

Ez a kód valóban villogtatni fogja a USER LED-et, viszont olyan gyorsan, olyan nagy ismétlési frekvenciával, hogy az emberi szem nem tudja lekövetni és csak annyit látunk, hogy a LED folyamatosan világít. Szükség van tehát valamilyen késleltetésre, ami valamennyi ideig feltartja a kód futását. Ezt a delay(ms) függvénnyel tehetjük meg. A függvény egyetlen paramétere a késleltetés nagysága, amit milliszekundumban adhatunk meg. Egészítsük ki az előző kódot kiegészítve a delay függvénnyel:

void loop() { digitalWrite(13, HIGH); delay(1000); // Wait for 1000 millisecond(s) digitalWrite(13, LOW); delay(1000); // Wait for 1000 millisecond(s) }

A fenti kód úgy működik, hogy miután bekapcsoltuk a LED-et a delay(1000) függvényt meghívva 1 másodpercet késleltetjük a programot. A LED addig világít, amíg ki nem kapcsoljuk ez pedig pont 1 másodperc múlva következik be, majd megint várakozunk 1 másodpercet és a loop függvény (ciklus) előröl kezdődik. Tehát 1 másodpercig világít a LED, majd 1 másodpercig nem világít a LED. Ez T=2 s-os periódusidőnek felel meg, ami pedig 0,5 Hz-es frekvenciának felel meg.

A következő szimulációban a USER LED-et láthatjuk villogni 0,5 Hz-es frekvenciával (a Tinkercadben alapesetben ez a kód szerepel az Arduinón):

A következő videóban a USER LED bekapcsolásához szükséges lépéseket láthatjuk valódi hardverrel:

A teljes videó forrása: http://www.inf.u-szeged.hu/miszak/arduino-alkalmazasa-a-fizika-es-az-informatika-oktatasaban/

További segédanyagok a digitális kimenetek tulajdonságaihoz: http://dx.doi.org/10.6084/m9.figshare.11971794

Az önellenőrzéshez következzen egy rövid kvíz a legfontosabb résztémákból:

Results

#1. Milyen bekötési módban van az Arduino UNO-n lévő USER LED?

#2. Milyen esetekben világít a LED? (két helyes megoldás is van, elég az egyiket bejelölni)

#3. Hogyan működik egy digitális kimenet?

#4. Szükséges-e és, ha igen, akkor miért a LED villogtatásánál a delay függvény használata?

#5. Melyik esetben lesz 1 Hz a villogás frekvenciája, feltéve, hogy a delay függvény kétszer van meghívva a loop függvényben?

#6. Mit csinál a digitalWrite(10, LOW); függvényhívás?

#7. Igaz-e, hogy a negatív logikával bekötött LED meghajtásához digitális bemenet módba kell állítani az adott kivezetést?

finish