Display per orologio vittoriano: 350 LED e una scheda di controllo per controllarli tutti
In un blog precedente, "Ricreare i display di epoca vittoriana a 21 segmenti", ho raccontato di come, con il mio amico appassionato di fai-da-te (e maker straordinario) Steve Manley, sto creando delle moderne rivisitazioni dei display vittoriani a 21 segmenti. Al posto delle piccole lampadine a incandescenza che illuminavano il display originale, stiamo usando i LED WS2812B a tre colori, come il modello 4684 di Adafruit Industries LLC.
E, al posto di un complicato interruttore elettromeccanico per controllare tutto - che per quei tempi sarebbe stato un prodotto allo stato dell'arte - stiamo usando una moderna unità microcontroller (MCU), che per gli ingegneri e inventori vittoriani sarebbe stato qualcosa di sbalorditivo.
Sia Steve che io stiamo creando display da 10 caratteri. Solo per darvi un'idea del loro aspetto, la Figura 1 mostra una prima implementazione del display di Steve con un pannello frontale stampato in 3D verniciato color ottone. In questo caso, Steve sta eseguendo un semplice schema di test per controllare che tutti i LED funzionino.
Figura 1: Prima implementazione a 10 caratteri della moderna rivisitazione dei display vittoriani a 21 segmenti. (Immagine per gentile concessione di Steve Manley)
Come potete vedere, il pannello in pseudo-ottone di Steve è diviso in due metà perché la sua stampante 3D non poteva gestire l'intera larghezza di 51 cm del display. Inoltre, Steve ha optato per 10 grandi "fori" nel suo pannello frontale attorno ai bordi esterni dei suoi caratteri. Il mio pannello frontale, invece, è stato tagliato al laser da un singolo pezzo di acrilico con una finitura in ottone (Figura 2).
Figura 2: Elementi principali del display a 10 caratteri. In primo piano si vede il pannello di acrilico tagliato al laser in pseudo-ottone. Dietro questo pannello ci sono dieci gusci stampati in 3D, alti 64 mm, larghi 50 mm e spessi 10 mm. In alto ci sono dieci schede LED viste da dietro, raggruppate in cinque sottoinsiemi di due schede l'uno. (Immagine per gentile concessione di Max Maxfield)
Ogni scheda è larga 50 mm e alta 64 mm. Queste schede sono raggruppate in cinque sottoinsiemi di due schede l'uno. Ci sono anche dieci gusci stampati in 3D che hanno le stesse dimensioni delle schede e uno spessore di 10 mm. Nel caso del mio pannello di pseudo-ottone tagliato al laser, il laser è riuscito a tagliare i 21 segmenti che formano ogni carattere, lasciando sottili strisce di 0,7 mm tra un segmento e l'altro.
In passato, io e Steve abbiamo lavorato a progetti simili, di solito in una competizione amichevole, come nel caso degli ingegnosi cronografi che abbiamo creato un paio di anni fa (Creare un ingegnoso cronografo con Arduino). Anche se ci eravamo prima messi d'accordo sulle regole di base, come il numero e le posizioni dei LED, ognuno è andato per la sua strada quando si è trattato di MCU, clock in tempo reale (RTC) e così via. Il problema con questo approccio è che ha reso quasi impossibile condividere e scambiarci il codice.
Inoltre, ogni volta che iniziamo a lavorare a un nuovo progetto, finiamo entrambi per "reinventare la ruota", il che è uno spreco di tempo e di energie. Così, in questo caso, abbiamo deciso di creare un'unica scheda di controllo che avremmo usato entrambi per pilotare i nostri display. Abbiamo anche deciso di creare una scheda con tutti i fronzoli necessari per alimentare progetti futuri per gli anni a venire.
Scoprite la nostra scheda di controllo del display vittoriano
Dopo molto brainstorming, negoziazioni e compromessi, siamo arrivati a un design che ha soddisfatto tutte le nostre esigenze. Forse la cosa migliore da farsi è mostrarvi la scheda (Figura 3) e poi illustrare brevemente le varie parti.
Al centro sulla sinistra abbiamo il processore principale, un Teensy 3.6 DEV-14058 di SparkFun Electronics. Ha un processore Arm Cortex-M4F a 32 bit da 180 MHz (può essere portato fino a 240 MHz) con 1 MB di flash, 256 kB di SRAM e 4 kB di EEPROM.
Figura 3: La prima versione della nostra scheda di controllo, a partire dalla scheda processore DEV-14058 Teensy 3.6 basata su un core Arm Cortex-M4F, sulla sinistra. (Immagine per gentile concessione di Steve Manley)
Dietro il Teensy, sul lato più lontano della scheda, due potenziometri possono essere utilizzati per controllare tutto ci; che vogliamo, come la luminosità del display o la sensibilità al suono. A destra del Teensy, le basette permettono di accedere ai pin di ingresso/uscita (I/O) non vincolati dell'MCU.
Davanti al Teensy c'è una batteria a bottone CR2032 usata per mantenere l'RTC quando si toglie l'alimentazione principale dal sistema. Davanti al CR2032 a destra, le basette permettono di collegare alla scheda altri sensori e attuatori basati su I²C. Davanti al CR2032 a sinistra ci sono otto gruppi di basette a tre pin, ognuno dei quali comprende un pin 0 V, un pin 5 V e un pin dati. Ognuno di questi può pilotare una stringa di LED WS2812. Inoltre, al Teensy è associata una libreria di LED Octo in grado di pilotare contemporaneamente otto stringhe.
Nel caso dei nostri display a 21 segmenti, ognuno dei sette segmenti più corti ha un solo LED, mentre i quattordici segmenti più lunghi hanno due LED ciascuno, quindi 35 LED per carattere, per un totale di 350 LED per il display a 10 caratteri. Ogni LED richiede 24 bit di dati e il clock utilizzato per caricare i LED funziona a 800 kHz. Ciò significa che se dovessimo pilotare tutti i LED da un singolo pin della MCU, per caricare la catena ci vorrebbero ((35 x 10) x 24)/800.000 = 10,5 ms.
Usando invece la libreria Octo di Teensy e partizionando i nostri 10 caratteri in cinque coppie di due caratteri, possiamo ridurre questo tempo a soli ((35 x 2) x 24)/800.000 = 2,1 ms. In più, la libreria Octo può utilizzare il motore di accesso diretto alla memoria (DMA) di Teensy per eseguire questo caricamento in background, liberando così il processore principale per altri compiti, come calcolare i nostri incredibilmente ingegnosi effetti di luce.
I cinque temporanei interruttori a pulsante al centro della scheda sono usati per accedere ai menu, selezionare modalità ed effetti e inserire i valori (ad esempio, data e ora). Inoltre è possibile collegare in parallelo cinque interruttori montati sull'armadio utilizzando i terminali verdi a vite montati sui bordi della scheda. Abbiamo anche deciso di includere la capacità di controllo a infrarossi (IR) che può essere utilizzata per eseguire gli stessi compiti dei pulsanti. Il rilevatore IR si trova sotto il pulsante centrale. Sopra questo pulsante c'è un resistore sensibile alla luce (LDR) che può essere usato per controllare la luminosità del display in base alla luce ambiente. Sopra questo LDR c'è un microfono a elettrete che possiamo usare per indurre il display a rispondere al suono. Tutti questi dispositivi possono essere rimossi dalla scheda, montati sull'armadio e collegati alla scheda tramite i morsetti verdi a vite.
Sul lato destro della scheda, c'è un Seeeduino XIAO 102010328 di Seeed Technology. Anche se è grande solo come un francobollo, lo XIAO è molto potente, con un core di processore ATSAMD21G18 Arm Cortex-M0+ a 32 bit a 48 MHz con 256 kB di memoria flash e 64 kB di SRAM. Lo XIAO è usato per elaborare qualsiasi segnale di controllo IR e alimentarlo al Teensy. Si potrebbe pensare che sia eccessivo (perché potremmo quasi certamente usare il Teensy per gestire direttamente l'IR), ma abbiamo deciso che un approccio "divide et impera" ci avrebbe reso la vita molto più facile, nel lungo periodo.
Tutti i dispositivi a montaggio superficiale (SMD) si trovano sotto la scheda. Comprendono un RTC DS3231SN# di Maxim Integrated, un codec audio stereo a bassa potenza SGTL5000XNAA3R2 di NXP, un chip antirimbalzo dell'interruttore LS119-S di LogiSwitch e un transceiver di bus ottale 74HCT245 che funge da traslatore di livello di tensione di Toshiba Electronic Devices and Storage Corp.
Nella Figura 4 si vede la scheda di controllo rossa montata sul retro del mio display. Viene mostrata anche una scheda verde di distribuzione dell'alimentazione, che include un robusto regolatore da 3,3 V utilizzabile per pilotare, all'occorrenza, eventuali sensori aggiuntivi da 3,3 V.
Figura 4: Assemblaggio di un display da 10 caratteri. La scheda di controllo rossa si trova sulla destra dell'immagine. La scheda verde sulla sinistra è usata per distribuire l'energia alle schede e ai display. (Immagine per gentile concessione di Max Maxfield)
Sulla destra del display, non in figura, c'è una scheda di prototipazione blu. Abbiamo quindi schede rosse, verdi e blu (RGB), il che "ha solleticato il nostro senso dell'umorismo". Idealmente, la scheda di distribuzione dell'alimentazione avrebbe dovuto essere rossa e quella di controllo verde, ma per ragioni sconosciute il produttore della scheda ci avrebbe fatto spendere molto di più per darci il rame più spesso richiesto per la distribuzione dell'alimentazione su un substrato rosso, per cui abbiamo fatto la scelta giusta per risparmiare.
Programmare la scheda di controllo
Ora inizia il vero divertimento, perché dobbiamo iniziare a scrivere il codice per pilotare il display. Un approccio che pensiamo di usare è quello di avere un colore per lo sfondo, uno per il primo piano e una maschera. Quando un bit della maschera è impostato a 0, il segmento corrispondente mostrerà il colore di sfondo; quando lo stesso bit della maschera è impostato a 1, quel segmento mostrerà il colore di primo piano. La cosa interessante è che entrambi i colori di primo piano e di sfondo potrebbero essere statici come il nero, il bianco o qualche altro colore. In alternativa, uno o entrambi i colori di primo piano e di sfondo potrebbero essere dinamici, come le strisce arcobaleno che attraversano il display, ad esempio.
Conclusione
Ci sono molti altri esperimenti che abbiamo intenzione di fare utilizzando questi display di orologi vittoriani nuovi di zecca. Ad esempio, usando il microfono e il chip codec audio, potremmo avere una modalità audio-reattiva (vedere anche Artefatto audio-reattivo con Arduino Parte 1 e Parte 2). Un'altra cosa che mi piacerebbe provare è aggiungere la possibilità di far "scorrere" il testo sul display inclinandolo a sinistra o a destra (vedere anche Aggiungere la capacità di rilevare movimento e orientamento in progetti amatoriali).
Per concludere, continuo a pensare a George Lafayette Mason che ha richiesto il brevetto per i display originali a 21 segmenti nel 1898, ben 123 anni. Mi chiedo cosa penserebbe George se potesse vedere cosa stiamo facendo con la sua idea usando le tecnologie di oggi.

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum