赤外線リモコン受信

以前、赤外線リモコンの送受信したくてPICでいくつか試作したけどちゃんと動かせなかった。
で、今回はArduinoで試作してみる。

回路図はコレ。

赤外線リモコン受信

赤外線リモコン受信

まずは、受信したデータを解析するため、データを取得するまで。
今回は割り込みで実装した。
D2ポートを割り込みに使って、信号がHIGH, LOW両方で割り込みするように設定(CHANGE部分)。
micros()関数でマイクロ秒単位(分解能は4マイクロ秒)での前回の割り込みとの時間差をバッファに入れて、最後の受信から0.2秒経ったらバッファの中身をシリアルで送信する。
※ちなみにmicros()関数は約70分でオーバーフローするけど、それの対策はしていない。

#define BUFF_SIZE 256

volatile int state = HIGH;
unsigned long prev;
unsigned long time;
int index = 0;
unsigned long buff[BUFF_SIZE];

void setup() {
  prev = micros();
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop() {
  digitalWrite(13, state);
  time=micros();
  if ((index > 0) && (time-prev > 200000)) {
    Serial.println("****************");
    for (int i = 1; i < index; i++) {
      Serial.println(buff[i]);
    }
    index = 0;
    prev=time;
  }
  delay(10);
}

void blink() {
  state = !state;
  time = micros();
  buff[index]=time-prev;
  prev=time;
  index++;
  if (index >= BUFF_SIZE) {
    index=0;
  }
}

以前は手持ちのリモコンしか無かったので、NECフォーマットしか対応できなかったけど、今回は多機能リモコンを用意した。

多機能リモコン

多機能リモコン

試しに東芝のTVリモコンに設定して1chを押した時のデータ。

*******************
8988
4404
608
528
608
528
604
532
604
528
608
528
608
528
604
1632
604
548
608
1628
608
1632
604
1628
608
1628
632
1604
608
1628
632
504
608
1644
608
1628
632
504
608
528
604
528
608
528
608
528
604
532
604
548
608
528
608
1628
608
1628
608
1628
636
1600
604
1632
632
1604
604
1632
632

後は、これをPCで解析してどうやって判定するかを考える。

カテゴリー: Arduino, センサー, 回路 タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください