Orizzonte Artificiale Con Arduino

2.0K114

Intro: Orizzonte Artificiale Con Arduino

Ciao e benvenuti in questo nuovo tutorial dove andremo a costruire un indicatore di assetto... ma prima di iniziare sapete cos'è?? L'indicatore di assetto è uno strumento che si trova a bordo degli aeromobili e serve per capire come si trova l'aereo rispetto all'orizzonte o il terreno, quindi, per capire se l'aereo sta virando oppure se sta picchiando o cabrando.

Per questo progetto ho utilizzato una simbologia "più semplice" ma allo stesso tempo funzionale per poter essere usato come strumento di bordo.

STEP 1: Circuito

Seguendo lo schema elettrico è possibile riprodurlo su una breadboard

STEP 2: Montaggio Su Breadboard

STEP 3: Costruzione Del Supporto Con Mille Fori

Adesso è il momento di realizzare la schedina dove andremo ad alloggiare il display e il giroscopio mpu6050.

Se si vuole replicare il progetto è importante rispettare almeno l'orientamento del sensore giroscopico mpu6050 per evitare di avere gli assi X e Y invertiti.


STEP 4: Completamento Della Scheda

seguendo le foto è possibile replicare la stessa scheda: come si può vedere abbiamo una predisposizione per il sensore MPU6050 e la predisposizione per il display SSD1306.

Sono stati aggiunti due particolari utili come: un interruttore a levetta per l'accensione del sistema e due pin maschio per poter alimentare arduino dal pin Vcc e GND a +5V dc da un powerbank.

STEP 5: Ecco Come Si Presenta La Schedina Montata Su Arduino MEGA

In questo modo è possibile sfruttare lo strumento, in quanto abbiamo un oggettino davvero carino e compatto, dall'aria un po' geek che è a tutti gli effetti uno strumento aeronautico.

STEP 6: Il Codice

è stato molto impegnativo e difficile scrivere il codice per poter programmare come indicatore di assetto l'arduino ma alla fine ci sono riuscito!!

#includere
#includere #include "U8glib.h" #include #includere

MPU6050 mpu6050 (cavo);

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R2, SCL, SDA, U8X8_PIN_NONE);

void setup() { u8g2.begin(); Serial.begin(9600); Wire.begin(); mpu6050.begin(); mpu6050.calcGyroOffsets(true); //taratura u8g2.setFont(u8g2_font_unifont_t_symbols); }

int xship = 64; int yship = 32;

unsigned long t1, dt;

float x,y,z;

void loop() { mpu6050.update(); dt = millis() - t1; if (dt > 200) { t1 = millis(); x = mpu6050.getAngleX(); y = mpu6050.getAngleY(); } int v = mpu6050.getAngleX(); int a = mpu6050.getAngleY();

yship = map(v, +40, -40, 55,5); int rot = map(a, -90,+90, 314,0); u8g2.clearBuffer();

nave(((float)rot)/100.0f); u8g2.drawTriangle(xship-62,yship, xship+62,yship, xship,yship+2);

u8g2.sendBuffer(); ritardo(50); }

void ship(float a) { int x = xship + (int)10*cos(a); int y = yship + (int)10*sin(a); int xa = xship + (int)5*cos(a + 2.0*PI / 3.0); int ya = yship + (int)5*sin(a + 2.0*PI / 3.0); int xb = xship + (int)5*cos(a - 2.0*PI / 3.0); int yb = yship + (int)5*sin(a - 2.0*PI / 3.0); u8g2.drawLine(xship, yship, xa, ya); u8g2.drawLine(xship, yship, xb, yb); u8g2.drawLine(x, y, xa, ya); u8g2.drawLine(x, y, xb, yb); }

STEP 7: Alimentazione

Oltre alla usb tipo B (usata per la programmazione dell'arduino) e all'ingresso jack da 9mm: possiamo alimentare il nostro strumento sfruttando i pin Vcc e GND per collegare due morsetti alla scheda prendendola dalla usb di un powerbank.

STEP 8: Interfaccia Grafica

Per poter rappresentare l'aereo ho utilizzato il simbolo allegato sopra, un simbolo standardizzato nei sistemi moderni di avionica.

STEP 9: Grafica

STEP 10: Cabrata Circa +15°

la linea è l'orizzonte che si sposta relativamente all'aeromobile

STEP 11: Virata


l'orizzonte si inclina ma in realtà è l'aeromobile che è inclinato rispetto all'orizzonte mentre effettua una virata a sinistra; vi allego il video dello strumento completamente funzionante.


Spero che il progetto vi sia piaciuto e che vi abbia ispirato, vi ringrazio per essere arrivati alla fine... e spero di poterlo testare a breve in volo p.s.: vi terrò aggiornati ;)



2 Comments

ciao ho provato a seguire il tuo schema e collegamenti
ma rilascia sempre errore , sulle prime righe...
potresti scrivere il codice completo .
veramente un interessante progetto complimenti
posso chiederti di riscrivermi queste righe in quanto inserendole in arduino mi dà un errore
#includere
#includere #include "U8glib.h" #include #includere
MPU6050 mpu6050 (cavo);
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R2, SCL, SDA, U8X8_PIN_NONE);

grazie
Mauro