ハネウェルの地磁気センサHMC5883Lをキャリプレーション(360°回転)したときのx,y軸センサの生データを以下に示します。
横軸はx軸センサの値、縦軸はy軸センサの値です。単位はLSB(Least Significant Bit)でAD変換の量子化単位です。物理量と対応すると測定したゲインでは1000LSBが1080mG(ミリガウス)となっています。日本では地磁気は310mGなので、本来は原点を中心に半径310mGの円となるはずですが、中心がx軸の正方向に175LSB程度移動しています。
このずれの原因はセンサ出力値の誤差や周囲の磁場の影響の可能性があります。この実験ではロボットのモータは動いており、データを取得したパソコンもセンサから30~50cm程度の位置でした。
なお、このデータはe-gadgetをパソコンにつないで取得したものです。方法はシリアルに文字列を出力するc-styleの関数tx_puts(char *str)をget_dir()関数の中で呼び出し、ログを取りたいデータをtera termで取得すればOKです。以下の記事のサンプルプログラムにコードがあります。参考にしてください。
http://demura.net/robocup/10156.html
でむ
コメント
HMC5883Lを使う方法、すごく役立ちました!感謝感激です。うちはTJ3BとHMC5883Lの直接接続でして、IC電源を単純に3.5Vに落として動作させています。安全のためにはTJ3B側pull-up電圧を下げるべきかもしれませんね。もっとも、I2Cバス電圧差が問題になるのはバス保護ダイオードから電源3.5Vに向かっての逆流電流が流れることでしょうから、もしかしたらHMC5883LのI/O電源のみ5Vにすれば解決するかもしれません。
無印欠品さん,
コメントありがとうございます.記事にした甲斐がありました.
なお,アマゾンからGY-271が3月10日,現在購入可能です.
電源チップが内蔵しているので,TJ3, egadgetから使えますよ.
amazon情報ありがとうございます。あらーほんとだ!出てますね、しかもStrawberry-linuxの5883より安いです。探せばあるものなんですねー。(今探しているsrf05も500円くらいで出てこないかな~)
HMC5883Lの扱い、ご苦労様です。安価なコンパスとしてHMC5883Lは魅力的ですが、テスト、キャリブレーション、オフセット保存にXY値から角度への変換まで別途書かないといけないのはなかなか大変ですね(うちはe-Gadgetは持っていないのでテストしていませんが、TJ3ならLED点滅等で置き換えればなんとかなりますね)。あとは、GY-271が国内で入手できるといいのですが、レベル変換からレギュレータまで考えると、大変かも。まとめてダイセンさんが面倒見てくれてこれらを組み込んだソフトと安価なコンパスセンサを出してくれるといいのですが^^;...まあ、難しいでしょうね。
うちでは、GY-271とTJ3の間にPSoCを使ってI2Cブリッジを作ってダイセンセンサのふりをさせてそのままつながるようにしました(が、誰も使っていません)。やはりまわりでは今のところ、角度で値を返してくれる上に5Vで使えるHMC6352(値段は倍くらいしますが)を皆選びますが、もしかしたら、ダイセンセンサが一番初心者向けかもしれません。
Reverse父さん、
コメントありがとうございます。モジュールのテストは購入時に1回やれば良いと思いまので、手間はHMC6352とほぼ同じだと思います。HMC5883Lの良いところは、地磁気の3軸の値がわかるので、上図のようにプロットするとキャリプレーションの必要性が実感できるところです。ダイセンの高機能コンパスは電源を入れて8の字に振るとオートキャリプレーションしてくれて便利ですが、基礎的なことを子供たちに理解してもらいたいと思います。昨年の中国国際大会で、試合前にロボットを360度回転させている子供がいて、何故か理由を聞いたところ答えられないで、指導者が消磁(しょうじと日本人でもわかるように発音していました)と私に説明してくれました。原理がわかってから、操作を覚えるように指導していけたらと思います。
なお、ダイセンの電子コンパスはとても良いのですが、高価なのがスクールでは使いづらいですね。本体とセンサが同じくらいの価格は初めての保護者には理解してもらいづらいです。だめもとでダイセンにプッシュしてみます。
でむ