Raspberry Pi Pico: Tonausgabe mit Mini-Lautsprecher KY-006
Um Töne auszugeben benötigt man einen Lautsprecher. Zum Beispiel das oft als „passive buzzer“ bezeichnete Modul vom Typ KY-006. Im Prinzip ist das ein ganz einfacher Lautsprecher, der sich dafür eignet programmierbare Töne auszugeben. Allerdings eignet sich dieser Lautsprecher nur zur Ausgabe von summenden oder piepsenden Tönen.
Bei der Ton-Ausgabe muss man beachten, dass ein Ton einer bestimmten Frequenz entspricht. Eine Frequenz gibt zahlenmäßig an, wie oft sich ein Signalwechsel innerhalb einer Sekunde wiederholt. Je öfter der Signalwechsel stattfindet, desto höher ist die Frequenz bzw. der Ton.
Um wechselnde Töne von hoch nach tief oder von tief nach hoch zu erzeugen muss man die Frequenz ändern.
Eine Frequenz können wir mit Hilfe eines PWM-Signal-Generators erzeugen. Das funktioniert beim Raspberry Pi Pico an jedem GPIO-Pin und ist einfach zu programmieren.
Ein PWM-Signal ist ein kontinuierlicher Signalwechsel zwischen High und Low. Dabei kennt ein PWM-Signal zwei Parameter.
- Tastgrad bzw. Duty Cycle: Angabe, wie groß der High-Anteil des PWM-Signals sein soll. Ein Wert von 0 (oder 0%) wäre ein Dauer-Low, womit man die Ton-Ausgabe ausschalten würde. Ein Wert von 65.535 (oder 100%) wäre ein Dauer-High, womit man den Ton mit maximaler Lautstärke ausgeben würde.
- Frequenz in Hz (Hertz): Wert zwischen 500 und 2.500 für den Ton.
Mehr Informationen zum Erzeugen einer PWM und Experimente mit PWM:
Aufbau und Bauteile
Raspberry Pi Pico | KY-006 | |
---|---|---|
Pin 18 | GND | - |
Pin 20 | GPIO 15 | S |
Schnell und einfach alle Bauteile zusammen bestellen
Programmcode für eine einfache Tonleiter
Im folgenden Programmcode wird ein PWM-Signal an einem GPIO-Pin initialisiert. Dazu müssen zwei Parameter für das PWM-Signal eingestellt werden.
- Duty Cycle: Der Wert stellt die Lautstärke der Tonausgabe ein. Ein Wert von 500 ist ausreichend. Für Lauter muss der Wert erhöht, für Leiser verringert werden. Der größte Wert liegt bei 65.535, der niedrigste Wert bei 0.
- Frequenz: Der Wert bestimmt den Ton. Für einen höheren Ton muss der Wert vergrößert werden und für einen tieferen Ton muss der Wert verkleinert werden. Allerdings ist die Frequenz, die ein KY-006 ausgeben kann nach oben und unten begrenzt.
Der weitere Programmcode verändert die Frequenz schrittweise von 500 bis 2.500 in Schritten von jeweils 100 Hertz.
# Bibliotheken laden import machine import time # PWM und GPIO initialisieren pwm = machine.PWM(machine.Pin(15)) # 1. Parameter: Tastgrad (Duty Cycle) #pwm.duty_u16(500) pwm.duty_u16(65535//2) # halber Duty Cycle für gleichmäßigen Ton # 2. Parameter: Frequenz in Hertz (Hz) for freq in range (500, 2500, 100): print(freq, 'Hz') pwm.freq(freq) # Tondauer in Sekunden time.sleep(0.5) # PWM-Signal abschalten pwm.deinit()
Programmcode für die Melodie „Alle meine Entchen“
Der Programmcode spielt die Melodie „Alle meine Entchen“ ab. Die Noten sind in Frequenzen umgesetzt und in der Melodie die Tonlängen in Sekunden definiert. Eine Pause mit „P“ ist ebenfalls vorgesehen.
# Bibliotheken laden import machine import time # PWM und GPIO initialisieren pwm = machine.PWM(machine.Pin(15)) # Noten als Frequenzen (C-Dur Tonleiter, A4 = 440 Hz) NOTES = { "C4": 262, "D4": 294, "E4": 330, "F4": 349, "G4": 392, "A4": 440, "H4": 494, "C5": 523, } # Melodie von "Alle meine Entchen" (Note und Dauer in Sekunden) MELODIE = [ ("C4", 0.5), ("D4", 0.5), ("E4", 0.5), ("F4", 0.5), ("G4", 1.0), ("G4", 1.0), ("A4", 0.5), ("A4", 0.5), ("A4", 0.5), ("A4", 0.5), ("G4", 1.0), ("P", 0.5), ("F4", 0.5), ("F4", 0.5), ("F4", 0.5), ("F4", 0.5), ("E4", 1.0), ("E4", 0.5), ("P", 0.5), ("D4", 0.5), ("D4", 0.5), ("D4", 0.5), ("D4", 0.5), ("C4", 1.5), ] # Funktion: Spielt Ton ab def play_note(note, duration): if note == "P": # Pause pwm.duty_u16(0) time.sleep(duration) else: pwm.freq(NOTES[note]) pwm.duty_u16(32768) time.sleep(duration) # Hauptprogramm: Melodie abspielen try: for note, duration in MELODIE: play_note(note, duration) # Pause zwischen den Tönen pwm.duty_u16(0) time.sleep(0.05) except: pass # PWM-Signal abschalten pwm.deinit()
Darf es ein bisschen mehr sein?
Wenn Du statt MicroPython die Alternative CircuitPython verwendest, dann kannst du auch direkt MP3-Dateien abspielen.
Weitere verwandte Themen:
- Raspberry Pi Pico: MP3, Musik, Sprache und Audio
- Raspberry Pi Pico: MP3-Audioausgabe mit DFPlayer Mini
- Raspberry Pi Pico: MP3-Mini-Soundboard mit DFPlayer Mini
- Raspberry Pi Pico: MP3-Dateien abspielen (mit CircuitPython)
- Raspberry Pi Pico W: Sprachausgabe mit der OpenAI-API (mit CircuitPython)
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.