ホールセンサの活用
1 モータの回転数を知る
2 ホールセンサを取り付けよう
3 ホールセンサの動作を確認しよう!
4 モータで車輪を回し回転数を調べる
5・6 車の動作を回転数で記憶する、車の動作を再現する
7 車の動作を回転数を記録し再生する

ロボット講座の9回目です。前回は、PWMのデューティ比を変えることで直進だけでなく、左右に展開させたり、また、タイマーを設定して動作時間をコントロールし、期待する動きを学習させるティーチングという手法を学び、実際にロボットカーを動かしてみました。

今回はホールセンサをRaspberryPiのGPIOに接続し、車輪に取り付けた磁石の磁気を感知するところからスタートし、車輪の回転数を計測、その回転数とその時のデューティ比を記録、記録された結果に基づいて動作を再現するという、一連のセンサによる計測結果に基づいたティーチングを行います。
1 モータの回転数を知る

タイマによるティーチングはあまり正確ではなく、再現性が十分ではありませんでした。そこで、ロボットカーのモータの動きを検知し記録する方法に挑戦します。モータの回転を検知する方法にはいくつかあります。例えば、モーターにスリットをつけ、そこを通過する光を検知する光学式ロータリーエンコーダもその方法の一つです。この場合、発光部と受光部の取り付けが必要になります。
ロボット講座で製作しているロボットカーでは、磁気を検知するホール素子使用し、タイヤに磁石を取り付け、車輪の回転数を調べます。磁石とホール素子の間隔を調整する必要があります。
2 ホールセンサを取り付けよう、3 ホールセンサの動作を確認しよう!
ホール素子をRaspberryPiのGPIOに下図のように取り付けました。



ホールセンサは5Vで動作し、磁気を検知すると5Vが出力されます。RaspberryPiのGPIOに入力するには電圧が高いので抵抗をつかって分圧して、GPIOに入力します。接続したら、確認のためPythonプログラムを実行し、左右の車輪に取り付けた磁石の磁気を感知しているか確認します。
4・5・6 車輪の回転数を調べ、車の動作を回転数で記憶し、動作を再現する
ホールセンサの接続と動作確認が完了したら、ティーチングに進みます。まず、車輪の回転数を記録することが必要です。前回のタイムティーチングで行ったようにPythonプログラムのPWMのデューティ比を変え、ロボットカーに前進、後退、左右展開などの動作を指示します。その時の回転数を取り込んで記録させるプログラムを作りました。
実際にロボットカーを床で走らせる前に、確認です。記録した回転数とデューティ比から指示した動作を再現できていれば完成です。
7 車の動作を回転数を記録し再生する
前回、キーボードのQ、W、E、A、S、Z、Xにそれぞれ前進、微速前進、後退、微速左折、微速右折、左回転、右回転となるようにデューティ比を設定して出力し、キーボードでロボットカーをコントロールしました。このプログラムに続けて、動作時の車輪の回転数をホールセンサで調べ、デューティ比とともに記録し、ロボットカー上のスイッチを押すとこの記録に従って動作を再現するというプログラムを作りました。まず、動作させて記録するところからスタートです。
回転数、デューティ比を記録させたら、ロボットカーの押しボタンスイッチを押し、動作を再現させます。前回のタイムティーチングより再現性が良くなりましたが、まだ、ずれてしまうときがあります。床がカーペットかフローリングかによっても結果に影響するようです。動作時間だけで動きを再現するよりも実際の車輪の回転数に基づいて再現させる方が、実際の動きに近づくことが分かりました。磁石は車輪の対角に2箇所しかつけていないので180°、つまり2分の1回転づつしか検知できません。構造上どうしても限界があります。
みんな夢中です。デューティ比も何回も試行して自分のロボットカーの動作特性を把握する必要があります。

次回は超音波センサの取り付けです。リアルタイムに障害物との距離を検知して、その結果に基づいてロボットカーをコントロールできるようになります。