EUR | USD

Aggiungere la capacità di rilevare movimento e orientamento in progetti amatoriali

Non so perché, ma ho sempre avuto la passione per i progetti amatoriali con i LED. Quando vedo un LED che lampeggia non capisco più niente. Negli ultimi tempi ho iniziato ad aggiungere ai miei progetti amatoriali anche la capacità di rilevare movimento e orientamento. Ho appena aggiunto questa funzionalità a una matrice di palline da ping pong di 12 x 12, ognuna delle quali è dotata di un LED a tre colori.

Ma è meglio partire dall'inizio. Nella primavera del 2020, stavo scambiando alcune battute via e-mail con un amico ingegnere australiano in pensione che si chiama David Humrich. Mi stava dicendo che aveva acquistato una piccola matrice di LED a tre colori e mi chiedeva consigli su cosa farne. Allora ho pubblicato un breve video di un semplice programma di tipo slither.io che avevo realizzato alcuni anni prima con una matrice di LED 8 x 8.

Creando questo video per David, mi sono ricordato che da tempo volevo creare una matrice più grande. Avevo visto alcune creazioni molto interessanti con palline da ping pong e quindi decisi di perseguire quella strada. Iniziai acquistando una grande busta di palline da ping pong economiche, che montai su una matrice di 12 x 12 = 144 (Figura 1).

Figura 1: Eccomi mentre tengo orgoglioso in mano la mia matrice di palline da ping pong di 12 x 12, ognuna contenente un LED a tre colori (Immagine per gentile concessione di Max Maxfield)

Per la scelta dei LED, la serie NeoPixel basata su driver LED a tre canali WS2818 di Adafruit si dimostrò un'ottima soluzione, in particolare la striscia 1376 con 30 NeoPixel per metro. Con questa striscia di cinque metri avevo a disposizione 150 pixel: 144 per la matrice, uno come convertitore del livello di tensione e cinque di scorta. Tagliai la striscia in pezzi da un pixel che attaccai sul retro di ogni pallina da ping pong.

Alla fine cablai i pixel a zig-zag, partendo da un angolo e proseguendo avanti e indietro in questo modo per tutta la matrice. In realtà, se decidete anche voi di creare una matrice, non importa in che ordine cablate i pixel perché la matrice è composta da 12 colonne (asse X) e 12 righe (asse Y), entrambe numerate da 0 a 11, con il pixel [0,0] nell'angolo inferiore sinistro guardando la matrice. Quindi, quando scriveremo un programma per comandarla, includeremo una funzione chiamata ad esempio GetNeoNum(), che accetterà i valori X e Y come argomenti e restituirà il numero di pixel corrispondenti nella stringa utilizzando un algoritmo che dipenderà dal modo in cui abbiamo cablato la matrice.

Per comandare questa matrice, mi serviva un microcontroller con una quantità sufficiente di memoria, un clock relativamente veloce e una buona capacità di elaborazione, perché avevo intenzione di implementare alcuni effetti interessanti, tra cui le transizioni multicolore. Optai quindi per Seeeduino XIAO 102010328 di Seeed Technology (Figura 2). XIAO contiene un microcontroller SAMD21G18 ATSAMD21G18A-MUT di Atmel e le sue dimensioni pari a un francobollo rendono la scheda di sviluppo con microcontroller Arduino compatibile più piccola in assoluto della famiglia Seeeduino. Il microcontroller include un processore Arm Cortex-M0+ a 32 bit e 48 MHz, 256 kB di memoria flash e 64 kB di SRAM.

Figura 2: Attualmente la più piccola scheda di sviluppo per microcontroller compatibili Arduino della famiglia Seeeduino, Seeeduino XIAO è compatibile con basetta sperimentale e offre un potente processore Arm Cortex-M0+ a 32 bit da 48 MHz. (Immagine per gentile concessione di Seeed Studio)

