
In deze tutorial leren we hoe een zoemer muzieknoten kan spelen. Verken hoe een melodie te programmeren met een Python-script op je Raspberry Pi. Wanneer je deze tutorial hebt voltooid, kan je verschillende tonen genereren met een zoemer. Je hebt ook de Python-code om je zoemer een eenvoudige melodie te laten spelen.
Je Raspberry Pi voorbereiden
Allereerst dien je een Raspberry Pi te hebben die op de nieuwste versie van Raspberry Pi OS draait. Deze versie bevat “Thonny”. We zullen deze gebruiksvriendelijke IDE gebruiken om onze Python-code te schrijven. Als je niet bekend bent met Python of met Thonny en de GPIO-pinnen, raad ik je aan onze volgende tutorials te bekijken “Hoe je eerste Python programma op de Raspberry Pi schrijven” en “Hoe de GPIO pinnen van de Raspberry Pi gebruiken” voor een snelle introductie. Voor een basiskennis over de actieve zoemer en hoe je deze op je Pi kan aansluiten, kun je onze tutorial “Zoemer met Raspberry Pi gebruiken” bekijken .
De extra hardware voorbereiden
Vervolgens heb je wat extra hardware nodig:
- een breadboard (we gebruiken een breadboard van 400 punten)
- een actieve zoemer (=buzzer)
- Dupont jumper kabels
- NPN transistor
- een T-cobbler (optioneel)
- een 40 pins GPIO-kabel (optioneel)
Indien je dingen zou missen, aarzel dan niet om onze shop te bezoeken. We hebben een goed bedachte kit die alle nodige componenten bevat .
Over muzieknoten

Van Wikipedia leren we dat een muzieknoot de toon(hoogte) en de duur van een geluid is. Elke toon heeft een welbepaalde frequentie. Deze frequentie kan worden berekend. Maar we behandelen deze onderwerpen niet in deze tutorial. We onthouden enkel dat we de frequentie en de duur nodig hebben voor elke noot die we op de zoemer willen spelen. We zullen deze twee elementen gebruiken in ons script.
Voor meer informatie over muzieknoten, bezoek deze Wikipedia pagina.
Voor de frequenties van de verschillende tonen, raadpleeg deze tabel.
Stel de hardware op
Let op! Voordat je begint met het aansluiten van draden op de GPIO-pinnen van je Raspberry Pi, dien je ervoor te zorgen dat je de Pi goed afsluit en de voedingskabel van het bordje hebt verwijderd!
We gebruiken dezelfde hardwareconfiguratie als deze van onze tutorial “Zoemer met Raspberry Pi gebruiken”.

- sluit de 40-pins kabel op de GPIO-pinnen van je Pi aan (verwijder indien nodig eerst het deksel van je Pi)
- sluit de T-cobbler op het breadboard aan zoals wordt weergegeven in de afbeelding hierboven of hieronder
- sluit het andere uiteinde van de 40-pins kabel aan op de T-cobbler
- plaats de zoemer op het breadboard, de lange poot is positief, plaats het in de buurt van de rand van het breadboard
- plaats de NPN-transistor: op ons beeld stroomt de stroom van de rechterpin (3) naar de linkerpin (1), de middelste pin (2) is de poort
- verbind transistorpen (3) met een 5V pin van de Pi (rode draad)
- sluit transistorpen (2) aan op pin 23 (gele draad)
- kijk na of de lange poot (+) van de zoemer in dezelfde rij geplaatst werd als de transistorpin (1)
- sluit de korte poot (-) van de zoemer op een GPIO GND-pin aan (zwarte draad)

Schrijf de code
Het doel van deze tutorial is om een eenvoudig Python-script te schrijven waarmee de zoemer een eenvoudige melodie kan spelen. Om de code te schrijven, gebruiken we de Thonny IDE. Je kan Thonny vinden in het applicatiemenu van je Raspberry Pi.
Schrijf of plak de volgende code in de IDE:
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) BUZZER = 23 GPIO.setup(BUZZER, GPIO.OUT) def buzz(noteFreq, duration): halveWaveTime = 1 / (noteFreq * 2 ) waves = int(duration * noteFreq) for i in range(waves): GPIO.output(BUZZER, True) time.sleep(halveWaveTime) GPIO.output(BUZZER, False) time.sleep(halveWaveTime) def play(): t=0 notes=[262,294,330,262,262,294,330,262,330,349,392,330,349,392,392,440,392,349,330,262,392,440,392,349,330,262,262,196,262,262,196,262] duration=[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,1,0.25,0.25,0.25,0.25,0.5,0.5,0.25,0.25,0.25,0.25,0.5,0.5,0.5,0.5,1,0.5,0.5,1] for n in notes: buzz(n, duration[t]) time.sleep(duration[t] *0.1) t+=1 #buzz(262, 0.5) play()
Wat verklaringen over de code:
GPIO.setmode (GPIO.BCM)
: De GPIO.BCM-optie betekent dat we naar de pinnen verwijzen via het “Broadcom SOC-kanaal” -nummer, dit zijn de cijfers na “GPIO”GPIO.setwarnings (False)
: we gebruiken deze coderegel om waarschuwingsberichten te vermijden. Dit is nodig omdat we de GPIO-verbinding niet goed beëindigen tijdens het onderbreken van het programmaGPIO.setup(BUZZER, GPIO.OUT)
: We definiëren de BUZZER-pin (= 23) als een uitvoerpindef buzz(noteFreq, duration):
Hier definiëren we de “buzz” functie met als argumenten “noteFreq” en “duration”- Wees voorzichtig, Python is witruimte gevoelig. Verwijder de “tab” niet vóór de volgende regels code
halveWaveTime = 1 / (noteFreq * 2 )
: Berekening van de tijd voor een halve golflengte van een gegeven frequentieint(duration * noteFreq)
: Berekening van het aantal golflentesfor i in range(waves):
: Een lus die wordt herhaald tot het aantal golflengtes bereikt wordtdef play():
: Definiëren van de “play” functienotes=[…]
: Een array met alle frequenties van de te spelen muzieknoten (Hz)duration=[…]
: Een array met alle tijden van de te spelen muzieknoten (seconden)for n in notes:
: Wat volgt zal worden herhaald voor elk element van de array “notes”buzz(n, duration[t])
: Oproepen van de “buzz”-functie met de elementen van beide arraystime.sleep(duration[t] *0.1)
: Wacht even tussen het afspelen van elke muzieknoot#buzz(262, 0.5)
: Deze regel is becommentarieerd. Verwijder de “#” om slechts één muzieknoot te spelenplay()
: Door de “play” -functie aan te roepen, wordt de melodie gespeeld.
Voer het script uit
Vooraleer je het programma laat uitvoeren, dien je het een naam te geven en op te slaan.

Eens opgeslagen,
klik op de knop Uitvoeren. Je zal een bekende melodietje horen.
Gefeliciteerd! Met deze opstelling kan je nu een melodie spelen met een eenvoudige actieve zoemer op je Raspberry Pi. Je kan de arrays “notes” en “duration” wijzigen of noten toevoegen voor andere melodieën. Nog veel plezier ermee!