H8マイコンとの接続
今回もベステクのH8/3694Fを使用します。前と同じく雷電に付けられっぱなしの状態です。
接続は次のようになります。
RH30-4
センサーのGNDは両方つながないとパルスが出なくなりますので注意してください。
プログラミング
プログラミング環境も同じくGDLです。簡易型統合環境ということですが結構使えます。
パルス幅の測定なので超音波センサーでやったこととほぼ同じですが、今回は電源を入れるとセンサー側から周期的に勝手にパルスを送ってくるので正確にパルスの立ち上がり位置から測定するように組む必要があります。
下はX軸とY軸のパルス幅を出力するプログラムです。20℃時、水平時にはデューティー50%の10mS周期のパルスなのでHighが5mSのパルスが出るはずです。
H8/3694Fのクロック数は20MHz、つまり1カウント0.05uSなので1/512カウントモードだと5mSの場合
5000uS/(512×0.05uS)=約195.3カウントになるはずです。
これより1G時に12.5%変化するので−90度〜+90度傾けると1Gづつ変化、つまり約171〜220に変化するという計算になります。
RH30-5
45、46行目:立下りと立ち上がりを検出することにより、正確にパルスの立ち上がりからカウントスタートする。45行目が無いと関数が呼び出された瞬間にたまたまパルスがHighの状態だと正確にパルス幅を測定できません。
47行目:超音波センサーの時と同様にタイマーAを使用してます。
といったところ。その他は超音波センサーのページを参照願います。
メインは次のようになります。
RH30-6
1秒間隔でX、Y軸の傾きを数値で表示させました。
全プログラムリストは次の通り
Acc.txt
さっそくロボットに取り付けてテストしてみます。下の写真のように胴体上部に水平に固定しました。(とりあえずテープで固定。)

結果はこのようになりました。計算よりも変化率が大きいです。このあたりは詳しく追求しませんが、これでロボットがどのぐらい傾いているかがわかるようになりました。


しゃがんでいる状態。ほぼ水平です。値は期待通りX,Y軸とも195前後。


仰向けに倒した上体。X軸が増大してます。計算では1Gつまり90度倒れた状態で220前後になるはずですがちょっと大きい値が出てます。


うつぶせに倒れた状態。X軸が現状してます。


手前向きで横になったところ。今度はY軸が変化してます。

向こう向きで横になったところ。Y軸の値が逆に変化してます。
応用編
これらを使って、たとえば「ロボットが倒れたら自分で判断して起き上がる」、ということも可能になります。
mpgファイル5.1MB
上の画像をクリックすると起き上がりの映像が見られます。
雷電の場合、前に起き上がるのは足だけでもできますが、うつぶせからの起き上がりには手が必要になります。このプログラムではうつぶせになったらピクピク動くだけですが手をつければうつぶせからも起き上がりが可能になります。
ここではX軸の判定しか行っていません。ROBO-ONEなどでは前後の起き上がりしかつくっていない場合がありますが、大会本番でちょうどバランスよく横向きに倒れるケースがたまに見受けられます。ダウンから起き上がれないと負けてしまいますのでY軸の情報も活用すると良いでしょう。
今回は傾きだけを測定しましたがデータを積分して加速度から歩行姿勢を修正するということも可能かと思われますので挑戦してみてください。
全プログラムリストはこちら
Acc_Raiden.txt
2004年8月2日