見出し画像

赤外線リモコンでLEDを点灯!赤外線受信モジュールを使ってLEDを制御しよう!#13【Arduino UNO R4】

今回は、Arduinoでの赤外線リモコンの使い方についてご紹介します。

赤外線リモコンとは、身近なもので言えば、TVやエアコンのリモコンです。

赤外線リモコンを使うには、リモコンから送られてくる赤外線信号を受信するための、赤外線受信モジュールが必要になります。

本稿では赤外線受信モジュールの基本的な使い方をご紹介します。

ぜひ一緒にやってみましょう!


はじめに

この記事では、Arduinoで赤外線リモコン、赤外線受信モジュールの使い方について簡単にご紹介しています。

下記の注意事項をお読みいただいた上で、ぜひお楽しみください。

【 注意 】
当Webサイトに掲載された内容によって生じた損害等の一切の責任を負いません。また生じた問題についてはご自身の責任において解決いただくことをあらかじめご承知おきください。詳しくは下記URLの免責事項をご確認願います。当サイトの免責事項に同意いただける場合に限り、当サイトの内容をご利用いただけます

https://note.com/shingo_shirogane/n/n3d5686bf512b

Youtube動画

赤外線リモコン赤外線受信モジュールの使い方を、動画で解説しています。5分程度の短い動画ですので、サクッとご覧いただけます。

必要なもの

1. マイコンボード

本記事では、Arduino UNO R4 Wi-Fiを使います。

画像

2. 電子部品

以下の電子部品を使います。

  • 赤外線受信モジュール(OSRB38C9AA)

  • LED(OSR5JA5E34B)

  • 抵抗(100Ω)

  • 抵抗(10kΩ)*

  • コンデンサ(100uF)

  • ジャンパーワイヤー 適量

  • リモコン

*22kΩが無かったので、代用

赤外線受信モジュールとは?

赤外線受信モジュールとは、赤外線通信の信号を受け取るための回路がひとまとめになった電子部品のことです。

今回使うモジュールは、フォトダイオード、フィルタ、アンプなどが入っていて、マイコンと一緒に使いやすいタイプです。

受信するための回路

回路図

OSRB38C9AAのデータシートより引用

赤外線受信モジュールのVoutはArduinoの2ピンに繋ぎます。

またVsはArduinoの+5Vへ、GroundはArduinoのGNDにそれぞれ繋ぎます。

配線の様子

LED回路はPWM出力ができる9ピンに繋いでいます。PWMが出力できると、LEDの明るさを調節できます。

詳しくは👇の記事を参照してください。

ライブラリのインストール

まず準備として、Arduino IDEでライブラリ「IRremote」をインストールします。

左端のアイコンの上から3つめをクリックして、検索窓に「IRremote」と入力すると、画像のように一番上に出てきますので、それをインストールします。

サンプルプログラムを動かしてみる

左上のファイルから、スケッチ例→IRremote→SimpleReceiverをクリックすると、画面のようなサンプルプログラムが開きます。

40行目あたりに、デコード方式がずらっと定義されている箇所があります。

ここでリモコンの赤外線通信の方式がどれなのかをプログラムに教えておく必要があるのですが、使うリモコンによって異なります。

この記事で使うリモコンの場合は、43行目の「DECODE_KASEIKYO」と書いてある方式で上手くいきました。

そのため、43行目のコメントアウトを削除して、逆に46行目のNECのデコード方式はコメントアウトします。

※注意
使うリモコンによって異なるので、上手くいかない時は色々と試してみてください。

そしてこの状態でいったん、プログラムを書き込んで、シリアルモニターを開きます。

赤外線受信モジュールに向かって、リモコンの電源ボタンを押すと、👆の画像のような表示が現れます。

ここでCommandの0xから始まる数字をメモしておきます。他のボタン(音量の+と-)も試してみて、数字をメモっておくと便利かもしれません。

LEDを光らせるプログラムを作る

