Nota

Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino e ESP32 con altri appassionati.

Perché unirti?

  • Supporto Esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a giveaway e promozioni festive.

👉 Sei pronto per esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

21. Suono della Sirena

In questo progetto Arduino, esploreremo come creare un sistema di sirene attraverso la programmazione e l’integrazione di hardware elettronico.

I suoni delle sirene utilizzano un modello di frequenza e tonalità specifico, caratterizzato da rapide salite e discese di tonalità, facilmente riconoscibili e distinti dagli altri suoni quotidiani. Questi cambiamenti di tonalità possono evocare un senso di urgenza, poiché sono spesso associati a segnali di allarme o situazioni pericolose in natura.

Modificando la frequenza di un buzzer passivo, possiamo simulare le caratteristiche tipiche di una sirena con toni ascendenti e discendenti.

In questa lezione imparerai:

  • Come funzionano i buzzer passivi

  • Come pilotare un buzzer passivo utilizzando la funzione tone()

  • Come usare il ciclo for nella programmazione

  • Come implementare un suono di sirena

Comprendere le Proprietà del Suono

Il suono è un fenomeno ondulatorio che si propaga attraverso mezzi come l’aria, l’acqua o i solidi sotto forma di energia vibrante. Comprendere le proprietà fisiche del suono ci aiuta a capire e controllare meglio come esso si comporta in diversi ambienti. Ecco alcune delle principali proprietà fisiche del suono:

_images/7_siren.png

Frequenza

La frequenza si riferisce al numero di cicli di vibrazione per unità di tempo, solitamente espressa in Hertz (Hz). La frequenza determina l’altezza del suono: frequenze più alte producono suoni più acuti, frequenze più basse suoni più gravi. Il range udibile dall’uomo è di circa 20 Hz a 20.000 Hz.

Ampiezza L’ampiezza è l’intensità della vibrazione di un’onda sonora e determina il volume del suono. Una maggiore ampiezza corrisponde a un suono più forte, una minore ampiezza a un suono più debole. In fisica, l’ampiezza è solitamente correlata direttamente all’energia dell’onda sonora, mentre nel linguaggio comune utilizziamo spesso i decibel (dB) per descrivere il volume del suono.

Timbro Il timbro descrive la «qualità» o «colore» del suono, permettendoci di distinguere suoni provenienti da diverse fonti, anche se hanno la stessa altezza e volume. Ad esempio, anche se un violino e un pianoforte suonano la stessa nota, possiamo distinguerli dal timbro.

In questo progetto, ci concentreremo sull’influenza della frequenza sul suono.

Costruire il Circuito

Componenti Necessari

1 * Arduino Uno R3

1 * Breadboard

1 * Buzzer Passivo

Cavi di Collegamento

list_uno_r3

list_breadboard

list_passive_buzzer

list_wire

1 * Cavo USB

list_usb_cable

Costruzione Passo-Passo

Nelle lezioni precedenti, abbiamo utilizzato un buzzer attivo. In questa lezione utilizzeremo un buzzer passivo. Il circuito è lo stesso, ma l’approccio di codifica per pilotarlo è diverso.

  1. Trova un buzzer passivo, che ha un circuito esposto sul retro.

_images/7_beep_2.png
  1. Anche se c’è un segno “+” sul buzzer passivo, non è un dispositivo polarizzato. Inseriscilo in qualsiasi direzione nei fori 15F e 18F della breadboard.

_images/16_morse_code_buzzer.png
  1. Collega uno dei pin del buzzer passivo al pin GND di Arduino Uno R3.

_images/16_morse_code_gnd.png
  1. Collega l’altro pin del buzzer passivo al pin 5V di Arduino Uno R3. Il buzzer non emetterà alcun suono, a differenza di un buzzer attivo, che invece suonerebbe se collegato in questo modo.

_images/16_morse_code_5v.png
  1. Ora, rimuovi il filo inserito nel pin 5V e inseriscilo nel pin 9 di Arduino Uno R3, in modo che il buzzer possa essere controllato tramite codice.

_images/16_morse_code.png

Creare il Codice - Far Suonare il Buzzer Passivo

Come abbiamo imparato durante il collegamento, fornire semplicemente alimentazione alta e bassa a un buzzer passivo non lo farà suonare. Nella programmazione Arduino, la funzione tone() viene utilizzata per controllare un buzzer passivo o altri dispositivi audio per generare un suono a una frequenza specificata.

  • tone(): Genera un’onda quadra alla frequenza specificata (e con un ciclo di lavoro del 50%) su un pin. Può essere specificata una durata, altrimenti l’onda continua finché non viene chiamata noTone().

