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! 🙂

A proposito Alessandro

Ingegnere delle Telecomunicazioni con propensione al web2.0 ed il pallino della tecnologia; toscano & casentinese, vivo a Firenze
  • Edoardo Puri

    immenso!!!!!!!!!

    • ahah grazie… Ti garba la colonna sonora del primo video? 🙂

  • Bellissimo.
    Costo totale?
    Tempo di realizzazione?
    Skill di programmazione necessarie?

    • Costi: considerando tutti i pezzi e materiali siamo intorno ai 300 euro.
      Tempi: noi c’abbiamo messo un mese… ma non avevo assolutamente idea di come fare! Se avessi avuto un post del genere all’inizio, l’avrei fatto in pochissimo tempo! 😀
      Skills: basta un po’ di smanettamento, alla fine da programmare c’è poco. Semmai un po’ di manualità elettronica per collegare i fili. Ma niente di che!
      Insomma saresti perfettamente in grado! 😉

      • Anche se non ho mai toccato un raspberry pi e di programmazione non so nulla (certo sono nel mondo e mi arrangio, ma comunque non sono un programmatore)?
        Comunque è davvero figo, potreste produrli in serie. Io uno ve lo compro sicuro 😀

        • E dal vivo è molto più figo, credimi!
          Comunque il mondo dei raspberry e arduino è veramente alla portata di tutti quelli che hanno voglia di imparare e di seguire guide/tutorial, e credo sia il tuo caso.
          Nello specifico la configurazione del raspberry si limita a: scaricare un’immagine e flashare una SD, accenderlo, accedere all’interfaccia grafica via browser, configurarlo, salvare. Fine!
          Oh se ci s’ha richieste si può anche mettersi a produrli… magari si fa i soldi! ahah

  • Pingback: [Visual Department] BLEM Project: la realizzazione - BLAQ()

  • Edoardo

    Pazzesco pazzesco pazzesco w l’open source

  • Massimiliano Pappalardo

    ma la matrice massima che si può gestire qual’è?…. servono più raspberry?

    • Il mio manda senza problemi 250 led…. teoricamente non c’è un limite, ma in pratica dipende dalla velocità con cui l’interfaccia SPI riesce a scrivere. Non ho fatto prove ulteriori. Secondo me fino a 300/350 dovrebbe funzionare con un solo rasp… però è una supposizione.
      Eventualmente puoi comunque usare più raspberry e suddividere la matrice in più “universi” (di massimo 170 pixel).

  • Pingback: BLEM tra gli use cases di QLC+ ! ‹ Alessandro GrechiAlessandro Grechi()

  • Pingback: Projection mapping, matrice LED e DMX sincronizzati via ArtNet ‹ Alessandro GrechiAlessandro Grechi()

  • Stefano

    Ciao, bellisimo complimenti. Vorrei utilizzare un pannello simile per fare un display da utilizzare nelle gare di atletica leggera per visualizzare i risultati. Secondo te se si visualizzano delle scritte restano visibili all’esterno alla luce del sole ?

    • Scusa il ritardo della risposta, non avevo visto questo commento!
      Io ho sempre utilizzato questo pannello in notturna. La luminosità è buona, ma non l’ho mai provato di giorno sotto la luce del sole diretta.
      Probabilmente utilizzando direttamente i led a vista (senza la copertura in policarbonato) riesci a migliorare, ma in questo caso devi aumentare la risoluzione ed il numero di pixel utilizzati per superficie…

  • Pingback: pay doy loans()

  • Pingback: up and up payday loans()

  • Pingback: best money loan sites()

  • Pingback: top rated guaranteed payday loans()

  • Surfparadise

    Ciao, veramente un bel progetto!
    Stavo cercando di vedere come fare un video wall serio con Raspberry, (Una bestia da 20/25k pixels) ma a quanto ho capito il Raspberry non riuscirá mai a gestire una cosa di questo genere per colpa delle prestazioni.
    Domanda: E’ un problema del canale SPI o di processore/RAM? Cioè se invece di un raspberry ci attacco un computer serio con installato OLA, e attacco tutto con un convertitore seriale USB di tipo FDI sarebbe possibile?

    Grazie

    • Ciao,

      prima della limitazione sulla cpu credo che il collo di bottiglia sia la SPI. Dopo un tot numero di pixel impiega troppo tempo a “scrivere” tutti i dati sulla porta per cui avresti comportamenti strani e inattesi: dal non funzionamento al flickering, ritardo.

      Una soluzione potrebbe essere quella di moltiplicare le porte spi attraverso un demultiplexer, ma non ho idea di come potrebbe funzionare.

      Altra alternativa a cui avevo pensato era quella di creare tanti piccoli pannelli con un numero limitato di pixel, ciascuno con un proprio raspberry. E poi assemblare tutti i vari pannelli per formarne uno più grande… con tutti i raspberry collegati in rete.

      Qualche dettaglio in piu sui limiti e temporizzazioni lo trovi qui: http://www.openlighting.org/ola/tutorials/ola-led-pixels/

      • Surfparadise

        Grazie!

  • Matteo

    Ciao massimo, lavoro fantastico, complimenti.
    Sto cercando di riprodurlo come progetto scolastico, ma ho dei problemi con OLA, nel senso che quando vado ad aggiungere un nuovo universo, tra la lista delle porte disponibili, non vedo la SPI.
    Il plug in SPI è attivo e funzionante.
    Sai dirmi quale possa essere il problema?
    Uso raspberry p2 b, e 50 led WS2801.
    Grazie in anticipo! 🙂

    • Ciao, immagino già tu abbia provato a riavviare il demone ola più volte dopo aver cambiato la configurazione. Avviandolo da terminale in modalità debug sicuramente otterrai qualche messaggio d’errore in più. In ogni caso per questioni cosi specifiche ti consiglio di leggere e scrivere nel sito/ google group di OLA: https://groups.google.com/forum/#!forum/open-lighting

  • Giuseppe A

    Ciao, vorrei chiederti quale adattatore USB-DMX usi?

    Grazie

    • Ciao, all’inizio usavo un enttec-pro CLONE, ma era di bassa qualità. Attualmente siamo passati ad un più performante Enttec MKII originale

  • Matteo F

    ciao volevo sapere tu quale versione di ola ai usato?
    oltre a questo sto provando a farlo anche io, ma ho dei problemi con ola, con il plugin spi quando vado a creare gli universi tra la lista delle porte disponibili, non vedo la SPI cosa può essere il problema?

    grazie in anticipo.

  • Alberto Cauzzi

    Ciao, molto interessante tutto.
    Potresti darmi qualche dritta per poter gestire, invece che led in strisce, delle mattonelle 32×32 adafruit con raspberry PI 2.
    Te ne sarei grato.

    Grazie, Alberto

    • Ciao, non ho esperienza con i pannelli di adafruit, mi spiace.

  • Mattia

    Ciao
    E’ possibile utilizzare Arduino al posto della Raspberry ?
    Poi vorrei chiedere come avete collegato jinx a qlc+.
    Grazie

    • Ciao
      Esistono altri modi per comandare strisce led con Arduino, ma nello specifico di questo progetto non è possibile direttamente perchè OLA è un software linux, ha dunque bisogno di un vero OS su cui girare.
      Jinx e qlc sono collegati attraverso un universo Artnet. Da qlc invio 4 canali di input che vengono ricevuti e decodificati da jinx per comandare le scene.