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.
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í.
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í úhlovou rovinu, horizontální úhlovou rovinu a indikaci nebezpečí pro loď. Poloha lodi se mění v závislosti na změně úhlu, kde 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.
obr.1 Grafické rozhraní projektu rozhraní
Indikace nebezpečí obsahuje tři stavy a to:
Stavy | Vertikální rovina | Horizontální rovina |
---|---|---|
Bezpečný | 0°-10° | 0°-20° |
Nebezpečný | 10°-20° | 20°-30° |
Kritický | < 10° | < 30° |
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 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 X stupňů, kde X je rovno úhlu dané osy. Záznam byl uložen do souboru .txt odkaz na záznam a nahrán do aplikace pro vizualizaci.
int main() { float acc_data[3], gyro_data[3]; MotionSensorDataUnits adata; MotionSensorDataUnits mdata; int16_t acc_raw[3]; float 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 printf("cas(s) Accelerometer_osa_X Accelerometer_osa_Y Accelerometer_osa_Z \r\n"); wait(3); while(1) { acc1.ReadXYZ(acc_data); acc1.ReadXYZraw(acc_raw); acc2.ReadXYZ(acc_data); acc2.ReadXYZraw(acc_raw); combo_acc.getAxis(adata); printf("%6.3f %6.3f %6.3f %6.3f\r\n", time, adata.x, adata.y, adata.z); wait(1); } }
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ění doporučovaného softwaru CodeWarrior od Freescale, jsem narazil na hodně problému, proto jsem tuto možnost opustil. Měl jsem menší problém s hardwarem, ale byl vyřešen výměnou. Ani po týdnu jsem nedocílil pokroku. Problém se nalézá zřejmě mezi klávesnicí a židli.