スタジオ ミュウ

距離センサー(シャープGP2D12)を使った迷路ロボット


距離センサーを斜めに取付け壁から一定の距離で進むようプログラムされているロボットです。
このセンサー(シャープGP2D12)は光学式で壁までの距離を電圧の変化で出力します。ミュウロボ基板はアナログ入力可能な688タイプの基板を使用。
センサーは4.5V-5.5Vで動作します。このためロボットには単3電池3本(4.5V)を搭載。電圧が下がってくるとセンサーの動作が不安定になるので注意が必要です。
※充電式ニッケル水素電池などを使うと電圧が下がりにくく安定した動作をします。

★このロボットの動きは、こちらをご覧ください。 動画(1.5MB)

<使用パーツ>
MYU-528 ミュウロボ基本セット 3,456円(8%税込)
●距離センサー(シャープGP2D12)は800円ぐらいで販売されています。+配線コード
●単3x3本用電池ボックス
●タミヤ・ユニバーサルアーム

<センサーと基盤の配線>
◆距離センサー(GP2D12)
動作電圧は4.5V〜5.5V、測定可能距離は約10cm〜80cm
センサーの出力は右図のように障害物までの距離によって変化します。
※GP2D12は、ツクモロボット王国共立エレショップ千石電商など で入手できます。

★GP2D12のマニアルはこちら!

◆ミュウロボ基板のアナログ入力
センサー出力を計測するためにはアナログ入力が必要です。
ミュウロボ・パワーアップキット688タイプのミュウロボ制御基板を使うことで可能となります。
In2に接続されたセンサーは基板の供給電圧(今回の場合は4.5V)との比率として8BIT(0-255)および10BIT(0-1023)の値を返します。
下の例はセンサー出力の値(8BIT)をシリアルポートを通してパソコンにリアルタイムで表示させたものです。

◆ハイパーターミナルを使って計測データ表示
距離センサーのアナログ値がリアルタイムに表示されます。
壁までの距離を変え、アナログ値が変化することを確かめてください。
※ハイパーターミナルの設定方法はこちら!
※ハイパーターミナルを立ち上げたまま転送するとエラーになります。

//In2のアナログ値を0.25秒ごとにシリアル送信(MYU BASIC)
Byte AD
Do
  RS=12    //画面のクリア
  AD=AN(2)  //In2のアナログ値を8BIT(0-255)で取得
  RS="A"   //文字を送信
  RS="N"
  RS="2"
  RS="="
  DECRS=AD  //値を10進右詰めで送信
  Delay 250   //0.25秒のDelay
Loop
//In2のアナログ値を0.5秒ごとにシリアル送信(構造化ドリトル)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
「!
  12 RS   //画面のクリア
  2 AN    //In2のアナログ値を8BIT(0-255)で取得
  65 RS   //"A"をシリアル出力
  78 RS   //"N"をシリアル出力
  50 RS   //"2"をシリアル出力
  61 RS   //"="をシリアル出力
  DECRS  //値を10進右詰めで送信
  5 時間   //0.5秒のWait
」繰り返す
おわりロボット」。
ロボ太!転送命令。
//In2のアナログ値を0.5秒ごとにシリアル送信(myurobo.exe)
アンカー,10
  RS,12   //画面のクリア
  AN,2    //In2のアナログ値を8BIT(0-255)で取得
  RS,"A"  //文字を送信
  RS,"N"
  RS,"2"
  RS,"="
  DECRS  //値を10進右詰めで送信
  時間,5  //0.5秒のWait
ジャンプ,10

◆計測結果
距離 cm 7 8 9 10 11 12 13 14 15 20 25 30 40 50 60 70 80
アナログ値 166 178 171 163 151 141 132 122 115 89 73 62 48 39 34 31 30

◆迷路ロボットのプログラム
計測結果を参考にプログラムしていきます。基本的な動作は
1、壁に近づきすぎたら右回り
2、壁が近くなったら左前
3、壁からちょうど良い距離なら前進
4、壁から離れたら右前

//距離センサーを使った迷路ロボット(MYU BASIC)
Byte A
Do
  A=AN(2)      //In2のアナログ値を8BITで取得
  If A>100 Then   //壁が近づいたら
    右回り
  ElseIf A>80 Then
    左前
  Elseif A>70 Then
    前進
  Else       //壁から離れたら
    右前
  ENdIf
Loop
//距離センサーを使った迷路ロボット(構造化ドリトルV2.1)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
「!
  2 AN           //In2のアナログ値を8BITで取得
  「!100 超えるA」なら   //壁が近づいたら
    「!右回り」
  そうでなければ「!80 超えるA」なら
    「!左前」
  そうでなければ「!70 超えるA」なら
    「!前進」
  そうでなければ   //壁から離れたら
    「!右前」実行
」繰り返す
おわりロボット」。
ロボ太!転送命令。

//距離センサーを使った迷路ロボット(myurobo.exe)
アンカー,10
  AN,2     //In2のアナログ値を8BITで取得
  CMP,100
  JC,20    //壁が近づいたら
    右回り
    ジャンプ,10
アンカー,20
  CMP,80
  JC,30
    左前
    ジャンプ,10
アンカー,30
  CMP,70
  JC,40
    前進
    ジャンプ,10
アンカー,40   //壁から離れたら
    右前
ジャンプ,10