BLEM: progetto di matrice LED controllata da un Raspberry Pi

Con alcuni amici abbiamo appena completato un progetto di cui vado molto orgoglioso.

BLEM” è il nome in codice che abbiamo scelto per un pannello di alluminio (200 cm x 80 cm) con una matrice di 250 LED RGB, comandabili singolarmente (da remoto) grazie ad un Raspberry Pi.
Tutto ideato, progettato e costruito artigianalmente !

Prima dei dettagli tecnici iniziamo con un video esplicativo della realizzazione.

L’idea

Volevamo qualcosa di innovativo da utilizzare durante delle serate di musica elettronica che ogni tanto organizziamo. Per caso avevo trovato qualche video su YouTube di pannelli luminosi formati da LED RGB (quindi che potevano assumere qualsiasi colore e luminosità, singolarmente) comandati da hardware open source a basso costo (Arduino e Raspberry Pi). L’effetto finale era uno stupendo pannello luminoso formato da grossi pixel quadrati, in cui era possibile inviare colori, animazioni, forme.
Essendo già un possessore entusiasta del Raspberry Pi, ho deciso che il progetto era alla nostra portata e avremmo dovuto assolutamente provarci!

La progettazione

Dopo aver buttato giù uno schizzo della struttura, abbiamo deciso di realizzare il pannello, la cornice e la griglia dei pixel in alluminio in modo che fosse resistente ma allo stesso tempo leggero e trasportabile. Anche la scelta di suddividere il pannello di due metri in due parti è stata fatta per garantirne una trasportabilità maggiore.
Per la realizzazione della struttura ci siamo rivolti ad un’impresa locale che lavorava lamiere di alluminio. In poco tempo il nostro disegno era stato realizzato.

La parte elettronica/informatica è stata invece più complessa. Cercherò di descriverla qui in maniera schematica e per aiutarmi inizio proprio con uno schema a blocchi:

SCHEMA BLEM

Partiamo da destra verso sinistra.

Strisce LED

I LED che ho scelto di utilizzare sono dei pixel formati da tre singoli LED (R,G,B) e controllati ciascuno da un chip WS2801. Si trovano abbastanza facilmente su internet in strisce da 25, 50 o 100 pixel. Noi abbiamo prese direttamente dalla Cina su Aliexpress 5 strisce da 50 pixel ciascuna, collegabili in serie.

5 strisce led da 50 pixel ciascuna

Le strisce hanno 4 fili: alimentazione, ground, data, clock. L’alimentazione (e il ground) delle strisce deve essere fornita separatamente attraverso un alimentatore dedicato a 5V. Bisogna stare attenti che eroghi abbastanza corrente. Ciascuno pixel ha un consumo dichiarato di 0,3W (0,06A) per cui serviva almeno un alimentatore da 75W e 15A (attenzione, sui 5V!)

Durante le prove abbiamo provato degli alimentatori ATX da computer ma non erano abbastanza potenti. Abbiamo poi acquistato (sempre su aliexpress) un alimentatore dedicato che eroga fino a 50A sui 5V (quindi più del doppio del necessario teorico) ed abbiamo risolto i problemi. Importante: l’alimentazione va collegata in parallelo a ciascuna striscia, collegandola in serie si avrà una caduta di tensione e gli ultimi pixel della catena avranno problemi.

Gli altri due fili (3, se si considera la massa comune) andranno collegati al Raspberry e controlleranno i dati inviati ai pixel.

Raspberry Pi

Il “cervello” di tutto il pannello è lui. Il connettore delle strisce va collegato all’interfaccia SPI del Raspberry. Nel dettaglio:

Il filo “data” dei LED (bianco) va collegato al GPIO 10 (MOSI)
Il clock dei LED (verde) va collegato a GPIO 11 (SCKL) (nella foto del connettore ha il nero)
Il ground dei LED (blu) va collegato ad un GPIO a ground, io ho scelto per comodità il primo in basso (filo rosso) ma ce ne sono anche altri.

