TEN STARS

 

TEN STARS

Giochi di luce per una stella a dieci  punte

 

Che barba, che noia, che noia, che barba: tormentone finale di una coppia amatissima che purtroppo non c’è più.

In questi giorni di clausura forzata serve industriarsi per passare le giornate oltre a leggere giornali cartacei o su tablet e preparare pranzo e cena magari in modo più elaborato e limitarsi a pochi minuti d’aria sul balcone o quattro passi per andare a fare la spesa.

Forse il sottoscritto è più fortunato di tanti altri: abitando in un paese di montagna a vocazione turistica (3 mesi l’anno !) ho quasi tutto a portata di mano: dal supermercato al fornaio all’edicola.

Il progetto che mi accingo a presentare inizia ancora ai primi di febbraio quando i TG vari cominciavano a dare risalto a quello che stava succedendo in Cina.  L’idea nasce ancora a Natale dello scorso anno e tra i vari addobbi natalizi c’erano tre stelle a dieci punte abbastanza grandi e colorate dai classici festoni natalizi a uso decorativo.  Come in questa figura:

Avevo pensato come rendere più visibili queste stelle, ma poi preso da altri impegni ho accantonato appunto fino ai primi di febbraio. Ed ecco il risultato finale: (solo per esempio).

DEFINIZIONE DEL PROGETTO

La struttura della stella (telaio in metallo) come si può vedere dalle foto soprastanti è composta da dieci segmenti disposti a formare appunto una stella: ogni segmento è lungo circa 10 cm. L’altezza totale dalla punta al fondo è di circa 30 cm e la larghezza massima raggiunge quasi 40 cm.

Come renderla luminosa ?:

Inizialmente (sempre a Natale) utilizzando un filo di microled (quelli che si trovano dai cinesi proprio verso Natale)  montati su un filo smaltato in serie tra loro e alimentati a 3V, veniva avvolto tra un segmento e l’altro: non era molto luminoso ma qualcosa dimostrava.

Alla luce di tutto ciò ho pensato quale poteva essere il sistema per renderle più visibili e coreografici. E soprattutto (deformazione professionale) un sistema programmabile e il  più economico possibile.

Allora tirando fuori dal cassetto “elettronico” è saltato fuori:

Un buon numero di LED RGB (tipo WS2812) adoperati nella costruzione del maxi_orologio digitale presentato ancora a suo tempo. Ne avevo comprato quasi 200 in quanto tra prove e disastri vari ne avevo consumati più di 100. Soltanto il maxi_orologio ne porta via 112.

Un paio di Atmega328 (quelli montati su Arduino_1) come chip singoli, ancora un paio di Arduino_Nano  e  miscellanea varia tra condensatori, quarzi, alimentatori, ecc.

A conti fatti il materiale può essere  sufficiente e quindi ho iniziato a studiare il progetto.

Premetto che la soluzione trovata è solo farina del mio sacco: sicuramente migliorabile da tutti i punti di vista sia quello elettronico che quello costruttivo. Ma essendo di natura impulsivo quello che mi passa per primo per la testa è quello che poi cerco di realizzare senza pensarci più di tanto.

Ecco che cosa pensato e realizzato:

In ogni segmento della stella (10 segmenti) viene inserita una schedina che alloggia 5 led WS2812 cablati in  un piccolo PCB. Perché utilizzare questi led ? (al di là di averli in casa). Semplice con un solo filo (+ alimentazione) è possibile connettere in serie un numero praticamente illimitato di led con un’unica accortezza: un buon alimentatore da 5V da 1A minimo ma dipendente da quanti led sono connessi. E ognuno di questi è singolarmente indirizzabile. Non mi dilungo sulle caratteristiche di questi led e vi invito a leggere l’articolo sul maxi_orologio dal titolo “Un filo per un orologio”.

Inizio quindi con la produzione di un primo PCB (Numero 1).

Questo PCB rispetto ai successivi 9 presenta una R da 330 ohm all’ingresso del pin DATA_IN del primo led di tutta la catena. Dopo l’ultimo led un condensatore 100000pf su VCC/GND.  I successivi  PCB NON hanno questa resistenza in quanto necessaria solo all’inizio della catena. Per alloggiare saldamente questi PCB ai segmenti della stella si può notare come ai margini destro e sinistro vi siano due fori: in questi viene fatto passare e saldare un sottile filo di rame che si intreccia tra i due capi, posteriormente, al segmento fissando il PCB stesso.

E’ molto importante sapere che i led sono molto sensibili e permalosi ed è sufficiente invertire solamente l’alimentazione per bruciarli istantaneamente. Inoltre occorre verificare con certezza che la catena DATA_IN >>> DATA_OUT funzioni correttamente in quanto ogni led riceve proprio da questi pin l’informazione necessaria per accendersi e con quale colore. Un malfunzionamento di questa connessione è sufficiente per invalidare tutti i led che seguono quello difettoso. Mi è già capitato nella costruzione del maxi_orologio. Per avere la certezza della bontà del singolo led  avevo prodotto un PCB come quello della foto soprastante (con 8 led invece che 5) ma con un connettore femmina su cui inserire i led e provare con uno sketch apposito. Con questo sistema ho scoperto i led con problemi di connessione e accensione e quindi subito scartati. (Anzi in quarantena !!!).

IL PROSSIMO PASSO:

Definita quindi l’impostazione generale (ogni PCB verrà sistemato in ciascun segmento della stella) e prodotto i primi, inizio a studiare come gestire questa catena di led , quali giochi di luce progettare e se renderli programmabili o meno.

A questo proposito qualche tempo prima di pensare questo progetto, sempre in tema di sperimentazioni, ho acquistato 3 moduli Bluetooth HC05 appunto per provare anche questi sistemi. E così ho pensato: perchè non gestire in modo autonomo e indipendente i vari giochi di luce: più semplicemente perché non usare un tablet o uno smartphone ??. (Tanto prima o poi ci serviranno anche quando saremo al c….).

Allora dopo una serie di sperimentazioni sull’uso di questi moduli, ho deciso che i vari giochi saranno programmabili tramite questi moduli utilizzandoli in modalità terminale in modo interattivo. In internet (Play Store) se fate una ricerca delle APP che gestiscono i moduli Bluetooth avrete un elenco infinito valido per tutti i gusti. Ne ho selezionati e provati diversi tutti con caratteristiche speciali e specifici per certi usi, ma mi servivano solo quelli che effettuavano l’emulazione di un terminale. Ovvero un  Input/Output seriale da e verso lo sketch con cui inviare singoli caratteri  o stringhe. Ne ho selezionato due: “Bluetooth Terminal” (più affidabile), “Arduino Bluetooth Controller” (buono). Entrambi ricercano i device (attivare Bluetooth sul tablet) e dopo la connessione rimangono in attesa di ricevere messaggi o di trasmettere stringhe o caratteri singoli. E  non fanno altro.

Ottimo quindi per quello che mi serve: ovvero un colloquio interattivo tra lo sketch e il Bluetooth per comandare i vari giochi di luce.     

