作るのは数字だけじゃない / デジタルハリウッド
作るのは数字だけじゃない / デジタルハリウッド
2016.10.05
第7回
かとえみのRaspberryPiロボット入門

はんだ付けできなくても大丈夫!ラズベリーパイとGrovePi+で現実世界の情報を読み取ろう【センサー編】

加藤 恵美

こんにちは。ライターの加藤恵美(かとえみ)です。先日、同じ会社の人に「ツイートを大声で勝手に読み上げる悪魔のロボット」を作られてしまいました。

 

IMG_1694

「ぐへへへ かとえみさんが、ツイートしたよ。『きのうふぐおいしかった……』」

将来、もしかしたらこのロボットが、勝手にいろんなところへ行ってしまうかもしれません。あなたの会社に訪問してくるかもしれません。今の世の中、誰でも手に入る部品でこんなものが作れてしまうようです。

これは、止めなければいけない。

まったく仕組みがわからないのですが、自分の身を自分で守るためにも、基幹として使われている「Raspberry Pi(以下:ラズベリーパイ、ラズパイ)」というマイコンボードをいじり、「ラズパイ」でロボットを作る仕組みを勉強していきます!

51qidu4AIBL._SL160_

Raspberry Pi 2 Model B (1)

連載7回目の今回は、ラズベリーパイにセンサーを取り付け、現実世界の情報を取得してみたいと思います。センサーでいろんなデータを得られれば、ロボットが周りの状況を自分で感知して自力で動けるようになるはずです……! ちょっとわくわくしてきました。

今回も、「ツイートを大声で勝手に読み上げる悪魔のロボット」を作った張本人の今井先生に教えてもらいましょう。

はんだ付けしたくない(できない)

ktem今井先生、センサーのやり方教えてください! センサーがないと、ロボットじゃないんです!
※補足
ロボットの定義は「センサ」、「知能・制御系」及び「駆動系(動く、出力するもの)」の3つの要素技術があるものと言われています
senseiセンサーやりたいの? 大変だよ……? センサーとラズベリーパイをつなぐためにはんだ付けして、ケーブルをまとめて、あと、ADコンバータとかも要るかなー……◎△$♪×¥●&%#できる?
ktem(何言ってるかよくわかんないし)……できません。どうしよう。
senseiじゃあ、ちょっと特別だけれど、GrovePi+ スターターキット for Raspberry Piを使ってみますか?
eyecatch842-1 【ラズパイ入門32】
ラズベリーパイでセンサーを使いたいけれど「はんだ付けしたくない!」という場合は、「GrovePi+」というとっておきのアイテムがある

GrovePi+とは

14247913_1175967449132869_398339479_o

今井先生が言っていた「GrovePi+ スターターキット for Raspberry Pi」はこちら。中国・深センのSeeedという会社が開発したキットです。

 
14284911_1175967445799536_498131494_o

箱をあけると、説明書とマイコンボードが入っていました。右にあるのが今回の肝となる「GrovePi+」。ラズベリーパイに乗せると、はんだ付けをしなくてもSeeedオリジナル「Grove」規格のセンサーやパーツを使える拡張ボードです。

 
14203455_1175967442466203_1606827442_o

キットには他にも、センサーなどのパーツがたくさん入っていました。

senseiこれらのセンサー類は、Seeedの「Grove」という規格で作られています。

 
14233769_1176926922370255_1807705156_o

senseiこのように、はんだ付けをしなくても挿すだけで使えます。そして、今回使う「GrovePi+」は、Raspberry PiでもGroveを使えるようにする拡張基板なんです。
senseiラズベリーパイはデジタル入出力しかできませんが、一般的なセンサーにはアナログ入力のものが多いんです。それをラズベリーパイで使うには、アナログデジタル変換をしないといけません。それを簡単にしてくれるのがGrovePi+なんですよ。
eyecatch842-1 【ラズパイ入門33】
ラズベリーパイは、アナログ入出力ができない
ktem便利なものがあってよかったです。
senseiちなみに、ラズベリーパイと同じぐらい電子工作時に使われる「Arduino(アルデュイーノ)」というマイコンがありますが、Arduinoだったらアナログ入出力ができます。
senseiそして、GrovePi+はArduinoとほぼ同じ構成です。Arduinoをラズベリーパイの上に乗せている感じですね。
ktemええええっ! じゃあArduinoでやれば……
senseiまさに、「だったらArduinoだけでやればいいじゃん!」とツッコミたくなる気持ちはわかりますが、あまり深く考えず、GrovePi+でやってみましょうか。

