Nota

Ciao e benvenuto nella Community di Appassionati di SunFounder per Raspberry Pi, Arduino ed ESP32 su Facebook! Immergiti nel mondo di Raspberry Pi, Arduino ed ESP32 insieme a tanti altri appassionati.

Perché Unirsi?

  • Supporto da Esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci dei nuovi prodotti e a contenuti inediti.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a concorsi e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

1.2.2 Buzzer Passivo

Introduzione

In questo progetto, impareremo a far suonare un buzzer passivo per riprodurre musica.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/1.2.2_passive_buzzer_list.png

Schema Elettrico

In questo esperimento vengono utilizzati un buzzer passivo, un transistor NPN e una resistenza da 1k tra la base del transistor e il GPIO per proteggere il transistor.

Quando al GPIO17 vengono assegnate frequenze diverse, il buzzer passivo emetterà suoni differenti; in questo modo, il buzzer riproduce musica.

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

../_images/1.2.2_passive_buzzer_schematic.png

Procedure Sperimentali

Passo 1: Costruisci il circuito. (Il buzzer passivo ha una scheda verde sul retro.)

../_images/1.2.1_ActiveBuzzer_circuit.png

Passo 2: Cambia directory.

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

Passo 3: Esegui.

sudo python3 1.2.2_PassiveBuzzer.py

Eseguendo il codice, il buzzer riproduce un brano musicale.

Avvertimento

Se compare l’errore RuntimeError: Cannot determine SOC peripheral base address, consulta Se gpiozero non funziona.

Codice

Nota

Puoi Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice qui sotto. Prima di farlo, però, vai al percorso del codice sorgente, come davinci-kit-for-raspberry-pi/python-pi5. Dopo aver modificato il codice, potrai eseguirlo direttamente per vedere il risultato.

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

# Inizializza un TonalBuzzer collegato al pin GPIO 17
tb = TonalBuzzer(17)  # Aggiorna il numero di pin in base alla tua configurazione

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)  # Mostra in console la nota in riproduzione
        tb.play(note)  # Riproduce la nota con il buzzer
        sleep(float(duration))  # Ritarda per la durata della nota
    tb.stop()  # Interrompe la riproduzione al termine della melodia

# Definisce una melodia come sequenza di note e durate
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)  # Esegui la funzione play per avviare la melodia

except KeyboardInterrupt:
    # Gestisce l'interruzione da tastiera per terminare il programma in modo sicuro
    pass

Spiegazione del Codice

  1. Queste righe importano la classe TonalBuzzer dalla libreria gpiozero per controllare il buzzer e la funzione sleep dal modulo time per creare ritardi.

    #!/usr/bin/env python3
    from gpiozero import TonalBuzzer
    from time import sleep
    
  2. Questa riga inizializza un oggetto TonalBuzzer sul pin GPIO 17.

    # Inizializza un TonalBuzzer collegato al pin GPIO 17
    tb = TonalBuzzer(17)  # Aggiorna il numero di pin in base alla tua configurazione
    
  3. La funzione play itera su una lista di tuple rappresentanti note musicali e le loro durate. Ogni nota viene riprodotta per la durata specificata e il buzzer si ferma al termine della melodia.

    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)  # Mostra in console la nota in riproduzione
            tb.play(note)  # Riproduce la nota con il buzzer
            sleep(float(duration))  # Ritarda per la durata della nota
        tb.stop()  # Interrompe la riproduzione al termine della melodia
    
  4. La melodia è definita come sequenza di note (frequenza) e durate (secondi).

    # Definisce una melodia come sequenza di note e durate
    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. La funzione play(tune) è chiamata all’interno di un blocco try. Un’interruzione da tastiera (Ctrl+C) interromperà il programma in modo sicuro.

    try:
        play(tune)  # Esegui la funzione play per avviare la melodia
    
    except KeyboardInterrupt:
        # Gestisce l'interruzione da tastiera per terminare il programma in modo sicuro
        pass