Arduinoで赤外線通信をする
記事一覧
- 第一回:XBeeのAPIモードで温度を受信する
- 第二回:XBeeのフレームをArduinoで表示する
- 第三回:Arduinoで赤外線通信をする
はじめに
前回、XBeeによる無線通信の確認で室温を送受信することができたので、今度はエアコンを操作するために赤外線通信を試してみる。
準備
以下の部品を千石電気で揃える
リモコンの信号を解析する
IRRemoteという、赤外線通信を行うための素敵なライブラリが存在しているので、それを使ってサクッと解析しようと思っていたのだが、エアコンのリモコンが送信する信号量が多すぎてそのままだと解析できない問題に遭遇。
巷ではIRremoteInt.h
の以下の数値をMax(255)にすれば5割の確率で解析できるという情報が流れていたが、残念ながらそれでも足りなかった。
#define RAWBUF 101 // Maximum length of raw duration buffer
色々と物色していると、これまた素敵なサイトと遭遇した。
hawksnowlog: Arduino で赤外線信号を学習してエアコンを制御してみた
ここで紹介されているスケッチを使わせてもらい、無事リモコンの通信を解析できた。
エアコンに信号を送る
解析した値を使って、エアコンに対して信号を送る。
IRRemoteインストール
以下の手順で、ArduinoIDEからIRremoteをインストールする
スケッチ > ライブラリをインクルード > ライブラリを管理 > IRremote > インストール
信号を送信する
次に、赤外線を送信するスケッチ例を開く
ファイル > スケッチ例 > IRremote > IRsendRawDemo
最後にirSignal
の中身を解析した値で置き換えて、Arduinoに書き込む
/* * IRremote: IRsendRawDemo - demonstrates sending IR codes with sendRaw * An IR LED must be connected to Arduino PWM pin 3. */ #include <IRremote.h> IRsend irsend; void setup() { } void loop() { int khz = 38; unsigned int irSignal[591] = {3480, 1676, 516, 1204, 464, 1252, 464, 396, 520, 336, 524, 340, 516, 1200, 516, 344, 516, 344, 524, 1192, 524, 1196, 520, 336, 520, 1200, 528, 332, 524, 332, 528, 1192, 520, 1200, 520, 340, 516, 1200, 524, 1192, 524, 336, 524, 336, 520, 1200, 516, 340, 520, 340, 516, 1204, 520, 336, 524, 336, 520, 340, 520, 340, 468, 392, 464, 396, 460, 396, 464, 396, 472, 388, 468, 392, 468, 388, 468, 392, 468, 392, 464, 396, 464, 396, 472, 384, 472, 388, 472, 388, 468, 392, 468, 388, 468, 1252, 516, 344, 524, 332, 524, 336, 472, 388, 468, 392, 468, 1248, 520, 1200, 512, 344, 524, 336, 472, 388, 472, 388, 468, 1248, 520, 340, 516, 1204, 524, 332, 524, 336, 472, 388, 468, 392, 468, 392, 464, 1252, 516, 1200, 524, 336, 524, 1196, 520, 1196, 520, 340, 516, 344, 464, 396, 472, 388, 468, 392, 468, 1248, 468, 392, 464, 392, 468, 1252, 464, 396, 472, 388, 468, 388, 468, 392, 468, 392, 464, 396, 464, 396, 460, 400, 468, 388, 472, 392, 464, 392, 468, 392, 464, 392, 468, 392, 464, 396, 464, 396, 460, 400, 468, 388, 472, 388, 472, 388, 468, 392, 464, 392, 464, 396, 464, 396, 460, 400, 468, 392, 468, 388, 468, 392, 468, 392, 464, 396, 464, 396, 460, 396, 464, 396, 472, 388, 468, 388, 472, 392, 464, 392, 468, 392, 464, 396, 464, 392, 464, 400, 456, 400, 468, 392, 468, 388, 468, 396, 464, 392, 464, 396, 464, 396, 460, 400, 468, 388, 472, 388, 468, 392, 468, 388, 468, 392, 468, 392, 464, 396, 464, 396, 460, 1256, 472, 384, 472, 1248, 468, 392, 464, 1256, 460, 396, 464, 1256, 468, 1248, 468, 13276, 3504, 1656, 468, 1248, 464, 1252, 464, 396, 496, 364, 504, 356, 500, 1216, 500, 360, 496, 364, 496, 1220, 496, 1224, 492, 368, 500, 1216, 500, 360, 496, 364, 496, 1224, 492, 1224, 500, 360, 500, 1216, 496, 1224, 492, 364, 496, 364, 492, 1228, 500, 360, 496, 364, 496, 1220, 496, 364, 492, 368, 492, 364, 504, 356, 500, 360, 496, 364, 496, 364, 492, 368, 492, 368, 488, 368, 500, 360, 500, 360, 496, 360, 500, 360, 496, 364, 496, 364, 492, 364, 496, 364, 492, 368, 500, 360, 500, 1216, 496, 364, 496, 364, 492, 368, 492, 368, 488, 368, 492, 1224, 500, 1220, 496, 364, 496, 364, 492, 368, 492, 364, 492, 1228, 500, 356, 500, 1220, 496, 364, 492, 364, 496, 368, 488, 368, 500, 360, 500, 1216, 500, 1220, 496, 364, 492, 1224, 504, 1216, 496, 364, 496, 360, 500, 360, 496, 364, 492, 368, 492, 1224, 500, 360, 500, 360, 496, 1220, 496, 364, 496, 364, 504, 356, 500, 360, 496, 364, 496, 364, 492, 364, 496, 364, 492, 368, 492, 364, 492, 368, 500, 360, 500, 360, 496, 364, 496, 360, 496, 364, 496, 364, 492, 368, 488, 368, 500, 360, 500, 360, 500, 360, 496, 360, 496, 364, 496, 364, 492, 368, 500, 360, 488, 368, 500, 360, 500, 360, 496, 364, 496, 364, 492, 364, 496, 364, 492, 368, 492, 368, 500, 356, 500, 360, 496, 364, 496, 364, 492, 368, 492, 364, 492, 368, 492, 368, 500, 360, 496, 360, 500, 360, 496, 364, 496, 364, 492, 368, 492, 364, 492, 368, 492, 368, 500, 360, 496, 364, 492, 368, 492, 364, 492, 1224, 492, 368, 492, 1224, 500, 360, 500, 1220, 496, 364, 492, 1224, 500, 1220, 500}; irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); delay(4000); }
Tips
赤外線が出ているかどうかを確認する時は、スマフォのカメラで赤外線LEDを見てみると出力が確認できる