Arduinoで赤外線リモコンの信号を受信する方法
Arduinoで赤外線信号を読み取りLEDを光らせる
今回は家庭にある赤外線リモコンを使用して、Arduinoと赤外線通信をしていきます。
あらかじめ、赤外線リモコンから出力される信号を解析します。
その信号に合わせて、LEDを点灯させていきます。
準備するもの
Arduinoで赤外線リモコンからの信号を読みとりLEDを点灯させるために必要なものはこちらになります。
- Arduino UNO
- 家庭にある赤外線リモコン
- 赤外線リモコン受信モジュール OSRB38C9AA
- カーボン抵抗 220Ω
- ブレッドボード
- LED 6個
- ジャンパー線 たくさん
使いまわせる家庭用リモコンがない場合ではAmazonとかで電子工作用の赤外線リモコンが売っているのでそちらを利用してもいいかもしれません。
https://amzn.to/37GEZUi
私は、家のルームライト用のリモコンを使用しました。
Arduninoで赤外線リモコン信号の解析
Arduinoでリモコンの信号を取得してそれに応じた出力をするためには、リモコンから出力された信号を読み取らなければなりません。
そのための回路図と配線図は以下のようになります。
赤外線受光モジュールのGNDとVCCにノイズ除去用に0.1μFのコンデンサを挟んでいますが、なくても大丈夫です。
そして、このようなプログラムを作成しました。
#include <IRremote.h> int RECV_PIN = A0; //デジタルIOのA0ピンを受信データ入力用に設定 IRrecv irrecv(RECV_PIN); // 受信で使用するオブジェクトを作成 'irrecv' decode_results results; // 受信情報の格納先を作成 'results' void setup(){ Serial.begin(9600); irrecv.enableIRIn(); // 作成したオブジェクトで赤外線受信をスタート } void loop() { if (irrecv.decode(&results)) { // 受信したかどうかの確認 未受信=0/受信=1 Serial.println(results.value, HEX); //16進表示 irrecv.resume(); // .decode()の返り値をリセット } delay(100); }
赤外線受光素子から出力された信号を16進数に変換して、シリアル通信によって出力するプログラムです。
プログラムをコンパイルする前に"IRremote"のライブラリをインストール、インクルードをしておく必要があります。
このプログラムをコンパイルして、赤外線受光素子にむかってリモコンのボタンを押すと以下のような信号がシリアル通信で取得することができました。
リモコンの信号は間違いないように、何回も信号を取り直して確認することをお勧めします。
たまに、うまく信号が拾えずに変な信号を受信してしまう場合があります。
使用したリモコンに対応した信号を整理すると以下のようになりました。
次は、取得した信号を利用できるように赤外線受信器を作成していきましょう。
Arduinoを赤外線リモコンで操作する
先ほど取得した信号がArduinoに入力されると、LEDの点灯表示を変更するようなプログラムを作っていきます。
回路図と配線図は、以下のようになっています。
先ほど、赤外線の信号解析を行った回路にLED点灯回路を増設したものになっています。
そしてボタンを押したときの動きは以下のような動きを想定してプログラムを作っていきました。
使用していないボタンもありますが、使いたいときはプログラムのほうを改造してください。
実際に作成したプログラムは以下のようになっています。
#include <IRremote.h> int RECV_PIN = A0; int i,j; IRrecv irrecv(RECV_PIN); decode_results results; void setup(){ irrecv.enableIRIn(); pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); } void loop() { if (irrecv.decode(&results)) { irrecv.resume(); switch (results.value) { case 0xEBB8D38E: //点灯ボタン 2,3,4点灯 for( i = 0;i < 3; i++ ){ digitalWrite(i+2, HIGH); } for( i = 0;i < 3; i++ ){ digitalWrite(i+5, LOW); } j=4; break; case 0x1E82D3CE: //全灯ボタン for( i = 0;i < 6; i++ ){ digitalWrite(i+2, HIGH); } j=7; break; case 0x1D41D404: //消灯ボタン すべて消灯 for( i = 0;i < 6; i++ ){ digitalWrite(i+2, LOW); } j=1; break; case 0x72703D2E: //明るいボタン j++; if(j>7){ j=7; } digitalWrite(j,HIGH ); break; case 0xEB95DB2E: //暗いボタン digitalWrite(j,LOW ); j--; if(j<1){ j=1; } break; default:break; } delay(300); } }
switch文で、各ボタンが押された時の挙動を分岐させています。
caseの条件分岐で取得した赤外線信号を解析したものを使用しています。
0x----は16進数であることを表しています。
また、変数 j は現在のLEDの点灯状況を表しています。
実際に動かすと以下のような挙動になります。
同じような動きになったでしょうか?
赤外線リモコンがうまく動かない場合はリモコンの信号を取り直して正しいかの確認をするなどしてください。
受光範囲などからずれていたり変な角度から取得したりすると、取得する信号が変わってしまう場合があります。
今回のまとめ
今回は赤外線信号の解析と、解析した信号を使用したArduinoによって信号を出力させてLEDを点灯させました。
今回行った、赤外線信号によって無線でArduinoから信号を出力させることができたらもっといろいろなことができます。
赤外線でモーターのオンオフをさせてラジコンカーを作ったり、無線で動かせるルームライトなどを作ったり、電子工作の幅は無限に広がったと思います。
今度は、赤外線リモコンを解析した信号を出力する装置、いわゆる学習リモコンを作ってみたいですね。
家庭内の家電をIoT化する、電子工作によるライフハックが近づいてきた気がしますね。
今回もここまで読んでくれてありがとうございました。