Megszólal a Kütyü. Arduino bevezető hangszóró vezérlése 1 / 5 oldal

Hasonló dokumentumok
Bevezetés az Arduino mikrovezérlők programozásába

Mintavételes szabályozás mikrovezérlő segítségével

Bevezetés az Arduino mikrovezérlők programozásába

Bevezetés az Arduino mikrovezérlők programozásába

Megjegyzés: A leírás abszolút kezdők számára készült elnézést azoktól, akik ezen a szinten már túlvannak!

MSP430 programozás Energia környezetben

MSP430 programozás Energia környezetben. Nem élhetek muzsikaszó nélkül

UH-zongora - zenélés mikrokontrollerrel

Az Ohm törvény. Ellenállás karakterisztikája. A feszültség és az áramerősség egymással egyenesen arányos, tehát hányadosuk állandó.

Bevezetés az elektronikába

Algoritmus fogalma. Mi az algoritmus? HF: Al Khwarizmi. Egy adott probléma megoldásának leírása elemi lépések sorozatával

MSP430 programozás Energia környezetben. Az I/O portok kezelése

Bevezetés az elektronikába

MSP430 programozás Energia környezetben. Szervó motorok vezérlése

Elektromos áram, egyenáram

Programozás és Digitális technika I. Pógár István eng.unideb.hu/pogari

Elektronikai műszerész Elektronikai műszerész

Ohm törvénye. A mérés célkitűzései: Ohm törvényének igazolása mérésekkel.

Elektromos áram, áramkör, kapcsolások

Logaritmikus erősítő tanulmányozása

Mérési útmutató. A/D konverteres mérés. // Első lépésként tanulmányozzuk a digitális jelfeldolgozás előnyeit és határait.

Mechanikai hullámok. Hullámhegyek és hullámvölgyek alakulnak ki.

DC motor= egyenáramú motor, villanymotor vezérlése micro:bittel:

I. C8051Fxxx mikrovezérlők hardverfelépítése, működése. II. C8051Fxxx mikrovezérlők programozása. III. Digitális perifériák

A kísérlet, mérés megnevezése célkitűzései: Váltakozó áramú körök vizsgálata, induktív ellenállás mérése, induktivitás értelmezése.

Orvosi jelfeldolgozás. Információ. Információtartalom. Jelek osztályozása De, mi az a jel?

MSP430 programozás Energia környezetben. LED kijelzok második rész

FL-11R kézikönyv Viczai design FL-11R kézikönyv. (Útmutató az FL-11R jelű LED-es villogó modell-leszállófény áramkör használatához)

MSP430 programozás Energia környezetben. Az első lépések

Elektromos töltés, áram, áramkör

1. A hang, mint akusztikus jel

Arduino bevezető Szenzorhálózatok és alkalmazásaik

Bevezetés az elektronikába

M ű veleti erő sítő k I.

Elektromos ellenállás, az áram hatásai, teljesítmény

Egyszerű kísérletek próbapanelen

Elektromos áram, áramkör

2.3. Soros adatkommunikációs rendszerek CAN (Harmadik rész alapfogalmak II.)

Alapvető információk a vezetékezéssel kapcsolatban

Vegyes témakörök. A KAT120B kijelző vezérlése Arduinoval

Bevezetés a mikrovezérlők programozásába: Programciklusok szervezése, analóg I/O

Szerelés és üzemeltetés

T2-CNCUSB vezérlő család hardver segédlet

Elektromos töltés, áram, áramkörök

Bevezetés a mikrovezérlők programozásába: DC motorok vezérlése

Az MSP430 mikrovezérlők digitális I/O programozása

ELEKTROMOSSÁG ÉS MÁGNESESSÉG

Számítási feladatok megoldással a 6. fejezethez

Bevezetés az elektronikába

LPT_4DM_2a. Bekötési utasítás

Hobbi Elektronika. Bevezetés az elektronikába: Fényemittáló dióda (LED)

MSP430 programozás Energia környezetben. Hétszegmenses LED kijelzok

Hullámok, hanghullámok

a) Valódi tekercs b) Kondenzátor c) Ohmos ellenállás d) RLC vegyes kapcsolása