Il modulo Bluetooth è un HC05 che può essere usato come master o come slave. Occorre attivarli ma questa funzione viene eseguita la prima volta che vengono connessi e viene richiesta una password che può essere “0000” o “1234”. Quando acceso un led rosso inizia a lampeggiare velocemente fin quando non viene effettuata una connessione con un dispositivo periferico. A connessione stabilita lo stesso led lampeggerà ogni 4/5 secondi circa dimostrando l’effettiva connessione. Una volta attivati sono usabili e si può verificare l’indirizzo di ciascuno nella forma Mac_Address in modo da distinguerli. Sono anche personalizzabili entrando in modalità AT tramite una connessione seriale. Si può usare uno sketch Arduino con connessione seriale a 38400 oppure, come ho fatto io, usando un convertitore seriale tipo FTDI32 che ha anche la possibilità di gestire i segnali a 3,3v. Questa modalità permette di usare i comandi AT per personalizzare e verificare il modulo stesso. E’ da notare poi che la connessione seriale standard per l’I/O tra il modulo e le porte seriali di Arduino viene effettuata a 9600 baud. Anche questo valore può essere modificato sempre nella modalità AT. In rete come al solito potrete trovare molta documentazione più o meno esaustiva e anche come attivare la modalità AT. Dato che il modulo lavora  3,3V può essere necessario un convertitore da 5/3 bidirezionale oppure un partitore resistivo sul pin TX. Nella figura un esempio.

DEFINIZIONE DELL’ HARDWARE

Fatto esperimenti e prove con il modulo Bluetooth per verificare il comportamento sia del modulo che delle APP scaricate, ho iniziato a progettare l’HW per la gestione utilizzando i seguenti componenti:

  • Un micro ATMega328
  • Un modulo BLUETOOTH
  • Un convertitore di segnali tra 5 e 3v bidirezionale
  • Un micromodulo alimentatore da 3V
  • 2 Condensatori da 22pf
  • 1 Quarzo 16MHZ
  • 1 Condensatore elettrolitico 1000uf/25V
  • 1 Connettore femmina 4 pin (per FTDI32)
  • 1 Connettore femmina 6 pin (per modulo Bluetooth)
  • 1 Connettore jack per alimentazione generale a 5V

Il micro ATMEGA328 su cui viaggia lo sketch. Non usando la scheda di sviluppo ARDUINO_1 occorre un quarzo da 16MHZ e 2 due condensatori da 22pf. Per l’upload dello sketch a seguito della compilazione ho preferito portare su un connettore esterno la connessione tra i pin TX/RX del micro e i pin RX/TX del convertitore seriale FTDI32 e utilizzare il segnale DTR per resettare il micro per portarlo in modalità upload. Una volta funzionante non è necessario che detto convertitore sia  sempre presente in quanto serve soltanto per ricaricare lo sketch. In teoria una_tantum. Un altro connettore esterno da sei pin serve a connettere il modulo Bluetooth. Anche in questo caso ho preferito la possibilità di estrazione per il riutilizzo del modulo stesso.

Per quanto riguarda l’alimentazione ho ritenuto sufficiente un carica batterie per smartphone che fornisce 5V con 1A. Da prove anche con tutti i led accesi (ricordarsi che il massimo assorbimento di ogni led si ha quando vengono accesi con colore bianco cosa che non avviene nel contesto), anche dopo qualche ora, non si rilevano surriscaldamenti e questo tipo di carica batteria  rimane “freddo”.

SCHEMI E PCB

 Non ho disegnato schemi in quanto  sono partito da alcuni PCB disegnati per altri progetti e riadattati allo scopo. Nella foto il PCB base che alloggia tutti i componenti:

Vediamo allora come è disposto: In basso a sinistra le due piazzole per l’alloggiamento del jack di alimentazione. Sopra: il condensatore da 1000uf, le 3 piazzole per la connessione VCC/GND/DATA_IN (pin 4) della catena dei led, le 5 piazzole per la connessione RX/TX tra Arduino e il modulo FTDI32. In basso l’alloggiamento del modulo alimentatore 3V per alimentare sia il modulo Bluetooth che il modulo convertitore bidirezionale 5/3V per i segnali TX/RX tra il modulo e Arduino. Per inciso il  modulo Bluetooth si connette ad Arduino ai pin 3 e 2. (RX/TX). Il connettore a sei pin in alto a destra per connetterlo. Le connessioni in rosso sono “ponticelli”. “RS” è un jumper a cui connettere un pulsante per il “reset” di Arduino.

