Tempo di lettura/visione: 3 min
Introduzione
In questo tutorial vedremo come utilizzare una particolare tipologia di pin digitali, i pin PWM. Queste particolari porte ci verranno in aiuto per accendere e spegnere un led in
maniera graduale, applicando un vero e proprio effetto di
fading (in italiano "dissolvenza").
La funzione fade sarà possibile anche grazie ai nuovi comandi che andremo a spiegare, in particolare grazie al ciclo “
for” (cioè l'esecuzione ciclica di istruzioni).
Stai muovendo i primi passi nel fantastico mondo di Arduino? Ti consigliamo anche questi tutorial:
Circuito
Il circuito va impostato nella stessa identica maniera del tutorial
ACCENDERE E SPEGNERE UN LED TRAMITE PULSANTE CON ARDUINO, a differenza del pin che dovrà essere collegato ad un'
uscita in PWM, che permette la comunicazione di un pin digitale con uno analogico.
Ad esempio se volessimo variare l’intensità di un led con un potenziometro collegato ad un pin analogico, dobbiamo andare a collegare il led ad un pin in PWM che sono: pin 3, pin 5, pin 6, pin 10, pin 11 nel caso di Arduino Uno, e in ogni caso riconoscibili dal simbolo “
~” (si legge tilde) accanto al numero della porta.
Duty cycle
Il duty cycle è una caratteristica fondamentale dellaPWM: è la percentuale del tempo che il segnale rimane ad un valore alto in un periodo.
Nonostante questo segnale generi un’onda quadra con un valore alto (5 volt) e uno basso (0 volt), esso può essere impiegato per simulare un segnale analogico in uscita.
Nell'immagine qui sotto vediamo le differenti onde quadre che si ottengono al variare del duty cicle (
qui il link all'immagine originale, Attribuzione - Condividi allo stesso modo 3.0 Unported -
CC BY-SA 3.0)
Variabile valoreFade
Una
variabile è un modo per nominare e memorizzare un valore numerico per un successivo utilizzo da parte del programma. La possiamo immaginare come una scatola all'interno della quale andiamo a "riporre" degli oggetti che vogliamo riutilizzare in un secondo momento.
Come suggerisce il loro nome, le variabili sono numeri che possono essere cambiati continuamente rispetto alle costanti il cui valore non cambia mai. Una variabile deve essere dichiarata ed eventualmente in un secondo momento si assegna il valore che si vuole conservare.
Nel nostro caso la variabile può assumere dei valori tra 0 e 255.
Quando verrà dichiarata prima del void setup gli si dovrà dare un valore uguale a 0. Quello 0 corrisponde al valore iniziale che dovrà assumere la variabile.
Ciclo For
L’istruzione
for usa una variabile detta
contatore che cambia valore ogni volta che viene ripetuto il gruppo di istruzioni e viene usata per stabilire se continuare il ciclo o meno. Nell’istruzione
for troviamo tre elementi separati da un punto e virgola:
- l’init del contatore (Da che valore è inizializzata la variabile) --> valoreFade = 0
- la condizione che deve essere vera per continuare il ciclo(se il valore è minore di 255) --> valoreFade <255
- l’incremento del contatore (Il valore si incrementerà) --> valoreFade++ (questa sintassi equivale a scrivere valoreFade = valoreFade + 1)
Ecco l'istruzione completa che verrà utilizzata per accendere gradualmente il led (con un valore di accensione che varierà da 0 a 255):
for (valoreFade = 0 ; valoreFade <255; valoreFade++)Questo invece è il ciclo che verrà utilizzato per spegnere gradualmente il led (con un contatore che decrementerà da 255 a 0):
for (valoreFade = 255 ; valoreFade > 0; valoreFade--)
Questo secondo ciclo verrà eseguito al termine del primo, ossia dopo l'accensione graduale del led andremo a realizzare uno spegnimento graduale.
Funzione del programma
Il programma permette l’accensione graduale di un led, attraverso l'ausilio di una variabile
valoreFade il cui valore può variare da un minimo di 0 ad un massimo di 255, ed un ciclo for che permetto incremento e decremento della variabile preimpostata. Questa variabile comunicherà con il pin 11 del led (tramite funzione
analogWrite), che prenderà il valore corrispondente così da effettuare il Fading. E' stato inserito un delay di 10 millisecondi per rendere visibile l'effetto all'occhio umano.
Di seguito si trova il programma completo e funzionante.
Questa invece è una screenshot realizzata all'interno dell'IDE di Arduino.