1. GrovePi+の初期設定をしよう

GrovePi+公式の設定解説ページを参考に、初期設定していきます。

公式ページではデスクトップにインストールしていますが、今回はより簡単な方法でインストールします。(管理者権限が必要なコマンドを実行する”sudo”を、なるべく使わないようにしています)

1-1. GrovePi+を使うのに必要なデータをダウンロードする

GrovePi+をラズベリーパイにつける前に、まずはラズベリーパイ側のソフトウェア環境を整えます。Terminal(黒い画面)を開き以下のコマンドを打つと、必要なデータのダウンロードが始まります。

git clone https://github.com/DexterInd/GrovePi

git clone

1-2. 実行ファイルをインストールする

データのダウンロードが終わったら、下記のコマンドで環境を構築していきます。

cd GrovePi/Script/
chmod +x install.sh
sudo ./install.sh

黒い画面(Terminal)に聞かれるがままに、「y」(yesの意味)を押しながらインストールを続けていくと、ラズベリーパイが自動的に再起動されます。これで設定完了です!

senseiGrovePi+とラズベリーパイの間は「I2C」という通信規格でやりとりしますが、ラズベリーパイでI2Cを使うための準備や、PythonからI2Cを使うライブラリの用意などを自動的にやってくれてるんです。よく見てみるとArduinoの開発環境なんかもインストールされてますよ!(笑)

2. ラズベリーパイにGrovePi+を取り付ける

14215745_1175967042466243_1976828871_o

電源がついたままだと危ないので、ラズベリーパイの電源を切り、こちらの向きでGrovePi+を取り付けます。

 
14203704_1175967029132911_1175061120_o

ラズベリーパイの金属部分(USBコネクタや有線LANコネクタ)と接触しそうなところには、ふせんなどを貼って絶縁しておくのが小技だそうです。

eyecatch842-1 【ラズパイ入門34】
ラズベリーパイに別の基板を取り付けるときは、金属部分が接触しないようにふせんなどで絶縁する

 
14233340_1175967032466244_1775318076_o

このように、ラズベリーパイにGrovePi+をつなげてみました! 

senseiGrovePi+のピンの数が少ないですが、初期のラズベリーパイにも対応するためですね。今は40ピンですが、初期は26ピンでした。

3. 接続確認のためにGrovePi+でLチカしてみる

前回教わったとおり、新しい基板を使うときは、環境が整っているかを確認するため、「Lチカ」(LEDをチカチカと光らせること)でテストします。今回基板は、ラズベリーパイとGrovePi+の2枚を使うので、これらの接続確認をしていきます。

3-1. ラズベリーパイとGrovePi+の接続確認

GrovePi+公式の設定解説ページを参考に、以下のコマンドを打つと、このような画面になります。

i2cdetect -y 1

i2c

こちらのスクリーンショットと同じ場所に「04」という数字が表示されれば、ラズベリーパイとGrovePi+が正しく接続されている状態です。

senseiI2Cは、いくつものデバイスを同時につないで、番地で管理しています。GrovePi+はこの番地での接続になります。

3-2. GrovePi+とLEDをくっつける

14247896_1175966992466248_980887875_o

GrovePi+ スターターキット for Raspberry Piに入っている好きな色のLEDを、「D4」と書いてあるポートにくっつけます。(GrovePi+の設定解説ページで、「D4」につけるように指示がでています)※LEDのパーツの組み立て方がわからない方は、下記の「おまけ」をご参照ください

なんと、「1. GrovePi+の設定」でダウンロードしたGrovePi+のデータの中に、Lチカのためのサンプルプログラムが既に入っているそうです。(ありがとう、サンプルプログラムを作ってくれた誰か!)

そのサンプルプログラムを探して、実行してみたいと思います。

3-3. サンプルプログラムを探す

senseiPythonでかかれたサンプルプログラムがたくさん用意されているので、プログラムを動かしたり読んだりして使い方を学びましょう!
cd GrovePi/Software/Python

このコマンドを打って、サンプルプログラムを探していきたいと思います。