0 Általános műszer- és eszközismertető

Bevezetés a mikrovezérlők programozásába: Ismerkedés az Arduino fejlesztői környezettel

11.2. A FESZÜLTSÉGLOGIKA

9. Gyakorlat - Optoelektronikai áramköri elemek

Többfunkciós hobbirobot építése és vezérlése Arduino UNO mikrovezérlő kártya segítségével

MSP430 programozás Energia környezetben. Kitekintés, további lehetőségek

2000 Szentendre, Bükköspart 74 MeviMR 3XC magnetorezisztív járműérzékelő szenzor

Fizika minta feladatsor

1. Visszacsatolás nélküli kapcsolások

M-LINE 80.2 M-LINE M-LINE Kezelési utasítás..autoradiokeret.

009SMA. SMA programozása: SMA leírás. CAME Leírás SMA. CAME Hungaria Kft

8. Laboratóriumi gyakorlat INKREMENTÁLIS ADÓ

Bevezetés a mikrovezérlők programozásába: I/O portok kezelése, számrendszerek, bitműveletek

A következő keresztrejtvény minden helyes megoldása 1-1 pontot ér. A megfejtés + 1 pont. Így összesen 15 pontot szerezhetsz a megfejtésért.

11. Egy Y alakú gumikötél egyik ága 20 cm, másik ága 50 cm. A két ág végeit azonos, f = 4 Hz

inels timer Működési elv:

Teljesítmény-erősítők. Elektronika 2.

Egyenáram tesztek. 3. Melyik mértékegység meghatározása nem helyes? a) V = J/s b) F = C/V c) A = C/s d) = V/A

TELEPÍTÉSI ÚTMUTATÓ V1.0

MSP430 programozás Energia környezetben. Digitális szenzorok

1. Milyen módszerrel ábrázolhatók a váltakozó mennyiségek, és melyiknek mi az előnye?

1. Metrológiai alapfogalmak. 2. Egységrendszerek. 2.0 verzió

Bevezetés a mikrovezérlők programozásába: MAX6958: Hétszegmenses LED kijelző vezérlő

A 27/2012 (VIII. 27.) NGM rendelet (12/2013 (III.28) NGM rendelet által módosított) szakmai és vizsgakövetelménye alapján.

Hobbi Elektronika. Bevezetés az elektronikába: Logikai kapuáramkörök

5. Hét Sorrendi hálózatok

Elektromos áram. Vezetési jelenségek

Versenyző kódja: 29 32/2011. (VIII. 25.) NGM rendelet MAGYAR KERESKEDELMI ÉS IPARKAMARA. Országos Szakmai Tanulmányi Verseny

Elektromos ellenállás, az áram hatásai, teljesítmény

Mechanikai rezgések Ismétlő kérdések és feladatok Kérdések

TM Hanglejátszó

Mûveleti erõsítõk I.

IRC beüzemelése Mach3-hoz IRC Frekvenciaváltó vezérlő áramkör Inverter Remote Controller

Értékelés Összesen: 100 pont 100% = 100 pont A VIZSGAFELADAT MEGOLDÁSÁRA JAVASOLT %-OS EREDMÉNY: EBBEN A VIZSGARÉSZBEN A VIZSGAFELADAT ARÁNYA 35%.

C programozási nyelv Pointerek, tömbök, pointer aritmetika

MSP430 programozás Energia környezetben. LED kijelzok második rész

Versenyző kódja: 31 15/2008. (VIII. 13) SZMM rendelet MAGYAR KERESKEDELMI ÉS IPARKAMARA. Országos Szakmai Tanulmányi Verseny

Számítási feladatok a 6. fejezethez

Négyszög - Háromszög Oszcillátor Mérése Mérési Útmutató

1 kérdés. Személyes kezdőlap Villamos Gelencsér Géza Simonyi teszt május 13. szombat Teszt feladatok 2017 Előzetes megtekintés

Bevezetés az elektronikába

7. L = 100 mh és r s = 50 Ω tekercset 12 V-os egyenfeszültségű áramkörre kapcsolunk. Mennyi idő alatt éri el az áram az állandósult értékének 63 %-át?

