今回は赤外線センサーとリモコンを使ってLEDの点灯を制御してみました。
サイトは下記を参考にさせていただきました。
第23回 Arduinoでパーツやセンサーを使ってみよう~赤外線リモコン(前編)
身近に使っている赤外線ですが知らないことも多く読んでいて面白かったです。
使った部品
今回使った部品は以下の通りです。
・Arduino UNO
・USBケーブル
・LED
・赤外線センサー
・赤外線リモコン
・Jumper Wires * 5
・10kΩ抵抗
プログラム
単純に何らかの赤外線を受診したかどうかを判定するだけなのは簡単に出来ました。
試してみると赤外線センサーはどうやら通常は1を、信号を受診すると0を出力するようなのでそれを元にLEDを制御するプログラムを書きます。というか、赤外線センサーから入力にしただけでボタンスイッチとほとんど同じです。
int ir = 2; int led = 3; int state = 0; int val = 0; int old_val = 0; void setup() { Serial.begin(9800); //モニターに出力するための設定 pinMode(ir,INPUT); //2ピンに接続した赤外線センサ pinMode(led,OUTPUT); //3ピンに接続したLED } void loop() { //赤外線リモコンのボタンが押されるととりあえず0が出力される。 val = digitalRead(ir); //Serial.println(val); //ボタンが押され、かつ、"押されたという変化"があった場合 if((val==0)&&(old_val==1)){ state = 1 - state; //LEDがオンなら1-1でオフ、オフなら1-0でオンに。 } old_val = val; //変化を補足するために前のvalを保存 //stateに応じてLEDを点灯。 if(state==1){ digitalWrite(led,HIGH); }else{ digitalWrite(led,LOW); } delay(80); }
回路図
ブレッドボードと回路図はこんな感じです。
信号の解析は?
さて、赤外線の送受信自体の取得はできましたがせっかくリモコンがあるのだから信号の内容も読み取ってみようと思います。
読み取るための解析ライブラリがGithubにあるのでこちらを利用しました。
Arduino-IRremote
Githubからライブラリをダウンロードしてきたら、「スケッチ」>「ライブラリをインクルード」>「.ZIP形式のライブラリをインストール」で落としてきたzipファイルを選択。
これで準備は完了です。
解析プログラムを一から写経するのは大変なので、今回はラブラリに格納されてるサンプルをコピペすることにします。
ライブラリの中のexampleディレクトリにあるIRrecvDumpを試してみました。
が、普通に.inoファイルを起動すれば動くかと思ったのですがコンパイル時にエラーになってしまいました。
何故かと試行錯誤してみたところライブラリのディレクトリ外のファイルとしてコピペしたからでした。なので「スケッチ」>「ライブラリをインクルード」>「IRremote」を選択して関連ファイルのincludeをプログラムに追加しました。
これで無事コンパイル完了。Arudinoに書き込んで、シリアルモニタを立ち上げ、リモコンのボタンをプッシュ。
こんな感じで無事に信号を取得できました!
Arduinoのスターターキットについてきたリモコンだけじゃなくテレビや他のリモコンも向けてみましたがばっちり取得できました。
16進数っぽい記述の部分が信号の固有idな感じがするので、ボタンごとに別のことをするプログラムはこれを判定すれば作れそうですね!