HOMEELETTRONICACOMPONENTIIMPIANTIELETTROTECNICA

ARDUINO - PWM

P W M
La scheda Arduino UNO presenta 14 pin digitali. Possono essere cioè interessati solo da due valori di tensione: zero volt (stato zero) e 5 volt (stato 1). Alcuni di questi pin, cioè 3, 5, 6, 9, 10, 11 (contrassegnati con l'apposito simbolo), possono, se utilizzati come uscita, simulare una tensione analogica, cioè variabile tra zero e 5 volt, sfruttando la tecnica della PWM (Pulse Width Modulation - Modulazione a Larghezza di Impulso).

pin digitali

VIDEO

In pratica il tempo T destinato a ogni singolo impulso, può essere occupato dal valore 5 volt per un tempo T1 e dal valore zero per il restante tempo T2. Basta far durare più o meno T1, modulandolo con valori che, nella programmazione della scheda Arduino, saranno compresi tra 0 e 255, cioè grazie a 256 valori diversi.

PWM

I valori analogici di tensione vengono fuori come media nell'intero intervallo T.
Ad esempio se T1 e T2 sono uguali (T1 = 50% di T), la media è ovviamente 2,5 volt.

I dispositivi alimentati devono essere idonei a supportare la tecnica PWM, essendo solo una simulazione.


ESEMPIO
ACCENSIONE E SPEGNIMENTO GRADUALE DI UN LED - ISTRUZIONE analogWrite

Applichiamo a un LED una tensione variabile gradualmente da zero e 5 volt e viceversa.

PWM con Arduino e un LED

Lo sketch è basato sull'istruzione for e sull'istruzione analogWrite. Viene utilizzato il pin 5.

sketch della PWM

- viene fissato il valore 5 per la variabile 'led' e viene inizializzata la variabile x;
- con pinMode viene impostato il pin 5 (led) come uscita;

- la prima istruzione for fa variare x tra 0 e 255, con incremento di 1 ogni ripetizione (x++);
- viene applicata la PWM al pin 5 con analogWrite e valori di tensione crescenti;
- pausa di 10 millesimi di secondo con delay(10);

- la seconda istruzione for fa variare x tra 255 e 0, con decremento di 1 ogni ripetizione (x--);
- viene applicata la PWM al pin 5 con analogWrite e valori di tensione decrescenti;
- altra pausa di 10 millesimi di secondo con delay(10);

- pausa di 0,1 secondi con delay(100)

PWM animazione

Potevamo anche non assegnare il valore 5 a 'led', ma usare il valore numerico direttamente nel programma. Però questa è una buona pratica, poichè in programmi complessi e lunghi rende più semplice la comprensione delle varie righe, assegnando i valori numerici a delle parole che hanno un senso nel funzionamento del circuito. In questo caso, infatti, il valore 5 è utile per l'accensione di un led.

Nella seconda istruzione for non è necessario assegnare il valore iniziale alla variabile x, poichè deriva dall'ultimo valore della prima istruzione for. Pertanto nella parentesi tonda compare solo un punto e virgola.


sicurezza elettrica ing. Vito Barone


HOMEELETTRONICACOMPONENTIIMPIANTIELETTROTECNICA