🌊

Arduinoで赤外線受信機を作る

2023/09/07に公開

はじめに

赤外線受信機は↓のような1個100円もしない赤外線受信モジュールを使用することで作成することができます。
https://akizukidenshi.com/catalog/g/gI-04659/

今回はArduinoのIRRemoteというライブラリでテレビリモコンなどから送られる信号をキャッチし、LEDを光らせるような簡易的なものを作成したので解説していこうと思います。
https://github.com/Arduino-IRremote/Arduino-IRremote
(IRRemoteはインストールしておく必要があります)

回路図

赤外線受信モジュールは一般的にはVCC, GND, OUT(信号)の3ピンになります。
9ピンを赤外線受信用にし、13ピンはLEDに接続しています。

コード

#include <IRremote.h>

int receiverPin = 9;
int ledPin = 12;

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(receiverPin, true); 
  pinMode(ledPin, OUTPUT);
}

void loop() {
  if (IrReceiver.decode()) {

    IrReceiver.printIRResultShort(&Serial);

    if (IrReceiver.decodedIRData.decodedRawData == 0x00000000) {
      digitalWrite(ledPin, HIGH);
      delay(1000);
      digitalWrite(ledPin, LOW);
    }

    IrReceiver.resume();
  }
}

setup()内

IrReceiver.begin(receiverPin, true)
ここで受信モジュールの信号使うピンを設定します。
またbool値をtrueに設定することで、arduinoの内臓LEDが点灯し受信したことが分かりやすくなります。

loop()内

if (IrReceiver.decode()) {}
受信したかどうかを確認をし受信データをデコードします。

IrReceiver.resume()
次の値の受信を有効にします。
これがないと前に受信したデータがリセットされず、永遠に前のデータを返し続けてしまいます。

まぁ上記2つは特に意味を考えず、if文のdecode()内の最後にresume()を書いておくものという書き方だけ覚えておけばいいと思います。

IrReceiver.printIRResultShort(&Serial)
受信したデータの詳細を↓画像のようにシリアルモニタに表示します。
ここで表示されたRaw-Dataを上記コードのIrReceiver.decodedIRData.decodedRawDataと比較することで、特定のボタンが押された時の制御が可能になります。

シュミレーター上で赤外線受信を実行する方法が分かりませんので動作はしませんがサンプルもこちらに置いておきます。
https://www.tinkercad.com/things/duWraYwgTlq-irremote-reciver-sample

参考資料
https://deviceplus.jp/arduino/how-to-send-ir-commands-to-project-with-remote-control/
https://burariweb.info/electronic-work/arduino-learning/arduino-ir-module-use.html

Arsaga Developers Blog

Discussion