Sintassi

  • tone(pin, frequency)

  • tone(pin, frequency, duration)

Parametri

  • pin: il pin di Arduino su cui generare il suono.

  • frequency: la frequenza del suono in Hertz. Tipi di dati consentiti: unsigned int.

  • duration: la durata del suono in millisecondi (opzionale). Tipi di dati consentiti: unsigned long.

Restituisce

Nessun valore

  1. Apri l’Arduino IDE e inizia un nuovo progetto selezionando «New Sketch» dal menu «File».

  2. Salva il tuo sketch come Lesson21_Tone utilizzando Ctrl + S o cliccando su «Save».

  3. Prima di tutto, definisci il pin per il buzzer.

const int buzzerPin = 9;  // Assegna il pin 9 alla costante per il buzzer

void setup() {
    // inserisci qui il tuo codice di configurazione, eseguito una sola volta:
}
  1. Per comprendere appieno l’uso della funzione tone(), la scriviamo all’interno di void setup(), così che il buzzer emetta un suono a una frequenza specifica per una durata determinata.

const int buzzerPin = 9;  // Assegna il pin 9 alla costante per il buzzer

void setup() {
    // inserisci qui il tuo codice di configurazione, eseguito una sola volta:
    tone(buzzerPin, 1000, 100);  // Accendi il buzzer a 1000 Hz per una durata di 100 millisecondi
}

void loop() {
    // inserisci qui il tuo codice principale, eseguito ripetutamente:
}
  1. Ora puoi caricare il codice su Arduino Uno R3; sentirai un breve «beep» dal buzzer passivo, poi resterà in silenzio.

Domande

  1. Se modifichi il codice e sposti i collegamenti sui pin 7 o 8, che non sono pin PWM, il buzzer emetterà comunque suono? Prova e scrivi la tua risposta nel manuale.

  2. Per esplorare come frequency e duration nella funzione tone(pin, frequency, duration) influenzano il suono del buzzer, modifica il codice in base a due condizioni e annota le osservazioni nel manuale:

  • Mantenendo frequency a 1000, aumenta gradualmente duration da 100, 500 a 1000. Come cambia il suono del buzzer e perché?

  • Mantenendo duration a 100, aumenta gradualmente frequency da 1000, 2000 a 5000. Come cambia il suono del buzzer e perché?

Creazione del Codice - Emettere un Suono di Sirena

Abbiamo già imparato come far emettere un suono a un buzzer e abbiamo capito come frequenza e durata influenzino il suono. Ora, se vogliamo far emettere al buzzer un suono di sirena che sale da un tono basso a uno alto, come possiamo procedere?

Dalle nostre esplorazioni precedenti, sappiamo che la funzione tone(pin, frequency) permette a un buzzer passivo di emettere un suono. Aumentando gradualmente la frequency, il tono del suono diventa più acuto. Implementiamo questo concetto con del codice.

  1. Apri lo sketch che hai salvato in precedenza, Lesson21_Tone.

  2. Seleziona “Salva con nome…” dal menu “File” e rinominalo Lesson21_Siren_Sound. Clicca su «Salva».

  3. Scrivi la funzione tone() all’interno di void loop() e imposta tre frequenze diverse. Per sentire chiaramente la differenza tra i suoni, utilizza la funzione delay() per separare i vari suoni.

const int buzzerPin = 9;  // Assegna il pin 9 alla costante per il buzzer

void setup() {
    // inserisci qui il tuo codice di configurazione, eseguito una sola volta:
}

void loop() {
    // inserisci qui il tuo codice principale, eseguito ripetutamente:
    tone(buzzerPin, 100);  // Accendi il buzzer a 100 Hz
    delay(500);
    tone(buzzerPin, 300);  // Accendi il buzzer a 300 Hz
    delay(500);
    tone(buzzerPin, 600);  // Accendi il buzzer a 600 Hz
    delay(500);
}
  1. A questo punto, puoi caricare il codice su Arduino Uno R3 e sentirai il buzzer ripetere tre toni diversi.

  2. Per ottenere una salita di tono più fluida, dobbiamo impostare intervalli di frequency più brevi, ad esempio un intervallo di 10, partendo da 100, 110, 120… fino a 1000. Possiamo scrivere il codice seguente.

