Avete mai pensato di realizzare un “Presepe Elettronico”? In occasione delle festività natalizie ElettroEasy vi propone un idea!
Come si vede nell’immagine, vecchie lampadine, fusibili, connettori e stagno si trasformano nei personaggi, creando un paesaggio di assoluta “elettro-particolarità”! Arduino penserà a renderlo davvero tecnologico e movimentato. Avrà la funzione di pilotare un Led RGB, che fungerà da stella cometa, ed un display LCD.

ElettroPresepe

 

 

ElettroPresepe_retro

Ma cos’è un Led RGB?

La sigla RGB viene da “Red Green Blue”, i colori dei tre Led che lo costituiscono. La miscelazione di questi riesce a generare svariate combinazioni di colori, tant’è vero che questa tecnica la si trova anche nelle fotografie digitali, ogni pixel è un tris RGB.
Arduino è capace di gestire la loro intensità luminosa tramite le uscite PWM, in modo da ottenere un’ampia gamma colori!

 

Nella PWM (Pulse Width Modulation) viene stabilito il duty cycle di un’onda quadra, o meglio il rapporto tra la durata della semionda positiva e quella della negativa. Arduino riesce a stabilire 256 livelli di duty cycle che determineranno per quanto tempo deve permanere l’accensione di un led.
Il nostro occhio percepisce la variazione “acceso-spento” in una variazione di intensità luminosa, il gioco è fatto! Si ottengono tante sfumature di luci attraverso la combinazione di soli tre colori!

Arduino dovrà gestire anche il display, per farlo bisogna includere la libreria LiquidCrystal.h che permette di comunicare a 4 o 8 bit. Nel nostro caso ne usiamo 4, più due comunicazioni di controllo: Register Select (RS) e Enable (E). Tramite un determinato ciclo dello sketch la scritta “Buon Natale! Felice anno!” scorrerà su due righe.

Di seguito schema elettrico elaborato con Fritzing :

Schema_presepe

Questo è il programma di gestione:

#include <LiquidCrystal.h> // includo libreria gestione display</pre>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

 int redpin = 8; // assegno un pin di Arduino per ogni led
 int greenpin = 9;
 int blupin =10;
 int vel=10; // velocità di transizione
 int passo=1;

void setup()
 {
 for (int L=0;L<256;L+=passo) // iniziamo con la visualizzazione del colore Rosso
 {
 analogWrite(redpin,L);
 delay(vel);
 }

 pinMode(redpin, OUTPUT); // configuro i pin digitali come output
 pinMode(greenpin, OUTPUT);
 pinMode(blupin, OUTPUT);
 lcd.begin(20, 4); // inizializzo il display e le scritte da visualizzare
 lcd.print("BUON NATALE!");
 lcd.print("** FELICE ANNO!");
 lcd.setCursor(0, 1);
 delay(700);
 }

void loop()
 {
 Display(); // nomino i due cicli da eseguire
 led();
 }

void Display()
 {
 for (int positionCounter = 0; positionCounter < 40; positionCounter++) // incremento il positionCounter finchè non è più minore di 40
  {
  lcd.scrollDisplayLeft(); // permette lo scorrimento della scritta verso sinistra
  delay(190);
  }

 for (int positionCounter = 0; positionCounter < 40; positionCounter++)
  {
  lcd.scrollDisplayRight(); // permette lo scorrimento della scritta verso destra
  delay(190);
  }

 for (int positionCounter = 0; positionCounter < 20; positionCounter++) //incremento il positionCounter finchè non è più minore di 20
  {
  lcd.scrollDisplayLeft(); // scorrimento verso sinistra
  delay(190);
  }
}

void led()
{
 for (int L=0;L<256;L+=passo) // da Rosso a Verde passano per le sfumature intermedie
  {
  analogWrite(redpin,255-L);
  analogWrite(greenpin,L);
  delay(vel);
  }

 for (int L=0;L<256;L+=passo) // da Verde a Blu
  {
  analogWrite(greenpin,255-L);
  analogWrite(blupin,L);
  delay(vel);
  }

 for (int L=0;L<256;L+=passo) // da Blu a Rosso
  {
  analogWrite(blupin,255-L);
  analogWrite(redpin,L);
  delay(vel);
  }

 for (int L=0;L<256;L+=passo) // da Rosso a Verde
  {
  analogWrite(redpin,255-L);
  analogWrite(greenpin,L);
  delay(vel);
  }

 for(int L=0;L<256;L+=passo) // da Verde a Blu
 {
 analogWrite(greenpin,255-L);
 analogWrite(blupin,L);
 delay(vel);
 }

 for (int L=0;L<256;L+=passo) // da Blu a Rosso
 {
 analogWrite(blupin,255-L);
 analogWrite(redpin,L);
 delay(vel);
 }
}

Questo è tutto, al prossimo articolo!