🤖

赤外線受信モジュールの使い方

2023/01/16に公開

メリット

ワイヤレスかどうかというより多数のボタンが使えるようになるのがうれしい。

部品

https://www.aitendo.com/product/10761

項目
価格 120円
赤外線受信センサ VS1838
適合リモコン KEYES38K
動作電源 5V

配線

モジュール側 Arduino Uno 側
G GND
R 5V R とは?
Y D2 Y とは?

G が GND としても R, Y がなんの略かはわからない。

ライブラリ

https://github.com/Arduino-IRremote/Arduino-IRremote

ライブラリのおかげで何もつまづくことなく使えてしまった。リポジトリのトップページがドキュメントになっている。

コード

#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");
}

すべての情報を見るには?

https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/ReceiveDump/ReceiveDump.ino

ライブラリが用意してくれている上のサンプルであらゆる情報を確認できる。実行するにはあらかじめ次のようにしておく。

  • データ用のピン → D2
  • Serial送受信速度 → 115200 baud (Arduino IDE 側)

赤外線を見るには?

直接は見えないが「スマホのカメラを経由する」と赤い光が少し見える。これによってリモコン側が正しく送信できているかどうかを確認することができる。

送信もできる?

IrReceiver.printIRSendUsage(&Serial);
  // => Send with: IrSender.sendNEC(0x0, 0xC, <numberOfRepeats>);

printIRSendUsage を使うと受信した内容を送信するときの書き方に変換できる。しかし実行してみたがスマホのカメラでは視認できなかった。そもそも受信センサと書いてあるのだから送信はできないのだろう。

脚注
  1. 正確には begin の第二引数が true であれば ↩︎

Discussion