void loop() {
    // inserisci qui il tuo codice principale, eseguito ripetutamente:
    tone(buzzerPin, 100);  // Accendi il buzzer a 100 Hz
    delay(500);
    tone(buzzerPin, 110);  // Accendi il buzzer a 110 Hz
    delay(500);
    tone(buzzerPin, 120);  // Accendi il buzzer a 120 Hz
    delay(500);
    tone(buzzerPin, 130);  // Accendi il buzzer a 130 Hz
    delay(500);
    tone(buzzerPin, 140);  // Accendi il buzzer a 140 Hz
    delay(500);
    tone(buzzerPin, 150);  // Accendi il buzzer a 150 Hz
    delay(500);
    tone(buzzerPin, 160);  // Accendi il buzzer a 160 Hz
    delay(500);
    ...
}
  1. Noterai che se volessi davvero scrivere fino a 1000, questo codice sarebbe lungo oltre duecento righe. A questo punto, puoi utilizzare l’istruzione for, che viene impiegata per ripetere un blocco di istruzioni racchiuso tra parentesi graffe.

    • for: L’istruzione for è utile per qualsiasi operazione ripetitiva e viene spesso utilizzata in combinazione con array per operare su raccolte di dati o pin. Viene solitamente usato un contatore di incremento per proseguire e terminare il ciclo.

    Sintassi

    for (inizializzazione; condizione; incremento) {
        // istruzione(i);
    }
    

    Parametri

    • inizializzazione: avviene per prima e solo una volta.

    • condizione: ogni volta che il ciclo viene eseguito, la condizione viene testata; se è vera, il blocco di istruzioni e l’incremento vengono eseguiti, dopodiché la condizione viene testata di nuovo. Quando la condizione diventa falsa, il ciclo termina.

    • incremento: viene eseguito ogni volta che la condizione è vera.

_images/for_loop.png
  1. Ora modifica la funzione void loop() come mostrato di seguito, dove freq inizia da 100 e aumenta di 10 fino a 1000.

void loop() {
    // Aumenta gradualmente il tono
    for (int freq = 100; freq <= 1000; freq += 10) {
        tone(buzzerPin, freq);  // Emetti un tono
        delay(20);              // Attendi prima di cambiare la frequenza
    }
}
  1. Successivamente, lascia che freq parta da 1000 e diminuisca di 10 fino a 100, così potrai sentire il suono del buzzer passare da basso ad alto e poi da alto a basso, simulando così un suono di sirena.

void loop() {
    // Aumenta gradualmente il tono
    for (int freq = 100; freq <= 1000; freq += 10) {
        tone(buzzerPin, freq);  // Emetti un tono
        delay(20);              // Attendi prima di cambiare la frequenza
    }

    // Diminuisci gradualmente il tono
    for (int freq = 1000; freq >= 100; freq -= 10) {
        tone(buzzerPin, freq);  // Emetti un tono
        delay(20);              // Attendi prima di cambiare la frequenza
    }
}
  1. Ecco il codice completo. Ora puoi cliccare su «Upload» per caricare il codice sull’Arduino Uno R3.

const int buzzerPin = 9;  // Assegna il pin 9 alla costante per il buzzer

void setup() {
    // inserisci qui il tuo codice di configurazione, eseguito una sola volta:
}

void loop() {
    // Aumenta gradualmente il tono
    for (int freq = 100; freq <= 1000; freq += 10) {
        tone(buzzerPin, freq);  // Emetti un tono
        delay(20);              // Attendi prima di cambiare la frequenza
    }

    // Diminuisci gradualmente il tono
    for (int freq = 1000; freq >= 100; freq -= 10) {
        tone(buzzerPin, freq);  // Emetti un tono
        delay(20);              // Attendi prima di cambiare la frequenza
    }
}
  1. Infine, ricorda di salvare il codice e di mettere in ordine la tua postazione di lavoro.

Riassunto

In questa lezione, abbiamo esplorato come utilizzare un Arduino e un buzzer passivo per simulare un suono di sirena. Discutendo delle proprietà fisiche di base del suono, come la frequenza e il tono, abbiamo imparato come questi elementi influenzano la percezione e l’effetto del suono. Attraverso attività pratiche, non solo abbiamo imparato a costruire circuiti, ma abbiamo anche padroneggiato la programmazione con la funzione tone() su Arduino per controllare la frequenza e la durata del suono, ottenendo così la simulazione di un suono di sirena che sale e scende di tono.