Les 11: Werken met een buzzer

We werkten al eens met analogWrite(); om een ledje te laten dimmen. Echter een ledje kan je ook digitaal aansturen met digitalWrite();. Vandaag zien we een speciale, enkel analoge component die zijn eigen commando heeft! Vandaag zullen we werken met een buzzer! Deze buzzer kan gebruikt worden om tonen te genereren, maar het kan zelfs ook gebruik worden om liedjes mee te maken. In deze code zullen we de basis doorlopen en leren hoe je tonen genereert met een buzzer.

Werken met een buzzer:

We kunnen als licht ‘genereren’ met behulp van een ledje. Echter geluid maken kan ook heel handig zijn, daarom zullen we vandaag werken met een buzzer. We zullen gebruik maken van twee componenten: een knop en een buzzer. De buzzer is een unieke component omdat deze speciale commando’s heeft in arduino.

Notities:

Minder gebruikelijke componenten, zoals RFID, hebben ook speciale commando’s. Echter deze zijn niet, zoals bij de buzzer, al gekend door arduino. Daarom werken componenten zoals RFID met libraries. Zo kunnen wij op een ‘eenvoudige’, ‘duidelijke’ manier gebruik maken van deze componenten. Deze libraries zijn te vinden op het internet, maar we zullen dit vandaag niet gebruiken.

We beginnen met Arduino te onderwijzen in onze, menselijk taal. Ook hier maken we een variabele, knopStatus, om de gegevens van de knop in op te slaan. We schakelen onze knop op poort 12. Deze mag op alle digitale poorten geschakeld worden. De buzzer moet echter geschakeld worden op een PWM-poort. Zo kunnen er verschillende toonhoogtes, frequenties gegeneerd worden.

PWM-signalen

PWM-signalen of pulse with modulation is een manier om met digitale middelen een analoog output te verkrijgen. PWM werkt met bloksignalen. Je hebt de maximum spanning enerzijds en de minimum spanning anderzijds. Door zeer snel te wisselen tussen beide krijgen we een resulterende spanning die tussen beide extrema liggen. Theoretisch gezien zouden het licht voortdurend knipperen, maar omdat deze wisseling sneller gaat dan de frequentie van onze ogen, zien we deze niet. De grote van de resulterende spanning hang of van de procentuele verhouding van de extrema per puls. Hoe langer deze dus bij de maximum blijft, hoe hoger dus de resulterende spanning.

PWM-signalen

Opbouw:

We declareren onze buzzer als OUTPUT en onze knop als INPUT. Daarna beginnen we onze code met het lezen van de status van de knop. Deze waarde slaan we dan op in onze variabele. Die variabele gebruiken we om onze controles it te voeren.

We testen onze variabele in onze if-else-functie:

if ( knopStatus == HIGH){

tone(buzzer , 1000);

delay( 1500);
}

Wanneer de knop ingedrukt wordt, en ‘knopStatus’ dus gelijk is aan ‘HIGH’, dan zal de if-functie uitgevoerd worden. Hier komen we voor het eerst tone(); tegen. Dit is één van de de speciale commando’s voor de buzzer.

tone ( pin , frequentie, duur);

Dit is de algemene vorm van dit commando. We zien dat we eerst de waarde van we de pin moeten kiezen is. Bij ons is dit onze constante ‘buzzer’. Daarna geven we onze toonhoogte, onze frequentie. Dit is een ‘integer’ en wij hebben gekozen voor de waarde 1000. De laagst mogelijk genereerbare frequentie is 31 Hz. De derde waarde is optioneel en hebben wij niet gebruikt. Zo konden we ook het commando noTone(); in ons programma gebruiken. De derde waarde geeft de duur weer van de gekozen toon.

Nadat we een van frequentie 1000 naar de buzzer gestuurd hebben, wachten we 1500 milliseconden voor we verdergaan in de code.

else{
noTone(buzzer);
}

Wanneer er niet meer op de knop geduwd wordt, en wanneer ‘knopStatus’ dus niet meer ‘HIGH’ is, wordt de else-functie geactiveerd. Deze bevat maar één commando:

noTone( pin);

Dit commando gebruiken we om het tone(); commando te beëindigen en is tevens het tweede speciale commando voor de buzzer. In dit commando hoeft slechts de pin gegeven worden.

Notities:

Het commando tone(); zal moeilijkheden opleveren bij de PWM output van pin 3 en 11. Dit geldt voor alle borden, behalve de Mega.

Als je wil een toon spelen op een andere poort, terwijl er al een poort het tone(); commando ontvangt, dan moet je eerst notone(); sturen naar deze pin om vervolgens het tone(); commando naar de nieuwe pin te sturen.

Code:

// Eerst zetten we onze woorden om in taal die arduino begrijpt. 

const int buzzer =10;
const int knop =12;

int knopStatus;

void setup() {
// Aangezien dat deze ” loop ” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten. 

pinMode ( buzzer , OUTPUT);
pinMode ( knop , INPUT);
}
void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.

knopStatus = digitalRead ( knop );
if ( knopStatus == HIGH){
tone(buzzer , 1000);

delay ( 1500);
}

else{
noTone(buzzer);
}

}

Schakeling:

We schakelen het de buzzer aan poort 10 en de ground. De knop wordt verbonden met de 5V, poort 12 en via een weerstand van 100 000 ohm met de ground.

werken met een buzzer
Basislessen Arduino 91.6%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het snel duidelijke welke invloed een commando heeft op de werking van de schakeling. In deze code zal vooral een verschil in waardes bij het commando tone(); een duidelijk verschil opleveren.

Bij problemen tijdens het werken met een buzzer, aarzel dan zeker niet om contact op te nemen.

Als je deze code onder de knie hebt, ga dan over naar les 12!

Geplaatst in Programmeren Arduino voor dummies.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *