Introduction: 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.

Supplies

1. Arduino MEGA 2560

2. Display OLED SSD1306 3. Giroscopio MPU6050 4. Schedina mille fori 5. Eder maschi e femmina 6. Cavetti e stagno 7. Saldatore e forbici

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 ;)



Arduino Contest

Participated in the
Arduino Contest