赤外線(IR) モジュールを使った通信

コンピュータ、組み込み

赤外線(IR)通信モジュールで通信を行います。
マイコン同士の通信を目的にした通信を行います。

紹介するもの

IR Receiver Module

外観

IR Transmitter Module

外観

使用感

モジュール自体は簡単な配線ですぐに実験ができます。
市販のリモコンからもマイコンの制御ができるので実験や実用の用途が広がりそうです。

購入時からアングルタイプのピンヘッダが実装されていますが、ブレッドボード上で通信させるには作業性が悪いので、ストレートのピンヘッダへ換装しています。

準備するもの

ライブラリ

Arduino IDEのライブラリマネージャからIR通信用ライブラリをインストールします。
今回、「IRremote by shirriff, z3t0, ArminJo」を使用します。
動作確認時のバージョンは 3.9.0です。

ライブラリ名検索
IRremote by shirriff, z3t0, ArminJoirremote

使うもの

名称(型番)用途
Raspberry Pi Pico 2枚USB対抗通信に使用
画像では、YD-RP2040とPico-BOOTを使用しています。
IR Transmitter 2枚赤外線送信に使用
IR Receiver 2枚赤外線受信に使用
赤外線リモコン
(エアコンやテレビでも可)
赤外線受信機の通信確認に使用

加工

アングルピンヘッダでは作業しにくいので、ストレートに換装します。
1.ピンヘッダの取り外し
 ピンヘッダをペンチで引っ張りながら作業を行います。
 ピンヘッダの半田箇所に半田ごてしばらく当てると、熱で樹脂が柔らかくなり1本だけ抜けます。
 同じ要領で、すべてのピンを抜きます。

2.スルーホールの半田除去
 半田バキュームでスルーホールの半田を吸い取ります。

3.ピンヘッダの半田付け
 新しいストレートのピンヘッダをはんだ付けします。

スケッチ

IR受信側

説明

COMから入力した文字のASCIIコードをIR出力します。

配線
Raspbery Pi Pico配線IR Receiver Module
3V3VCC
GNDGND
GPIO0OUT
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
Raspberry Pi Picoで確認

【スケッチの説明】
IR受信したらCOMに結果を出力する。

【ライブラリ】
 Raspberry Pi Pico/RP2040 > Raspberry Pi Pico
 IRremote by shirriff, z3t0, ArminJo

【準備】
Raspberry Pi Pico <-> IR Receiver Module
3.3V       <-> VCC
GND        <-> GND
GPIO0      <-> VOUT

【バージョン情報】
2023/1/8 : 新規
**********************************************************************/

#include <IRremote.h>

#define PIN_IRRECEIVE  0            //受信GPIOピン

IRrecv irrecv(PIN_IRRECEIVE);       // IR通信を行うための受信オブジェクト

void setup()
{
  Serial.begin(115200);
  irrecv.enableIRIn();              // 赤外線受信開始
}

void loop()
{
  decode_results IR_Result;           // 受信情報の保存先
  //IR受信状態の確認 (0 = 未受信 / 1 = 受信あり)
  if (irrecv.decode(&IR_Result) == 1)
  {
    Serial.printf("%08x\r\n", IR_Result.value);        //結果表示
    irrecv.resume();                    
  }
}
結果

IRリモコンを受信モジュールに向けてボタンを押すと、COMにはIRを読み取った結果が表示されました。
ボタンを長押しすると「FFFFFFFF」を読み取るようです。

似たようなリモコンで試してみると、図のような結果になりました。
同じメーカのリモコンだと思いますが、ボタンの位置でIR送信コードが決まっているようです。
リモコンから送られてくるコードと、受信側がそのコードを受信することによりどのような処理をするかは「決め(設計)」のことなので、使用するリモコンごとにどのボタンでどのコードが送信されるかを調査する必要があります。

IR送信側

説明

IR受信があれば、結果をCOMに出力します。

配線
Raspbery Pi Pico配線IR Transmitter Module
3V3VCC
GNDGND
GPIO0DAT
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
Raspberry Pi Picoで確認

【スケッチの説明】
COMから入力したASCIIコードをIRに出力する。

【ライブラリ】
 Raspberry Pi Pico/RP2040 > Raspberry Pi Pico
 IRremote by shirriff, z3t0, ArminJo

【準備】
Raspberry Pi Pico <-> IR Receiver Module
3.3V       <-> VCC
GND        <-> GND
GPIO0      <-> VOUT

【バージョン情報】
2023/1/8 : 新規
**********************************************************************/

#include <IRremote.h>
 
#define PIN_IRTRANSMIT  0   //IR送信GPIOピン
#define IR_DELAY  50        //IRを連続送信するためのウエイト

void setup()
{
  Serial.begin(115200);
  IrSender.begin(PIN_IRTRANSMIT);        //IR送信通信開始
}
 
void loop() 
{
  //COM受信バッファの確認 (0 = 無 / else = 有)
  if(Serial.available() != 0)
  {
    char buf = Serial.read();             //COM受信
    IrSender.sendNEC((uint32_t)buf, 32);      //IR送信
    delay(IR_DELAY);
  } 
}
結果

確認にはTeratermを2つ起動します。(ArduinoIDEシリアルモニタでも可)
受信側には先に確認したIR受信側を使用します。

今回送信側がCOM192, 受信側がCOM15で認識されました。
COM192側から文字を入力すると、COM15側にASCIIコードが表示されました。

コメント

タイトルとURLをコピーしました