Arduino Nano互換品で赤外線受信、送信

ライブラリを管理からIRremote(by shirriff バージョン2.2.3)をインストールして活用して、
Arduino Nano互換品で赤外線リモコンの信号をコピーしてリモコンコード解析ツールをつくってみました。
今回はパナソニックのシーリングライトリモコン(HK9478)の信号をコピーした例を参考に記載します。

まずは、コピーしたい信号の読み取りをします。
【準備したもの代表例】
・赤外線受信モジュール(VS1838B)
・コンデンサ(47μF)
・Arduino Nano互換品
※47μFのコンデンサが最適かどうかは不明。今回は手持ちのコンデンサを使用しただけで、
VS1838Bのデータシートでは100μFと書かれています。

【回路図】
etc_0072.jpg

【プログラム】
スケッチ例の「IRrecvDumpV2」をそのまま使用します。
スケッチを書き込み、シリアルモニタの画面(9600bps)を出してリモコンのスイッチを押すと、次のような表示がでます。
何回かトライして再現性の高い信号を探して下さい。
--------------------------------------------------------------------------------------
Encoding : UNKNOWN
Code : CA21A230 (32 bits)
Timing[83]:
+3450, -1750 + 450, – 400 + 450, – 400 + 450, -1300
+ 450, -1300 + 450, – 400 + 450, -1250 + 450, – 450
+ 450, – 400 + 450, – 400 + 450, -1300 + 450, – 400
+ 450, – 450 + 450, -1250 + 450, – 450 + 450, -1250
+ 450, – 450 + 400, -1300 + 450, – 400 + 450, – 450
+ 450, -1250 + 450, – 450 + 450, – 400 + 450, – 400
+ 450, – 450 + 450, – 400 + 450, – 400 + 450, -1300
+ 450, -1250 + 450, – 450 + 450, -1250 + 450, – 450
+ 400, – 450 + 400, -1350 + 450, – 400 + 450, -1300
+ 450, – 350 + 500, – 400 + 450, -1300 + 450, – 400
+ 450, – 400 + 450
unsigned int rawData[83] = {3450,1750, 450,400, 450,400, 450,1300, 450,1300, 450,400, 450,1250, 450,450, 450,400, 450,400, 450,1300, 450,400, 450,450, 450,1250, 450,450, 450,1250, 450,450, 400,1300, 450,400, 450,450, 450,1250, 450,450, 450,400, 450,400, 450,450, 450,400, 450,400, 450,1300, 450,1250, 450,450, 450,1250, 450,450, 400,450, 400,1350, 450,400, 450,1300, 450,350, 500,400, 450,1300, 450,400, 450,400, 450}; // UNKNOWN CA21A230
--------------------------------------------------------------------------------------

今回は信号のEncoding種類がUNKNOWNだったので、信号生データをそのまま送信できるようなプログラムを作成します。
といっても、スケッチ例をフル活用させてもらうだけですが。

続きまして、信号の送信器をつくります。

【準備したもの代表例】
・NPNトランジスタ(C2120Y)
・赤外線LED 波長940nm(SD-AR512C9-90)
・抵抗(100オーム)
※最初、300オーム程度の抵抗を使用してましたが、全然反応しなくてよく分からず絶望しました。
データシートのvoltage: 1.2-1.3V Current: 40mAとarduinoの電源5Vより、適切な抵抗を計算して
100オームの抵抗を新たに購入したらリモコンとして機能するようになりました。
LEDの抵抗値計算方法はググると便利なサイトがいくつも出てきますのでそちらで調べて下さい。
赤外線が出ているかどうかはスマホのカメラをかざすとスマホの画面内では僅かに光るので
それでON、OFFしているくらいは分かります。

【回路図】
etc_0073.jpg
ライブラリ「IRremote」では送信用の赤外線LEDはデジタル3ピンに繋ぎましょう。

【プログラム】
スケッチ例の「IRsendRawDemo」を活用します。
ほぼスケッチ例そのままですが、せっかくなので5秒ごとにON、OFFするようなプログラムにしました。
「//電気ON」の「unsigned int irSignal[]」の後ろに先ほど読み取った生値を貼り付けてあります。
--------------------------------------------------------------------------------------
#include <IRremote.h>
IRsend irsend;

void setup()
{
}

void loop() {
int khz = 38; // 38kHz carrier frequency for the NEC protocol

//電気ON
unsigned int irSignal[] = {3450, 1750, 450, 400, 450, 400, 450, 1300, 450, 1300, 450, 400, 450, 1250, 450, 450, 450, 400, 450, 400, 450, 1300, 450, 400, 450, 450, 450, 1250, 450, 450, 450, 1250, 450, 450, 400, 1300, 450, 400, 450, 450, 450, 1250, 450, 450, 450, 400, 450, 400, 450, 450, 450, 400, 450, 400, 450, 1300, 450, 1250, 450, 450, 450, 1250, 450, 450, 400, 450, 400, 1350, 450, 400, 450, 1300, 450, 350, 500, 400, 450, 1300, 450, 400, 450, 400, 450};

irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz);
delay(5000);

//電気OFF
unsigned int irSignal2[] = {3450, 1750, 400, 450, 450, 450, 400, 1300, 400, 1350, 400, 450, 400, 1350, 400, 450, 450, 400, 450, 450, 450, 1250, 450, 450, 400, 450, 400, 1350, 450, 400, 400, 1300, 450, 450, 400, 1300, 450, 450, 400, 450, 450, 1250, 450, 450, 400, 450, 450, 450, 400, 450, 450, 1300, 400, 1300, 400, 1350, 400, 1350, 400, 450, 400, 1350, 350, 500, 400, 450, 400, 450, 450, 1300, 450, 1300, 400, 450, 400, 450, 400, 1350, 400, 450, 400, 500, 400};

irsend.sendRaw(irSignal2, sizeof(irSignal) / sizeof(irSignal[0]), khz);
delay(5000);

}
--------------------------------------------------------------------------------------
まずは動くことを確認するため、このスケッチを書き込んだら赤外線LEDをなるべく動かしたい物の近くにセットしてみましょう。
無事作動する事を確認した後に、どの程度離れられるか、角度はどうか試すといいです。
ちなみに、今回使用したLEDは普通のリモコンと同等程度の距離までは送信できましたが、角度は少し狭そうでした。

スポンサードリンク
    

電子工作

Posted by gonzy