.. note:: Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirsi a noi?** - **Supporto esperto**: 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**: Accedi anticipatamente alle nuove presentazioni di prodotti e anteprime esclusive. - **Sconti speciali**: Approfitta di sconti esclusivi sui nostri nuovi prodotti. - **Promozioni festive e omaggi**: Partecipa a promozioni speciali e concorsi durante le festività. 👉 Sei pronto per esplorare e creare insieme a noi? Clicca [|link_sf_facebook|] e unisciti subito! 1.2.1 Buzzer Attivo ====================== Introduzione --------------- In questa lezione impareremo a far suonare un buzzer attivo tramite un transistor PNP. Componenti ------------- .. image:: img/list_1.2.1.png Principio ------------ **Buzzer** Il buzzer è un tipo di dispositivo sonoro elettronico con una struttura integrata, alimentato in corrente continua (DC). È ampiamente usato in computer, stampanti, fotocopiatrici, allarmi, giocattoli elettronici, dispositivi elettronici per auto, telefoni, timer e altri dispositivi elettronici o sonori. I buzzer possono essere di due tipi: attivi e passivi (vedi immagine seguente). Capovolgendo il buzzer con i pin rivolti verso l’alto, noterai che quello con una scheda verde è passivo, mentre quello avvolto in nastro nero è attivo. La differenza tra un buzzer attivo e uno passivo: .. image:: img/image101.png :width: 400 :align: center La differenza principale è che un buzzer attivo ha una sorgente oscillante integrata e quindi emette un suono quando viene alimentato. Un buzzer passivo, invece, richiede segnali in forma d'onda quadra con una frequenza tra 2K e 5K per funzionare, in quanto privo di sorgente oscillante interna. Di solito, il buzzer attivo è più costoso a causa della sua struttura interna. Di seguito trovi il simbolo elettrico di un buzzer. Ha due pin con polarità positiva e negativa. Il simbolo + sulla superficie rappresenta l'anodo, mentre l'altro pin è il catodo. .. image:: img/image102.png :width: 150 :align: center Puoi riconoscere i pin del buzzer: il pin più lungo è l'anodo, mentre il più corto è il catodo. È importante non invertire le polarità per evitare che il buzzer non emetta suono. Schema Elettrico --------------------- In questo esperimento, usiamo un buzzer attivo, un transistor PNP e una resistenza da 1k tra la base del transistor e il GPIO per proteggerlo. Quando il GPIO17 del Raspberry Pi è impostato a basso livello (0V) tramite il programma, il transistor entra in conduzione a causa della saturazione di corrente, facendo suonare il buzzer. Al contrario, quando il GPIO è impostato a livello alto, il transistor si spegne e il buzzer smette di suonare. .. image:: img/image332.png Procedura Sperimentale ------------------------ **Passo 1:** Monta il circuito. (Fai attenzione ai poli del buzzer: il pin con l’etichetta + è il polo positivo, mentre l'altro è il polo negativo.) .. image:: img/image104.png :width: 800 Per Utenti del Linguaggio C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Passo 2**: Apri il file del codice. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/1.2.1/ **Passo 3**: Compila il codice. .. raw:: html .. code-block:: gcc 1.2.1_ActiveBuzzer.c -lwiringPi **Passo 4**: Esegui il file eseguibile. .. raw:: html .. code-block:: sudo ./a.out Eseguito il codice, il buzzer emetterà un suono. .. note:: Se, dopo aver eseguito il codice, non funziona o appare un messaggio di errore: "wiringPi.h: No such file or directory", fai riferimento a :ref:`faq_c_nowork`. **Codice** .. code-block:: c #include #include #define BeepPin 0 int main(void){ if(wiringPiSetup() == -1){ //se l'inizializzazione di wiring fallisce, stampa un messaggio a schermo printf("setup wiringPi failed !"); return 1; } pinMode(BeepPin, OUTPUT); //imposta GPIO0 come output while(1){ //attiva il buzzer printf("Buzzer on\n"); digitalWrite(BeepPin, LOW); delay(100); printf("Buzzer off\n"); //spegni il buzzer digitalWrite(BeepPin, HIGH); delay(100); } return 0; } **Spiegazione del Codice** .. code-block:: c digitalWrite(BeepPin, LOW); In questo esperimento utilizziamo un buzzer attivo, che emette automaticamente un suono quando collegato alla corrente continua. Questo sketch imposta la porta I/O a livello basso (0V), gestendo così il transistor per far suonare il buzzer. .. code-block:: c digitalWrite(BeepPin, HIGH); Impostando la porta I/O a livello alto (3,3V), il transistor non viene alimentato e il buzzer non emette suono. Per Utenti del Linguaggio Python ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Passo 2**: Apri il file del codice. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python **Passo 3**: Esegui. .. raw:: html .. code-block:: sudo python3 1.2.1_ActiveBuzzer.py Eseguito il codice, il buzzer emetterà un suono. **Codice** .. note:: Puoi **Modificare/Reimpostare/Copiare/Eseguire/Arrestare** il codice qui sotto. Prima di farlo, devi accedere al percorso del codice sorgente come ``davinci-kit-for-raspberry-pi/python``. .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time # Imposta il pin #17 come pin del buzzer BeepPin = 17 def setup(): # Imposta le modalità GPIO con la numerazione BCM GPIO.setmode(GPIO.BCM) # Imposta il pin del Led come output e il livello iniziale su High (3.3v) GPIO.setup(BeepPin, GPIO.OUT, initial=GPIO.HIGH) def main(): while True: # Accensione del Buzzer print ('Buzzer On') GPIO.output(BeepPin, GPIO.LOW) time.sleep(0.1) # Spegnimento del Buzzer print ('Buzzer Off') GPIO.output(BeepPin, GPIO.HIGH) time.sleep(0.1) def destroy(): # Spegne il buzzer GPIO.output(BeepPin, GPIO.HIGH) # Rilascia le risorse GPIO.cleanup() # Se esegui questo script direttamente, avvia: if __name__ == '__main__': setup() try: main() # Quando viene premuto 'Ctrl+C', viene eseguita la funzione destroy() except KeyboardInterrupt: destroy() **Spiegazione del Codice** .. code-block:: python GPIO.output(BeepPin, GPIO.LOW) Imposta il pin del buzzer a livello basso per far emettere suono al buzzer. .. code-block:: python time.sleep(0.1) Attendi 0,1 secondi. Modifica la frequenza di commutazione cambiando questo parametro. .. note:: Non si tratta della frequenza del suono. Il buzzer attivo non può cambiare la frequenza del suono. .. code-block:: python GPIO.output(BeepPin, GPIO.HIGH) Spegne il buzzer. Immagine del Fenomeno --------------------------- .. image:: img/image105.jpeg