浅草ギ研では測定した距離の長さに比例したパルスの長さか返す「超音波測距センサー」を販売しています。ここではH8マイコンでこの超音波測距センサーを使う方法について紹介致します。
※当ページの内容についての質問は掲示板にてお願いします。
※当ページで紹介している超音波センサーはバージョンが変わりました。現在のバージョンはトリガピンと出力ピンが1つになっていますのでご注意願います。マイコンのIOピンからトリガを加えた後、そのIOピンを入力に設定して結果を待ちます。
超音波測距センサーの概要
RH29-0
センサー基板には超音波発信用の素子と受信用の素子がついています。
このセンサーは4つのピン(基板にはピンが5つありますが1つは使用しません。)から構成されています。
RH29-1
トリガー入力からパルスが入力されると、そのパルスの立下りから超音波を発信します。 その超音波が物体にぶつかって反射し、受信素子に入力されると出力がLOWになります。
RH29-2
タイミング図はこのようになります。この出力のHIGHの長さを測定することにより目標物までの距離を測定できます。
超音波測距センサーとH8マイコンとの接続
今回もベステクのH8/3694Fマイコンボード(プラス5V電源回路)を使用しました。トラ技4月号付録でも同様です。
トリガと結果読み取りにはP11とP12を使用しました。接続は下の通り。
RH29-5
プログラム
プログラムも同じくGDL環境で行いました。センサー読み取り部は次の通りになります。
51〜53行目:トリガを加えてます。Highの時間は最低10uSとなっていますが、10uSギリギリだとセンサーの動作が不安定でしたので20uSのパルスを加えてます。wait_10us()関数は引数x10usのウェイトをかける関数でタイマーVを使用してます。(詳しくは後のプログラムリストを参照)。
59行目:P12(センサーの出力)がHighになるまで待ちます。
60行目:タイマーAを使用してカウントを開始します。
61行目:P12(センサーの出力)がLowになるまで待ちます。
62行目:タイマーAのカウンタの値を距離格納変数に入れてます。ここで2.4で割っているのは測定した結果、10cm毎に24のカウントがされるのを定規で測ったのでこのようにしてます。本来は音速(29uSで1cm進む。このセンサーの場合は音波の往復時間なので倍になる)やらクロック(20MHzなので1カウント0.05uS)から計算するのですが...
63行目:タイマーAをリセット
という動きになってます。3694Fの場合、パルス幅の測定(行60)でタイマーVを使うとカウンタが足りなくてオーバーフローしてしまうので注意してください。たとえば1/128カウントモード(最大です。)で計測してもある距離(20cmぐらい?)を超えると数値が下がり(オーバーフローして0にもどる)、さらに遠くを測定するとまた上がる、という結果になりますので近いものしか測定できなくなります。(オーバーフロー時の処理を入れれば大丈夫ですが。)
RH29-4
上のメインで、一秒置きに距離を測定した結果が下の通りです。wait()関数は後のプログラムリストを参照願います(タイマーVを使用。引数x20mSのウェイト)
ちなみに、H8マイコンボードは前回のサーボコントローラとの接続試験のまま、二足歩行ロボ雷電に搭載されたまま距離を測定してます。(写真ではサーボの電源を切って座らせた状態になっています。)
ここまでの全プログラムはこちら
US_Test.txt
応用編
せっかく足がついているので、距離センサーを使用したアプリケーションを考えて見ます。前回、MACSで歩行モーションを作ったので距離によって前後に歩くロボを作ってみました。バックは前進を逆回転させてスピードを調整すると簡単に作れます。くわしくはプログラムリストを見てください。
mpgファイル2.6MB
写真をクリックすると映像が見れます。
10cm以内になにかあるとバック、15cm以上なにかと離れていると前進をするというものです。
全プログラムはこちら(歩行データはロボットにより異なりますので注意してください。)
US_Raiden.txt
2004年8月2日