これまでに、おもちゃから取り出したコンパスセンサー(HM55B)をAVRやArduinoに接続したりして遊んでいました。
(最終的にはATTiny13と組み合わせてNXTに接続する目的だったのですが・・・既に挫折 orz )
確かに、Yahooオークションなどで、安く(100円とか)で入手できますが・・・実用という点ではどうでしょうか?
とくに、子供に使わせるにはちょっと面倒かなぁ。と思っています。
でも、コンパスセンサーの原理がわかったような気がします。
じゃあ、(私が忘れないうちに)HM55Bについて少し書きたいと思います。
以下は、私が経験から(勝手に)感じたことなので、正しいかどうかは不明です。
まず、コンパスセンサーは、普通はセンサーが向いている方向(方位)を検知します。
これまで実験してきたHMC6352などは、センサーの向いている方位を0.0~359.9の数値で示してくれます。
しかし、HM55Bは、そこまで優しくありません。
HM55Bには磁気センサーが2組搭載されています。 その2つの磁気センサーを直角に配して設置し、それぞれの値を教えてくれます。
それぞれの磁気センサーは、北に向くほど値が大きくなり、東や西に向いているときは「0」、南に向くと値がマイナスになります。(となるハズ)
このXとYの2つの磁気センサーの値を返してくれるだけです。
それを読み出した後に、プログラムの方で、方向(方位)に換算しなければなりません。
(普通のコンパスセンサーは、この方向の換算まで含めてやってくれるってことですね。)
換算の方法は、
Vx>0 Vy<0 の場合 θ = Arctan( -Vy / Vx )
となります。 あとはVxとVyの正負の場合分けでいろいろ有りますが・・・
具体的な Arctan の計算方法が判らなかったので、5度単位でMS-Excelで計算した値を配列に格納し、取得したデータと比較して方向(方位)に変換しました。
こんな感じで、2組の磁気センサーを直角に配したもので、角度(方位)が判ります。
もしかしたら・・・今流行?の「傾いても方位がわかるコンパスセンサー」は3組の磁気センサーをそれぞれ直角に配しているのでしょう・・・きっと。
コンパスセンサーの原理は、まあこんなものでしょう。
で、コンパスセンサーを使うときに重要なのが・・・キャリブレーションですね。
このHM55Bは、そもそもキャリブレーションの機能は付いていないと思うので・・・プログラムの方で、対応しなければならないようです。
コンパスセンサーを真北に向けると、Vx:60 Vy:10 となりました。
(本来 Vy:0 となるハズなのですが・・・やっぱり誤差でしょうか)
今度は、真南に向けると Vx:-54 Vy:8 となりました。
この結果、Vxからは3を引く、Vyからは9を引くことにしました。
私は、こうしましたが・・・
どうも一周(二周)回してみて、最大値、最小値を計測し、最大値と最小値の平均が「0」になるように定数を足す(または引く)のが普通のキャリブレーションのしくみのようです。
だから、市販のコンパスセンサーは、キャリブレーションで、1周~2周回すのでしょうね。
これで、とりあえず、コンパスセンサーとして使えるようになりました。
(コンパスセンサーの原理っぽいことは自分として納得しました。)
所詮精度は・・・おもちゃですけど・・・
ちなみに、今回題材になった HM55B ですが・・・30USD程度で売られています。
・・・いまさらこれを買う人はいないでしょうけど・・・(笑)