🤖

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

2023/01/16に公開約2,400字

メリット

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

部品

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

ログインするとコメントできます