Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:boat-sensor

Toto je starší verze dokumentu!


Vizualizace polohy lodě

Zadání projektu

S vývojovými deskami FRDM-KL25Z a FRDM-FXS-MULTI realizujte vizualizací polohy lodě ve vertikální i horizontální rovině s grafickým zobrazením. Využijte akcelerometr, gyroskop a senzor magnetického pole.

Použité zařízení (Hardware)

Pro projekt byli použity desky Freescale Freefom Platform (FRDM - KL25Z) a Freescale Freefom Platform For Xtrinsic Sensors With Bluetooth ( FRDM - FXS - MULTI - B). Dále propojovací kabel USB mini A-B a PC. Tyto desky byly používány během výuky předmětu MPOA v několika počítačových cvičení.

 Deska KL25Z s popisky

Popis funkce

Složené zařízení (desky FRDM-KL25Z a FRDM-FXS-MULTI-B) pro snímaní úhlové polohy lodě, jsou připojeny přes USB micro kabel do PC. Na počítači běží grafická vizualizace lodě viz obr. 1. Na obrázku lze vidět že obsahuje tři prvky a to vertikální uhlovou rovinu, horizontální uhlovou rovinu a indikaci nebezpečí pro loď. Poloha lodi je se mění v závislosti na změně uhlu kdy silná bílá plná přímka udává hladinu vody v závislosti na lodi a slabá bílá čárkovaná přímka udává na stupnici velikost úhlu.

 Grafické rozhraní projektu rozhraní

obr.1 Grafické rozhraní projektu rozhraní  

 Stavy ohrožení

Indikace nebezpečí obsahuje tři stavy a to:

  • Bezpeční stav (obr.2, vrchní)
  • Nebezpeční stav (obr.2, prostřední)
  • Kritický stav (obr. 2, spodní)

Bezpeční stav v vertikální poloze kolem 0°-10° a v horizontálním poloze o trochu více cca. 0°-20°. Bezpečný stav je od

Stavy Vertikální rovině Horizontální rovině
Bezpeční 0°-10° 0°-20°
Nebezpeční 10°-20° 20°-30°
Kritický < 10° < 30°

Demo

Pro realizaci projektu bylo využito prostředí mbed. Za pomocí knihoven pro Freescale Multi-Sensor byl vytvořen projekt MPOA v prostředím mbed pro testování senzoru MULTI-B a propojen s deskou KL25Z projekt MPOA.

Nejprve byla otestována samotná funkce snímání uhlů při pootočení desky, za pomocí sériového rozhraní. Deska funguje ovšem né moc s přesnými hodnoty při prudších pohybech, což nevadí z důvodu pomalého pohybu pro loď.

Pro realizaci realizaci grafického rozhraní bylo nutné vytvoření několika objektu které se využívají pro zobrazení. A to , , , , , . Všechny obrázky byli vytvořeny v programu Photoshop, kromě indikace nebezpečí které byli jen upraveny pro použití. Při použití stabilizace_lod_prazdny.png jako statický pozadí do kterého jsou v intervalech vkládány obrazce poloha_1 a poloha_2 které jsou natočeny v o X stupnů, kde X je rovno uhlu dané osy. Záznam byl uložen do souboru .txt odkaz na záznam a nahrán do aplikace pro vizualizaci,viz DEMO3.

 animace grafické funkce

int main()
{
    float acc_data[3], gyro_data[3];
    MotionSensorDataUnits adata;
    MotionSensorDataUnits mdata;
    int16_t acc_raw[3];
    const char *s;  
    int X,Y,Z;
    printf("\r\nStarting\r\n\r\n");
 
    combo_acc.enable();
    combo_mag.enable();
    mag2.enable();
    printf("FXLS8471 Acc   = %X\r\n", acc1.getWhoAmI());
    printf("MMA8652 Acc    = %X\r\n", acc2.getWhoAmI());
    printf("FXOS8700 Combo = %X\r\n", combo_acc.whoAmI());
    printf("FXAS21000 Gyro = %X\r\n", gyro.getWhoAmI());
 
    #if defined(FSL_COMPATIBLE)
        unsigned char alt_data[8];
        alt.Altimeter_Mode();
        printf("MPL3115A2 Alt  = %X\r\n", alt.getDeviceID()); 
    #endif
 
    wait(3);
 
    while(1) {
        acc1.ReadXYZ(acc_data);
        acc1.ReadXYZraw(acc_raw);
        printf("FXLS8471 Acc:   X:%6.3f Y:%6.3f Z:%6.3f (Raw X:%4d Y:%4d Z:%4d)\r\n", acc_data[0], acc_data[1], acc_data[2], acc_raw[0], acc_raw[1], acc_raw[2]);
 
        acc2.ReadXYZ(acc_data);
        acc2.ReadXYZraw(acc_raw);
        printf("MMA8652 Acc:    X:%6.3f Y:%6.3f Z:%6.3f (Raw X:%4d Y:%4d Z:%4d)\r\n", acc_data[0], acc_data[1], acc_data[2], acc_raw[0], acc_raw[1], acc_raw[2]);
 
        combo_acc.getAxis(adata);
        printf("FXOS8700 Acc:   X:%6.3f Y:%6.3f Z:%6.3f\r\n", adata.x, adata.y, adata.z);
 
 
        wait(1);
    }
}

Závěr

Projekt byl vytvořen pouze na dvě fáze a to nahraní dat samostatně a poté zpracování dat do grafické podoby. Využiti akcelerometru a gyroskopu se neosvědčilo, docházelo k velkým odchylkám. Lepších výsledků bylo dosaženo samotným akcelerometrem s přidaným filtrem „Plovoucí okno“, pro plynulejší pohyb ukazatele. Při pokusu zprovozní doporučovaného softwaru CodeWarrior od Freescale, jsem narazil na hodně problému, proto jsem tuto možnost opustil. Ani po týdnu jsem nedocílil pokroku. Problém se nalézá zřejmě mezi klávesnicí a židli.

2014/boat-sensor.1421336503.txt.gz · Poslední úprava: 2015/01/15 16:41 autor: Martin Svozil