Nella foto sottostante la scheda completata e la sua “serigrafia”.

Se qualcuno è curioso di sapere come ho ottenuto questa “serigrafia” ecco il sistema: L’applicazione PCB_EXPRESS che ormai uso da anni permette anche di stampare in formato 1:1 tutto quanto è stato disegnato come componenti. Quindi dopo averlo stampato e ritagliato nelle sue dimensioni viene sottoposto alla plastificazione per ottenere un supporto sufficientemente rigido sia per la foratura che per l’incollaggio sulla piastrina che avviene senza colla ma solo con la pressione dei vari componenti zoccolatura compresa.

DEFINIZIONE DEL SOFTWARE

Di solito prima di produrre PCB in modo definitivo inizio con una programmazione “soft” ovvero con uno sketch minimale con cui provare le connessioni base e la bontà di funzionamento dei dispositivi. Ho sempre un Arduino_1 e un Arduino_Nano con cui fare prove con cablaggi volanti.

Come ho preannunciato in apertura i giochi di luce devono essere vari e programmabili: un sistema che permetta di interagire tramite Bluetooth.

Per cui:

I led WS2812 vengono gestiti dalla libreria Adrafuit_NeoPixel con cui possiamo accendere spegnere singolarmente ciascun led con colori diversi (nel range R-G-B) e luminosità crescente o decrescente.

Il modulo Bluetooth non necessita di libreria particolare, ma è connesso in modo seriale con le funzioni “Software Serial” insite nelle librerie di Arduino.  Queste hanno le stesse funzionalità di quelle standard seriali.

Nello sketch è comunque prevista la possibilità di effettuare un debug (su porta seriale tramite Hyper_Terminal) per verificare i vari processi.

Per prime operazioni svolte nel classico “setup” si possono così riassumere:

  • Inizializzazione della libreria Adafruit_Neopixel. Settaggio luminosità minima e spegnimento immediato. Ciò è necessario altrimenti la catena si accende con colori casuali e luminosità alta.
  • Inizializzazione della libreria Software_Serial (9600 baud) per accedere al modulo Bluetooth
  • Richiesta se attivare o meno il debug: ciò può avvenire se entro tre secondi dalla emissione del messaggio si risponde digitando un carattere qualsiasi. Viceversa (anche con monitor seriale spento) il debug non si attiva e non verranno emessi messaggi. Questa funzionalità è servita per il debug dello sketch e anche per provare singolarmente ogni catena dei led. E’ previsto infatti, che il numero dei led attivi (50 alla fine) venga dichiarato soltanto in modo debug se minore di 50. A sketch concluso non serve più.
  • Si invia al modulo Bluetooth un “menu” di comandi per gestire i giochi di colore.
  • Si effettua la prima accensione della catena dei led con il colore rosso.

Il metodo di accensione dei led deve tener presente che devono rimanere accesi fino a quando non interviene un nuovo comando uguale o diverso dal precedente. Ora, mentre per i comandi che accendono tutti i led di colore diverso (tutti insieme e in modo statico) restano accesi, per quei codici giochi che prevedono movimenti diversi occorre che alla fine del movimento programmato, questo gioco ricominci il suo ciclo.

Il ciclo dello sketch, come da prassi, viene eseguito dalla procedura “loop” ed è estremamente sintetico: sono soltanto quattro “if”.  Perché il ciclo viene avviato aspettando che dal modulo Bluetooth venga inviato uno dei codici programmati e visibili dal menù. Quindi un loop infinito e nel frattempo la stella sarà accesa di colore “rosso” (comando effettuato nel setup).

In questa foto possiamo vedere la schermata sul tablet del menu inviato:

 

Quando l’APP si connette e riconosce il modulo viene emesso il Mac_Address del modulo stesso. L’attivazione del modulo può avvenire in qualunque momento anche a sketch attivato e Stella accesa. Sarà sufficiente richiedere il rinvio del menù per iniziare a comandare le funzioni previste. Questo è possibile anche resettando il sistema con il pulsante “reset”.

