Arduinoで赤外線リモコン信号を発信する

動画はこちら

家電製品を制御したい!

前回のリモコン信号を受信することでリモコンの信号を数値として取得できました。あとはこのタイミングにあわせて赤外線LEDを点滅すれば機器を操作することができます。赤外線LEDをArduinoに接続した状態で、下記のプログラムを実行します。

int ir_out = 2;
int led = 9;

// ディスプレイ電源
unsigned int data[] = {804,383,60,40,60,41,59,136,60,40,57,43,60,135,60,135,58,136,60,383,54,141,59,135,60,40,60,40,60,41,60,40,60,41,60,40,59,2022};
int last = 0;
unsigned long us = micros();

// セットアップ
void setup() {
  pinMode(ir_out, OUTPUT);
  pinMode(led, OUTPUT);
}

// dataからリモコン信号を送信
void sendSignal() {
  int dataSize = sizeof(data) / sizeof(data[0]);
  for (int cnt = 0; cnt < dataSize; cnt++) {
    unsigned long len = data[cnt]*10;  // dataは10us単位でON/OFF時間を記録している
    unsigned long us = micros();
    do {
      digitalWrite(ir_out, 1 - (cnt&1)); // cntが偶数なら赤外線ON、奇数ならOFFのまま
      delayMicroseconds(8);  // キャリア周波数38kHzでON/OFFするよう時間調整
      digitalWrite(ir_out, 0);
      delayMicroseconds(7);
    } while (long(us + len - micros()) > 0); // 送信時間に達するまでループ
  }
}

void loop() {
  digitalWrite(led, HIGH);
  sendSignal();
  digitalWrite(led, LOW);
  delay(1000);
}

 

赤外線LEDの出力にもよりますが、本物のリモコンに比べると飛距離がいまいちです。LEDを複数使うとかしたほうが良いかもしれません。赤外線は目で見ることができませんが、デジカメなどを使うと光っていることを確認できます。うまくいかないときは配線ミスの可能性もあります。LEDの点滅状態を確認してみましょう。ややこしいですがデジカメの種類によっては赤外線が写らないことがあります。複数のデジカメ・スマートフォンで確認してみてください。

というか、三連休が全部雨だった。どうしてくれようか。

Arduino

Posted by @erestage