Oggi analizzeremo un progetto con un Arduino UNO, che prevede il pilotaggio di un display OLED attraverso i dati di un giroscopio BNO055.
Utilizzando un Arduino UNO, un OLED Waveshare 128×128 1.5″ e un giroscopio Adafruit BNO055 creiamo un semplice orizzonte artificiale e un indicatore direzionale che funziona in posizione verticale e invertita. Attenzione: Non per l’uso in volo… solo per scopi didattici.
Il codice disegna un orizzonte costituito da una linea orizzontale e due linee ortogonali per dare prospettiva. Successivamente disegna un piccolo diagramma fisso dell’aereo simile a quello effettivamente utilizzato in molti dispositivi reali composto da 4 linee come questa: —V—. Le linee dell’orizzonte si inclinano e ruotano in base all’input del giroscopio, con una lettura media di 20 ms circa. Per semplificare la vita si utilizza un’area di visualizzazione normalizzata -1–+1 per il disegnoe la rotazione delle linee in quel sistema di coordinate.
A questo punto è necessario rimappare il nostro grafico su una mappa da 128×64 bit che viene poi caricata sulla mappa da 128x128x4 bit nella waveshare raddoppiando le righe e mappando ogni singolo pixel su completamente bianco o spento. Ciò è necessario perché Arduino UNO non dispone di memoria sufficiente per archiviare l’intera immagine. Su un processore con prestazioni più elevate o con maggiore memoria sarà possibile estendere il progetto aggiungendo il blu del cielo, il marrone/arancio del terreno e così via.
Oltre all’orizzonte e al piccolo aereo stilizzato, il display mostra anche una rotta (heading) calcolata dal giroscopio.
Quando il dispositivo si alimenta per la prima volta, viene calcolato il flusso magnetico massimo per utilizzarlo come riferimento del nord, quindi viene regolato ciò che secondo il giroscopio rappresenta l’imbardata attuale e calcola quale sarebbe rispetto alla posizione del NORD calcolata prima. Durante il periodo in cui tenta di individuare il nord, appare una X sopra la direzione. Allo stesso modo, se il giroscopio non segnala che si sta calibrando o è calibrato, viene disegnata una grande X sull’intero display.
Il codice sorgente di Peter Ashwood Smith è disponibile gratuitamente su GitHub.
Link utili:
- Arduino UNO Rev.3
- Arduino Nano Every
- Display OLED 1.5″ 128×128 16-bit grey levels
- Display OLED 1.5″ 128×128 16-bit HiColor
- Adafruit BNO055
Join our groups on Telegram…