Arduino-y-Protocoder-LED

Oggi aggiungiamo una lezione al nostro corso Programmare con Arduino e Protocoder per makers, nella quale impareremo ad usare matrici di LED per creare animazioni per il nostro robot. In questo caso, useremo la matrice per creare un occhio che controlleremo da remoto usando Protocoder.

Lista dei materiali

  • Scheda ZUM BT-328
  • Matrice di LED: Questa volta utilizzeremo una scheda basata sul chip  MAX72xx.
  • Comodoro: Scarica i files dei nostri robots che trovi alla fine del post.

Codice di programma per Arduino

Il codice di Arduino riceve i dati dal programma Protocoder e muove gli occhi in specifiche posizioni, che dipendono dai comandi ricevuti. Gli occhi lampeggeranno a caso per un certo periodo. Per controllare la matrice di LED useremo la libreria LedControl, che puoi scaricare qui oppure insieme al resto del codice alla fine di questo post. Se vuoi conoscere tutte le possibilità offerte da questa libreria, puoi trovare maggiori informazioni nella pagina  Arduino Playground. Per iniziare a programmare con Arduino, dovremo includere la libreria, definire i pins e creare un oggetto LedControl, che abbiamo chiamato LM:

Con l’ultima linea di codice abbiamo creato l’oggetto LM, che useremo per controllare la matrice di LED. Creiamo anche la variabile inString che memorizzerà i dati ricevuti via Bluetooth. Le funzioni readFromAndroid e writeData, memorizzano i dati in inString per “scegliere” come devono “comportarsi” gli occhi. Se vuoi sapere di più su queste funzioni visita questo sito web.

In questo caso, appena il messaggio è stato interamente letto (dopo la ricezione del carattere ‘=’), cancelliamo lo schermo usando il comando  LM.clearDisplay(0); per essere sicuri che è posizionato correttamente. Nel “setup”, avviamo la porta seriale, attiviamo la matrice di LED (che per default è impostata in modalità risparmio-energia), imposta la luminosità al massimo, “azzera”, e finalmente programma gli occhi per sembrare al centro.

Due routine di verifica sono state incluse, testPos(), che cambia la posizione degli occhi e test(), che accende i LED uno alla volta. Per generare differenti modalità di lampeggio, possiamo usare una matrice da un file nella sezione di download, dove contrassegnamo quali LEDs vogliamo accendere e “tradurlo” in programma . Useremo questa funzione per accendere un LED:

Lo stato può essere vero falso, per commutare il LED acceso o spento. Qui c’è la matrice per la funzione lookCenter() che muove gli occhi rivolti in avanti: GRID-LEDQui c’è il codice per Arduino:

Questo ci permette di generare differenti motivi con i LEDs. Nel nostro caso, le funzioni sono state generate per emulare le posizioni della pupilla (lookLeftlookRightlookUplookDown e lookCenter), come anche funzioni che emulano l’ammiccare degli occhi (blinkCloseblinkOpen e fullBlink). La variabile delayBlink cambia la velocità con cui varia l’apertura e la chiusura dell’occhio. La useremo per velocizzare o ridurre la velocità di ammiccamento. La funzione fullblink utilizza, come parametro, il tempo che intercorre tra l’apertura e la chiusura dell’occhio. La utilizzeremo per velocizzare o ridurre la frequenza con cui si aprono gli occhi.

Le funzioni blinkOpen e blinkClose aprono e chiudono gli occhi,  e usano la variabile delayBlink per variane la velocità di esecuzione. Per ultimo, la funzione loop controlla la routine di lampeggio e le funzioni che ricevono i dati via Bluetooth, readFromAndroid e writeData.

Per controllare il lampeggio degli occhi, useremo la prima parte del codice:

Per variare la velocità di lampeggio ogni volta che viene eseguita la routine, ci sono due funzioni (singola e doppia), che sono simili. Per prima cosa dobbiamo controllare se il tempo trascorso è maggiore del tempo a cui deve variare lo stato degli occhi. Se la condizione è vera, verrà eseguita la routine di lampeggio e re-impostato il prossimo evento, aumentando di una quantità variabile, random, il numero che determina l’evento successivo. Per leggere il testo inviato da Protocoder via Bluetooth, viene usato il seguente codice:

Codice per Protocoder

Il programma che sviluppiamo con Protocoder invierà i dati alla scheda Arduino via Bluetooth. bq_Aquaris_E4_250Per iniziare il programma utilizzeremo la intestazione già utilizzata in altri programmi, aggiungendo la gestione della connessione/disconnessione Bluetooth. Se vuoi approfondire il funzionamento di questa parte di codice guarda questa parte di corso.

bluetoothPer inviare dati alla scheda ZUM, useremo la funzione send che prende le stringhe da inviare come parametro. Per esempio, per far girare l’occhio a destra, la funzione deve inviare la parola “right”, cioè send(“right”);.  Il codice della funzione send è:

Ora creaimo il pulsante che determina la posizione dell’occhio. Per associare ad ogni pulsante un immagine, carichiamo i file immagine che vogliamo utilizzare con Protocoder, che poi utilizzeremo nella creazione del pulsante come di seguito:

botonesOJOSPer aggiustare la grandezza e la posizione dei pulsanti, useremo due variabili:

  • WidthImg, usata per assegnare altezza e larghezza dell’immagine.
  • posX, usata per determinare la posizione X dei pulsanti.

Nel nostro caso, includiamo la funzione send(); all’interno della funzione attivata quando viene premuto il pulsante, inviando l’ordine corrispondente alla posizione:

Disegno 3D: Comodoro

Per creare il disegno del Comodoro, abbiamo utilizzato il programma Blender. Comodoro-sepiaPer stampare il disegno, utilizzeremo Cura con le seguenti impostazioni per generare i supporti: preferencias-soporteQuesti supporti sono facilmente asportabili e danno stabilità all’oggetto da stampare. In Cura, la scala è stata modificata a 40.79 per adattare il disegno alle dimensioni della nostra matrice di LED, ma puoi variare la scala in base alla matrice che hai. Comodoro Size