こんにちは。DevRelチャンネル外部ライターの加藤恵美(かとえみ)です。先日、同じ会社の人に「ツイートを大声で勝手に読み上げる悪魔のロボット」を作られてしまいました。
「ぐへへへ かとえみさんが、ツイートしたよ。『きのうふぐおいしかった……』」
将来、もしかしたらこのロボットが、勝手にいろんなところへ行ってしまうかもしれません。あなたの会社に訪問してくるかもしれません。今の世の中、誰でも手に入る部品でこんなものが作れてしまうようです。
これは、止めなければいけない。
まったく仕組みがわからないのですが、自分の身を自分で守るためにも、基幹として使われている「Raspberry Pi(以下:ラズベリーパイ、ラズパイ)」というマイコンボードをいじり、「ラズパイ」でロボットを作る仕組みを勉強していきます!
連載6回目の今回は、いよいよラズベリーパイでロボットプログラミング! ラズベリーパイから他の電子部品を制御する方法を学びます。まずは、IoT界の”Hello, world!”といわれている、「LEDをチカチカ点滅させる」いわゆる「Lチカ」にチャレンジしてみようと思います。
今回も、「ツイートを大声で勝手に読み上げる悪魔のロボット」を作った張本人の今井先生に教えてもらいましょう。
1. Lチカに必要なもの
まず、LEDと抵抗、ブレッドボード、ジャンプワイヤ(オスメス)を用意します。以下でそれぞれを詳しく見ていきます。
1-1. (普通の)LED
いろいろな色に光る「イルミネーションLED」というものもありますが、今回は特別な機能がないものでOKです。私はこちらの単色(赤、青、緑、白など)を用意しました。3mmだと小さいなーと思ったので、今回は5mmのものにしています。
LEDは1方向にしか電流が流れないので、回路を組むときはLEDの向きに注意しましょう。長いほうがプラス(陽極、アノード)です。
【ラズパイ入門25】 LEDは、向きに注意! |
LEDの参考リンク:高輝度5mm白色LED OSW54K5B61A 10cd60度 (10個入)
1-2. 抵抗
LEDは流して良い電流の量が決まっています。抵抗なしで必要以上の電流を流すとLEDは壊れてしまいますが、場合によってはラズベリーパイも壊れてしまう可能性があります。
【ラズパイ入門26】 抵抗が足りないと、ラズベリーパイが壊れるかもしれないので要注意! |
LEDを光らせるのに必要な電圧や電流は、「スペックシート(仕様書)」に書いてあります。本来、それを元にオームの法則で抵抗値を計算するんです。
【ラズパイ入門27】 ラズベリーパイでのLチカに必要な抵抗は、だいたい300Ωくらいのよう。少し大きめの1kΩを使ってみて、だんだんと抵抗値を下げて、明るさを調節するという裏技もある。 |
抵抗の参考リンク:
LED用抵抗値計算
カーボン抵抗(炭素皮膜抵抗) 1/4W 330Ω(100本入)
1-3. ブレッドボード
はんだづけせずに電子回路組みを試せる「ブレッドボード」という基板を使います。+-の列はタテに、a〜e、f〜jの列は横に導線がつながっているので、これに直接LEDや抵抗をさせば電子回路が組めます。200円くらいから購入できます。
このような感じで、タテとヨコで導線がつながっています。
参考リンク:ブレッドボード BB-801
1-4. ジャンプワイヤ(オスメス)
あとは、ラズベリーパイとブレッドボードをつなぐ「ジャンプワイヤ」というケーブルが必要です。今回は、オスメスケーブルが2本あれば足ります。ピンが出ている方がオスで、穴が空いている方がメスです。「オスメスケーブル」とは、安易なネーミングですよね……。
参考リンク:ジャンパワイヤ(オス~メス) 10本セット
2. 電子回路を組みます
それでは、さっそくブレッドボードに電子回路を組んでみます! 今回はGPIOピンから回路に電源をとり、最後はグランドに戻します。2番ピンとグランドを使っているのですが、この2番ピンの動きを、これからプログラミングで制御します。上記の写真を参考にしてみてください。
抵抗は、LEDの前でも後でも問題ありません。
2-1. ジャンプワイヤの色
矢印の向きで電流が流れるようになっています。あとからどれが電源の線かわかるように、プラス側に赤やオレンジなどの明るい色のケーブル、マイナス側に黒などの暗い色のケーブルを選びました。
【ラズパイ入門28】 後からどれが電源の線かわかるように、プラス側に明るい色(できれば赤)のケーブル、マイナス側に暗い色(できれば黒)のケーブルを選ぶとよい。 |
2-2. GPIOピンの配列
ラズパイケースの小さなフタを取ると、ジャンプワイヤを刺せる「GPIOピン」が現れます。GPIOピンの配置は、以下のリンクから確認できます。
GPIO Pinout – Rasp Pi 1 Model B+/Rasp Pi 2 Model B
私はラズパイケースに付属していたシールを貼っていますが、「RaspberryPi GPIO」で画像検索すると配置が出てきます。こちらも参考にしてみてください。
【ラズパイ入門29】 ただの数字のピンがGPIOピン。ピンはそれぞれ役割や番号が違うので、要確認。このピンに入出力を設定して、プログラミングで制御する。 |
3. ラズベリーパイにつなげます
ジャンプワイヤをつないで、ラズベリーパイの電源をいれると、LEDが点灯しました。
4. いよいよプログラミングでLEDを制御
そもそもLチカは、マイコンボードで電子工作をはじめるときに「PCからの命令がちゃんとボードに伝わっているか」を確認するテストも兼ねているとのこと。
どんな基板でも、どんな開発環境でも、まずLチカをやってみるのが流儀のようです。
【ラズパイ入門30】 マイコンで電子工作をはじめるとき、環境が整っているかを確認するため、まず「Lチカ」でテストする。 |
あの、まっくろな画面(ターミナル)を使います。
今井先生に言われたとおりに、コードを書いてみました。
4-1. シェルスクリプト
echo 2 > /sys/class/gpio/export // gpioを使えるようにする
echo out > /sys/class/gpio/gpio2/direction // gpio2をoutput用に使う
echo 1 > /sys/class/gpio/gpio2/value //LEDをオンにする(GPIO2の値を1(HIGH)に設定する
echo 0 > /sys/class/gpio/gpio2/value //LEDをオフにする
while : //以下をくりかえす
do //
echo 1 > /sys/class/gpio/gpio2/value //LEDをオンにする
sleep 0.1 //0.1秒待つ
echo 0 > /sys/class/gpio/gpio2/value //LEDをオフにする
sleep 0.1 //0.1秒待つ
done
こちらのソースコードを入力し、キーボードのcntl+cで終了します。上記コードの「//」より右側は、説明用に書いてるだけなので入力する必要はありません。
すると……、
4-2. Python
こちらがpythonのコードです。以下、「>>>」の右側に入力していきます。
import RPi.GPIO as GPIO //ラズベリーパイのライブラリを使えるようにする
import time //時間の処理のライブラリを使えるようにする
GPIO.setmode(GPIO.BCM) //GPIOのセットアップをBCMモード(ラズパイケースのシールに書いてある番号で指示を出すモード)でおこなう
GPIO.setup(2, GPIO.OUT) //ピン2を出力に使うように設定
while True: //以下を繰り返す
GPIO.output(2, GPIO.HIGH) //LEDをオンにする
time.sleep(0.1) //0.1秒待つ
GPIO.output(2, GPIO.LOW) //LEDをオフにする
time.sleep(0.1) //0.1秒待つ
キーボードのcntl+cで終了します。
【ラズパイ入門31】 慣れるまでは、コピペでプログラミングしましょう |
おわりに
Lチカをやってみることによって、ラズベリーパイで電子工作ができる環境が整えられました。プログラミングにはだんだんと慣れていくこととして、どんなラズパイロボットを作ってみようかな~。
と、妄想しながら、次回は、ラズベリーパイにセンサーをつけて、現実世界の情報を取り込んでみたいと思います。