Elő a csipogóval!

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.

Piezokristály két réteg fémlap között

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:

Piezo bekötése
A képen nem látszik a piezo két lába. Az egyiknek a zöld drót sorában, a másiknak a fekete drót sorában kell lennie. Ha ugyanabban a sorban van két alkatrészláb, azt összeköti a próbapanel.

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 hang

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 csúnya szó

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.

Chuch Norris szeme és A Légy

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! :)

Hallak!

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 piezokristály összehúzódása mozgatja a fémlapokat, ami mozgatja a levegőt

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

Gondolkodj el rajta!

A szúnyog vagy a dongó mozgatja gyorsabban a szárnyait? Most már simán tudsz erre válaszolni, ugye?

Lehet könnyebben?

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);
}

Csináljunk szirénát!

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 :)

Mit tanultunk ebből?

A hang a levegőben terjedő rezgés. A rezgés gyakoriságát frekvenciának nevezzük, minél nagyobb a frekvencia, annál magasabb a hang.