受信部(半球の突起)を正面に向けて・・・
| ピン位置 | 名称 | 意味 |
| 左 | Vout | 出力(Arduinoのデジタルピンへ) |
| 中央 | GND | Ground(ArduinoのGNDへ) |
| 右 | Vcc | 電源(Arduinoの5Vへ) |
リモコンの赤外線を検出したときにLOW, 検出しないときにHIGHが出力される。 リモコンから送信されるデータはパルスの幅とパルス間の間隔で0, 1を表している。 以下にテレビのリモコンで使われるフォーマット の一つであるNECフォーマットのデータを表示するプログラム例を示す。
const int pin = 2;
void setup() {
pinMode( pin, INPUT );
Serial.begin( 115200 );
}
unsigned long last, code;
unsigned int custom;
unsigned char data;
void loop() {
while ( 1 ) {
while ( digitalRead( pin ) ); // 赤外線パルスを待つ
last = micros(); // パルスの時間を計測開始
while ( !digitalRead( pin ) ); // 赤外線パルスの終了を待つ
if ( micros() - last > 8400 ) break;
// パルス幅が8.4msより大きければ、符号の始まり
}
last = micros(); // 次のパルスまでの時間を計測
while ( digitalRead( pin ) );
if ( micros() - last < 4200 ) { // 次のパルスまでの時間が4.2ms未満ならば、「リピート」
Serial.println( "Repeat" );
} else {
code = 0; // 符号はcodeに入る
for ( int i = 0; i < 32; i++ ) { // 符号は32ビットなので、32回繰り返す
code >>= 1; // 符号は下位ビットが先頭なので、右にシフトしていく
while ( !digitalRead( pin ) ); // 赤外線パルスの終了を待つ
last = micros(); // 次のパルスまでの時間を計測
while ( digitalRead( pin ) );
if ( micros() - last > 1400 ) code |= 0x80000000;
// 次のパルスまでの時間が1.4msより大きければ"1"なので、符号の最上位ビットを1にする
}
custom = code & 0xff; // 符号のうち始めの16ビットがカスタマコード
data = (code >> 16) & 0xff; // 次の8ビットがデータ
Serial.println( "custom=" + String( custom, HEX ) + " data=" + String( data, HEX ) );
// カスタマコードとデータを16進数で出力
}
while ( !digitalRead( pin ) );
}
リモコン受信モジュールと上記プログラムを書き込んだちびコンピュータ ATtiny.を組み合わせて簡単にリモコンを受信できるようにしました。読み込んだリモコンのコードをSerial通信で送信します。送信速度は38400bps。
配線は、奥から
| ピン位置 | 名称 | 意味 |
| 奥 | Vout | 出力(Arduinoの0番ピンへ) |
| 中央 | GND | Ground(ArduinoのGNDへ) |
| 手前 | Vcc | 電源(Arduinoの5Vへ) |
リモコンで押されたボタンのコードをシリアルモニタに表示するプログラム例を示します。シリアルモニタの速度を38400bpsにしてください。
void setup(){
Serial.begin( 38400 ); // 38400bps
}
void loop(){
unsigned char c;
while( Serial.available() ){
c = Serial.read();
Serial.println( c, HEX );
}
}
| ボタン | 東芝 | 日立 | サンヨー | フナイ |
| 1 | 0x01 | 0x71 | 0x10 | 0x01 |
| 2 | 0x02 | 0x72 | 0x11 | 0x02 |
| 3 | 0x03 | 0x73 | 0x12 | 0x03 |
| 4 | 0x04 | 0x74 | 0x13 | 0x04 |
| 5 | 0x05 | 0x75 | 0x14 | 0x05 |
| 6 | 0x06 | 0x76 | 0x15 | 0x06 |
| 7 | 0x07 | 0x77 | 0x16 | 0x07 |
| 8 | 0x08 | 0x78 | 0x17 | 0x08 |
| 9 | 0x09 | 0x79 | 0x18 | 0x09 |
| 10 | 0x0a | 0x70 | 0x19 | 0x0a |
| 11 | 0x0b | 0x7a | 0x1a | 0x0b |
| 12 | 0x0c | 0x7b | 0x1b | 0x0c |
| 音量+ | 0x1a | 0x12 | 0x09 | 0x60 |
| 音量- | 0x1e | 0x15 | 0x0a | 0x61 |
| 消音 | 0x10 | 0x0b | 0x0b | 0x64 |
| チャンネル+ | 0x1b | 0x19 | 0x59 | 0x50 |
| チャンネル- | 0x1f | 0x18 | 0x5a | 0x51 |
| 電源 | 0x12 | 0x17 | 0x00 | 0x20 |