Arduino: led rgb e Ikea

Lunedì sul blog di Elettronica In è stato pubblicato questo progetto: Modifichiamo una lampada IKEA con Arduino.
Sul blog ci sono tutte le indicazioni su come modificare la lampada “Strala”, ed anche un validissimo video di esempio.

Ikea-Site-500x378

Non riporto in questo articolo la descrizione di come eseguire il modding della lampada IKEA, ti invito a leggere direttamente sul sito originale tutte le fasi del progetto.

Ti descrivo solo il codice sorgente postato dall’autore: Boris Landoni così potrai comprenderlo meglio ed adattarlo al tuo scopo. Mi ripropongo di acquistare qualcuna di queste lampade per Natale e modificarle per il mio albero.

/* IKEA Strala mods

 created 2011
 by Boris Landoni

 This example code is in the public domain.

http://www.open-electronics.org

http://www.futurashop.it

http://blog.elettronicain.it/

 */

#include <EEPROM.h>

int red = 9;    // RED LED connected to PWM pin 9
int green = 10;    // GREEN LED connected to PWM pin 10
int blue = 11;    // BLUE LED connected to PWM pin 11
int r=50; int g=100; int b=150;
int rup; int gup; int bup;
int fader=1;
int inc=10;
void setup()
{
  // start the Ethernet connection and the server:
      Serial.begin(9600);
      Serial.println("Serial READY");
      r = EEPROM.read(1);
      g = EEPROM.read(2);
      b = EEPROM.read(3);
      inc = EEPROM.read(4);
      fader = EEPROM.read(5);
      rgb(r, g, b);
}

void loop()  {

  if (fader==1){
    funcfader();
  }

}

void funcfader(){
    Serial.println("fader");
    if (rup==1){r+=1;}
    else{r-=1;}
    if (r>=255){rup=0;}
    if (r<=0){rup=1;}

    if (gup==1){g+=1;}
    else{g-=1;}
    if (g>=255){gup=0;}
    if (g<=0){gup=1;}

    if (bup==1){b+=1;}
    else{b-=1;}
    if (b>=255){bup=0;}
    if (b<=0){bup=1;}

    delay(inc*2);
    rgb(r, g, b);
}

void rgb(int r, int g, int b)
{

  Serial.print("RGB: ");
  Serial.print(r);
  Serial.print(" ");
  Serial.print(g);
  Serial.print(" ");
  Serial.print(b);
  if (r>255) r=255;
  if (g>255) g=255;
  if (b>255) b=255;
  if (r<0) r=0;
  if (g<0) g=0;
  if (b<0) b=0;

  analogWrite(red, r);
  analogWrite(green, g);
  analogWrite(blue, b);
}

Ecco la descrizione:

linea 16: includi la libreria EEPROM.h, necessaria a gestire la memoria Eprom, appunto, di Arduino, tale memoria può essere letta e scritta rispettivamente mediante i metodi read() e write();

linee 18-20: definisci i pin a cui collegherai i differenti colori del led: pin 9 rosso, pin 10 verde e pin 11 il blue;

linea 21: imposta i valori di partenza di luminosità dei led, 50 il rosso, 100 il verde e 150 il blue;

linea 22: definisci le 3 variabili che utilizzerai per definire se incrementare il valore da passare al led o decrementarlo, ciascuna variabile si riferisce ad un colore;

linee 23 e 24: definisci la variabile fader il cui valore determina se vuoi l’effetto fade o no, e la variabile inc che stabilisce di quanto incrementare il valore da passare alla funzione analogWrite() che invia un segnale pwm sul corrispettivo piedino di Arduino;

linea 25: definisci la funzione setup();

linee 28-29: inizializza la comunicazione seriale con cui potrai monitorare l’andamento dello sketch quando connesso al computer, e invia al monitor seriale il mesaggio “Serial READY” quando la comunicazione sarà presente;

linee 30-34: legge dalla EPROM di Arduino i valori di startup per le variabili r,g,b,inc,fader mediante il metodo read() della libreria EEPROM.h inclusa alla linea 16;

linea 35: invoca la funzione rgb (definita alle linee 67-86) che inviano i valori passati (r,g,b) ai rispettivi pin di Arduino;

linea 38: definisci la funzione loop();

linea 40: controlla la variabile fader quando il suo valore è 0 non abilita l’effetto fader, in realtà non fa nulla secondo questo sketch, quando il valore è 1 lancia la funzione funcfader() definita alle linee 46-65 mediante l’istruzione presente nella linea successiva (41);

linea 41: lancia la funzione funcfader();

linea 46: definisce la funzione di tipo void funcfader() in questo caso la funzione che stai definendo non deve restituire alcun dato per cui la definirai di tipo void se avesse dovuto restituire un valore non avresti potuto dichiararla in questo modo, ma avresti dovuto utilizzare ad esempio: int, char, byte, … dipendente dal tipo di risultato di ritorno necessario;

linea 47: scrive sul monitor Seriale il messaggio “fader” necessario a farti capire cosa sta eseguendo lo sketch;

linee 48-51: le istruzioni presenti in queste linee hanno lo scopo di eseguire l’effetto fade sul led rosso, allo stesso modo quelle da 53 a 56 eseguono l’effetto fade sul verde e quelle dal 58 al 61 sul bleu, ti invito a concentrarti solo su questo primo pezzo essendo gli altri una replica; con le linee 48 e 49 imposti un controllo sulla fase ascendente (da 1 a 255) e discendente (da 255 a 0) per il led rosso, come avviene se il valore di rup è 1 il valore di r siincrementa di 1 ad ogni loop eseguito da Arduino fino a raggiungere il valore 255 (massimo per una uscita pwm) a questo punto la linea 50 effettua un altro controllo, se il vaore supera il 255 imposta rup a 0 in modo che ciclo successivo la condizione presente alla linea 48 non sia valida ed il codice eseguito sia quello presente nell’else che decrementa r di un punto fino al raggiungimento dello 0, in questa condizione la linea 51 reimposta rup a 1 ricominciando il ciclo di incremento di r al prossimo ciclo;

linee 53-56: vedi linee 48-51 ma per il led verde;

linee 58-61: vedi linee 48-51 ma per il led bleu;

linea 63: imposta un ritardo doppio rispetto al valore di inc con la formula (inc * 2);

linea 64: chiama la funzione rgb() definita alle linee 67-86;

linea 67: definisci la funzione rgb() di tipo void, in quanto non deve restituire valori a chi la chiama;

linee 70-75: scrivono sul monitor seriale i valor dir,g e b passati alla funzione , in questo modo potrai tenere sotto controllo il valore delle 3 variabili ad ogni incremento o decremento;

linee 76-78: in ciacsuna linea per il suo colore esegui una verifica del raggiungmento del limite massimo (255) prima di inviare il valore ad Arduino, reimpostando al valore massimo r,g  b;

linee 79-81: in ciacsuna linea per il suo colore esegui una verifica del raggiungmento del limite minimo (0) prima di inviare il valore ad Arduino, reimpostando al valore massimo r,g  b;

linee 83-85: per ciascuna variabile r,g e b invia il vaore ad Arduino sul pin definito alle linee 18-20, i valori passati saranno tradotti in segnali PWM dai pin di Arduino.

L’effetto finale è quello che potet vedere nel video girato dall’autore del post sul blog originale:

Buon lavoro o come dice Boris Buon Modding.

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/arduino-led-rgb-e-ikea.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.