2014.06.14.
11:55

Írta: harsanyireka

06. /2) Digitális és analóg pinek használata

Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.

Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton

LED villogtatása, kiolvasás digitális pinből

1 db 220 ohmos ellenállásra és 1 db 5 mm-es LED diódára lesz szükségünk. A LED negatív lába megy a földbe (rövidebb szára), a pozitív (hosszabb) pedig az ellenálláson keresztül a 13 digitális pinbe (ami a beépített LED kivezetése). Az ellenállásra a LED-hez jutó feszültség csökkentése miatt van szükségünk. Az átlagos 5 mm-es LED-ek kb. 20 mA-t fogyasztanak és 2,2–3,4 V-tal működnek. Az adott LED paramétereit a gyártó adatlapja tartalmazza. Az ellenállások színkódolása mutatja meg az értéküket. De használhatjuk az online kalkulátorokat is.

6.6.1.1. †bra LED bekîtÇse.png

LED bekötése

Az alább található kódban először kimenetként beállítjuk a LEDhez kötött pint: pinMode(13, OUTPUT); Majd a loop ciklusban bekapcsoljuk a LED fényét a digitalWrite(13, HIGH); paranccsal. Ennek hatására az arduino 5V feszültséggel látja el a LED-et (ez túl sok lenne, de már ellenállás bekötésével lecsökkentettük az értékét). Ez után kikapcsoljuk a fényét a digitalWrite (13, LOW); sorral, ilyenkor a pin állapota 0V-os. Hogy a két állapot közötti változást a szemünk is le tudja követni, lelassítjuk a villogást, úgy hogy delay()-jel várakoztatjuk a program lefutását, azaz a megadott idő alatt nem történik változás, tehát ha ég a LED akkor úgy is marad adott ideig az állapota. A delay() időtartamát mikiszekundumban adjuk meg, 1000 ms = 1 másodperc.

Arduino kódja: 01LEDvillogás

  

Nyomógomb használata, kiírás digitális pinre


Szükségünk lesz 1 db nyák mikro nyomógombra, 1 db 10 kiloohmos ellenállásra, illetve dugaszolós próbapanelre. Az ábrán látható módon kössük össze őket. A nyomógomb azért van középen, hogy a lábai ne legyenek egymáshoz bekötve, mivel a próbapanel közepén nincs átvezetés.

6.6.2.1. A dugaszol¢s pr¢bapanel îsszekîttetÇsei.gif

A dugaszolós próbapanel összeköttetései

6.5.2.2. Nyom¢gomb bekîtÇse.png

Nyomógomb bekötése

Amikor a nyomógomb nyitott állapotban van (nincs megnyomva), akkor nincs összeköttetés az 5V pinbe és a digitális pinbe bekötött lábai között, ezért a digitális pinből kiolvasott jel értéke LOW azaz 0V. Ilyenkor a földeléssel (Gnd pin) áll összeköttetésben (az ellenálláson keresztül) az 5V pin. Amikor a nyomógomb zárt állapotba kerül (le van nyomva), akkor záródik az áramkör az 5V pin és a digitális pin között, ekkor a beérkező jel értéke HIGH azaz 5V.  Az alábbi kóddal ez a példa úgy működik, hogy ha lenyomjuk a gombot, világít a LED.

Fordított módon is beköthetjük a nyomógombot, úgy hogy az ellenállást úgy hogy a gombhoz érkező poyitív és negatí oldalakat felcseréljük. Tehát az ellenálláson keresztül HIGH jel érkezik a digitális pinbe, amikor a gomb alap állapotban van (nincs megnyomva). LOW jel érkezik amikor lenyomjuk. Ebben az esetben az alábbi kódot használva, akkor alszik ki a LED fénye, ha a gombot lenyomjuk, azaz a földeléssel zárjuk össze a digitális pint.

Arduino kódja: 02Nyomogomb

A jobb felső sarokban lévő gombbal tudjuk megnyitni a serial monitort. Vagy 0-t vagy 1-t ír ki, attól függően, hogy meg van-e nyomva a gomb.

   

Potméter használata, kiolvasás analóg pinből

A potméter egy változtatható feszültségű ellenállás, egy 10 kiloohmos szükséges a páldához. A belőle nyert változó adatokat fogjuk kiolvasni, de ugyanezen elven bármilyen analóg szenzor beköthető.

A potméter tengelyének elfordításával az ellenállás értékét változtathatjuk a középső és minkét szélső kivezetése között, ilyenkor a középső kivezetés feszültség értéke változik. Amikor az 5V pinhez futó és a középső pin közötti ellenállás megközelítőleg nulla (ilyenkor a másik szélső lábon megközelítőleg 10KOhm az ellenállás ebben a példában), akkor a középső pin feszültsége megközelítőleg 5V. Ha teljesen elfordítjuk a tengelyt, azaz megnöveljük az ellenállást, a feszültség 0V lesz. Ezt a feszültség érték változást fogjuk kiolvasni az Arduino analog bemmentén.

Az Arduino egy olyan belső áramkörrel rendelkezik, ami az analóg jelet digitálissá alakítja (analog-to-digital converter). Az analóg bement kiolvasáshoz az analogRead() funkciót fogjuk használni, ami egy számértéket ad vissza 0 és 1023 között (a használt feszültséghez arányosítva, pl. 5V = 1023; 0V = 0). 

