検索コード

レッスン21/31:Arduinoで赤外線リモコンを使用する | SunFounder Robojax

レッスン21/31:Arduinoで赤外線リモコンを使用する | SunFounder Robojax

はじめに

このレッスンでは、Arduinoを使って標準的なリモコンの信号をデコードするプロジェクトを構築し、赤外線(IR)通信の魅力的な世界を探求します。このプロジェクトにより、IRリモコンのどのボタンが押されたかを検出し、それに応じてブザーを鳴らすなどのアクションをトリガーできます。IRリモコンとインターフェースする能力は、簡単なホームオートメーションからカスタム制御システムまで、幅広い実用的なアプリケーションを可能にします。

infrare_remote
IR_receiver_pins

このテクノロジーで構築できるインスピレーションあふれるアイデアをいくつか紹介します:

  • ユニバーサルリモコン代替品:テレビ、オーディオシステム、その他のIR制御デバイス用のカスタムリモコンを作成します。
  • ホームオートメーション:標準的なリモコンのボタンを押すだけで、照明、ファン、その他の家電を制御します。
  • インタラクティブプロジェクト:特定のボタンが押されたときにアラームをトリガーするセキュリティシステムを構築します。
  • ロボティクス制御:IRリモコンを使用してロボットの動きやアクションをワイヤレスで制御します。
  • アクセシビリティ支援:運動機能が制限された個人向けの、シンプルで大きなボタンのリモコンを開発します。

ハードウェア&コンポーネント

このプロジェクトは、SunFounder 3-in-1キットなどのスターターキットに通常含まれているいくつかのシンプルなコンポーネントで構成されています。必要なものは以下の通りです:

  • Arduinoボード(例:Uno)
  • IRレシーバーモジュール(例:TSOP38238または類似品)
  • 標準的なIRリモコン(CR2025バッテリー付き)
  • パッシブブザー
  • ジャンパーワイヤーとブレッドボード

配線ガイド

ir_remote_control_wiring

このプロジェクトの簡単な配線図は以下の通りです。IRレシーバーが主要なコンポーネントです。レシーバーの曲面を見たとき、ピンの配置は次のようになります:

  • 右ピン:Arduinoの5Vピンに接続します。
  • 中央ピン:ArduinoのGNDピンに接続します。
  • 左ピン(信号):Arduinoのデジタルピン11に接続します。

さらに、プロジェクトのアクション部分として、ブザーのプラス(長い方)リードをデジタルピン2に接続し、もう一方のリードをGNDに接続します。

コードの説明

このプロジェクトは、赤外線信号のデコードという複雑なタスクを処理するためにIRremoteライブラリに依存しています。コードは、まずリモコンからの特定のコードを学習し、それらを使用してアクションをトリガーするように構成されています。ユーザーが設定可能な部分を詳しく見ていきましょう。

まず、IRレシーバーの信号線が接続されているピンを定義します。これは、物理的な配線と一致させなければならない重要な設定です。

const int IR_RECEIVE_PIN = 11;  // IRセンサーのピン番号を定義

setup()関数では、先ほど定義したピンを使用してIRレシーバーを初期化します。これにより、ライブラリがそのピンで信号のリッスンを開始します。

IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // IRレシーバーを開始

アクション実行ロジックの核心はloop()にあります。コードはキーが押されたかどうかをチェックし、それをデコードします。decodeKeyValue()関数は、リモコンからの生の16進コードを「POWER」や「MUTE」のような人間が読める文字列に変換するカスタム関数です。これは、特定のリモコンに合わせて変更する部分です。サンプルコードではbuzzerPinを定義し、「POWER」ボタンが押されたときのみブザーをオンにします。

const int buzzerPin = 2; // ブザーのピンを定義
// ... loop()内
if (decodedValue == "POWER") {
    digitalWrite(buzzerPin, HIGH); // ブザーをオンにする
} else {
    digitalWrite(buzzerPin, LOW); // ブザーをオフにする
}

