.. note::
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 [|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
------------------------------
Per questo progetto, avremo bisogno dei seguenti componenti.
.. image:: ../python_pi5/img/1.2.2_passive_buzzer_list.png
È decisamente conveniente acquistare un kit completo, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- COMPONENTI NEL KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Puoi anche acquistarli separatamente dai link sottostanti.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUZIONE AI COMPONENTI
- LINK D'ACQUISTO
* - :ref:`cpn_gpio_extension_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_buzzer`
- |link_passive_buzzer_buy|
* - :ref:`cpn_transistor`
- |link_transistor_buy|
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
============ ======== ======== ===
.. image:: ../python_pi5/img/1.2.2_passive_buzzer_schematic.png
Procedure Sperimentali
---------------------------
**Passo 1:** Costruisci il circuito. (Il buzzer passivo ha una scheda circuito verde sul retro.)
.. image:: ../python_pi5/img/1.2.2_PassiveBuzzer_circuit.png
**Passo 2: Cambia la directory.**
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Passo 3: Esegui.**
.. raw:: html
.. code-block::
sudo python3 1.2.2_PassiveBuzzer_zero.py
Il codice viene eseguito e il buzzer riproduce un brano musicale.
.. warning::
Se viene visualizzato l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, fare riferimento a :ref:`faq_soc`.
**Code**
.. note::
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.
.. raw:: html
.. code-block:: python
#!/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 ``TonalBuzzer`` dalla libreria ``gpiozero`` per il controllo del 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 questo numero di pin in base alla tua configurazione
#. La funzione ``play`` itera 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.
.. 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) # 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).
.. code-block:: python
# 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 blocco ``try``. Un'``interruzione da tastiera`` (come Ctrl+C) fermerà il programma in modo pulito.
.. code-block:: python
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