Quando progettiamo un impianto di automazione abbiamo quasi sempre bisogno di avvisare l’utente di uno stato o di un’anomalia. Oltre alle classiche spie luminose, un modo immediato per “farsi sentire” è impiegare un buzzer, noto colloquialmente come cicalino. Questo piccolo attuatore trasforma un segnale elettrico in un impulso sonoro che può variare da un semplice beep continuo a brevi toni di diversa frequenza.
Tipologie principali di buzzer
Attivo
Contiene un oscillatore interno che genera automaticamente la frequenza fissa non appena viene alimentato.
Con Arduino basta portare il pin di alimentazione a livello HIGH/LOW per abilitare o silenziare il suono.
Passivo
Non possiede oscillatore: necessita di un’onda quadra esterna per farlo vibrare.
Arduino può pilotarlo con PWM (analogWrite) o con la funzione tone() per scegliere la frequenza desiderata.
Tecnologie costruttive
I buzzer – siano essi attivi o passivi – possono realizzarsi con due differenti principi fisici:
Magnetici
una bobina varia il campo magnetico e fa oscillare una sottile membrana metallica.
Piezoelettrici un disco di materiale piezo si deforma quando riceve tensione, generando la vibrazione acustica.
La scelta fra le due tecnologie dipende principalmente da:
Segnale di pilotaggio disponibile (continua, PWM, ampiezza)
Pressione sonora richiesta (volume)
Spazio e forma concessi dal progetto
Come funziona un buzzer attivo
All’interno è presente un piccolo circuito oscillatore che, alimentato in continua, fa variare il campo magnetico di una bobina. La bobina è rigidamente accoppiata a una membrana, la quale vibra alla frequenza impostata dal circuito e produce un suono costante. In pratica: lo accendiamo – suona; lo spegniamo – tace.
Dati tecnici
Tensione nominale: 6V DC
Tensione di esercizio: 4-8V DC
Corrente nominale: < 30mA
Tipo di suono: segnale acustico continuo
Frequenza di risonanza: ~2300 Hz
Come funziona un buzzer passivo
Il buzzer passivo è sprovvisto di oscillatore e si comporta come un piccolo altoparlante: emette il tono dell’esatta frequenza del segnale che riceve. Con Arduino possiamo quindi:
La modulazione di larghezza d’impulso, o PWM (Pulse Width Modulation), è una tecnica che permette di ottenere effetti analogici usando mezzi digitali. Il controllo digitale genera un’onda quadra, un segnale che passa continuamente da acceso (ON) a spento (OFF). Variando la frazione di tempo in cui il segnale rimane acceso (alto) rispetto a quella in cui rimane spento (basso), è possibile simulare tensioni intermedie tra lo 0 V (spento) e i 5 V (acceso al 100 %). Il periodo in cui il segnale resta acceso si chiama larghezza dell’impulso. Modificando (ovvero modulando) questa larghezza si ottengono valori analogici diversi. Se la commutazione ON/OFF avviene abbastanza velocemente, il segnale risulta percepito come una tensione “media” continua compresa tra 0 V e 5 V.
Questo segnale PWM può dunque essere usato per controllare con facilità un buzzer passivo.
Per generare segnali PWM con Arduino si utilizza la funzione analogWrite(), mentre digitalWrite() produce solo segnali in corrente continua (DC).
Sulla tua scheda ci sono sei pin digitali contrassegnati dal simbolo “~” (tilde), che indica la capacità di gestire un segnale PWM: 3, 5, 6, 9, 10, 11. Questi sono chiamati pin PWM.
Collegamenti
Come abbiamo detto precedentemente Il buzzer del kit è passivo: non produce autonomamente il tono, ma vibra quando riceve un’onda quadra. Con analogWrite() inviate un’onda PWM; variando il duty-cycle (0-255) variate il volume.
I potenziometri sono tra i resistori variabili più diffusi la cui legge di variazione della resistenza dipende da una grandezza meccanica (generalmente la rotazione di un albero, in qualche caso lo spostamento rettilineo di un cursore).
I resistori variabili sono schematicamente indicati con uno dei due simboli riportati di seguito:
Un resistore variabile è caratterizzato dal suo valore ohmico esistente tra i due terminali fissi; esso può essere utilizzato all’interno di un circuito in due modi come reostato, utilizzato come regolatore di corrente o come potenziometro utilizzato come regolatore di tensione, in questa lezione ne vedremo l’utilizzo come potenziometro.
Non tutti i potenziometri sono uguali, nei potenziometri “logaritmici” (usati negli amplificatori audio) la variazione di resistenza segue una curva esponenziale per meglio adattarsi alla percezione umana del volume.
Obiettivi di questa lezione
Comprendere il funzionamento del potenziometro come partitore di tensione variabile.
Collegare correttamente il modulo Potentiometer Grove allo shield Arduino Sensor Kit.
Misurare la posizione del cursore con analogRead() e convertire in un valore all’interno di un range fissato.
Utilizzare l’istruzione di controllo di flusso IF-THEN-ELSE.
Teoria di base
Il microcontrollore ATmega328 è dotato si 6 ADC (Analog to Digital Converter – Convertitori Analogici Digitali)
Gli ingressi analogici leggono valori compresi tra 0 e 5 volt
La risoluzione dei valori convertiti in digitale è di 10 bit (1024 valori)
Ogni bit equivale a valori di tensione pari a 5/1024 = 4,8 mV che è la più piccola misura di tensione che si può rilevare
Le grandezze fisiche del mondo reale sono di tipo analogico ed Arduino dispone di una serie di ingressi adibiti alla lettura di grandezze di tipo analogico, che come dettagliato nella lezione 1, vengono poi convertire dal microcontrollore in grandezze di tipo digitale.
Le variazioni di grandezze di tipo analogico vengono lette da Arduino come variazioni di tensione sugli ingressi analogici.
Un sensore generico quindi, connesso sui pin analogici fornirà una tensione che sarà funzione della grandezza fisica misurata.
Per poter simulare la variazione di tensione e quindi studiare il comportamento di un generico sensore e capire come leggere valori analogici, utilizzeremo in questa fase un potenziometro o un trimmer, componente elettronico che consente di variare la tensione presente ai suoi capi.
A distanza di qualche mese riprendo le mie brevi lezioni sull’uso dell’Arduino Sensor Kit, mi dispiace non stato celere nel produrre altre lezioni, ma gli impegni lavorativi mi hanno parecchio coinvolto.
Come già avevo avuto modo di segnalare nelle precedenti lezioni, per la realizzazione di queste guide prendo come riferimento l’indice presente sul sito Arduino e su quella traccia realizzo lezioni un po’ più approfondite che mi permettono poi di strutturare una lezione di laboratorio di circa due ore di attività.
Giusto per non far “arrabbiare” nessuno — mi riferisco a chi potrebbe critica le modalità con cui vengono presentati alcuni argomenti di elettronica — ricordo che queste lezioni sono dedicate a chi non ha mai affrontato lo studio dell’elettronica (neofiti o studenti della secondaria di primo grado e studenti dei primi due anni della scuola superiore), pertanto alcuni concetti richiedono chiarimenti e inevitabili semplificazioni, che consentiranno di riprendere gli stessi argomenti con maggiore facilità quando le competenze teoriche saranno più solide.
Gli obiettivi di questa terza lezione sono:
comprendere come funziona un pulsante a livello elettrico e meccanico.
sviluppare sketch via via più complessi:
accensione di un LED alla pressione del pulsante;
Indicazione dello stato del LED sulla SerialMonitor;
cicli di blink avviati da pulsante;
cicli di blink avviati da pulsante e segnalazione del numero di cicli.
Per lo svolgimento di questa esercitazione abbiamo necessità solamente dell’Arduino Sensor Kit ed utilizzeremo:
Da tempo avevo “nel pennino” un progetto che ancora non ho avuto modo di sviluppare pienamente: la realizzazione di una valigetta STEAM pensata per attività di Making didattico da utilizzare in più discipline.
Ora, grazie all’evoluzione di EduRobot MicroMoto, il progetto sta prendendo forma concreta.
Sto lavorando alla progettazione di una nuova versione di MicroMoto, realizzata in compensato: una struttura più solida e resistente rispetto alla versione precedente in cartone.
Ogni faccia del parallelepipedo è preforata, permettendo un’elevata espandibilità: sarà possibile collegare facilmente componenti elettronici, sensori, attuatori, elementi meccanici e strutturali, trasformando il robot di base in molteplici configurazioni differenti.
Questa nuova versione non sarà un oggetto a sé stante, ma il primo modulo di un progetto più ampio: una valigetta modulare STEAM che raccoglierà componenti, strumenti ed esperimenti pensati per integrare varie discipline — dall’elettronica alla meccanica, dalla fisica alla programmazione.
L’idea è costruire un percorso laboratoriale completo, dove ogni elemento della valigetta diventa parte di un sistema didattico aperto, personalizzabile e progressivo.
La spinta a dare concretezza a questo progetto arriva anche dal nuovo corso di robotica che avvierò tra poche settimane, per il quale desideravo proporre ai partecipanti una piattaforma ancora più solida, versatile e stimolante.
Nei prossimi aggiornamenti, racconterò più nel dettaglio sia l’evoluzione di MicroMoto sia la progettazione della valigetta e dei primi kit di esperimenti!
Una delle nuove caratteristiche presenti in entrambe le schede Arduino Uno R4, Minima e WiFi, è l’inclusione di un singolo DAC a 12 bit. Questo può generare tensioni di uscita discrete da 0 a 5 volt. Poiché questa funzionalità può essere di estremo interesse nelle attività di laboratorio di Elettronica ne indico di seguito il principio di funzionamento per sviluppare future esercitazioni.
Principio di funzionamento
Un DAC, o Convertitore Digitale-Analogico (in inglese: Digital-to-Analog Converter), è un dispositivo che converte un valore digitale (in binario) in un valore analogico (segnali continui che possono assumere un’infinità di valori all’interno di un intervallo).
Si tratta dell’operazione inversa di quella eseguita da un ADC, o Convertitore Analogico-Digitale, che converte un segnale analogico in una rappresentazione digitale.
Il processo di conversione avviene in tre fasi:
lettura in input dei dati digitali,
conversione in analogico
output del segnale analogico
Il DAC riceve in input un segnale digitale, che è rappresentato da una serie di valori binari (0 e 1), l’elettronica del DAC consente successivamente di convertire i valori binari in un segnale di output analogico che può essere utilizzato per pilotare dispositivi analogici come altoparlanti, motori, o altre apparecchiature che necessitano di un ingresso analogico.
Dal punto di vista pratico un DAC può essere utilizzato per creare un’uscita analogica a partire da un valore digitale utile per molte applicazioni, ad esempio per generare forme d’onda audio, per pilotare dispositivi che richiedono un input analogico, o per creare segnali di tensione variabile. Ad esempio nei sistemi audio un DAC converte i segnali audio digitali (come quelli presenti nei file MP3 o nei CD) in segnali analogici che possono essere riprodotti attraverso altoparlanti o cuffie.
Per semplificare ulteriormente nell’utilizzo con Arduino UNO R4, immaginate di avere un valore digitale che varia da 0 a 4095 (rappresentando un range di 12 bit). Un DAC potrebbe convertire questo valore in una tensione che varia, ad esempio, da 0V a 5V. Quindi, se il valore digitale fosse 512 (circa metà del range), l’uscita del DAC potrebbe essere di circa 0,6V.
Vediamo un esempio pratico.
Lo sketch che segue genera una forma d’onda sinusoidale o, meglio, una forma d’onda sinusoidale “simulata”. La frequenza della forma d’onda sinusoidale viene controllata da potenziometro.
Utilizzeremo un oscilloscopio per visualizzare l’onda sinusoidale, il collegamento è piuttosto semplice, abbiamo bisogno di un potenziometro lineare con una resistenza di 5 KOhm o superiore, io ho utilizzato un potenziometro da 10 KOhm.
La sonda dell’oscilloscopio deve essere connessa al pin A0 che viene usata come uscita del DAC. Il potenziometro ha il pin centrale connesso ad A5 (ingresso del DAC), un pin laterale connesso a 5V sulla scheda e l’altro pin laterale connesso a GND sulla scheda.
Se non possedete un oscilloscopio potete inviare l’output ad un amplificatore audio in modo che possiate ascoltare la tonalità generata, ricordate però che se procedete in questo modo bisogna assicurarsi che il controllo del volume sull’amplificatore sia al minimo, dopo di che lentamente aumentate il volume.
Il codice indicato di seguito è tratto dall’esempio di riferimento sul sito Arduino e all’interno degli esempi dell’IDE su cui ho inserito i commenti tradotti in italiano e fatto una piccola correzione.
La spiegazione del funzionamento la trovate nei commenti.
// Stampa l'aggiornmento dell frequenza impostata sulla serial monitor
24
Serial.println("La frequenza e' "+ String(frequenza) + " hz");
25
26
// Imposta la frequenza del generatore di forma d'onda sul valore aggiornato
27
wave.freq(frequenza);
28
29
// aspetta un secondo prima di ripetere la successiv rilevazione
30
delay(1000);
31
}
Volutamente ho lasciato commentata nel setup() la riga di codice in cui viene impostato il pinMode del pin A5 perché non è necessario inizializzare un pin Analogico, nell’esempio originale invece viene inizializzata.
A tal proposito per chi inizia con Arduino consiglio la lettura della guida: “Errori comuni nell’uso di Arduino – confondere pin analogici con pin digitali“.
Il risultato sarà il seguente:
E’ possibile quindi generare forme d’onda non solo sinusoidali, la funzione wave permette di impostare:
sine – onda sinusoidale
square – onda quadra
saw – onda a dente di sega
sarà sufficiente sostituire wave.sine(frequenza) presente nella sezione setup() rispettivamente con: