.. note::
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 [|link_sf_facebook|] e unisciti oggi stesso!
.. _1.2.2_py_pi5:
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.
.. image:: ../python_pi5/img/1.2.2_passive_buzzer_list.png
.. raw:: html
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
============ ======== ======== ===
.. image:: ../python_pi5/img/1.2.2_passive_buzzer_schematic.png
Procedure Sperimentali
---------------------------
**Passo 1**: Costruisci il circuito. (Il buzzer passivo ha una scheda verde sul retro.)
.. image:: ../python_pi5/img/1.2.1_ActiveBuzzer_circuit.png
**Passo 2: Cambia directory.**
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python-pi5
**Passo 3: Esegui.**
.. raw:: html
.. code-block::
sudo python3 1.2.2_PassiveBuzzer.py
Eseguendo il codice, il buzzer riproduce un brano musicale.
.. warning::
Se compare l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, consulta :ref:`faq_soc`
**Codice**
.. note::
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.
.. raw:: html
.. code-block:: python
#!/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 ``TonalBuzzer`` dalla libreria ``gpiozero`` per controllare il buzzer e la funzione ``sleep`` dal modulo ``time`` per creare ritardi.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import TonalBuzzer
from time import sleep
#. Questa riga inizializza un oggetto ``TonalBuzzer`` sul pin GPIO 17.
.. code-block:: python
# Inizializza un TonalBuzzer collegato al pin GPIO 17
tb = TonalBuzzer(17) # Aggiorna il numero di pin in base alla tua configurazione
#. 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.
.. code-block:: python
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).
.. code-block:: python
# 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 blocco ``try``. Un'interruzione da tastiera (Ctrl+C) interromperà il programma in modo sicuro.
.. code-block:: python
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