ktemえっと……cd、スペース、Grove……。
senseiかとえみ、Tabを押してみて! 途中までの入力でも、入力が正しければコンピュータが残りの文字を入力してくれますよ。候補が2つ以上あるときは、Tabを2回で候補を表示してくれます。
ktemえっ! あ! ほんとだ!!!! これで私もプログラマーっぽくなってきましたね……!
senseiあと、を押すと、過去のコマンドを再利用できるんです。いちいち全部書き起こさないので、作業が速くなりますよ。
eyecatch842-1 【ラズパイ入門35】
キーボードのTabを押すと、アドレスを自動的に補完してくれる。また、を押すと、過去に打ったコマンドを再利用できる

次に、以下のコマンドを打つと、Pythonフォルダに入っている情報がずらりと表示されます!

ls GrovePi/Software/Python

14248820_1176906289038985_1409201957_n

プログラマーっぽい……(満足)

この中から、Lチカしそうなサンプルプログラムを探します。「LED」「Blink(チカチカ)」と書いてあるファイルを発見しました。

python grove_led_blink.py

と打つと、Pythonのプログラムが実行されます。早速実行してみると……、

 

LEDがチカチカしました!!! ありがとう、サンプルプログラムを作ってくれた誰か……!

 
LED onoff

画面にはこのような感じで延々と「ON」「OFF」が繰り返し表示されていました。止めるときは、CtrlCで中止できます。

4. GrovePi+でセンサー情報を読み取る

ktemよし! じゃあ、次はセンサーやりましょう!!!
senseiじゃあ、好きなセンサーを、GrovePi+にさしてみてくださいねー。
ktemじゃあ光センサーを使ってみたいです! ……でも、どのコネクタにさせばいいんだろう……。

4-1. サンプルプログラムの中身を見てみよう

今回は、試しに光センサーを使ってみることにしました。「3-3. サンプルプログラムを探す」で出てきた一覧の中にある、「grove_light_sensor.py」というサンプルプログラムが使えそうです。

less grove_light_sensor.py

と打つと、プログラムの中身の記述が閲覧できます。

light sensor

プログラムを読んでみると、”# Connect the Grove Light sensor to analog port A0(A0に光センサーをつなぐ)” という記述を見つけました! 「A0」のポートに挿せばいいんですね。

キーボードでQを押すと、元の画面に戻れます。

eyecatch842-1 【ラズパイ入門36】
サンプルプログラムの中身を読めば、基板の使い方が学べる

4-2. GrovePi+にセンサーを取り付ける

14233769_1176926922370255_1807705156_o

GrovePi+のA0のポートに、光センサーを挿してみます。このように、はんだ付けをしなくてもセンサーを取り付けられるんです! では、以下のコマンドで光センサーのサンプルプログラムを実行してみます。

Python grove_light_sensor.py

 

センサーを障害物で覆ったり、どかしたりして、センサーの値が変わることを確認できました!

ちなみに、光センサーの値に応じてLEDの点滅を制御するプログラムも用意されていました。試してみると……、

 

このような感じで、LEDの光を制御できました! どんどんロボットの制御に近づいていっています。

おわりの前に……おまけ

14215765_1177000282362919_113275196_o

GrovePi+ スターターキット for Raspberry Pi」のLEDは、LED、基板、ケーブルがばらばらになってパッケージされています。

前回、LEDは足が長いほうがプラス(陽極、アノード)と習いましたが……なんと……

 
147323593555601300_02

GrovePi+キットに入っているLEDは、足の長さが同じなんです……(涙)

ktem今井先生……詰みました……。
sensei(笑)よーーーーーく見てみてください。旗がついているほうがマイナスです。

 
14273482_1177014269028187_989341733_o - コピー

ということで、よーくみて、マイナス側を確認し、

 
14273533_1177016689027945_1370314220_o

無事、基板側の「+」「-」の表示通りにセットできました。電子工作の知識が1つ増えました!

eyecatch842-1 【ラズパイ入門37】
LEDの足の長さが一緒の場合は、LEDの中身をよーくみて、旗がついている方がマイナス

おわりに

GrovePi+を手に入れて、簡単にセンサーで現実世界の情報を入手することができるようになりました。プログラミングの小技もたくさん習って、だんだんとプログラマーにも近づいてきました。どんなラズパイロボットを作ってみようかな。

次回は、いよいよ、ラズベリーパイでロボットを動かしてみたいと思います!