こんにちは、新人フロントエンドエンジニアの嶋谷です!
前回、ラズベリーパイを使ってみるために必要なものを揃えてみましたが、今回は実際に回路や機械を組むことに挑戦しました。
▼前編はこちら▼
目次
使用するキットの紹介
今回購入したのは以下のキットです!
この中にはブレッドボードやワイヤー、抵抗のような必要不可欠なものから温度計やボタン、センサーにリモコン、各色のLEDなど多くの道具が1箱にまとまって3000円程度で購入できます!中身は以下の画像のようになっています!
一度に便利なものを揃えられるというのは、初心者の自分にとってはとてもありがたいものです。
今回の目標
赤外線のセンサーを使ってリモコンから照射された赤外線を受信し、赤外線LEDでエアコンやテレビを操作するということを考えています。
今回は、
・モジュールを実際に使ってみること
・赤外線を受信してみること
次回、操作を管理するというところまでを書きたいと思います。
多くの記事を参考にして装置を動かすようトライしました!が、最初に試した手順では目標である赤外線の受信がうまくいかず...。その辺りも含めて、ここに書いていきます。
作成手順
(こちらの記事を参考につくってみることにしました!)
1.GPIOについて
前回ほんの少しだけ触れたのですがラズベリーパイにはGPIO(General Purpose Input Output)というものがありこちらがどのような役割を果たしているかというと
・センサーやLEDに対して電力を供給する
・家電製品についているアース(漏電の防止、余分な電気を逃すといった役割です)
・命令を発する
・結果を受信する
という「剣山のような装置」が40個ほどあります。
↑の画像のトゲトゲした部分がGPIO
このGPIOを使うためにはWiringPiというC言語で記述されたライブラリをインストールします。
1 2 3 |
git clone git://git.drogon.net/wiringPi cd wiringPi ./build |
これでインストールが完了します。
WiringPiはC言語で作られていますが、このライブラリを使うのはC言語でなくともPythonと言った言語でも必要な情報を渡すことができれば使うことができます。
2.LIRCについて
ここの部分が1週間以上詰まったポイントです。
LIRC(Linux Inframed Remote Control)
LIRCというのは直訳するとLinux赤外線コントロールと言う意味です。
つまりこれはLinux≒ラズベリーパイで赤外線の操作を行うために使うプログラムです。
こちらのプログラムはインストールするだけで簡単に赤外線の受信、送信ができるようなのですが、環境がどうしても合わないのか使用することができませんでした...
【原因1】
LIRCがGPIOを認識せず、線をつなげているにも関わらず通信が出来ない。
【原因2】
エアコンのリモコンの場合、一つの操作あたりの情報量が多いと操作ができないという弱点があり、動かなかった。
3.今回行った方法について
上記の方法では目的である赤外線の受信が行えなかったため、代わりにこちらを参考にしました。
このページではC言語で記述されたscanirというプログラムを使って赤外線の受信・送信を行うコードが記述されています。
こちらのコードを参考にした結果、LIRCで苦戦した赤外線の受信を、とても簡単に成功させることができました。その時実行したコマンドが下記のとおりです。
1 2 3 4 5 6 7 |
pi@raspberrypi:~ $ sudo ./scanir test1.txt 7 write file: test1.txt scaning pin: 7 (wiringpi) max keep time: 40(ms) Infrared LED scanning start. Pressed Ctrl+C, this program will exit. Scanning has been done. |
これで赤外線の読み取りが成功したようです。
sudo ./scanir test1.txt 7
というコマンドは
sudo→管理者権限で実行の意味
./scanir→プログラムを実行
text1.txt→ 保存するファイル名
7→上述したGPIOのどの番号から命令を行うかの指定
となっています!
次に読み取った赤外線のデータを確認してみます。
1 2 |
pi@raspberrypi:~ $ cat test1.txt 489 40059 |
バッチリ読み取れていますね!!
受信自体は成功!!が、しかしセンサーの品質がお世辞にも良いとは言えず、リモコンを長押しし何度もトライする状態でした...
余談ですが、数年前までは赤外線でメールアドレスを交換していてなかなかうまく通信できなくて交換に時間がかかった思い出があると思いますが感覚的にはそんな感じでした笑
リモコンの操作一つ一つを覚えさせる必要があり、現状、一部の内容しか学習をさせることができていませんが、このscanirというプログラムを使うことによって受信の問題はひとまずクリアしました。
↑こちらが実際に接続した例です!
重なっていてちょっと見えにくいのですが
・真ん中の赤のコードが電力を供給する線
・右の青のコードがラズベリーパイから命令を送る線
・左の黄色のコードがラズベリーパイに取得した赤外線のデータを送り返す線
になります。
4.温度計モジュールについて
ラズベリーパイによってエアコンを操作できるようになったとき、設定した温度に操作できるようになったら素晴らしいなと思い加えました。
30分スパンで気温を取得しそのデータをラズベリーパイに送信し、処理&判定をし、エアコンを操作するというものです。
参考にしたページはこちらです。
実際にコードを打ってみるとこのようになります。
1 2 |
pi@raspberrypi:~/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 22 4 Temp=21.1* Humidity=51.9% |
結果の気温はこの時、暖房をつけていたので「21度」はだいたい合っていると思います。
温度の取得自体はとても簡単にできました。取得できたデータは統計を取ることによってグラフでの可視化を行うこともできます。
ここまでやってみてどうだったか?
今回の内容は不慣れな自分にとっては非常に苦戦しましたが、苦戦した分、達成感も大きいものでした。調べたとおりに処理を実行して完成とならないのが実際のプログラミングですね...失敗した内容も含めて、どうにか達成させるという点で非常に良い経験になりました!
次回は実際に動かして確認を行いたいと思います。
ご期待下さい!