Nota
Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti a noi?
Supporto tecnico esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e giveaway: Partecipa a giveaway e promozioni durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca [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
Per questo progetto, avremo bisogno dei seguenti componenti.
È decisamente conveniente acquistare un kit completo, ecco il link:
Nome |
COMPONENTI NEL KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK D’ACQUISTO |
|---|---|
Schema Elettrico
In questo esperimento, utilizziamo 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 diverse frequenze, il buzzer passivo emetterà suoni differenti; in questo modo, il buzzer riprodurrà 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 circuito verde sul retro.)
Passo 2: Cambia la directory.
cd ~/raphael-kit/python-pi5
Passo 3: Esegui.
sudo python3 1.2.2_PassiveBuzzer_zero.py
Il codice viene eseguito e il buzzer riproduce un brano musicale.
Avvertimento
Se viene visualizzato l’errore RuntimeError: Cannot determine SOC peripheral base address, fare riferimento a If gpiozero doesn’t work..
Code
Nota
Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima, devi andare nella directory del codice come raphael-kit/python-pi5. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.
#!/usr/bin/env python3
from gpiozero import TonalBuzzer
from time import sleep
# Inizializza un oggetto TonalBuzzer collegato al pin GPIO 17
tb = TonalBuzzer(17) # Aggiorna questo 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) # Visualizza la nota corrente in riproduzione
tb.play(note) # Riproduce la nota sul buzzer
sleep(float(duration)) # Attendi per la durata della nota
tb.stop() # Ferma la riproduzione dopo la fine della melodia
# Definisci 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 riproduzione della melodia
except KeyboardInterrupt:
# Gestisce l'interruzione da tastiera per una chiusura pulita del programma
pass
Spiegazione del Codice
Queste righe importano la classe
TonalBuzzerdalla libreriagpiozeroper il controllo del 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 questo numero di pin in base alla tua configurazione
La funzione
playitera su una lista di tuple che rappresentano note musicali e le loro durate. Ogni nota viene riprodotta per la durata specificata, e il buzzer si ferma dopo aver completato la 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) # Visualizza la nota corrente in riproduzione tb.play(note) # Riproduce la nota sul buzzer sleep(float(duration)) # Attendi per la durata della nota tb.stop() # Ferma la riproduzione dopo la fine della melodia
La melodia viene definita come una sequenza di note (frequenze) e durate (secondi).
# Definisci 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)viene chiamata all’interno di un bloccotry. Un”interruzione da tastiera(come Ctrl+C) fermerà il programma in modo pulito.try: play(tune) # Esegui la funzione play per avviare la riproduzione della melodia except KeyboardInterrupt: # Gestisce l'interruzione da tastiera per una chiusura pulita del programma pass