Orizzonte Artificiale Con Arduino
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
amicoen 3 months ago
ma rilascia sempre errore , sulle prime righe...
potresti scrivere il codice completo .
ecofoxdb65 2 years ago
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