Generovanie tónov
Zo stránky SensorWiki
Generovanie tónov prostredníctvom pripojeného miniatúrneho reproduktora je veľmi obľúbené a využíva sa aj ako akustická signalizácia pri prekročení hraničných stavov, alebo ako alarm.
Pri použití miniatúrnych piezoreproduktorov si treba dať pozor na správny typ. V praxi sa veľmi často vyskytujú aj samobudené signazlizačné prvky - sirénky, ku ktorým stačí priviesť správne napájacie napätie a zvuk začnú generovať automaticky, pomocou zabudovaného oscilátora, najčastejšie naladeného na mechanickú rezonančnú frekvenciu meniča, takže obvykle aj účinnosť je výborná a hlasitosť ľahko presiahne desiatky dB.
My sa však v ďalšom budeme zaoberať len pasívnym meničom, čo je vlastne miniatúrny reproduktor, ktorý musíme vybudiť vhodnou frekvenciou, aby sme z neho dostali nejaký zvuk. Na prvý pohľad je to nevýhoda, ale takto môžeme generovať oveľa širšiu škálu zvukov. Nepočítajte však s nejakou hi-fi kvalitou, piezomeniče sú určené najmä na signalizáciu a nie na prehrávanie Carminy Burana.
Najjednoduchší program
Frekvečný signál môžeme na výstupoch procesora generovať dvoma spôsobmi
- priamo ovládať daný výstup (v takom prípade však procesor nerobí nič iné), alebo
- využiť vstavané periférie, v tomto prípade počítadlo v režime generátora frekvencie.
Ďalej sa budeme zaoberať len druhým spôsobom. To nám obmedzí možné výstupy - môžu to byť len tie, na ktoré sú pripojené interné počítadlá, t.j. 3,5,6,9,10 alebo 11. Na doske Arduino UNO majú tieto výstupy pri čísle aj vlnovku.
Poznámka: výstupný frekvenčný signál bude mať síce správnu frekvenciu, ale tvar bude obdĺžnikový. Jednoduchými prostriedkami nedokážeme na výstupe generovať spojitý harmonický signál (sínusovku).
/* *************************************************
*
* Arduino code for Passive buzzer / Piezo Speaker
*
* ************************************************** */
const int buzzer = 6; // connect buzzer to Arduino pin 6
void setup(){
pinMode(buzzer, OUTPUT); // set the buzzer pin as an output
}
void loop(){
tone(buzzer, 1000); // send 1000 Hz wave to the output
delay(1000); // and do it for 1 sec
noTone(buzzer); // stop frequency output
delay(1000); // again for 1 sec
tone(buzzer, 2000, 500); // third parameter is length in ms
delay(1000); // in reality 1000 - 500
}
To site spravit v AVRG-GCC nas este len caka.
Komplexnejšie melódie
Ak sa nám bude chcieť, tak sem dáme aj zložitejšie programíky...