BunnyHop で色を扱えるようにラズパイカーを拡張する
本記事では、BunnyHop で色を使ったプログラムが書けるように、 こちらの記事 で作成したラズパイカーを拡張する手順について説明します。 使用する「BunnyHop」と「ラズパイカー用の通信プログラム」は、バージョン1.0.2.0 以降を想定しています。 バージョン1.0.2.0以降の「ラズパイカー用の通信プログラム」のコピーがまだの人は、 先にこちらの手順を参考にコピーを終わらせてください。 バージョンの確認方法は、こちらをご覧ください。
用意するもの
- 部品
- ハンダ付けのための道具 *2
手順一覧
1. カラーセンサの取り付け
1.1. カラーセンサモジュールの作成
カラーセンサモジュールのピンを基板にハンダ付けします。 私はハンダ付けをするにあたって、この動画を参考にしました。
下の配線図のようにメス-メスジャンパ線を4本使って、Raspberry Pi にカラーセンサモジュールを接続します。 どのピンが Vdd, SDA, SCL, GND かは、センサモジュールの裏側に書いてあります。
両面テープでラズパイカーにくっつけます。
1.2. カラーセンサモジュールの動作確認
カラーセンサモジュールの動作を確認するため、以下のコマンドを入力します。 カンマで区切られた3つの数字が表示されれば、カラーセンサの取り付けは成功です。 (※本記事では、黒背景のコマンドは特に断りがない限り、Raspberry Piに接続したSSHクライアントのターミナルに入力するものとします。)
~/BunnyHop/Actions/bhColorDetection 100 5
2. LEDの取り付け
2.1. LEDモジュールの作成
図のように、LED、抵抗、スズメッキ線、リード線をハンダで繋ぎます。 LEDの一番足の長い端子がアノードで、図の「A」と書いてある端子に相当します。 アノードが上から2番目にくるようにLEDを置いて、アノードの上の端子に300Ωの抵抗を繋ぎ、下2つの端子には200Ωの抵抗を繋ぎます。 リード線の長さは、黒い線の長い方が約9cmで短い方が約1.5cmです。
ハンダ付けした部分は熱収縮チューブで保護します。
全てのリード線と抵抗を繋ぐとLEDモジュールが完成します。
LEDモジュールを2つ作り、下の回路図のように配線します。 LEDをラズパイカーの目にはめ込んで完成です。
今までに作ったモータや距離センサを制御する回路と合わせると、全体の回路は下の図のようになります。
2.2. LEDモジュールの動作確認
LEDの各色を点灯させて、正しく配線できているか確認します。 まず、以下のコマンドを入力して Raspberry Pi のLED制御用ピンを出力モードにします。
gpio -g mode 13 out
gpio -g mode 16 out
gpio -g mode 19 out
gpio -g mode 20 out
gpio -g mode 21 out
gpio -g mode 26 out
次に以下のコマンドを順番に入力して、括弧に書いてあるように点灯または消灯すればLEDモジュールの取り付けは成功です。
「1. 右目赤点灯」
gpio -g write 13 1
「2. 右目青点灯」
gpio -g write 13 0 && gpio -g write 19 1
「3. 右目緑点灯」
gpio -g write 19 0 && gpio -g write 26 1
「4. 左目赤点灯」
gpio -g write 21 1
「5. 左目青点灯」
gpio -g write 21 0 && gpio -g write 20 1
「6. 左目緑点灯」
gpio -g write 20 0 && gpio -g write 16 1
「7. 両目消灯」
gpio -g write 13 0
gpio -g write 16 0
gpio -g write 19 0
gpio -g write 20 0
gpio -g write 21 0
gpio -g write 26 0
3. BunnyHop で色を使ったプログラムを作る
BunnyHop で色を使ったプログラムの作り方を説明します。 まず、「色」カテゴリにある「色検出ブロック」(緑枠で囲ったブロック)と 「目を光らせるブロック」(赤枠で囲ったブロック)を選択します。
次に、「制御」カテゴリから「繰り返しブロック」(青枠で囲ったブロック)を選択します。 これは、黄緑の十字コネクタのブロックが表す条件が満たされている間、内側に繋いだ処理を実行し続けるブロックです。 なお、「真」と書かれたブロックは、常に条件を満たすことを意味しています。
続いて、下の図のようにブロックを繋ぎます。 左上の「ローカル」ボタンを押して、「リモート」に切り替え、「IPアドレス」「ユーザー名」「パスワード」を入力します。 「IPアドレス」「ユーザー名」「パスワード」には、 ソフトウェアセットアップ編でSSH接続した際に入力したものと同じものを入力します。 最後に、「繰り返しブロック」を選択した状態(枠が黄色になっている状態)で「プログラム実行ボタン」(緑の三角)を押します。 このプログラムは、カラーセンサで検出した色と同じ色で目のLEDを光らせるプログラムなので、 ライトの色に合わせて目の色が変わります。
4. 色を検出する際の注意事項
その1
BunnyHop は、カラーセンサのRGB値をもとに、検出した光を7色の色に分類しています。
その際、プログラムの開始時に取得したRGB値を「白」と認識するように処理しています。
よって、プログラム開始時にラズパイカーに赤や青などの光を当てていると、ライトを当てた時の色を正しく認識できなくなります。
プログラム開始時は、部屋の明かり以外に光が当たらない様にしてください。
その2
色を検出する際、センサ内部のフォトダイオードをわずかな時間露光させています。
この露光時間中にライトの色が切り替わった場合も正しく色を識別できなくなります。
まとめ
LEDとカラーセンサをラズパイカーに組み込みました。 前回の音を使うための改造と合わせると、ラズパイカーにできることも随分増えました。 具体的には、「走る」「距離を測る」「音声を出力する」「ビープ音を出力する」「LEDを光らせる」「色を検出する」という動作ができます。 これらの動作を組み合わせれば、検出したライトの色によって前進や後退をするといったプログラムも作れます。
ディスカッション
コメント一覧
初めまして。
現在、SeaPandaさんのBunnyHopを使って自分もラズパイカーを作ってみようとしています。
私はカラーセンサーモジュールTCS34725を持っていたので、それを使用してみようとしていたのですが、「1.2. カラーセンサモジュールの動作確認」でご紹介されている「~/BunnyHop/Actions/bhColorDetection 100 5」を入力すると、「-bash: /home/pi/BunnyHop/Actions/bhColorDetection: 許可がありません」と表示されてしまいます。
カラーセンサモジュールはS11059-02DTのみ対応ということなのでしょうか?
よろしければご指南いただけると幸いです。
なお、「ラズパイカー用の通信プログラム」のコピーについてはリンク先を参考にして、完了しております。
おちゃさん、記事を読んでいただきありがとうございます。
本記事のラズパイカーが対応しているカラーセンサは、S11059-02DT のみです。
S11059-02DT と TCS34725 は両方ともI2Cインタフェースを使っているのですが、
I2C上でやり取りするコマンドがそれぞれのモジュールで異なるため、
TCS34725 は S11059-02DT の代わりには使えません。
ただし、「-bash: /home/pi/BunnyHop/Actions/bhColorDetection: 許可がありません」と表示されるのは、カラーセンサに互換性が無いためではなく、bhColorDetection の実行権限が無いためです。
実行権限を付加するには、Raspberry Pi に接続したSSHクライアントのターミナルに、
「sudo chmod -R 777 /home/pi/BunnyHop」と入力します。
不明点等ございましたら、コメント欄かお問い合わせページからご連絡ください。
SeaPandaさま
ご指示通りの手順を踏んで、カラーセンサーが動作しました!
ご指摘いただき、ありがとうございました!