LIGデザイナー採用
LIGデザイナー採用
2016.07.12
第6回
かとえみのRaspberryPiロボット入門

コピペでLチカ!ラズベリーパイでロボット制御を始めよう【Lチカ編】

加藤 恵美

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

IMG_1694

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

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

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

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

Raspberry Pi 2 Model B (1)
Raspberry Pi 2 Model B (1)

連載6回目の今回は、いよいよラズベリーパイでロボットプログラミング! ラズベリーパイから他の電子部品を制御する方法を学びます。まずは、IoT界の”Hello, world!”といわれている、「LEDをチカチカ点滅させる」いわゆる「Lチカ」にチャレンジしてみようと思います。

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

1. Lチカに必要なもの

図2

まず、LED抵抗ブレッドボードジャンプワイヤ(オスメス)を用意します。以下でそれぞれを詳しく見ていきます。

1-1. (普通の)LED

2b530e80c7d0de90885e285c5d798063

いろいろな色に光る「イルミネーションLED」というものもありますが、今回は特別な機能がないものでOKです。私はこちらの単色(赤、青、緑、白など)を用意しました。3mmだと小さいなーと思ったので、今回は5mmのものにしています。

LEDは1方向にしか電流が流れないので、回路を組むときはLEDの向きに注意しましょう。長いほうがプラス(陽極、アノード)です。

eyecatch842-1 【ラズパイ入門25】
LEDは、向きに注意!

LEDの参考リンク:高輝度5mm白色LED OSW54K5B61A 10cd60度 (10個入)

1-2. 抵抗

13410698_1111710202225261_1815641578_o

LEDは流して良い電流の量が決まっています。抵抗なしで必要以上の電流を流すとLEDは壊れてしまいますが、場合によってはラズベリーパイも壊れてしまう可能性があります。

eyecatch842-1 【ラズパイ入門26】
抵抗が足りないと、ラズベリーパイが壊れるかもしれないので要注意!

LEDを光らせるのに必要な電圧や電流は、「スペックシート(仕様書)」に書いてあります。本来、それを元にオームの法則で抵抗値を計算するんです。

senseiでも、よくわからないLEDが手元にいっぱいあったりするんで、そういうときは大きめの1kΩとか入れてみて、暗かったら抵抗下げていくとかしますね。
ktemそんな適当でいいんですか?
sensei本来はだめだとは思いますけど、LEDは消耗品だと考えて……。ネット上のブログとかに書かれている抵抗値を参考にすることも多いですよ。
eyecatch842-1 【ラズパイ入門27】
ラズベリーパイでのLチカに必要な抵抗は、だいたい300Ωくらいのよう。少し大きめの1kΩを使ってみて、だんだんと抵抗値を下げて、明るさを調節するという裏技もある。

抵抗の参考リンク:
LED用抵抗値計算
カーボン抵抗(炭素皮膜抵抗) 1/4W 330Ω(100本入)

1-3. ブレッドボード

ktl

はんだづけせずに電子回路組みを試せる「ブレッドボード」という基板を使います。+-の列はタテに、a〜e、f〜jの列は横に導線がつながっているので、これに直接LEDや抵抗をさせば電子回路が組めます。200円くらいから購入できます。

 
13410483_1111557428907205_1049903569_o

このような感じで、タテとヨコで導線がつながっています。

参考リンク:ブレッドボード BB-801

1-4. ジャンプワイヤ(オスメス)

399fbbbf4cc5c458f54e70198fc3201d

あとは、ラズベリーパイとブレッドボードをつなぐ「ジャンプワイヤ」というケーブルが必要です。今回は、オスメスケーブルが2本あれば足ります。ピンが出ている方がオスで、穴が空いている方がメスです。「オスメスケーブル」とは、安易なネーミングですよね……。

参考リンク:ジャンパワイヤ(オス~メス) 10本セット

2. 電子回路を組みます

それでは、さっそくブレッドボードに電子回路を組んでみます! 今回はGPIOピンから回路に電源をとり、最後はグランドに戻します。2番ピンとグランドを使っているのですが、この2番ピンの動きを、これからプログラミングで制御します。上記の写真を参考にしてみてください。

抵抗は、LEDの前でも後でも問題ありません。

2-1. ジャンプワイヤの色

3a4f695a458cb0ac0aceaa2eb13ac2dd

矢印の向きで電流が流れるようになっています。あとからどれが電源の線かわかるように、プラス側に赤やオレンジなどの明るい色のケーブル、マイナス側に黒などの暗い色のケーブルを選びました。

eyecatch842-1 【ラズパイ入門28】
後からどれが電源の線かわかるように、プラス側に明るい色(できれば赤)のケーブル、マイナス側に暗い色(できれば黒)のケーブルを選ぶとよい。

2-2. GPIOピンの配列

13383706_1111577355571879_2141109953_o

ラズパイケースの小さなフタを取ると、ジャンプワイヤを刺せる「GPIOピン」が現れます。GPIOピンの配置は、以下のリンクから確認できます。

GPIO Pinout – Rasp Pi 1 Model B+/Rasp Pi 2 Model B

私はラズパイケースに付属していたシールを貼っていますが、「RaspberryPi GPIO」で画像検索すると配置が出てきます。こちらも参考にしてみてください。

eyecatch842-1 【ラズパイ入門29】
ただの数字のピンがGPIOピン。ピンはそれぞれ役割や番号が違うので、要確認。このピンに入出力を設定して、プログラミングで制御する。

3. ラズベリーパイにつなげます

13396704_1111557392240542_1876957812_o-1

ジャンプワイヤをつないで、ラズベリーパイの電源をいれると、LEDが点灯しました。

ktemわああああ! Lチカできた!!!
senseiいや、「チカ」じゃなくて、LEDを光らせただけの「Lピカ」ですね。ラズベリーパイは、特に何も指示してないときにGPIOピンへ少し電流が流れるようです。では、このLEDの点滅を制御しましょう!

4. いよいよプログラミングでLEDを制御

そもそもLチカは、マイコンボードで電子工作をはじめるときに「PCからの命令がちゃんとボードに伝わっているか」を確認するテストも兼ねているとのこと。

どんな基板でも、どんな開発環境でも、まずLチカをやってみるのが流儀のようです。

eyecatch842-1 【ラズパイ入門30】
マイコンで電子工作をはじめるとき、環境が整っているかを確認するため、まず「Lチカ」でテストする。

13405492_1111741328888815_816331317_o

あの、まっくろな画面(ターミナル)を使います。

今井先生に言われたとおりに、コードを書いてみました。

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で終了します。上記コードの「//」より右側は、説明用に書いてるだけなので入力する必要はありません。

すると……、

ktemチカチカしました!! すごい! さて、今日はこれで終わりですかね?
senseiいや、せっかくなんで、もっとプログラミングっぽくPythonでもやってみましょう。

4-2. Python

13405581_1111751875554427_1852546178_o

こちらが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で終了します。

 
13524199_1123490081047273_2063294150_o

ktemPythonでもLチカできました!
senseiラズパイからハードウェアを使うのにも、いろいろなやり方があることがわかりましたね。
ktemでも、このコードって、絶対覚えられません……。
senseiだんだん慣れてきますよ! 最初はコピペで問題ありません。それよりも、「どんなことをやりたいか」のほうが重要です。あ、コピペしたり、真似して打ったりするときは、スペースとかを間違わないよう注意も必要ですね。
sensei……さて、これで黒い画面も少しは好きになったんじゃないですか?
ktemいいえ!(キッパリ)
eyecatch842-1 【ラズパイ入門31】
慣れるまでは、コピペでプログラミングしましょう

おわりに

Lチカをやってみることによって、ラズベリーパイで電子工作ができる環境が整えられました。プログラミングにはだんだんと慣れていくこととして、どんなラズパイロボットを作ってみようかな~。

と、妄想しながら、次回は、ラズベリーパイにセンサーをつけて、現実世界の情報を取り込んでみたいと思います。