MicroWiiはUSBから直接ファームウェアを書き換えられる上にシリアルポートも1ポートついてるからGPSがそのままつながりそうなんだけど、シリアルポートはBluetoothで使用しているのでi2cでGPSをつないでみた。
i2cでGPSをつなぐためにi2c-GPS-Navボードが必要。GPSと別々にebayで買ってみた。
GPSはVK24U7っていうやつを購入。U-blox NEO-6M使ってる人は多いけどU-bloxの7シリーズが使ってみたかったので。UBX-G7020搭載で10Hz対応らしい。
U-bloxのGPSは安いしU-bloxプロトコルが使えるからいいかも?
とりあえずi2c-GPS-Navボードに付属してたケーブルをGPS用に組み替える。
このGPS側のピンアサインは左からEN、GND、RX、TX、VCC、PPS。EN何も繋がなくても大丈夫だった。VCCは3.3~5V対応らしい。
お次はi2c-GPS-Navボードのファームウェア書き換え。
このボードはArduino互換なのでArduino IDEでファームウェアを書き換えられます。
今回はArduino IDE 1.0.5とファームウェアはI2C_GPS_NAV_v2.2Beta1-r62.rarを使用した。
ちなみにArduino IDEでボードは"Arduino Pro or Pro Mini (5V, 16MHz) W/ATmega328"を選べばOK。
どうやらこのバージョン、Ubloxプロトコル周辺に不具合があるようで今回はUbloxプロトコルを使いたいので、修正版I2C_GPS_NAV_v2_2.inoをこちらから持ってきて上書き。
上書きしたらI2C_GPS_NAV_v2_2.inoを開いてconfig.hタブを開く。
今回はUbloxプロトコルでボーレート57600bpsを使用したいので
#define GPS_SERIAL_SPEED 57600
//#define NMEA
#define UBLOX
//#define MTK_BINARY16
//#define MTK_BINARY19
//#define INIT_MTK_GPS
というような感じに書き換えた。
さらにこのボードは超音波センサをつけられるようになってるみたいなんだけど今回はつけないので
//#define SONAR
とした。
Ubloxプロトコルを使うとGPSモジュールを自動設定してくれるみたいなんだけどNEO-6M用にできてるのでこのままだと5Hzになってしまう。
自動で10Hzに切り替えるようにI2C_GPS_NAV_v2_2タブの"#if defined(UBLOX)"あたりもいじる。
1266行目あたりに"//set rate to 5Hz" とある。
ここでGPSモジュールを5Hzに切り替えてるようなのでここを10Hz対応にすればいいはず。
というわけでこの行を
0xB5,0x62,0x06,0x08,0x06,0x00,0x64,0x00,0x01,0x00,0x01,0x00,0x7A,0x12 //set rate to 10Hz
という感じに書き換えた。
後はファームウェアを転送するだけ。
5VのFTDIボードを使用する場合はGPSを抜いておいたほうがいいかも?
今回は3.3Vに設定したFTDIボードを使用した。
なんか書き換えられないなぁ と思ったらFT232RL死んでたのでIC乗せ買えた…
とりあえず今回はUbloxプロトコルを使用するのでGPSモジュール側は何も設定しなくていいはず。
このi2c-GPS-Navボード、そのままMicroWiiのI2Cポートにさせるんだけど、SCLとSDAが逆だったのでピンを入れ替えたw なんという罠…
次はMicroWii側のファームウェアを書き換え。
config.hのI2C_GPSのコメントアウトをはずし、
#define I2C_GPS
地域にあわせた磁気偏差の設定をする。よくわからないけどとりあえずコメントに従った…
ちなみにコメントのリンク先で磁気偏差を調べると度分で表示されてるので度に直さないとだめみたい。
#define MAG_DECLINATION -7.12f
みたいな感じで書き換え
ボードでArduino Leonardを選びなおすの忘れずにw
とりあえずバッテリーつないで外に放置。
室内でBluetoothで接続してMultiwiiConfigを見てみるとGPSがFixした!
これでとりあえずGPSの設定は完了。
細かい設定はとりあえずPOS HOLD試してみてからかなぁ
GPS情報を見るときはmw-winguiを使ったほうがいいかも。
これだとGoogle MapでGPS情報見れるのでわかりやすい。
0 件のコメント:
コメントを投稿