Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.
Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!
1.4 Passiver Summer
Einführung
In diesem Projekt lernen wir, wie ein passiver Summer Musik abspielen kann, indem er mit unterschiedlichen Frequenzen angesteuert wird. Passive Summer benötigen – im Gegensatz zu aktiven Summern – ein externes Signal, um einen Ton zu erzeugen.
Benötigte Komponenten
Um dieses Projekt umzusetzen, benötigen Sie die folgenden Komponenten:
KOMPONENTE |
KAUFLINK |
|---|---|
- |
|
Raspberry Pi |
- |
Schaltplan
Die Schaltung verwendet einen passiven Summer, einen NPN-Transistor und einen 1kΩ-Widerstand. Der Widerstand schützt den Transistor vor zu hohem Strom. Durch das Variieren der Frequenz des GPIO-Pins, der mit dem Transistor verbunden ist, erzeugt der Summer unterschiedliche Töne und kann dadurch Musik wiedergeben.
Verdrahtungsdiagramm
Folgen Sie diesen Schritten, um die Schaltung aufzubauen:
Verbinden Sie die Basis des NPN-Transistors über den Widerstand mit PWM0.
Verbinden Sie den Emitter des Transistors mit der Stromversorgung (+).
Verbinden Sie den Kollektor des Transistors mit einem Anschluss des passiven Summers.
Verbinden Sie den anderen Anschluss des Summers mit Masse (-).
Beispiel ausführen
Der gesamte Beispielcode in diesem Tutorial befindet sich im Verzeichnis ai-lab-kit.
Folgen Sie diesen Schritten, um das Beispiel auszuführen:
cd ~/ai-lab-kit/python/
sudo python3 1.4_PassiveBuzzer.py
Nach dem Ausführen des Skripts spielt der passive Summer über PWM0 eine kurze Melodie ab. Jede Note wird nacheinander für ihre festgelegte Dauer gespielt, und die aktuelle Note wird während der Wiedergabe in der Konsole angezeigt. Wenn die Melodie beendet ist, stoppt der Summer automatisch, wobei bei None-Noten kurze Pausen entstehen. Sie können das Programm jederzeit durch Drücken von Ctrl + C beenden.
Code
Der folgende Python-Code erzeugt musikalische Töne mit einem passiven Summer:
#!/usr/bin/env python3
from fusion_hat.modules import Buzzer
from fusion_hat.pwm import PWM
from time import sleep
# Initialize a TonalBuzzer connected to PWM 0
tb = Buzzer(PWM('P0')) # Update this pin number based on your setup
def play(tune):
"""
Play a musical tune using the buzzer.
:param tune: List of tuples (note, duration), where each tuple represents a note and its duration.
"""
for note, duration in tune:
print(note) # Output the current note being played
tb.play(note,float(duration)) # Play the note on the buzzer
tb.off() # Stop playing after the tune is complete
# Define a musical tune as a sequence of notes and durations
tune = [('C#4', 0.2), ('D4', 0.2), (None, 0.2),
('Eb4', 0.2), ('E4', 0.2), (None, 0.6),
('F#4', 0.2), ('G4', 0.2), (None, 0.6),
('Eb4', 0.2), ('E4', 0.2), (None, 0.2),
('F#4', 0.2), ('G4', 0.2), (None, 0.2),
('C4', 0.2), ('B4', 0.2), (None, 0.2),
('F#4', 0.2), ('G4', 0.2), (None, 0.2),
('B4', 0.2), ('Bb4', 0.5), (None, 0.6),
('A4', 0.2), ('G4', 0.2), ('E4', 0.2),
('D4', 0.2), ('E4', 0.2)]
try:
play(tune) # Execute the play function to start playing the tune
except KeyboardInterrupt:
# Handle KeyboardInterrupt for graceful termination
pass
Dieses Python-Skript spielt eine Melodie über einen passiven Summer ab, der an PWM 0 angeschlossen ist. Beim Ausführen passiert Folgendes:
Das Skript durchläuft eine vordefinierte Sequenz musikalischer Noten (
tune) und spielt jede Note für eine festgelegte Dauer ab.Während die Noten abgespielt werden, werden sie gleichzeitig in der Konsole ausgegeben, sodass eine visuelle Referenz angezeigt wird.
Die Melodie stoppt automatisch, sobald alle Noten abgespielt wurden. Während Pausen (wenn die Note
Noneist) erzeugt der Summer keinen Ton.Das Programm kann jederzeit mit
Ctrl+Csauber beendet werden.
Den Code verstehen
Bibliotheken importieren
Die Klasse
Buzzeraus der Bibliothekfusion_hatwird verwendet, um Töne zu erzeugen, undtime.sleepsorgt für die zeitlichen Abstände zwischen den Noten.from fusion_hat.modules import Buzzer from fusion_hat.pwm import PWM from time import sleep
Initialisierung des Summers
Der
Buzzerwird mit PWM0 verbunden, um Töne zu erzeugen.# Initialize a TonalBuzzer connected to PWM 0 tb = Buzzer(PWM('P0')) # Update this pin number based on your setup
Noten abspielen
Die Funktion
playdurchläuft eine Liste von Tupeln, die aus musikalischen Noten und deren Dauer bestehen. Jede Note wird für die angegebene Zeit abgespielt und danach kurz gestoppt.def play(tune): for note, duration in tune: print(note) # Output the current note being played tb.play(note,float(duration)) # Play the note on the buzzer tb.off() # Stop playing after the tune is complete
Definition der Melodie
Die Variable
tuneenthält eine Folge von Noten (z. B.'C#4') und deren Dauer (z. B. 0,2 Sekunden).tune = [ ('C#4', 0.2), ('D4', 0.2), (None, 0.2), ('Eb4', 0.2), ('E4', 0.2), (None, 0.6), ('F#4', 0.2), ('G4', 0.2), (None, 0.6), ('Eb4', 0.2), ('E4', 0.2), (None, 0.2), ('F#4', 0.2), ('G4', 0.2), (None, 0.2), ('C4', 0.2), ('B4', 0.2), (None, 0.2), ('F#4', 0.2), ('G4', 0.2), (None, 0.2), ('B4', 0.2), ('Bb4', 0.5), (None, 0.6), ('A4', 0.2), ('G4', 0.2), ('E4', 0.2), ('D4', 0.2), ('E4', 0.2) ]
Behandlung von Tastaturunterbrechungen
Der
try-except-Block sorgt dafür, dass das Programm sauber beendet wird, wenn es unterbrochen wird (z. B. mitCtrl+C).try: play(tune) except KeyboardInterrupt: pass
Fehlerbehebung
Kein Ton vom Summer
Ursache: Falsche GPIO-Pin-Verbindung oder inkompatibler Summer-Typ.
Lösung: Stellen Sie sicher, dass der TonalBuzzer mit PWM 0 verbunden ist.
Unterbrochener oder ruckelnder Ton
Ursache: Ungenaue Zeitsteuerung durch die
sleep()-Funktion.Lösung: Überprüfen Sie, ob die Notendauern in der Liste
tunepassend gewählt sind, um einen flüssigen Übergang zu gewährleisten.
Erweiterungsideen
Eigene Melodien
Erlauben Sie dem Benutzer, eine eigene Folge von Noten und Dauern einzugeben:
user_tune = [] while True: note = input("Enter a note (or 'stop' to finish): ") if note.lower() == 'stop': break duration = float(input("Enter duration for the note: ")) user_tune.append((note, duration)) play(user_tune)
Mehrere Melodien
Fügen Sie mehrere vordefinierte Melodien hinzu und lassen Sie den Benutzer auswählen, welche abgespielt werden soll:
tunes = { "tune1": [('C4', 0.5), ('D4', 0.5), (None, 0.5)], "tune2": [('G4', 0.3), ('A4', 0.3), (None, 0.3)] } choice = input("Choose a tune (tune1/tune2): ") play(tunes[choice])
Interaktion in Echtzeit
Verwenden Sie Taster oder die Tastatur, um Noten interaktiv abzuspielen und den Summer als einfaches Instrument zu verwenden.
Aneinanderreihen mehrerer Melodien
Mehrere Melodien können automatisch hintereinander abgespielt werden, um ein längeres Musikstück zu erzeugen.
Dynamische Geschwindigkeitsanpassung
Ermöglichen Sie dem Benutzer, die Wiedergabegeschwindigkeit dynamisch anzupassen, indem die Notendauern verändert werden:
speed_factor = float(input("Enter speed factor (e.g., 1.0 for normal, 0.5 for faster): ")) adjusted_tune = [(note, duration * speed_factor) for note, duration in tune] play(adjusted_tune)
Fazit
Dieses Projekt zeigt, wie ein passiver Summer zum Abspielen musikalischer Noten verwendet werden kann. Durch die Kombination von Hardware und Software lassen sich verschiedene Töne und Melodien erzeugen, die in interaktiven Projekten eingesetzt werden können.