2014.06.16.
21:36

Írta: harsanyireka

08. Példák analóg pinekhez

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

Analóg bemenet kiolvasása

A potméter egy változtatható ellenállású gomb, amit most analóg szenzorként értelmezünk, így analóg pinbe kötve ki tudjuk olvasni az értékeit. A kódban ezzel a kiolvasott értékkel a beépített LED-ünk villogási sebességét változtatjuk.

Az analogRead() parancs a beérkező 0–5 V közötti feszültségértéket átalakítja egy 0–1023 közötti digitális értékké. Ezt az Arduino egyik belső áramköre végzi el, amit ADC-nek hívunk (Analog-to-Digital Converter).

Bekötése: Ha a potméter (pl. 1 kiloohmos lineáris) mindhárom lába előre mutat, akkor a bal szélsőt kössük az 5 V pinbe, a jobb szélsőt a földelésbe, a középsőt pedig az analóg 0-ba. Az alaplapba épített LED-et használjuk, ami a 13 pinre ki van vezetve így opcionálisan beköthető ide egy 5mm-es LED is.

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

Potméter bekötése

 Arduino kód: 15potmeter

 

Analóg bemenettel vezérelt PWM

Ezúttal kiolvasunk egy analóg pint és a kapott értéket 0–255 közötti digitális értékké alakítjuk, skálázzuk map() utasítással és ráküldjük egy PWM pinre, amivel egy LED fényerejét fogjuk vezérelni. Ehhez szükségünk lesz egy potméterre (mondjuk 1 kiloohmos lineáris fajtára), egy 220 ohmos ellenállásra és egy hagyományos piros LED-re.

8.2. †bra LED Çs potmÇter bekîtÇse.png

LED és potméter bekötése

Bekötése: Ha a potméter mindhárom lába előre mutat, akkor a bal szélsőt kössük az 5 V pinbe, a jobb szélsőt a földelésbe, a középsőt pedig az analóg 0-ba. A LED rövidebb,  negatív lába a szokásos módon a földelésbe, a hosszabb, pozitív a 220 ohmos ellenálláson át a digitális 9 pinbe kerül.

A kódban először megjelöljük, melyik pint miként akarjuk használni. Ezután létrehozunk két változót, az egyikbe az analóg pinből analogRead()-del kiolvasott érték kerül, a másikba ennek az értéknek az arányosított megfelelője, amit majd a LED-hez fogunk kiküldeni analogWrite()-tal. Mivel a feladathoz PWM pint használunk, az impulzusszélesség modulációval különböző erősséggel tud világítani a LED-ünk. A PWM pinre 0–255 körötti értéket küldünk, ehhez az analóg szenzorból kiolvasott 0–1023 közötti értéket map() paranccsal szétosztjuk.

Arduino kód: 16potmeterLED

 

Analóg szenzor kalibrálása

A következőkben megvizsgáljuk a szenzorok kalibrálásának menetét. A folyamat során az Arduino 5 másodpercig megszakítás nélkül olvassa ki az értéket. A program végrehajtása közben a szenzorból kiolvasott adatok meghatározzák a minimum és maximum értékeket.

Az analóg 0 pinbe bármilyen szenzort beköthetünk, potmétert vagy fotóellenállást is; a példában az utóbbit használjuk.

 Bekötése: A LED-ünk negatív lábát a szokásos 220 ohmos ellenálláson keresztül bekötjük a földelésbe, pozitív oldalát pedig a 9 pinbe (bármelyik lábához kerülhet az ellenállás, eddig a pozitívhoz tettük), a fotóellenállás (LDR) bármilyen irányban állhat, egyik lába az 5 V-ba, a másik lába az analóg nulla (A0) pinbe és egy 10 kiloohmos ellenálláson át a földelésbe is be van kötve.

8.3. †bra LED Çs fot¢ellen†ll†s bekîtÇse.png

LED és fotóellenállás bekötése

A kód legelején inicializálnunk kell a két változót, amelyben a minimum és maximum értéket fogjuk eltárolni. Analóg pinről lévén szó, a minimum 1023 és a maximum 0 legyen – most kivételesen fordítva használjuk. A legelején meghatároztuk a maximum értéket (0) és ha a kiolvasott érték a felett van, akkor ezt mentjük majd el, mint új maximum értéket. Ugyanígy, ha a kiolvasott érték az elején beállított minimum érték (1023) alatt van, akkor az lesz az új minimum érték. Ezután ezt a két értéket skálázzuk 0–255 közé, ez fogja vezérelni a PWM-re kötött LED-ünk fényerejét.

Megjegyzés: Ha potmétert használunk, ne tekerjük el a kalibrálás alatt teljesen ütközésig, így köztes értéket tudunk használni, hogy megértsük a kód működését.

Arduino kód: 17kalibralas

Előfordulhat, hogy a kalibráció alatt nem jelennek meg a szélsőértékek, így a map()nem valós értéket állíthat elő (pl. a maximumot felveszi 800-nak az elején, később pedig beolvas 820-at, akkor a map() eredménye már 256), ezért a constrain()-nel beszorítja a kilengéseket a megadott intervallumba.

 

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

PWM = Pulse Width Modulation, azaz impulzusszélesség moduláció. Egy olyan digitális jel, ami rendkívül gyorsan kapcsolja ki-be a digitális jelet egy meghatározott ütemben, ezáltal felruházva a digitális pinünket analóg-szerű viselkedéssel.

Bekötése: 220 ohmos ellenálláson át bekötjük a LED pozitív lábát a digitális 9 pinbe, a negatívat pedig a földelésbe.

8.4. †bra LED bekîtÇse digit†lis 9 pinbe.png

LED bekötése digitális 9 pinbe

Arduino kód: 18LEDpwm

 

Simítás

Ez a kód folyamatosan olvassa ki az analóg bemenetet és az értékek átlagát írja ki a számítógépre. Hasznos lehet egyenetlen szenzorok kiolvasásánál, mivel elsimítja az értékek ingadozását. Egyúttal azt is megnézzük, hogyan lehet tömböt használni adattárolásra.

Bekötése: Potmétert használunk, középső lábát analóg nullába kötjük, a két oldalsót pedig az 5 V feszültségbe és a földelésbe.

8.5. †bra PotmÇter bekîtÇse A0-ba.png

Potméter bekötése A0-ba

A kód egymást követő 10 kiolvasást tárol el egy tömbben, egyesével. Ezeket összeadja, majd elosztja, így egy átlagértéket ad. Mivel a beérkező értékekkel folyamatosan kalkulál, és nem várja meg mind a 10 értéket, ezért nincs késési idő. A numReadings nevű változó értékének lecserélésével tudunk kísérletezni.

Arduino kód: 19simitas

 

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/tr326307086

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