方位センサのいろいろ

方位センサの開発がひと段落したので報告.

使ったもの

  • 方位センサ:HCM5883L
  • マイコン: Ardoino Pro Micro
  • 開発環境:Arduino IDE 1.5.8

Ardoino Pro Microを使うために

Ardoino Pro Microは諸事情あってデフォルトだとArduino IDEにボードの設定がないので,ボードの設定ファイルをダウンロードして適切なフォルダの中に置きなす.

詳しくはこちらをどうぞ.

やったこと

その1 キャリブレーション機能の実装

HCM5883Lにはキャリブレーション機能(磁場の偏りを打ち消す機能)がないので自作しました.作った処理は多分かなり簡易的なものです.

HCM5883Lは周囲の磁場をベクトルのx,y,z成分を数値として教えてくれます.そして,z軸を軸にしてセンサを一周させた時のx,y成分の値をプロットすると円もしくは楕円のような図形になるはずです.

この時,円の中心が原点からずれているとatan2(x,y)で角度を出してもちょっと変な値になってしまいます.

なので以下のような処理を加えます

  1. x,y成分の最小値と最大値を求める.
  2. x成分の最小値と最大値を足して2で割り中心のx座標(cxとする)を求める.
  3. y成分の最小値と最大値を足して2で割り中心のy座標(cy)を求める.
  4. rad=atan2(x-cx,y-cy);

こうすることで何もしない時よりは多少正確な角度がわかるようになります.

その2 シリアル通信でArduino Dueにデータを送る

原因はよくわからないのですが,ProMicroでハードウェアシリアル通信(普通のシリアル通信)がうまくいかなかったので,ソフトウェアシリアル通信をつかいました.

ProMicroでシリアル通信ができないという方はソフトウェアシリアルを使ってみるとうまくいくかもしれません.

あと通信がうまくいかず1001(2進数)という数を送信してるはずなのに受信側では0011になっていることがありましたが,その問題は通信(write)の直前に初期化(begin)することで起きなくなりました.

今回の報告は以上です.

明日からアウトオブバウンズ対策のプログラム作ります.

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中