以前、赤外線リモコンの送受信したくて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で解析してどうやって判定するかを考える。