Arduino: luci rotanti con fading

Molti esercizi con Arduino cominciano con giochi di luce con i LED.

è un sistema veloce ed economico per vedere qualcosa che si “muove” e non solo sul solito schermo.

ORIGINE

L’esempio di oggi parte da Fade: questo script è già presente nelle IDE di Arduino attraverso il menù; File / esempi / Basics / Fade.

 

LA MODIFICA

La richiesta è stata quella di realizzare delle luci rotanti con l’effetto “fading“: la luminosità lentamente sale e lentamente scende.

LO SCRIPT

Il programma in Sketching è semplice:

/*
FLW - www.fablabway.com

lab42 - luci rotanti con fading

uses:

when        who    what
----------------------------
19.05.2018   mr    creates

*/

#define PINRADIOB 1
#define DELAYLED 7

int wlistaled[] = {5, 9, 10, 11};
int wnumled = 4;

void setup() {
  int i;
  for (i = 0; i < wnumled; i++) {
    pinMode(wlistaled[i], OUTPUT);
  }
  pinMode(PINRADIOB, INPUT);
  for (i = 0; i < wnumled; i++) {
    analogWrite(wlistaled[i], 0);
  }
}

void loop() {
  int j, k;
  for (k = 0; k < wnumled; k++) {
    for (j = 0; j < 255; j++) {
      analogWrite(wlistaled[k], j);
      delay(DELAYLED);
    }
    for (j = 255; j > -1; j--) {
      analogWrite(wlistaled[k], j);
      delay(DELAYLED);
    }
  }      // fine k
}

La lista di valori 5, 9, 10, 11 corrisponde alle porte PWM utilizzate. Non abbiamo una grande scelta visto che le PWM totali sono 6. Giusto per completezza esse sono: 3,5,6,9,10,11.

L’elenco dei valori delle porte PWM viene caricato in un array di interi (int) tramite l’istruzione:

int wlistaled[] = {5, 9, 10, 11};

Nella funzione setup() abbiamo due cicli: uno per impostare la modalità delle porte, tramite pinMode, e l’altro per valorizzare a 0 le porte PWM.

All’interno di loop() abbiamo 2 cicli: uno per la salita del PWM e l’altro per la discesa.

PWM

Pulse Width Modulation è una tecnica che consente ottenere delle tensioni variabili a partire da onde quadre. Arduino non possiede un convertitore da Digitale ad Analogico, ma con PWM è possibile ottenere delle tensioni intermedie nell’intervallo da 0 a 5 volt.

Il meccanismo si basa sulla porzione di lavoro (o livello alto) di una oscillazione. Il PWM si esprime in percentuale ed è il rapporto tra il tempo ALTO e quello basso. Una onda quadra simmetrica avrà quindi un tempo di lavoro (duty cycle) uguale a 50%.

MATERIALE

Sketching e Fritzing scaricabili qui: lab42

APPROFONDIMENTO

Per avere maggiori informazioni su PWM, vedere la pagina:

https://www.arduino.cc/en/Tutorial/PWM

 

 

 

Leave a Reply