Geplaatst op

Zoemer met Raspberry Pi speelt melodie

Raspberry Pi buzzer melody

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, heb je de basiscode om je zoemer een melodie te laten spelen.

Wat je nodig hebt voor deze tutorial

Allereerst moet je een Raspberry Pi 3 hebben die op de nieuwste versie van Raspbian 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 “Eerste Python programma op de Raspberry Pi” en “Starten met GPIO op de Raspberry Pi” 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 .

 

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 (heb je geen transistor, bekijk dan onze tutorial “Zoemer met Raspberry Pi gebruiken” om te zien hoe je de hardware kan opstellen zonder transistor)
  • een T-cobbler (optioneel)
  • een 40 pins GPIO-kabel (optioneel)Raspberry Pi GPIO discovery kit

Indien je dingen zou missen, aarzel dan niet om onze shop te bezoeken. We hebben een goed bedachte kit die alle nodige dingen bevat .

 

 

Over muzieknoten

 

music notes

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.

Het hardware gedeelte opzetten

We gebruiken dezelfde hardwareconfiguratie als deze van onze tutorial “Zoemer met Raspberry Pi gebruiken”.

buzzer_transistor
  • 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)

 

 

buzzer with transistor

 

De code schrijven

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 vindt Thonny onder 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 programma
  • GPIO.setup(BUZZER, GPIO.OUT): We definiëren de BUZZER-pin (= 23) als een uitvoerpin
  • def 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 frequentie
  • int(duration * noteFreq): Berekening van het aantal golflentes
  • for i in range(waves):: Een lus die wordt herhaald tot het aantal golflengtes bereikt wordt
  • def play():: Definiëren van de “play” functie
  • notes=[…]: 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 arrays
  • time.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 spelen
  • play(): Door de “play” -functie aan te roepen, wordt de melodie gespeeld.

 

Wanneer je klaar bent met de code, 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” noten wijzigen of toevoegen voor andere melodieën. Nog veel plezier ermee!