Toto je starší verze dokumentu!
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í 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.
obr.1 Grafické rozhraní projektu rozhraní
Indikace nebezpečí obsahuje tři stavy a to:
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° |
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.
int main() { float acc_data[3], gyro_data[3]; MotionSensorDataUnits adata; MotionSensorDataUnits mdata; int16_t acc_raw[3]; 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); } }
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.