Allo stato dell’arte le funzioni previste per i vari giochi di luce sono le seguenti:

1-6

Accensione di tutta la catena dei led con i colori programmati:

1: Rosso, 2: Verde, 3: Blue, 4; Giallo, 5: Rosa, 6: Celeste

La catena rimane accesa sul colore scelto. Il colore scelto rimane poi a disposizione di altri giochi se non espressamente dichiarato.

7

Accende in sequenza tutti i colori programmati.

S

Accende in sequenza tutti i i led della catena per tutti i colori programmati.

T

Accende in sequenza una catena alla volta spegnendo quella precedente.

t

Come per il gioco “T” ma ogni catena rimane accesa.

M

Accende in sequenza i singoli led di ogni catena spegnendoli successivamente in sequenza.

B

Blink dell’intera catena per un periodo pari a 5.

F

Fading: accende l’intera catena aumentando la luminosità in modo crescente per poi effettuare un ciclo decrescente della luminosità.

R

Reset dei valori di ritardo e della luminosità (Lumen= 5, Delay= 100ms).

D/d

Aumenta (D) o diminuisce (d) i valori di delay di 50 ms.

L/l

Aumenta (L) o diminuisce (l) i valori della luminosità di 5 valori.

0

(zero)

Richiesta di rinvio del menù funzioni.

P

Programmazione dei giochi:  dopo l’invio di questo codice viene richiesta una stringa massima di 18 caratteri chiusa dal ‘#’.  Ogni carattere digitato rappresenta il codice del gioco che deve essere eseguito. Quindi diviene possibile inserire una serie di codici giochi diversi che verranno eseguiti sequenzialmente fino a quando non verrà richiesto un nuovo codice. Allo stato dell’arte i codici “L/l” e “D/d” non devono essere inseriti in quanto non considerati. E’ comunque  possibile inviare questi codici in qualunque momento: verranno presi in considerazione al termine del ciclo programmato. Ciclo che riprenderà poi dall’inizio come per tutti gli altri giochi singolarmente.

Ogni gioco rimane in esecuzione fino a quando non viene inviato dal Bluetooth un nuovo codice gioco. Per cui è possibile che l’esecuzione del nuovo gioco inizi quando il ciclo del gioco precedente termina. Ma si dovrà attendere la fine del gioco precedente.

Una particolarità sulla funzione “P”: questa funzione permette di programmare una sequenza di giochi di luce: per cui una volta programmati questi giochi saranno riciclati fino quando non verrà ricevuto un nuovo comando. Esempio: “1B2F3M#” il ciclo sarà: Blink di colore rosso(1), Fading di colore verde(2), M =Led singoli di colore blu(3).

I comandi “D/d” aumentano  diminuiscono di 50ms i ritardi di esecuzione delle singole funzioni e quindi l’accensione periodica dei singoli led o segmento. Lo stesso dicasi per i comandi “L/l” che aumentano o diminuiscono la luminosità dei led. Questi comandi non possono essere inseriti nella stringa di comandi della funzione “P”. Ogni codice “D/d” aumenta o diminuisce di 50 ms il delay. Ogni codice “L/l” aumenta o diminuisce la luminosità  di un valore pari a 50. I nuovi valori vengono inviati anche sul modulo Bluetooth.

Dopo aver ricevuto un singolo comando (che sarà sempre un carattere ASCII) e discriminato il codice “P” viene lanciata la funzione “Analisi”: in questa avviene il riconoscimento del comando e la sua esecuzione con una successiva funzione “Exec_Giochi” che avvia le singole routine dei giochi. Tenendo sempre presente la ricorsività dei giochi stessi nel senso che se non vengono ricevuti comandi diversi dal modulo Bluetooth questi vengono ripetuti.

