照明のリモコンが一つしかなく、
リビングと寝室をリモコンを持って移動する生活から脱却するため
寝室照明用のリモコンをマイコンで作りたいと思います。
受信編ではまず照明リモコンのコードを読み取ります。
用意するもの
- 適当なマイコン
→ M5StackのATOM Matrixを使います - 赤外線受信モジュール
→ 秋月で50円で購入したGP1UXC41QSを使います - ジャンプワイヤ 適量
- (あると良い)CRフィルタ形成用の抵抗とコンデンサ
ハードウェア接続
赤外線受信モジュールGP1UXC41QSのデータシートを見ると
電源とGNDの間にCRフィルタを実装することが推奨されています。
回路定数の推奨値は R1=47Ω, C1=47uF とされていますが
ピッタリの定数を持ってなかったので近い値の部品を取り付けました。
モジュールの電源とGNDはそれぞれATOM Matrixの3.3VとGNDに、
モジュールの出力はATOM MatrixのGPIO33に接続しました。
電解コンデンサは極性があります。
コンデンサの足が短い方がマイナス側(今回だとGND側)です。
ソフトウェアの作成
ライブラリをインストールする
「IRremote」というライブラリを使用してみます。
Arduino IDEのライブラリマネージャから検索してインストールしました。
受信プログラムを作る
「IRremote」のサンプルコード「IRreceivDump」を基に作成しました。
#define MARK_EXCESS_MICROS 20
#include <IRremote.h>
int IR_RECEIVE_PIN = 33;
void setup()
{
Serial.begin(115200);
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
}
void loop()
{
if (IrReceiver.decode())
{
if (IrReceiver.results.overflow)
{
Serial.println("IR code too long. Edit IRremoteInt.h and increase RAW_BUFFER_LENGTH");
} else {
Serial.println();
Serial.println();
IrReceiver.printIRResultShort(&Serial);
Serial.println();
Serial.println(F("Raw result in internal ticks (50 us) - with leading gap"));
IrReceiver.printIRResultRawFormatted(&Serial, false);
Serial.println(F("Raw result in microseconds - with leading gap"));
IrReceiver.printIRResultRawFormatted(&Serial, true);
Serial.println();
Serial.println(F("Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS"));
IrReceiver.compensateAndPrintIRResultAsCArray(&Serial, false);
Serial.println(F("Result as microseconds array - compensated with MARK_EXCESS_MICROS"));
IrReceiver.compensateAndPrintIRResultAsCArray(&Serial, true);
IrReceiver.printIRResultAsCVariables(&Serial);
IrReceiver.compensateAndPrintIRResultAsPronto(&Serial);
}
IrReceiver.resume();
}
}
「IR_RECEIVE_PIN」にはモジュール出力を接続したGPIO番号を設定します。
実行してリモコンのコードを読み取る
マイコンにコードを書き込み、シリアルモニタを開きます。
赤外線受信モジュールに向かって照明リモコンのボタンを押すと
受信した結果が書き出されました。
Protocol=NEC Address=0x1275 Command=0x7 Parity fail Raw-Data=0x2071275
この値をマイコンの赤外線LEDから送信してリモコンを複製しようと思います。
あとがき
ATOM Matrixにはボタン&赤外線LEDがついているので
これ単体で送信専用リモコンが作れる!と思い受信編で使用したのですが、
どうやら光量が足りなくて照明リモコンには向かないようです。。。
TVとか、対象の近くで送信できる場合ならATOM Matrixも使えるかも。
ということで、送信編では外付けの赤外線LEDを使って実装しました。
ついでにマイコンをSeeeduino XIAOに変更。(なんとなく)
コメント