Arduinoで赤外線リモコンの信号を受信する方法

家庭にある赤外線リモコンを使用し、Arduinoで信号を受信・解析してLEDを点灯させます。
取得した信号は、リモコン制御のデバイス開発や家電操作の自動化などにも応用可能です。

Arduino UNO R4 Minima

Arduino UNO R4 Minima

Arduino UNO R4 Minima starter kit

Arduino UNO R4 Minima starter kit


準備するもの

  • Arduino UNO
  • 家庭用赤外線リモコン(テレビ・ルームライト等)
  • 赤外線リモコン受信モジュール(OSRB38C9AAなど)
  • カーボン抵抗 220Ω
  • ブレッドボード
  • LED ×6
  • ジャンパー線(複数)
準備した部品

準備した部品

リモコンがない場合は電子工作用のIRリモコンモジュールの購入もおすすめです。

電子工作用赤外線リモコン

電子工作用赤外線リモコン

私は、家のルームライト用のリモコンを使用しました。


IR信号の解析手順

Arduinoでリモコンの信号を取得してそれに応じた出力をするためには、リモコンから出力された信号を読み取らなければなりません。

以下は、赤外線信号を受信するための回路図と配線例です。

回路図と配線図

回路図と配線図

Arduinoのソフト側では、赤外線信号をArduinoで取得→16進数でシリアル表示→信号値を出力するプログラムを作成しました。

赤外線受光素子から出力された信号を16進数に変換して、シリアル通信によって出力するプログラムです。

#include <IRremote.h>

int RECV_PIN = A0;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
  delay(100);
}
  • ライブラリ:「IRremote」のインストールが必要です。
  • 信号取得:モジュールにリモコンを向けてボタンを押す→results.valueが16進表示されます。
  • 信頼性確保:信号の安定性を確認するため、同じボタンを複数回押して同一のコードが得られるか確認しましょう。

実際にプログラムをコンパイルして、赤外線受光素子にむかってリモコンのボタンを押すと以下のような信号がシリアル通信で取得することができました。

Arduinoからのシリアル出力

Arduinoからのシリアル出力

取得した赤外線信号例を整理しました:

赤外線リモコンから取得した信号一覧

赤外線リモコンから取得した信号一覧


赤外線受信器でLED操作する

信号解析後は、解析信号を使用してArduinoでLEDを6個を制御します。

そのために作成した、回路図と配線図は以下のようになっています。

赤外線リモコンでのLED制御回路

赤外線リモコンでのLED制御回路

先ほど取得した信号がArduinoに入力されると、LEDの点灯表示を変更するようなプログラムを作成しました。

ボタンを押したときの動きは以下のような動きを想定しています。

未使用のボタンにも機能を割り当てたい場合は、プログラムを適宜改造してください。

赤外線リモコンでのLED制御回路

赤外線リモコンでのLED制御回路

実際に作成したプログラムは以下のようなものとなっています。

#include <IRremote.h>
int RECV_PIN = A0;
int i, j;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup(){
  irrecv.enableIRIn();
  for (i = 2; i <= 7; i++) pinMode(i, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    irrecv.resume();
    switch (results.value) {
      case 0xEBB8D38E: // 点灯
        for (i = 2; i < 5; i++) digitalWrite(i, HIGH);
        for (i = 5; i < 8; i++) digitalWrite(i, LOW);
        j = 4;
        break;
      case 0x1E82D3CE: // 全灯
        for (i = 2; i < 8; i++) digitalWrite(i, HIGH);
        j = 7;
        break;
      case 0x1D41D404: // 消灯
        for (i = 2; i < 8; i++) digitalWrite(i, 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);
  }
}
  • LEDピン:D2〜D7に接続
  • 変数 j:現在点灯中のLED番号を記憶
  • 冗長化制御:明るく/暗く操作のたびに j を増減

実行結果

実際に動かしたときの動画が以下のようになります。

  • 赤外線ボタンに応じてLEDを個別制御
  • 赤外線リモコンでLEDの点灯量を自在に調整できるようになります。
  • 家庭内家電の無線制御ツールなど、IoTへの応用可能性も広がります。

🔧 今回のまとめ

  • IRremoteライブラリで赤外線信号を取得→16進解析
  • 赤外線ボタンに応じてLEDを個別制御
  • 家電制御や学習リモコンへの展開も見据える電子工作として応用性が高い内容に!

電子工作 × 無線制御の第一歩、無線LED制御、ここから広がるDIYライフを楽しんでください♪