使用方法:decodeKeyValue()関数は、このプロジェクトをカスタマイズするための鍵です。自分のリモコンで使用するには、まずシリアルモニターを開いた状態でコードを実行する必要があります。リモコンの各ボタンを押し、それぞれに印刷される16進値をメモします。次に、decodeKeyValue()関数内のswitchステートメントを更新して、それらの値を意味のある名前にマッピングします。その後、サンプルが「POWER」ボタンに対して行っているように、ifステートメントでこれらの名前を使用して異なるアクションをトリガーできます。

ライブプロジェクト&デモンストレーション

コードがアップロードされたら、ボーレート9600でシリアルモニターを開きます。リモコンをIRレシーバーに向けてボタンを押します。シリアルモニターに対応するキー名(例:「POWER」、「MUTE」)が表示されます。アクションが機能するのを確認するには、「POWER」ボタンを押します。ブザーがオンになるのが聞こえます。「MUTE」などの他のボタンを押すと、ブザーがオフになります。これは、リモコンを使用してArduinoのデジタル出力をトリガーするという、シンプルながら強力な概念を示しています。

チャプター

  • [00:00] Arduinoを使った赤外線リモコンの紹介
  • [01:25] IR受信機と送信機の概要
  • [02:24] IR受信モジュールと配線の理解
  • [03:31] IRremoteライブラリのインストール
  • [04:22] デコードコードを開いて説明
  • [07:29] コードのアップロードとリモコンキーのテスト
  • [08:41] アクションの追加:ブザーの制御
  • [10:37] 今後のIRプロジェクトのプレビュー

画像

IR_receiver_pins
IR_receiver_pins
infrare_remote
infrare_remote
ir_remote_control_wiring
ir_remote_control_wiring
904-Lesson 21/31: Arduino code fpor decoding Infrared from remote signal
言語: C++
/*
Lesson 21/31: Decoding Infrared from remote
Get this code and watch video Download and resource page https://robojax.com/RJT604
YouTube video https://www.youtube.com/watch?v=EAlqaVy8fYY

*/
#include <IRremote.h>

const int IR_RECEIVE_PIN = 11;  // Define the pin number for the IR Sensor
String lastDecodedValue = "";  // Variable to store the last decoded value

void setup() {
  Serial.begin(9600);                                     // Start serial communication at 9600 baud rate
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // Start the IR receiver
}

void loop() {
  if (IrReceiver.decode()) {
    String decodedValue = decodeKeyValue(IrReceiver.decodedIRData.command);
    if (decodedValue != "ERROR") {
      Serial.println(decodedValue);
      delay(100);
    }
    IrReceiver.resume();  // Enable receiving of the next value
  }
}

String decodeKeyValue(long result)
{
  switch(result){
    case 0x16:
      return "0";
    case 0xC:
      return "1"; 
    case 0x18:
      return "2"; 
    case 0x5E:
      return "3"; 
    case 0x8:
      return "4"; 
    case 0x1C:
      return "5"; 
    case 0x5A:
      return "6"; 
    case 0x42:
      return "7"; 
    case 0x52:
      return "8"; 
    case 0x4A:
      return "9"; 
    case 0x9:
      return "+"; 
    case 0x15:
      return "-"; 
    case 0x7:
      return "EQ"; 
    case 0xD:
      return "U/SD";
    case 0x19:
      return "CYCLE";         
    case 0x44:
      return "PLAY/PAUSE";   
    case 0x43:
      return "FORWARD";   
    case 0x40:
      return "BACKWARD";   
    case 0x45:
      return "POWER";   
    case 0x47:
      return "MUTE";   
    case 0x46:
      return "MODE";       
    case 0x0:
      return "ERROR";   
    default :
      return "ERROR";
    }
}

必要かもしれないもの

リソースと参考文献

まだリソースはありません。

ファイル📁

Arduinoライブラリ(zip)