====== 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í. {{ :2014:mpoa_platform.png?700x390 | 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í ú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. {{:2014:mpoa_stabilizace_lod.png?1000x500| Grafické rozhraní projektu rozhraní}} obr.1 Grafické rozhraní projektu rozhraní {{ :2014:mpoa_stavy.png?274x500| 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í) ^ Stavy ^ Vertikální rovina ^ Horizontální rovina ^ | Bezpečný | 0°-10° | 0°-20° | | Nebezpečný | 10°-20° | 20°-30° | | Kritický | < 10° | < 30° | ===== Demo ===== Pro realizaci projektu bylo využito prostředí [[https://developer.mbed.org|mbed]]. Za pomocí knihoven pro [[http://developer.mbed.org/teams/shields/code/Freescale_Multi-Sensor_Shield/|Freescale Multi-Sensor]] byl vytvořen projekt MPOA v prostředím mbed pro testování senzoru MULTI-B a propojen s deskou KL25Z [[https://developer.mbed.org/compiler/#nav:/Projek_MPOA;| 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 {{2014:mpoa_poloha_1.png?0x20}} , {{2014:mpoa_poloha_2.png?0x20}} , {{2014:mpoa_stav_1.png?0x20}} , {{mpoa_stav_2.png?0x20}} , {{2014:mpoa_stav_3.png?0x20}} , {{mpoa_stabilizace_lod_prazdny.png?0x20}}. 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 [[http://uloz.to/xmhVM7Sq/zaznam-multi-b-txt|odkaz na záznam]] a nahrán do aplikace pro vizualizaci. {{ :2014:mpoa_demo4.gif?1000x500 | Animace grafické funkce}} 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); } } ===== 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ě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.