Nella routine Exec_Giochi il comando “P” effettua una “ricorsività” nella stessa routine richiamandola per ogni codice gioco estratto dalla tabella dei giochi inseriti e lancia l’esecuzione del comando stesso richiamando, appunto, la stessa routine Exec_Giochi. Questo ciclo ovviamente finisce quando si esauriscono i comandi inseriti per rientrare nel ciclo principale.   

STATO DELL’ ARTE:

Allo stato odierno, lo sketch può definirsi completo (fino a quando non studierò altri giochi di luce) almeno per quanto riguarda i giochi programmati. Si compone oltre 700 righe considerando però che circa un centinaio di righe iniziali sono solo dei commenti senza contare anche quelli inseriti tra le righe del codice. Quindi a mio parere leggibile da tutti.

Il passo successivo sarà: la costruzione di un contenitore per raccogliere il circuito, un sistema di protezione dell’intera struttura della stella in previsione della esposizione all’esterno per prevenire (dato che verrà usato nei mesi invernali come decorazione esterna) le intemperie. Un modesto video per mostrare una parte dei giochi: meglio non sono riuscito a fare.

NOTA FINALE:

Il modulo Bluetooth una volta attivato e in linea con una APP (una qualsiasi di quelle usate) non presenta problemi salvo quando sempre dalla APP, viene disattivato effettuando la disconnessione o chiudendo l’ APP. Ciò provoca l’invio di una stringa tipo “+DISC:SUCCESS  OK” lunga 17 caratteri. In esadecimale: 2B 44 49 53 43 3A 53 55 43 43 45 53 53 DA 4F 4B DA”.  In due caratteri in  rilievo “DA” vengono interpretati dal Hper_Terminal come se fossero CR/LF (carriage_return, line_feed) mentre invece sono valori che non hanno una corrispondenza in ASCII. Questa stringa causa la perdita del codice gioco attivo in quel momento vanificando eventuale sequenza programmata e attiva. Mi riservo di trovare una soluzione specifica per evitare questo inconveniente.

Concludo ringraziando gli Elettroamici che hanno avuto la pazienza di leggere e se ho scritto qualcosa di errato correggetemi. Sempre a disposizione per approfondimenti e aggiustamenti. 

GVSOFT (APRILE 2020)

VOTO
3 commenti
  1. Amilcare
    Amilcare dice:

    Come al solito eccellenti proposte e, come se non bastasse circuiti aperti in maniera da prendere spunto per realizzare con piccole modifiche cose anche molto differenti dal punto di partenza. Per me approvazione piena

    Approvazioni
    • gvsoft
      gvsoft dice:

      Grazie per i vs commenti: adesso sto verificando nuovi giochi di luce e forse ho trovato anche come verificare la disconnessione della APP con quel famoso messaggio.

      Approvazioni
  2. Picmicro675
    Picmicro675 dice:

    Grazie del progetto.
    Posso dire che sebbene non è ancora Natale ci sta bene a chi interessa per il tempo a disposizione.
    Poi a secondo dei gusti si potrà scegliere le sagome preferibili. Anche i 10 segmenti per fare una stella sono molto aggrazianti.

    Le cose che mi hanno dato maggior attratto sono la descrizione come accedere ad un ATmega328, senza la veste ordinaria di quelli di Ivrea. Infatti, se ci penso, il mio filtro avrebbe fatto il suo lavoro anche senza il modulo per il Nano.
    In quanto al modulo HC-05, si può anche andare a 57600, provato con il filtro.

    Infine con Giuseppe, ho provato a pilotare i WS2812 con un PIC12F1840 e si riesce bene. con alcuni effetti pre programmati nella flash di programma.
    Carino che si riesce far stare in un 8 piedini diverse cose e magari si riesce simile a questo progetto.
    Comunque un bel lavoro.

    Approvazioni

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento

Specify Instagram App ID and Instagram App Secret in Super Socializer > Social Login section in admin panel for Instagram Login to work