Schema di collegamento al Raspberry

OLA

Effettuati i collegamenti, è necessario installare il software nel Raspberry per permettergli di ricevere i dati da remoto (via rete) ed inviarli ai LED.

Prima di arrivare alla soluzione definitiva avevo provato PixelPi, uno progetto open source in python che, messo su una comune Raspbian, permetteva in modo semplice ed efficace di controllare i LED dall’interfaccia SPI. Era inoltre possibile lasciarlo in ascolto sulla rete (UDP) in ricezione di pacchetti provenienti da programmi ad hoc (per esempio PixelController). Benché la soluzione fosse funzionante, presentava alcuni problemi:

1) Non gradivo molto l’interfaccia di PixelController
2) Volevo adottare una soluzione standard che mi permettesse si comandare il pannello anche con altri software.

Mi sono informato un po’ del mondo del controllo delle luci (DMX) e ho scoperto che dovevo puntare sul protocollo Art-Net, standard de-facto usato nel settore. ArtNet è in pratica un DMX su rete, e ne condivide una limitazione: è possibile indirizzare solamente 512 canali per ogni gruppo (i gruppi sono chiamati “universi”). Ogni pixel RGB ha 3 canali, per cui per controllare 250 pixel servono 750 canali. Avevo quindi bisogno di creare due universi diversi (uno per ciascun pannello) e controllarli insieme.

Dopo un po’ di ricerche sono arrivato alla soluzione: il progetto OLA che sta per Open Lightning Architecture. Sposando perfettamente la filosofia opensource, permette di avere un sistema modulare che riceve ed invia sfruttando diversi protocolli e interfacce. Tra le tante possibilità permette appunto la ricezione di ArtNet e l’invio sulla porta SPI per il controllo dei pixel LED.

Non solo: OLA gira perfettamente su Raspberry Pi e si installa facilmente tramite immagini disco già pronte per la scheda di memoria.

Esempio di configurazione di OLA

I passaggi schematici per installare e configurare OLA sul Raspberry sono i seguenti:

  • Scaricare l’immagine di OLA da questo link (rasbian-ola-x.x.x.zip, prendete l’ultima release)
  • Estrarre lo zip in modo da avere un file immagine (.img)
  • Scrivere l’img sulla scheda SD utilizzando uno dei tool a disposizione per tutti i sistemi operativi (Linux, Mac, Windows).
  • Una volta terminata la scrittura della scheda, inserirla nel Raspberry ed accenderlo dopo averlo collegato via ethernet ad un router con DHCP. Guardando nel log del router riuscirete ad individuare l’IP assegnato al RPI per accederci successivamente via SSH.
    Alternativamente potete collegarlo ad un monitor con HDMI e tastiera usb e vedere l’IP assegnato dal router.
    Il mio consiglio è quello di impostare un IP fisso al Raspberry una volta completata la configurazione, così saprete sempre come raggiungerlo.
  • Accedete al RPI via ssh o attraverso la consolle. I dati di default sono: user: “pi”, password: “openlighting”
  • Se avete utilizzato una SD > 4GB, espandere il filesystem attraverso il tool raggiungibile da “sudo raspi-config” e scegliendo poi “expand root fs”. (ricordate che la password di sudo/admin sarà sempre “openlighting”. Sempre nel raspi-config ricordatevi anche di abilitare l’interfaccia SPI (si trova nelle opzioni avanzate)
  • Dopo il riavvio del RPI, potete verificare che OLA sia attivo e funzionante accedendo, da un qualsiasi computer connesso alla rete del Raspberry, attraverso il browser all’indirizzo: http://192.168.x.x:9090/ (inserendo ovviamente l’ip del vostro RPI)
  • Se  vedete la schermata di configurazione di OLA, tutto è ok. Andate tra i plugin e verificate che il plugin SPI sia attivo.
  • Ricordarsi di abilitare l’intefaccia SPI nel Raspberry. Questo cambia anche a seconda del modello di Raspberry in uso e della distribuzione. Seguire le istruzioni qui. Per verificare che il modulo spi sia caricato correttamente, potete digitare “lsmod | grep spi_”. Se vi restituisce qualcosa come spi_bcm2708 o spi_bcm2835 allora dovrebbe essere tutto ok.
  • A questo punto è necessario configurare il plugin SPI. Per farlo dovete modificare da terminale il file ola-spi.conf che si trova in /var/lib/ola/conf/ola-spi.conf.
    Potete editarlo attraverso nano, in questo modo: “sudo nano /var/lib/ola/conf/ola-spi.conf”. Prima di modificare le configurazioni però, accertatevi che olad sia stoppato (tramite l’apposito bottone sull’intefaccia web).
  • Inserire la configurazione giusta per il proprio sistema seguendo le istruzioni qui riportate. Io  ho usato il tipo “Two pixel strings, using a single output”. Nel primo universo ho messo 130 pixel, nel secondo 120.
  • Salvare premendo CTRL-O e poi Y e riavviare il raspberry (“sudo reboot”).
  • Al riavvio, ricaricare la schermata di configurazione web di OLA. A questo punto creare i due universi (1 e 2), selezionando per entrambi ArtNet come input, ed il plugin SPI per l’output (vedrete i due sottoinsiemi di pixel che avete definito nel fine ola-spi.conf).
  • Andando nella scheda DMX Console e muovendo gli slider dei canali, i led dovrebbero accendersi.
  • Per salvare la configurazione, premere “stop OLA” nella schermata principale.

 

Computer remoto

Una volta configurato il Raspberry è l’ora di passare al computer remoto che gestirà il pannello (inviando i video e le animazioni). Il collegamento computer-raspberry avviene nella rete locale LAN, quindi è possibile utilizzare un cavo ethernet oppure anche wi-fi. Meglio se i due dispositivi hanno indirizzi IP fissi.
Per il momento ho scelto un cavo ethernet lungo per comodità di configurazione e stabilità della connessione.

Software per la matrice LED

Ho provato alcuni software per la gestione delle matrici, oltre PixelController (che ho citato sopra, poi scartato) ho provato Glediator ed infine Jinx!. (in generale qualsiasi software con output ArtNet dovrebbe funzionare!).
I due software sono simili come funzionalità ed effetti, ma hanno alcune differenze:

  • Glediator (2.0.1)

    Pro: Completo, buona interfaccia; in Java (multipiattaforma)
    Contro: non supporta controller MIDI esterni, né shortcut da tastiera, abbastanza pesante (causa Java).

  • Jinx! (0.96)

    Pro: supporta controller esterni (via ArtNet e altri protocolli) per la selezione di scene, chaser, master, strobo; più veloce e leggero
    Contro: Solo per Windows.

Alla fine per adesso ho scelto Jinx per la comodità di poter essere controllato da remoto. Ma non escludo in futuro di provare altre alternative.

QLC+

Proseguendo nello schema iniziale, si vede che Jinx comunica (sempre tramite protocollo ArtNet) con un software che permette di creare consolle virtuali di comandi, QLC+

QLC+ è un programma opensource multipiattaforma nato per la gestione completa dei dispositivi (fixtures) basati su standard DMX o ArtNet.

Attraverso questo programma sono riuscito non solo a controllare in remoto Jinx, ma anche a controllare le teste mobili e i PAR LED che c’erano nel locale (tramite un adattatore USB-DMX).

Una volta creati tutti i faders, knob, bottoni e funzioni virtuali, li ho associati a dei controller MIDI esterni, permettendomi una facile gestione nel “live”.

Consolle Virtuale di QLC+

Concludo questo articolo con un video del risultato finale dello show, a cui oltre al pannello LED qui descritto abbiamo aggiunto un mapping (videoproiezioni su superfici) gestito con VDMX e MadMapper.

L’effetto globale è stato veramente fantastico! Ed era solo il primo passo… in attesa di ulteriori miglioramenti! 🙂