Műveleti erősítők. Előzetes kérdések: Milyen tápfeszültség szükséges a műveleti erősítő működtetéséhez?

Áramkörszámítás. Nyílhurkú erősítés hatása

Kezelési Utasítás Bentel J400-as központhoz. HAGYOMÁNYOS TŰZJELZŐKÖZPONT 2-24 hurokig

Hálózati egyenirányítók, feszültségsokszorozók Egyenirányító kapcsolások

Átírás:

Megszólal a Kütyü Ahhoz, hogy szóra bírjuk a mikrovezérlőt, nem árt egy kicsit tisztában lennünk a hang fizikai alapjaival és a hangszórók működésével. A hang nem más, mint a levegő nyomásának gyors változása, amely a hangforrásból kiindulva továbbterjed a térben. Ha a légnyomás változása ritmikus (periodikus), akkor zenei hangot hallunk, ha viszont a légnyomás össze-vissza változik, akkor zajt érzékelünk. Amikor például valaki megpendít egy gitárhúrt, a rezgő húr közelében a levegő nyomása gyors és ritmikus változásba kezd és ez a hatás tovaterjed. A készletünkben lévő kicsiny hangszóró (csipogó) belsejében egy elektromágnes található. Ha a hangszórón áram halad át, az elektromágnes behúz egy kis fémlapocskát (az ún. membránt), ha az áram megszakad, a mágnes elengedi a membránt és az visszatér a helyére. Ha megfelelő (szapora) sebességgel kapcsolgatjuk be és ki a csipogón átfolyó áramot, a membrán rezgésbe hozza a környező levegőt és hang keletkezik. Az áramköri rajzokon a hangszórók jele a következő: Vajon milyen szaporán kell kapcsolgatni az áramot? Annyira gyorsan, hogy a két kapcsolás között eltelt időt nem is ezredmásodpercben (milliszekundum), hanem milliomod-másodpercben (mikroszekundum) lehet megadni! Ilyen sebességre ember nem lehet képes. A mikrovezérlő azonban igen! A mikrovezérlő egyik digitális kimenete és a GND (föld) kimenet közé kössük be a csipogót! A piezo-csipogók esetében a polaritás többnyire számít (nem mindegy, hogy a két kivezetése közül melyikre kötjük a pozitív feszültséget), a nagyobb hangszórók esetében nem. Általában piros színnel, vagy hosszabb kivezetéssel jelölik a pozitív lábat és feketével, vagy rövidebbel a negatívat. Semmiképpen se felejtsünk el egy áramkorlátozó ellenállást sorba kötni a csipogóval! A csipogónak (és a nagyobb hangszóróknak is) ugyanis csak kicsi a saját ellenállása, ezért ha nem teszünk elé előtét-ellenállást, túl nagy áram keletkezik, ami nem csak a csipogót, de a mikrovezérlőt is tönkreteheti! Vajon mekkora legyen az előtét-ellenállás? Ahhoz, hogy ezt megtudjuk, használnunk kell a fizikaórán tanult Ohmtörvényt. A mikrovezérlő digitális kimenetein +5V feszültséget ad ki. Az átfolyó áramot tervezzük 20 ma-re! (20 milliamper = 0,02 Amper) A csipogó és az előtét együttes ellenállása Ohm törvénye alapján: R = U / I azaz 5/0,02 ami 250 Ohm. Mivel a csipogó ellenállása elhanyagolhatóan kicsi (kb 8 Ohm), ezzel megkaptuk a szükséges előtét-ellenállás értékét. Valószínűleg nincs a készletünkben pontosan akkora ellenállás, mint a fent kiszámított érték. Ilyenkor inkább nagyobb ellenállást használjunk! (Így kisebb lesz az áram.) Ha csak a szükségesnél kisebb méretű ellenállásaink vannak, akkor több ellenállást sorba kötve érhetjük el a kívánt eredményt. Arduino bevezető hangszóró vezérlése 1 / 5 oldal

