BunnyHop で色を扱えるようにラズパイカーを拡張する

本記事では、BunnyHop で色を使ったプログラムが書けるように、 こちらの記事 で作成したラズパイカーを拡張する手順について説明します。 使用する「BunnyHop」と「ラズパイカー用の通信プログラム」は、バージョン1.0.2.0 以降を想定しています。 バージョン1.0.2.0以降の「ラズパイカー用の通信プログラム」のコピーがまだの人は、 先にこちらの手順を参考にコピーを終わらせてください。 バージョンの確認方法は、こちらをご覧ください。

用意するもの

手順一覧

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モジュール配線前

ハンダ付けした部分は熱収縮チューブで保護します。

LEDモジュール LEDモジュール

全てのリード線と抵抗を繋ぐとLEDモジュールが完成します。

LEDモジュール

LEDモジュールを2つ作り、下の回路図のように配線します。 LEDをラズパイカーの目にはめ込んで完成です。

LEDテスト回路 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を光らせる」「色を検出する」という動作ができます。 これらの動作を組み合わせれば、検出したライトの色によって前進や後退をするといったプログラムも作れます。


*1 BunnyHop は7色の光(Red, Green, Blue, Cyan, Magenta, Yellow, White)を色として扱うので、 これらの色が出せるライトならリンク先の商品でなくても使えるかもしれません。 ただし、BunnyHop 内部の色の判別処理は、本記事で紹介したライトの光を基準に行っているので、 色味が違うライトだとラズパイカーが上手く色を認識しない可能性があります。
*2 本記事の内容をやるにあたって実際に使用した道具です。参考程度にどうぞ。