Projects4edu

Tutorial : toon genereren met een Piezo

De Piezo die op het KAEDU STEM shield is bevestigd kan aan het trillen gebracht worden door er een blokgolf op aan te brengen. Een blokgolf kan je uiteraard genereren door een pin hoog te maken en dan na een delay de pin terug laag te maken en na terug een delay opnieuw te beginnen maar de arduino software heeft er gelukkig ook een eenvoudige functie voor gemaakt namelijk tone()

Alvorens met tone() te kunnen werken moeten we zoals altijd ook deze uitgang activeren.

Om dit te verwezenlijken schrijven we VOOR setup,
int PIEZO = 13;
en IN setup,
pinMode(PIEZO,OUTPUT);

na dit te doen kunnen we in loop de toon genereren, omdat een continue toon vervelend is zetten we na de toon een delay. Je kan op 2 manieren een toon genereren, namelijk zonder tijdsduur en met tijdsduur.
Het formaat is telkens hetzelfde, enkel zal zonder tijdsduur het laatste getal niet geschreven worden.
tone(pin,frequentie,tijdsduur);
In code zal dit dan het volgende worden.
tone(PIEZO,2000,2000);
delay(12000);

Alarm

De vorige uitleg toont je hoe je een bepaalde toon kan genereren, uiteraard is het leuker als er meerdere tonen zouden weerklinken. Om dit te kunnen verwezenlijken kan je de frequentie continu aanpassen. Zo zal bijvoorbeeld bij een alarm een toon van lage naar hoge frequentie oplopen. Deze sweep herhaalt men dan een aantal keer om zo de aandacht te trekken. Zo een sweep realiseert men door middel van een for lus. In het voorbeeldprogramma staat het alarm als een functie. De code van de functie zie je hier.

void alarm(){
for(int i=0; i<20; i++){
for(int i=1500; i<2500; i++){
tone(PIEZO,i);
delayMicroseconds(200);
}
}
noTone(PIEZO);
}

Zoals je ziet (als je de for lus al onder de knie hebt) zal er 20 keer een sweep van 1500Hz tot 2500Hz volgen. Elke frequentie zal 200 microseconden duren. Als de sweep 20 keer heeft plaatsgevonden dan zal de toon stoppen door middel van noTone();

Melodie

Het is ook mogelijk om een muziekstuk af te spelen. Om dit te kunnen doen moet je de frequentie van de noten in een array plaatsen en de tijdsduur van elke noot in een andere array. Een voorbeeldje hieronder.

const int tonen[] = {1319,1175,741,830,1110,989,589,661,989,882,556,661,882};
const int tijdsduur[]={125,125,250,250,125,125,250,250,125,125,250,250,1000};

Zoals je ziet zal 1319Hz voor 125ms klinken en dan 1175Hz ook voor 125ms en zo verder met andere frequenties en ook andere tijden. Zo kan je als je muziekkennis hebt een volledig stuk invullen.
Het afspelen kan dan automatisch gebeuren door deze frequenties te overlopen, dit doen we terug door een for lus te gebruiken. Er zijn 13 noten dus we gaan 13 keer de tone functie laten uitvoeren.
Ook dit staat in een functie.
void melodie(){
for(int i=0; i<13; i++){
tone(PIEZO,tonen[i]);
delay(tijdsduur[i]);
}
noTone(PIEZO);
}

Je ziet hier het gebruik van een array, door telkens gebruik te maken van de variabele i zal de gekozen noot de gekozen tijdsduur afspelen. Na het melodietje stopt de toon terug door gebruik te maken van noTone().

Metronoom

Een metronoom is een toestel dat de maat aangeeft door een tik geluid te maken, een piezo tikt niet maar door de tijd van de piep kort te houden bekom je een beetje een gelijkaardig resultaat. Na testen blijkt dat een toon van 2010Hz het beste hoorbaar is dus deze frequentie gaan we gebruiken. Ook hier zetten we de code in een functie.
void metronoom(int tussentijd){
tone(PIEZO,2050,10);
delay(tussentijd);
}

Door bij de functieoproep de tijd in te vullen bepaal je de snelheid van de herhalende piep. Bijvoorbeeld
volgende oproep
metronoom(500);
dan zal elke halve seconde een piepje te horen zijn, combineer je de tijd met een variabele die uit de analoge waarde van de potentiometer komt dan kan je de potentiometer gebruiken om de snelheid van de metronoom aan te passen.

Het volledige programma van de tutorial kan je hier downloaden.

Volgende les : AND OR NOT

Je kan ook verschillende voorwaarden aan elkaar koppelen met de logische functies AND, OR, NOT.

Vorige les : Aansturen van SERVO

Je zou de tutorial van de deze les kunnen combineren met de tutorial van de vorige les. Het geluid kan namelijk in combinatie met de servo werken en ervoor zorgen dat een deur automatisch dicht gaat of dat er na een biepje bij de metronoom ook een stokje beweegt.

Mobiele versie afsluiten