新しいスケッチを開いて、先ほどのサンプルプログラムをコピペします。

そして不要な部分を削除し、電源ボタンが押されたらLEDが光るようにプログラムを作ります。

コピペが終わったら、サンプルプログラムの方は閉じても大丈夫です。ただし、保存してしまわないように気を付けてください。

ソースコードが👇になります。注意事項をよくお読みいただき、ご使用ください。

//当Webサイトに掲載された内容によって生じた損害・損失の一切の責任を負いません。
//当webサイトの免責事項に同意いただける場合に限り、プログラムをご利用いただけます。

#include <Arduino.h>

//赤外線の方式
#define DECODE_KASEIKYO

#include <IRremote.hpp>

//ピン設定
#define IR_RECEIVE_PIN 2
#define LED_PIN 9

//ボタンの定義(メモした数字を入れる。)
#define BUTTON_POWER //0x??
#define BUTTON_PLUS //0x??
#define BUTTON_MINUS //0x??

//変数宣言
int sw_state = 0;
unsigned int pwm = 250;

void setup() {
    pinMode(9, OUTPUT);   //ピンの出力設定(LED用)

    Serial.begin(115200);
    while (!Serial);
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);

    delay(1000);
    Serial.print(F("Ready to receive IR signals of protocols: "));
    printActiveIRProtocols(&Serial);
    Serial.print(F("at pin "));
    Serial.println(IR_RECEIVE_PIN);
}

void loop() {
    if (IrReceiver.decode()) {
        /*
         * Print a summary of received data
         */
        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
            Serial.println(F("Received noise or an unknown (or not yet enabled) protocol"));
            // We have an unknown protocol here, print extended info
            IrReceiver.printIRResultRawFormatted(&Serial, true);
            IrReceiver.resume(); // Do it here, to preserve raw data for printing with printIRResultRawFormatted()
        } else {
            IrReceiver.resume(); // Early enable receiving of the next IR frame
            IrReceiver.printIRResultShort(&Serial);
            IrReceiver.printIRSendUsage(&Serial);           
        }
        Serial.println();

        /*
         * Finally, check the received data and perform actions according to the received command
         */
        remoteControl(IrReceiver.decodedIRData.command);
        IrReceiver.resume();   
    }
}

//受けたコマンドごとに命令を実行する関数
void remoteControl(int remoConData){
  switch(remoConData){
    case BUTTON_POWER:
      Serial.println("電源が押されました");
      if(sw_state == 0){
        ledOn();
      }
      else{
        ledOff();
      }
      delay(500); 
      break;

    case BUTTON_PLUS:
      Serial.println("音量+が押されました");
      if(pwm < 250){
        pwm += 25;
      }
      ledBrightControl();
      break;

    case BUTTON_MINUS:
      Serial.println("音量-が押されました");
      if(pwm > 0){
        pwm -= 25;
      }
      ledBrightControl();
      break;
  }
}

//LEDを消灯する関数
void ledOn(){
  analogWrite(LED_PIN, pwm);
  sw_state = 1;
}

//LEDを消灯する関数
void ledOff(){
  analogWrite(LED_PIN, 0);
  sw_state = 0;
}

//LEDの輝度を調整する関数
void ledBrightControl(){
  if(sw_state == 1){
    analogWrite(LED_PIN, pwm);
  }
}

上手くいくと、赤外線リモコンを使ってLEDをつけたり消したりできると思います。

また音量の+と-を押せば、明るさが調節できます。

ここまでお疲れさまでした!

おわりに

いかがだったでしょうか。

今回は、赤外線受信モジュールを使った、赤外線リモコンによるLEDの点灯と消灯についてご紹介しました。

もしこの記事がお役に立てたら、"スキ"や"サポート"をいただけると励みになります!

最後まで読んでいただき、ありがとうございました。


今後ともお役に立てるような記事を発信していきます!よろしければサポートいただけると嬉しいです!