🤖
赤外線受信モジュールの使い方
メリット
ワイヤレスかどうかというより多数のボタンが使えるようになるのがうれしい。
部品
項目 | 値 |
---|---|
価格 | 120円 |
赤外線受信センサ | VS1838 |
適合リモコン | KEYES38K |
動作電源 | 5V |
配線
モジュール側 | Arduino Uno 側 | |
---|---|---|
G | GND | |
R | 5V | R とは? |
Y | D2 | Y とは? |
G が GND としても R, Y がなんの略かはわからない。
ライブラリ
ライブラリのおかげで何もつまづくことなく使えてしまった。リポジトリのトップページがドキュメントになっている。
コード
#include <IRremote.hpp>
#define IR_RECEIVE_PIN 2
#define ENABLE_LED_FEEDBACK true
void setup() {
Serial.begin(9600);
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
}
void loop() {
if (IrReceiver.decode()) {
IrReceiver.printIRResultShort(&Serial);
if (IrReceiver.decodedIRData.decodedRawData == 0xF30CFF00) {
Serial.println("1");
}
IrReceiver.resume();
}
}
ENABLE_LED_FEEDBACK を true にしておけば[1]受信時に内蔵LEDが点灯して安心感が出る。
受信データの確認方法と判別
受信データの詳細を表示する
IrReceiver.printIRResultShort(&Serial);
リモコンの1と2を順に押したとき
Protocol=NEC Address=0x0 Command=0xC Raw-Data=0xF30CFF00 32 bits LSB first
Protocol=NEC Address=0x0 Command=0x18 Raw-Data=0xE718FF00 32 bits LSB first
ボタン毎に Raw-Data がユニークなので 1 なら次のように判別する。
if (IrReceiver.decodedIRData.decodedRawData == 0xF30CFF00) {
Serial.println("1");
}
すべての情報を見るには?
ライブラリが用意してくれている上のサンプルであらゆる情報を確認できる。実行するにはあらかじめ次のようにしておく。
- データ用のピン → D2
- Serial送受信速度 → 115200 baud (Arduino IDE 側)
赤外線を見るには?
直接は見えないが「スマホのカメラを経由する」と赤い光が少し見える。これによってリモコン側が正しく送信できているかどうかを確認することができる。
送信もできる?
IrReceiver.printIRSendUsage(&Serial);
// => Send with: IrSender.sendNEC(0x0, 0xC, <numberOfRepeats>);
printIRSendUsage を使うと受信した内容を送信するときの書き方に変換できる。しかし実行してみたがスマホのカメラでは視認できなかった。そもそも受信センサと書いてあるのだから送信はできないのだろう。
-
正確には begin の第二引数が true であれば ↩︎
Discussion