Milyen programmal lehet az áramkört megszólaltatni? Hasonlóval, mint amilyennel a LED-et villogtattuk. Mindössze arra kell figyelni, hogy a delay(1000) várakoztató utasítás helyett a delaymicroseconds(1000) utasítást használjuk. Ha a zárójelek közötti számot csökkentjük, a hang magasabb lesz, ha növeljük, akkor mélyebb hangot kapunk. Szirénák és villogók Készítsünk most egy szirénát, villogó LED-ekkel! Két LED-re és egy hangszóróra lesz szükségünk, na meg a megfelelő előtét-ellenállásokra. (2 db, min. 250 Ohm) A sziréna hangmagassága folyamatosan változzon! Amikor az egyik LED ég, akkor növekedjen a hangmagasság, amikor a másik LED ég, akkor pedig csökkenjen! Az áramkört vezérlő program a következő: int hangpin = 3; // a csipogó a Pin3-ra kötve int ledpin1 = 6; // az egyik LED a Pin6-ra kötve int ledpin2 = 9; // a másik LED a Pin9-re kötve int k=500; // a késleltetés mértéke int dk=1; // a késleltetés változása (1 ha nő, -1 ha csökken) void setup() { pinmode(ledpin1,output); // a pinek kimeneti módba állítása pinmode(ledpin2,output); pinmode(hangpin,output); digitalwrite(ledpin1,high); // az egyik LED bekapcsolása void loop() { digitalwrite(hangpin, HIGH); // a következő négy utasítássor // felelős a hangkeltésért digitalwrite(hangpin, LOW); k=k+dk; // változtatjuk a késleltetést if(k==1000) { // ha a k elérte az 1000 -et, akkor: dk=-1; // a k mostantól csökkenni fog digitalwrite(ledpin1,low); // az egyik LED kikapcsolása digitalwrite(ledpin2,high); // a másik LED bekapcsolása if(k==500) { // ha a k elérte az 500 -at, akkor: dk=1; // a k mostantól nőni fog digitalwrite(ledpin1,high); // az egyik LED bekapcsolása digitalwrite(ledpin2,low); // a másik LED kikapcsolása Arduino bevezető hangszóró vezérlése 2 / 5 oldal

A program egyik újdonsága a k és dk változók használata. Változókat használhatunk a programjaikban különféle adatok ideiglenes tárolására. A program elején létre kell hozni a változókat a nevük és típusuk megadásával. (Ezt nevezzük a változó deklarációjának.) A fenti programban olyan változókat hoztunk létre, amelyekben egy-egy egész számot lehet tárolni. Ezt jelöli az int szó. A változók neve tetszőlegesen választható, de bizonyos megkötésekkel. Csak az angol ábécé karakterei és számjegyek szerepelhetnek benne, továbbá betűvel kell kezdődnie. A program működése közben a változók tartalmát módosíthatjuk, illetve felhasználhatjuk különféle célokra. A program másik újdonsága az if utasítás. Az ún. feltételes utasítás általában a következő formájú: if (feltétel) utasítás ; Illetve, ha több utasítást szeretnénk feltételessé tenni: if (feltétel) { utasítás; utasítás;... A feltétel utáni utasítást (illetve a két kapcsos zárójel között lévő utasításokat) csak akkor hajtja végre a mikrovezérlő, ha a feltétel teljesül. Figyeljünk különösen arra, hogy a feltételben dupla egyenlőségjelet kell használni! (A szimpla egyenlőségjel ugyanis az értékadás jele. Lásd a fenti programban: dk=1 illetve k=k+dk) Kacsintás az analóg világba A folyamatosan változó hangmagasság mintájára próbáljuk meg a LED-ek fényességét is folyamatosan változtatni! A LED-ek fényessége a rajtuk átfolyó áram erősségétől függ. Az áram erősségét úgy tudjuk változtatni, hogy a feszültséget változtatjuk. (Mivel az áramkör ellenállása nem változik, ezért az áramerősség egyenesen arányos a feszültséggel. Ohm törvénye alapján: I = U / R) Az Arduino mikrovezérlő - bizonyos kimenetein - nem csak 2 -féle feszültséget tud kiadni (5V és 0V), hanem a két végső érték között 255 átmenetet. Ezek a kimenetek a ~ jellel vannak megjelölve. A LED-ek feszültségének vezérlésére a digitalwrite utasítás helyett az analogwrite utasítást fogjuk használni. Ennél az utasításnál a kimenet (pin) sorszámán kívül azt is meg kell adni, hogy mekkora feszültséget kapcsoljon a mikrovezérlő a kérdéses kimenetre. A 0 érték felel meg a 0V-nak, a 255 érték pedig +5V feszültséget jelent. A köztes számokhoz arányosan rendel 0V és +5V közötti feszültségeket a mikrovezérlő. Valójában nem egészen ez történik, hanem egy impulzusszélesség-moduláció (pulse-width modulation, PWM) nevű trükköt alkalmaz az elektronika. Akit érdekelnek a részletek, nézzen utána az Interneten! int hangpin = 3; // a csipogó a Pin3-ra kötve int ledpin1 = 6; // az egyik LED a Pin6-ra kötve int ledpin2 = 9; // a másik LED a Pin9-re kötve int k=500; // a késleltetés mértéke int dk=1; // a késleltetés változása (1 ha nő, -1 ha csökken) void setup() { pinmode(ledpin1,output); // a pinek kimeneti módba állítása pinmode(ledpin2,output); pinmode(hangpin,output); Arduino bevezető hangszóró vezérlése 3 / 5 oldal

void loop() { digitalwrite(hangpin, HIGH); digitalwrite(hangpin, LOW); // a következő négy utasítássor // felelős a hangkeltésért // az egyik LED fényessége a késleltetéssel arányosan nő analogwrite(ledpin1,k/4); // a másik LED fényessége a késleltetéssel arányosan csökken analogwrite(ledpin2,250-k/4); k=k+dk; // változtatjuk a frekvenciát // ha a frekvencia elérte az 1000 Hz-et, akkor // a frekvencia mostantól csökken if(k==1000) dk=-1; // ha a frekvencia elérte az 500 Hz-et, akkor // a frekvencia mostantól nő if(k==500) dk=1; Zenél a kütyü A hangkeltés megkönnyítésére az Arduino programnyelvbe beépítettek egy külön utasítást: tone(pin, frekvencia) Az utasítás hatására a pin sorszámú digitális kivezetésre kötött hangszórón a frekvenciának megfelelő rezgésszámú hangot kezd el adni a mikrovezérlő. A frekvenciát Hertzben kell megadni. Minél nagyobb a frekvencia, annál magasabb a hang! A hangot a notone(pin) utasítással lehet kikapcsolni. Lehetőség van arra is, hogy a hang bekapcsolásakor meghatározzuk az időtartamot, ameddig a hang szóljon. Az időtartamot ezredmásodpercben kell megadni. (Ebben az esetben nincs szükség a notone utasításra.) tone(pin, frekvencia, időtartam) A tone utasítás segítségével zenét is könnyedén lehet lejátszani a mikrovezérlőn, csak tudni kell az egyes zenei hangoknak megfelelő frekvenciákat és ügyelni kell a hangok hosszára, azaz a megfelelő késleltetésekre. Aki számok helyett a zenei hangok betűjelét szeretné használni, az a program elejére illessze be az alábbi definíciókat: #define C 262 #define CS 277 #define D 294 #define DS 311 #define E 330 #define F 349 #define FS 370 #define G 392 #define GS 415 #define A 440 #define AS 466 //Az angol nyelvben a Cisz hang neve C sharp. Arduino bevezető hangszóró vezérlése 4 / 5 oldal

#define B 494 //Az angol nyelvben a H hang neve B! #define Cf 523 //Ez pedig már a következő oktáv C hangja (a felső C). Ha valaki kíváncsi a többi zenei hangra is, keressen rá az Interneten a pitches.h fájlra! A fenti definíciókat a következőképpen használhatjuk a programban: void loop() { tone(hangpin,c,500); tone(hangpin,e,500); tone(hangpin,c,500); tone(hangpin,e,500); tone(hangpin,g,1000); delay(1050); tone(hangpin,g,1000); delay(1050); Vegyük észre, hogy a tone utasítás utáni késleltetés (delay) ideje picit hosszabb, mint a hang időtartama. Erre azért van szükség, hogy a hangokat egy kis szünettel elválasszuk. (Különben összemosódnának az egymás utáni hangok.) Arduino bevezető hangszóró vezérlése 5 / 5 oldal