Korábban, amikor nyomógombbal morzéztunk, már használtunk egy kis csipogót, ami villany hatására sípolt, irdatlanul. Ehhez a mikrovezérlős készlethez is van egy ilyen kis piezo hangszóró, de ha esetleg kipróbáltad, úgy tűnik, hogy mégsem csipog. Elromlott? Dehogy! Csak meg kell ismerni a működését!
A piezo a "piezoelektromos hangszóró" kifejezés rövidítése. A piezokristály olyan spéci anyag, ami villany hatására egy nagyon picit összenyomódik. Ezt a kristályt két fémlap közé ragasztják, és így amikor összenyomódik, a két fémlapot is mozgatja.
Vedd elő a piezot! A minénk kis fekete műanyagházban van, és drót helyett van neki két kis tüskéje. Nyomd bele a piezot panelbe, és kösd össze az egyik oldalát az A-star 9-es portjával, a másik oldalát meg a GND-vel:
Poroljuk le a szokásos ledvillogató progit:
void setup() {
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(9, HIGH);
delay(500);
digitalWrite(9, LOW);
delay(500);
}
Most akkor nem ledet tettünk a panelre, hanem piezot, de a villany rámegy a piezora is. Vajon mielőtt kipróbálod, ki tudod találni, milyen hangot fog ez produkálni?
Véleményedet magyarázd el a többieknek!
A fenti progi villogtatja a ledet, és ....... hangot csinál a piezon. Ez már valami halk valami, de azért nem hiszem, hogy ennyivel be kellene érni.
Próbáld ki a delay-ek értékét csökkenteni! Mit tapasztalsz ha:
értékeket használsz?
Miben változik a led villogása, és a piezo hangja?
A frekvencia azt jelenti, gyakoriság. Elektronikában a villany változásának a gyakoriságára szokták használni, de igazán kockák olyanokat is mondanak, hogy "a mozibamenésem frekvenciája heti 1 alkalom".
A klasszikus ledvillogtató program másodpercenként 1 felvillanást produkál, erre mondjuk azt, hogy a led villogásának a gyakorisága (frekvenciája) 1 Hz. A Hz-t úgy mondják, hogy Hertz, ízlés szerint a szalámigyáras bácsinak, az autókölcsönzőnek, vagy pedig Heinrich Rudolf Hertz bácsi tiszteletére.
Ez a másodpercenként 1 felvillanás úgy jött össze, hogy 500ms-ig azaz 0.5 másodpercig bekapcsoltuk, majd 0.5 másodpercig kikapcsoltuk. Ha delay(100)-at írsz, akkor 100ms bekapcs, 100ms kikapcs az összesen 200ms, így egy másodperc (1000ms) alatt pontosan 5-ször villan fel a led, tehát akkor 5Hz-el villog.
Ha egy ledvillogtató programban egyre csökkentjük a delay-ek értékét, valami fura történik. Mintha csak megszűnne villogni! Úgy tűnik, mintha csak folyamatosan világítana! Pedig valójában villog az ezerrel, viszont a szemünk nagyjából 16..20 Hz feletti villogást folyamatosnak lát.
Ez valószínűleg evolúciós dolog, ettől gyorsabban nem nagyon mozog semmiféle ragadozó (legfeljebb a legyek), így az embereknek ez pont elég. Érdekes, hogy a legyek szeme sokkal gyorsabb, hiszen ők eleve sokkal gyorsabban mozognak, mint az ember, és ráadásul fel kell készülniük arra, hogy az emberek le akarják őket csapdosni.
A mozi úgy működik, hogy másodpercenként 24 képet villantanak fel a szemünk előtt. Ez 24Hz, ez már elég gyors, hogy ne vegyünk észre a villogást.
Bizonyára Chuck Norris szeme sokkal gyorsabb, és ő simán látja az 1 GHz-el (gigahertz-el) villogó ledet, viszont szegény akkor nem mehet moziba, és nem nézhet tévét, hiszen csak idegesítően lassú diavetítést lát az egészből! :)
Az elején, amikor még 1Hz-es delay volt, akkor a leddel együtt apró kis pattogást hallottál a piezobol. A hang úgy készül, hogy valami tárgyat megrezegtetünk, ami megrezegteti a levegőt. A levegőn át ez a rezgés eljut a dobhártyánkig, ahol megrezegteti a megfelelő csontjainkat, míg végül az agyunk azt hiszi, ez egy hang.
A piezo is ezt csinálja, miközben összehúzódik, elengedi magát, vagy fordított polaritással éppen kicsit megnő, mozgatja a fémlapot, amire rá van ragasztva.
A frekvenciában itt is vannak korlátok. A 20Hz alatti, és a 20 000Hz (20kHz) feletti hangokat az emberek nagy többsége nem érzékeli. Érdekes, hogy több állat is képes a 20kHz feletti hangok érzékelésére, például a kutyák is. Sőt, a denevérek képesek ilyen szupermagas hangokat kiadni is. Ezeket a 20Khz feletti szupermagas hangokat nevezik úgy, hogy ultrahang.
Amikor csökkentetted a delay értékét, és sikerült eljutni olyan 50-100Hz körülig, akkor a pattogás helyett már rendes mély hangot hallottál. Ahogy még kisebb a delay, egy másodperc alatt egyre többször tudta a piezo meglökni a levegőt - azaz egyre magasabb frekvenciájú hangot kaptál.
A delay(1) esetén 1ms bekapcs, 1ms kikacs, 1000ms alatt a 2ms 500-szor van meg, ez már egy nem olyan mély hang. De hogyan lehetne még magasabb hangot kicsikarni?
Sajnos delay(0.5) nincs, de van helyette delayMicroseconds() ahol mikroszekundumban - a másodperc egymilliomod részében - kell megadni, hogy mennyit várjunk.
Szóval, ha
A szúnyog vagy a dongó mozgatja gyorsabban a szárnyait? Most már simán tudsz erre válaszolni, ugye?
Szerencsére zenélgetni sokan akarnak, ezért az Arduinohoz készítettek egy hang-csináló függvényt, hogy ne nekünk kelljen be-ki kapcsolgatni a piezot, delayozni, meg minden.
Ez a tone() függvény, aminek az első paramétere hogy melyik porton van a piezo, a második pedig, hogy milyen magas hangot szeretnénk. A hang magasságát Hz-ben kell megadni, mondjuk a normál zenei A hang az 440Hz, a 100Hz mély, az 1000Hz pedig már nagyon magas hang.
void setup() {
pinMode(9,OUTPUT);
}
void loop() {
tone(9,440);
}
Egyetlen hang már nagyon megy, de jó lenne egy nénózó sziréna. Ehhez mondjuk 500Hz-es és 1000Hz-es hang kell. Igen ám, de mindegyiknek legalább fél másodpercig kell szólnia!
void setup() {
pinMode(9,OUTPUT);
}
void loop() {
tone(9,440);
delay(200);
tone(9,220);
delay(200);
}
Nos, ez azért nem volt nehéz, ugye?
Ez még csak két hang, ez még nem vinnyog, a vinnyogó sziréna olyasmi, aminek változik a hangmagassága, valahogy így:
void setup() {
pinMode(9,OUTPUT);
}
void loop() {
tone(9,220);
delay(10);
tone(9,221);
delay(10);
...
tone(9,440);
delay(10);
}
Ööö... 220-tól 440Hz-ig, most akkor komolyan 220 alkalommal le fogjuk másolni a tone-t meg a delay-t?
NEM! Lapozz :)