Come funziona il PWM di Arduino?

Questo tutorial è pensato per gli utenti che stanno muovendo i primi passi con Arduino ed hanno ancora la loro board con un led attaccato e sono stufi del solito lampeggio.. :)

Se sei tra quelli questo sketch metterà un po' di pepe nella tua vita e ti mostrerà che Arduino non è solo bianco o nero (HIGH o LOW..) ma è anche grigio, 255 sfumature (di grigio).

Infatti questo semplice tutorial sfrutta la funzione PWM del nostro Arduino che permette di avere un uscita non solo di 0 o 5 volt, ma simula i valori che ci stanno in mezzo, permettendovi di vedere un led con differenti livelli di luminosità.

Come fa? così.



Quando utilizziamo la funzione PWM, Arduino commuta l'uscita molto velocemente (circa 500 volte al secondo, 488hz sui pin 3,9,10 e 11, 976hz sui pin 5 e 6) tra i 2 valori 0 volt e 5 volt, così velocemente che collegando un led su quel pin, l'occhio umano non è in grado di vedere questo lampeggio, velocissimo.

Però variando il DUTY CYCLE, si noterà una differenza di luminosità del led.
Il duty cycle è semplicemente la durata dell'impulso a 5 volt rispetto alla durata dell'impulso a 0 volt.
Maggiore sarà la durata dell'impulso a 5 volt rispetto a quello a 0 volt, maggiore sarà la luminosità del led (vedi il grafico sopra).


Per comprenderlo meglio si fà l'esempio dei fogli bianchi e neri:
immaginate di avere in mano 50 fogli bianchi e 50 neri,
mischiateli in modo da averne uno bianco e uno nero.
prendete un angolo dei fogli e fateli scorrere velocemente.
il colore che vedrete sarà grigio.
Se mettete 70 fogli bianchi e 30 neri avrete un grigio chiaro,
se mettete 30 fogli neri e 70 bianchi avrete un grigio scuro.

Lo stesso vale per Arduino:
più tempo l'uscita sarà a 5 volt, più alta sarà la luminosità, viceversa se l'uscita sarà alta solo per poche frazioni di secondo, la luminosità sarà bassissima.



Ora, che spero abbiate un po' più chiara questa funzione, passiamo alla pratica.

Realizzate questo semplice circuito, la resistenza è da 220 ohm, ma va bene qualunque valore tra i 200 e i 400 circa:



Infine caricate questo sketch nel vostro Arduino:


  1. int i = 0;

  2. void setup()  {
  3.   pinMode(9, OUTPUT);
  4. }
  5. void loop()  {
  6.   for (i = 0; i < 255; i++ ) {
  7.     analogWrite(9, i);
  8.     delay(10);
  9.   }
  10.   for (i = 255; i > 0; i-- ) {
  11.     analogWrite(9, i);
  12.     delay(10);
  13.   }
  14. }


Alla riga 8 vedete un semplice ciclo "for" che permette di incrementare la variabile "i" dal valore "0"
al valore "255" incrementando di 1 ad ogni ciclo.
Alla riga 9 vedete il comando "analogWrite" che è la funzione per scrivere un segnale PWM in uscita, verrà scritto il valore di "i" modificato nella funzione precedente, quindi ad ogni ciclo del loop il led si accenderà un po' di più, fino a raggiungere la massima luminosità.
Alla riga 12 viene ripetuto quello di prima, solo che al contrario, quindi il led ridurrà piano piano la sua luminosità.

Il risultato dovrebbe essere simile a questo:



Se invece volete modificare la frequenza del pwm date un'occhiata a questo post.

Per qualunque dubbio lasciate pure un commento, ciao!

Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

5 commenti:

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post