Iniziare da zero con il kit Arduino: il monitor seriale e i segnali analogici

Nella prima lezione abbiamo introdotto la piattaforma Arduino UNO, l'hardware e l'ambiente di sviluppo software, e abbiamo preso confidenza con i pin di GPIO, capendo la differenza fra ingressi e uscite digitali e analogiche e, utilizzando le principali funzioni di Input/Output, abbiamo imparato come leggere degli ingressi digitali e analogici e abbiamo inoltre visto come far lampeggiare ("blinkare" nel gergo dei makers) un led e come farlo pulsare con continuità. Nella lezione di oggi, la seconda del corso base di Arduino rivolto a coloro che vogliono compiere i primi passi nella programmazione embedded con il kit Elettronica Open Source, sveleremo il segreto dietro le funzioni analogiche e le utilizzeremo per generare delle melodie con il nostro Arduino UNO.

Introduzione

Come è stato detto nella prima lezione, Arduino (e l'ATMega328p, il microcontrollore che ne è alla base) è un dispositivo prettamente digitale e come tale non può variare con continuità il livello di tensione in uscita sui suoi pin, ma solo impostarlo a 0V o alla tensione di alimentazione (5V nel caso di Arduino UNO). Ciononostante, l'utilizzo di alcuni espedienti permette di generare segnali digitali che si comportano come dei segnali analogici; i pin in grado di generare questo tipo di uscita sono quelli digitali contrassegnati da una tilde ~.

PWM: Pulse Width Modulation

I pin digitali di arduino possono generare solo due livelli di output: 5V o 0V, se il segnale viene fatto variare rapidamente e ciclicamente, e se la variazione è "abbastanza rapida" (il concetto di rapidità in questo contesto è relativo al particolare componente collegato al pin, ne parleremo in seguito), il segnale che viene letto in uscita sarà ad un livello intermedio tra il livello minimo e quello massimo. Questa tecnica si chiama PWM (Pulse Width Modulation) e consente di generare un qualsivoglia livello di tensione sul pin di output fra 0 e 5V: il segnale generato corrisponde ad un'onda quadra con frequenza f fissa, per cui all'interno di un determinato periodo di tempo T=1/f il pin sarà a 5V per una parte del periodo e a 0V per la restante; variando il rapporto fra il tempo in cui il pin ha livello alto e il tempo totale del ciclo e quindi cambiando la forma dell'onda (questa frazione viene chiamata duty cycle e va da 0 a 100%) si possono generare livelli di tensione tra 0V e 5V (figura 1).

Arduino-PWM-2

Figura 1: Pulse Width Modulation e duty cycle dell'onda quadra

La funzione analogWrite(pin,duty_cycle) non fa altro che prendere un valore intero da 0 a 255, corrispondente al duty cycle dell'onda quadra e quindi proporzionale al livello di tensione "medio" presente sul pin. Per fare questo Arduino utilizza una periferica all'interno del microcontrollore chiamata Timer: questa viene configurata per noi da Arduino ed è pronta all'uso chiamando la funzione analogWrite() e specificando il pin (ricordate che solo i pin contrassegnati dalla tilde possiedono questa funzionalità) e un valore. Per capire meglio come funziona la PWM, possiamo fare la stessa cosa con la funzione digitalWrite() e la funzione delay(), generando un'onda quadra su un pin qualsiasi (anche uno non contrassegnato dalla tilde): questo modo di operare, modificando "a mano" il livello logico di un pin [...]

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2202 parole ed è riservato agli abbonati PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

3 Commenti

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 17 gennaio 2017
  2. Lecteras 5 febbraio 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *