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.
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 |
Procedure Sperimentali
Passo 1: Costruisci il circuito. (Il buzzer passivo ha una scheda verde sul retro.)
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
Queste righe importano la classe
TonalBuzzerdalla libreriagpiozeroper controllare il buzzer e la funzionesleepdal modulotimeper creare ritardi.#!/usr/bin/env python3 from gpiozero import TonalBuzzer from time import sleep
Questa riga inizializza un oggetto
TonalBuzzersul pin GPIO 17.# Inizializza un TonalBuzzer collegato al pin GPIO 17 tb = TonalBuzzer(17) # Aggiorna il numero di pin in base alla tua configurazione
La funzione
playitera 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
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)]
La funzione
play(tune)è chiamata all’interno di un bloccotry. 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