Bekötése: Ha a lábai előre mutatnak, akkor balra tekerjük el teljesen a forgógombot, hogy beszerelés közben ne továbbítsa az áramot. Első lába az 5 V pinbe megy, a középső az analóg A0-ba, a harmadikat pedig le kell földelni a GND pinbe.

6.7.1.1. †bra PotmÇter bekîtÇse.png

Potméter bekötése

A kód setup függvényében az egyetlen dolog amit csinálunk, hogy bekapcsoljuk a soros port kommunikációt az Arduino és a számítógépünk között 9600 bit/sec adatsebességgel: Serial.begin(9600); Ez után a loop cikluson belül meghatározunk egy integer (egész számértéket tároló) változót, amiben a potméterből kiolvasott adatot (0-1023) tároljuk el: int sensorValue = analogRead(A0); Majd a soros ablakban (serial monitor) megjelenítjük az adatok decimális értékét, sortördeléssel: Serial.println(sensorValue, DEC). A kezelőfelületen a jobb oldali felső ikonnal tudjuk megnyitni az ablakot. Ahogyan tekerjük a potmétert úgy változik a megjelenített adat.

 Arduino kód: 03AnalogPin

   

Analóg jel feszültség értékének kiírása serial monitoron

A feladathoz az előző példának megfelelően kötjük be a potméterünket, tehát ismét analóg feszültségváltozást olvasunk ki.

A következő példakód serial monitorra írja ki a beérkező feszültség értékét, amihez – a pontosabb eredmény eléréséhez – egy float változót definiálunk. A kód ugyanúgy kezdődik mint az előző esetben, bekapcsoljuk a soros portot és eltároljuk a potméterből kiolvasott értéket egy integerben. Ez után a feszültség értékhez létrehozunk egy float (tizedes tört értékek tárolására alkalmas) változót, amiben a potméterből jövő adat feszültség értékét eltároljuk: float voltage= sensorValue * (5.0 / 1023.0); Vágül ezt megjelenítjük a soros ablakban: Serial.println(voltage).

Arduino kód: 04AnalogFeszultseg

   

Impulzus-szélesség moduláció, PWM pinek működése

Ez a jel is 0-t és 1-t tud értékként felvenni, mint minden digitális jel. Amplitúdója állandó, de változó szélességű impulzusokból áll, így befolyásolható a kimeneten létrejövő tényleges feszültség.

6.8.1.1. †bra PWM jel.jpg

PWM jel
(kép: www.cnv.hu/gallery/cikkek/elektronika/ pwm%20magyarazat.jpg)

    

LED fényerejének szabályozása PWM-mel

Ebben a feladatban azt vizsgáljuk meg, hogyan lehet a digitális jel manipulációjával szabályozni a feszültséget. Az Arduino néhány digitális pinje mellé oda van írva a PWM, ezek közül használjunk egyet.

Bekötése: a LED pozitív lábát az ellenálláson keresztül – ugyanúgy, mint eddig – a 9-PWM digitális pinbe, a negatív lábát a földbe (Gnd) kötjük.

6.8.2.1. †bra LED bekîtÇse PWM pinbe.jpg

LED bekötése PWM pinbe 

Az analogWrite() funkciót használjuk. A PWM hihetetlenül gyorsan kapcsolja a pin állapotát ki-be, így idézi elő az analóg jelre emlékeztető elhalványuló effektust. 0–255 közötti értéket küldhetünk a PWM pinekre, pl. az analogWrite(127); 50%-ot jelent. Az ábrán a zöld vonalak az időt jelölik, 2 milliszekundumonként.

 6.8.2.2. †bra PWM jel magyar†zata LED-hez.gif

PWM jel magyarázata LED-hez

Először létrehozunk változókat: a LED a 9 pinbe van kötve. A fényerőnek, és az értéknek amivel változtatjuk majd, szintén létrehozunk integer tárolókat. A setupban kimenetként megadjuk a LED pint. A loop ciklusban analogWrite() segítségével megadjuk melyik pinre (led) és mekkora értéket (brigthness) akarunk küldeni. A PWM pin 0-255 közötti értéket fogad. A fényerő értékét folyammatosan változtatjuk, egy fix értékkel (fadeAmount) növeljük, ilyenkor a LED egyre világosabb. Ez addig zajlik még el nem éri a szélső, 255 értéket: if (brightness == 0 || brightness == 255) {fadeAmount = -fadeAmount ;}Ekkor a folyamat megfordul, mivel negatív előjelűre vált a léptetés mértékét eltároló változó, így az érték 5-ösével csökkenni fog amíg el nem éri a nullát, tehát a LED fénye halványodik. Az if feltételben azt látjuk hogy ha a fényerő értéke eléri a nullát VAGY a 255 csak akkor teljesül a feltétel, azaz csak akkor fut le a kapcsos zárójelen belül található programrész, aminek hatására megfordul a folyamat iránya. Mivel az analogWrite() nagyon gyorsan tudja változtatni a PWM értékeket, a kód végérén található egy késleltetés (delay), hogy lássuk a végbemenő változást.

Arduino kód: 05PWMfade

 

forrás: http://arduino.cc/en/Tutorial/HomePage 

 

Szólj hozzá!

Címkék: leckék lektorált

A bejegyzés trackback címe:

https://harsanyireka.blog.hu/api/trackback/id/tr956300670

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása