Pannello a 10x10 led RGB comandati da Arduino
I led con l'integrato di controllo WS2801 li potete trovare nel negozio Ebay tedesco prototypr in striscia da 50 pezzi a 44 Euro comprese le spese di spedizione.
I led sono alimentati in parallelo e vengono accesi tramite l'Arduino con due soli segnali: uno di clock e uno dati. I led possono essere accesi ognuno con un colore diverso.
Le strisce di led vanno alimentate a parte con una alimentatore da 5V di potenza appropriata (io ho usato un alimentatore switching da 50W in grado di erogare fino a 10A) sui fili rosso (+5V) e giallo (massa).
Sull'Arduino vanno collegati i fili verde sul pin 2 (Serial data input) e blu sul pin 3 (Data clock input).
Va collegato un filo di massa dal GND dell'Arduino insieme al giallo dei led.
Il programma, scritto da me, in Gambas 3 su Ubuntu Linux 14.04, produce le immagini in movimento sul pannello inviando le informazioni in seriale tramite la porta all'Arduino.
Permette di disegnare manualmente fotogramma per fotogramma oppure creare automaticamente i frame per far scorrere, da destra verso sinistra, il testo inserito nella texbox apposita.
Si può segliere il colore di primo piano e di sfondo, riempire il frame del colore di primo piano o di sfondo, spostare a sinistra e adestra di una colonna il disegno corrente, spostarsi avanti e indietro o al primo e all'ultimo fotogramma e aggiungere e cancellare fotogrammi.
Il programma permette anche di salvare o aprire una sequenza o di inserirne una già creata in precedenza in coda.
Dopo aver connesso il pc con l'Arduino si potrà inviare la sequenza per cederla apparire sul pannello.
Il programma in Gambas lo potete scaricare nellla sezione Download.
Elenco materiale per la realizzazione della scatola:
-
18 listelli in legno da 10x10x48
-
2 listelli in legno da 10x80x50
-
2 listelli in legno da 10x80x49
-
18 listelli legno compensato da 4x50x48
-
1 pannello legno compensato da 4x480x480
-
1 pannello plexiglass opalizzato da 2,5x480x480
-
colore bianco opaco
-
colore nero opaco
In tutti i 18 listelli in legno da 10x10x48 vanno creati degli intagli come da disegno:
I 18 pezzi (9+9) vanno incastrati in modo da ottenere una grata.
Qui la vedete già colorata di bianco.
Anche nei 18 listelli legno compensato da 4x50x48 vanno creati degli intagli:
Anche questi 18 pezzi (9+9) vanno incastrati in modo da ottenere una grata.
Ecco il risultato:
Ora dobbiamo realizzare il contorno:
Nei 2 listelli in legno da 10x80x50 dovremo creare due intagli.
Nei 2 listelli in legno da 10x80x49 dovremo creare due maschi.
I 4 pezzi vanno poi incollati e incastrati.
La cornice finita:
Realizziamo ora il fondo forato dove andranno inseriti i led con il pannello di legno compensato da 4x480x480.
Il fondo finito:
Ecco il pannello finito visto da davanti
e da dietro
Ora inseriamo i led nei rispettivi fori partendo da destra a sinistra sulle righe dispari e da sinistra a destra sulle righe pari. Gli ho incollati usando la colla a caldo aspettando, uno per uno, che la colla sia indurita.
Questi sono i primi 25. Io ho usato due strisce da 25 e una da 50. In questo caso, essendo partito dal fondo, i led sono rovesciati (da sinistra a destra sulla prima e la terza riga e viceversa sulla seconda): si nota dal connettore maschio sull'ultimo led. Sui piccoli circuiti stampati c'è una freccia che indica il verso del segnale.
Le strisce vanno collegate con gli appsosti connettori. L'alimentazione va portata sui conduttori all'inizio di ogni striscia.
Ecco, infine, il pannello terminato con montata anche la lastra in plexiglass:
Ecco l'IDE per Arduino:
#include "SPI.h"
#include "WS2801.h"
int SDI = 2;
// Serial data input int CKI = 3;
// Data clock input int byteIniziale;
int pixel; byte red;
byte green;
byte blue;
WS2801 strip = WS2801(100, SDI, CKI);
void setup() {
Serial.begin(115200);
strip.begin();
strip.show();
}
void loop() {
//Esiste un dato sulla seriale?
if (Serial.available() > 0) {
byteIniziale = Serial.read( );
if (byteIniziale == 105) {
pixel = Serial.parseInt();
red = Serial.parseInt();
green = Serial.parseInt();
blue = Serial.parseInt();
/*Serial.print("pixel=");
Serial.print(pixel);
Serial.print("rgb=");
Serial.print(red);
Serial.print(green);
Serial.println(blue);*/
colorAppear (Color(red, green, blue));
}
if (pixel==99) {
strip.show();
Serial.print("f");
}
}
}
void colorAppear (uint32_t c) {
strip.setPixelColor(pixel, c);
}
// Creating a 24 bit color value from R,G,B
uint32_t Color(byte r, byte g, byte b) {
uint32_t c;
c = r;
c <<= 8;
c |= g;
c <<= 8;
c |= b;
return c;
}
Sia il programma che la libreria li potete scaricare nella sezione download.
Giuseppe Tamanini
|