Ognuno degli 11 pin di XIAO può essere utilizzato come ingresso analogico, digitale o uscita digitale. Dieci dei pin supportano la modulazione della larghezza di impulso e uno è dotato di un convertitore digitale/analogico (DAC) per una vera capacità di uscita analogica. Inoltre, se necessario, i pin 4 e 5 possono essere utilizzati per supportare un'interfaccia I2C, i pin 6 e 7 un'interfaccia UART e i pin 8, 9 e 10 un'interfaccia SPI.

Come ho accennato in precedenza, negli ultimi tempi ho iniziato ad aggiungere ai miei progetti amatoriali anche la capacità di rilevare movimento e orientamento. Come test, ho deciso di aggiungere queste funzionalità alla mia matrice di 12 x 12 di palline da ping pong.

Volevo realizzare una piccola scheda di breakout (BOB) con un sensore a sistema microelettromeccanico (MEMS) contenente un accelerometro a 3 assi, un giroscopio a 3 assi e un magnetometro a 3 assi. Non ci ho messo molto a capire che manipolare i dati puri del sensore mi avrebbe fatto impazzire. Come alternativa, ho deciso quindi di utilizzare la BOB 2472 di Adafruit, che include un sensore BNO055 di Bosch a 9 gradi di libertà.

Figura 3: Oltre a un accelerometro a 3 assi, un giroscopio a 3 assi e un magnetometro a 3 assi, il sensore BNO055 sulla BOB 2472 di Adafruit include anche un processore Arm Cortex-M0 che esegue la fusione sensoriale. (Immagine per gentile concessione di Adafruit)

La BOB comunica con il microcontroller XIAO utilizzando un'interfaccia I2C a due fili. L'aspetto straordinario del sensore BNO055 è che contiene anche un processore Arm Cortex-M0+ a 32 bit, che prende i dati puri dei tre sensori, esegue una sofisticata fusione sensoriale e restituisce i dati che mi servono in un formato utilizzabile. Come si può vedere in questo video, il mio primo test consisteva nel tenere la matrice orizzontalmente e poi far girare una "pallina" (pixel) al suo interno, inclinandola.

Conclusione

Il primo test ha funzionato molto meglio di quanto mi aspettassi ma in realtà era piuttosto elementare. Non facevo altro che rilevare quando l'inclinazione della matrice superava un determinato valore (impostato su 10 gradi) e, a quel punto, far spostare la "pallina" nella direzione corrispondente a una velocità costante. Il passo successivo consisterà nel modellare in modo più preciso aspetti come l'inerzia e l'accelerazione e poi usarli per implementare una serie di giochi.

La cosa più importante è che questi primi esperimenti mi hanno invogliato ad aggiungere la capacità di rilevare movimento e orientamento ad altri progetti, rendendoli ancora più arditi. E voi? Avete dei progetti amatoriali che potrebbero essere migliorati aggiungendo la possibilità di rilevare il movimento e l'orientamento?

Informazioni su questo autore

Image of Max Maxfield

Clive "Max" Maxfield ha conseguito la laurea in ingegneria di controllo nel 1980 presso l'Università di Sheffield Hallam, Inghilterra, e ha iniziato la carriera lavorativa come progettista delle unità di elaborazione centrale (CPU) per computer mainframe. Nel corso degli anni, Max ha progettato di tutto, dai chip di silicio alle schede a circuito stampato, dagli amplificatori per onde cerebrali ai motori di prognosticazione steampunk (davvero!). È stato anche a capo della Electronic Design Automation (EDA) per oltre 30 anni.

Max è autore e/o coautore di diversi libri, tra cui i titoli: Designus Maximus Unleashed (vietato in Alabama), Bebop to the Boolean Boogie (An Unconventional Guide to Electronics), EDA: Where Electronics Begins, FPGAs: Instant Access e How Computers Do Math. Visita il suo blog "Max's Cool Beans".

More posts by Clive "Max" Maxfield