1.2.2 Passiver Summer

Einführung

In diesem Projekt werden wir lernen, wie man einen passiven Summer dazu bringt, Musik zu spielen.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/1.2.2_passive_buzzer_list.png

Schaltplan

In diesem Experiment werden ein passiver Summer, ein PNP-Transistor und ein 1k-Widerstand zwischen der Basis des Transistors und GPIO verwendet, um den Transistor zu schützen.

Wenn GPIO17 unterschiedliche Frequenzen erhält, gibt der passive Summer unterschiedliche Töne von sich; auf diese Weise spielt der Summer Musik.

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

../_images/1.2.2_passive_buzzer_schematic.png

Experimentelle Verfahren

Schritt 1: Bauen Sie den Schaltkreis auf. (Der Passive Summer mit grüner Platine auf der Rückseite.)

../_images/1.2.2_PassiveBuzzer_circuit.png

Schritt 2: Verzeichnis wechseln.

cd ~/davinci-kit-for-raspberry-pi/python-pi5

Schritt 3: Ausführen.

sudo python3 1.2.2_PassiveBuzzer_zero.py

Der Code wird ausgeführt, der Summer spielt ein Musikstück.

Code

Bemerkung

Sie können den unten stehenden Code Modifizieren/Zurücksetzen/Kopieren/Ausführen/Stoppen. Aber bevor Sie das tun, müssen Sie zum Quellcode-Pfad wie davinci-kit-for-raspberry-pi/python-pi5 gehen. Nachdem Sie den Code geändert haben, können Sie ihn direkt ausführen, um die Auswirkungen zu sehen.

#!/usr/bin/env python3
from gpiozero import TonalBuzzer
from time import sleep

# Initialisieren Sie einen TonalBuzzer am GPIO-Pin 17
tb = TonalBuzzer(17)  # Aktualisieren Sie diese Pinnummer basierend auf Ihrer Einrichtung

def play(tune):
    """
    Spielen Sie eine musikalische Melodie mit dem Summer.
    :param tune: Liste von Tupeln (Note, Dauer), wobei jedes Tupel eine Note und ihre Dauer darstellt.
    """
    for note, duration in tune:
        print(note)  # Aktuell gespielte Note ausgeben
        tb.play(note)  # Note auf dem Summer spielen
        sleep(float(duration))  # Verzögerung für die Dauer der Note
    tb.stop()  # Stoppen Sie das Spielen, nachdem die Melodie beendet ist

# Definieren Sie eine musikalische Melodie als eine Folge von Noten und Dauern
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)  # Führen Sie die Play-Funktion aus, um die Melodie abzuspielen

except KeyboardInterrupt:
    # Tastaturunterbrechung für eine elegante Beendigung behandeln
    pass

Code-Erklärung

  1. Diese Zeilen importieren die Klasse TonalBuzzer aus der Bibliothek gpiozero für die Summersteuerung und die Funktion sleep aus dem Modul time für Verzögerungen.

    #!/usr/bin/env python3
    from gpiozero import TonalBuzzer
    from time import sleep
    
  2. Diese Zeile initialisiert ein TonalBuzzer-Objekt am GPIO-Pin 17.

    # Initialisieren Sie einen TonalBuzzer am GPIO-Pin 17
    tb = TonalBuzzer(17)  # Aktualisieren Sie diese Pinnummer basierend auf Ihrer Einrichtung
    
  3. Die Funktion play iteriert über eine Liste von Tupeln, die musikalische Noten und ihre Dauern darstellen. Jede Note wird für ihre festgelegte Dauer gespielt, und der Summer stoppt nach Abschluss der Melodie.

    def play(tune):
        """
        Spielen Sie eine musikalische Melodie mit dem Summer.
        :param tune: Liste von Tupeln (Note, Dauer), wobei jedes Tupel eine Note und ihre Dauer darstellt.
        """
        for note, duration in tune:
            print(note)  # Aktuell gespielte Note ausgeben
            tb.play(note)  # Note auf dem Summer spielen
            sleep(float(duration))  # Verzögerung für die Dauer der Note
        tb.stop()  # Stoppen Sie das Spielen, nachdem die Melodie beendet ist
    
  4. Die Melodie ist definiert als eine Abfolge von Noten (Frequenzen) und Dauern (Sekunden).

    # Definieren Sie eine musikalische Melodie als eine Folge von Noten und Dauern
    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)]
    
  5. Die Funktion play(tune) wird in einem try-Block aufgerufen. Eine KeyboardInterrupt (wie Ctrl+C) stoppt das Programm auf elegante Weise.

    try:
        play(tune)  # Führen Sie die Play-Funktion aus, um die Melodie abzuspielen
    
    except KeyboardInterrupt:
        # Tastaturunterbrechung für eine elegante Beendigung behandeln
        pass