ここでは、超音波距離センサーを使って、人が近づいたら反応するロボットを作ります。
超音波センサーは壁からの反射波をひろってしまうため屋内で使うと誤認識が多くなってしまうのが欠点なのですが、安価ですしラズパイに簡単に接続できるので、初心者にはお薦めです。
部品の調達
- 超音波センサー
- 抵抗
- 470Ω x 1
- 220Ω x 1
- 抵抗キット(スイッチサイエンス)
- ブレッドボード
- ここでは極小サイズのブレッドボードを選んでいますが、もちろんもっと大きなものを選んでいただいても機能は同じです。
- miniブレッドボード(Aitendo)
- タイニーブレッドボードキット(スイッチサイエンス)
- ジャンパーケーブル(20cm, オス・メス)×4
- 店によってジャンプワイヤ、ジャンパーワイヤ、ジャンパーコードなど名称がバラバラで統一されてません。探す時は「ブレッドボード」で検索したほうがよいかもしれません。
- ジャンパーワイヤーセット(amazon)
センサーの接続
超音波距離センサーHC-SR04、抵抗(470Ω、220Ω)、ブレッドボード、ジャンパーケーブル(20cm, オス・メス)×4本を用意してください。
HC-SR04には4つの端子(VCC, TRIG, ECHO, GND)があります。VCCとGNDはそのままラズパイのGPIOに接続すればよいのですが、TRIGとECHOは抵抗を挟む必要があります。
HC-SR04をブレッドボードに刺してください。
続いて2つの抵抗を刺してください。片側の足は両方とも空いている列に刺してつなぎます。便宜上、この列を「抵抗列」と呼びます。抵抗のもう片方の足は470ΩのほうをGND、220ΩをECHOにつながるように刺してください。
下の写真で言うと、左端の列は抵抗の片側がささっていて、HC-SR04の足はささっていません。
左から2番め〜5番目の列にはHC-SR04の足がささっていて、左からGND、ECHO、TRIG、VCCです。
ブレッドボードにジャンパーケーブル(オス)を4本、ECHO以外の列に刺してください。
下の写真で言うと、青を抵抗列、緑をGND、黄をTRIG、橙をVCCに刺しています。
ジャンパーケーブル(メス側)をラズパイに刺してください。HC SR-04のVCCをラズパイの5V、GNDはGround、ECHOと抵抗列はそれぞれGPIO 18とGPIO 23につなげてください。
ラズパイのGPIOはこのようになっています。今回の例では下段の右から2番めにVCC、3つあけて6番目〜8番目に右からECHO、GND、抵抗列を刺しています。
超音波距離センサーを箱に内蔵したい場合は、箱の前面にカッターナイフで穴を開けましょう。
もちろん箱の蓋の上に乗せたり、ジャンパーケーブルを延長して箱の外にだしたりすることもできます。
ブレッドボードを固定しましょう。ブレッドボードの裏に突起があるタイプの場合はニッパーなどで切って平にして、両面テープなどで固定しましょう。
サーボドライバボードも接続します。
ハードウェアはこれで完成です。
サンプルプログラム1「人が近づいたら動く」
- gitからベゼリーのサンプルプログラム集の最新版を取得しましょう。
-
12$ cd /home/pi/bezelie/pi$ sudo git pull
- サンプルプログラムを実行してみましょう。
-
12$ cd /home/pi/bezelie/pi$ sudo python sampleRange1.py
- 10センチ以内に障害物を置いた場合、ベゼリーが上を向いたら成功です。
- ディスプレイには対象との距離が0.5秒おきに表示されます。
- 止めたいときは、CTRL+C を押してください。
-
応用
- サンプルプログラム1をnanoで開いてみましょう。
-
1$ sudo nano sampleRange1.py
-
- 10行目の変数actionDistanceの値がベゼリーが反応する距離(センチ)を表しています。サンプルでは10センチと設定されていますが、この値を大きくしたり小さくしたりしてみましょう。
- プログラムを自分なりに書き換えた場合は、元のプログラムがどうだったかわからなくなると困るので別名で保存しましょう。
サンプルプログラム2「人が近づいたら喋る」
人が近づいた時に喋るプログラムです。しかも距離に応じてセリフを変えることができます。
1 2 |
$ CD /home/pi/bezelie/pi $ python sampleRange2.py |
・同フォルダーに置いてあるセリフリスト「bezeTalk.csv」の中で、2番目の項目が「short」もしくは「long」となっているものを発話します。
・超音波距離センサーの前にある障害物との距離が10cm未満だった場合は「short」のセリフ、10cm以上30cm未満だった場合は「long」のセリフを喋ります。複数のセリフがある場合はランダムです。
応用
・喋るセリフを変更・追加したい場合は、「bezeTalk.csv」を編集してください。
・「bezeTalk.csv」以外のセリフを読ませたい場合は、13行目のファイル名を書き換えてください。
・反応させる距離を変えたいときは、18行目のshortと19行目のlongの値を変えてください。