SONYのデジタルカメラのリモコンが発する赤外線信号をマイコンでシミュレートしてみます。信号については、Googleで「SONY α リモコン 解析」等で検索した結果と、手持ちのリモコンの信号をオシロスコープで観測した波形を元にしました。
分かったこと。
- 搬送波 … 38kHz
- リーダー … ON 2.5ms、OFF 0.5ms
- 信号0 … ON 0.6ms、OFF 0.6ms
- 信号1 … ON 1.2ms、OFF 0.6ms
- データ … 20ビット
- トレイラー … OFF 10ms
リモコンのシャッターボタンを押すと、(リーダー)10110100101110001111(トレイラー)の順に送出される。詳しくは他のサイトをあたってください。
まとまったら、後日記事にします。AVRを使ったリモコンを作る計画。
とりあえずArduinoでプロトタイプを作成。
Arduino用スケッチ
void setup() { pinMode(13, OUTPUT); } void pulse(bool f) { int i; if (f) { for (i = 0; i < 24; i++) { digitalWrite(13, HIGH); delayMicroseconds(4); digitalWrite(13, LOW); delayMicroseconds(14); } } else { for (i = 0; i < 24; i++) { digitalWrite(13, LOW); delayMicroseconds(4); digitalWrite(13, LOW); delayMicroseconds(14); } } } void sendleader() { int i; for (i = 0; i < 100; i++) { digitalWrite(13, HIGH); delayMicroseconds(4); digitalWrite(13, LOW); delayMicroseconds(14); } for (i = 0; i < 24; i++) { digitalWrite(13, LOW); delayMicroseconds(4); digitalWrite(13, LOW); delayMicroseconds(14); } } void sendtrailer() { int i; for (i = 0; i < 400; i++) { digitalWrite(13, LOW); delayMicroseconds(4); digitalWrite(13, LOW); delayMicroseconds(14); } } void sendbit(bool f) { if (f) { pulse(true); } pulse(true); pulse(false); } void sendcommand(unsigned char data, unsigned short addr) { int i, c; c = data; for (i = 0; i < 7; i++) { sendbit(c & 1); c >>= 1; } c = addr; for (i = 0; i < 13; i++) { sendbit(c & 1); c >>= 1; } } void shutter() { int i; for (i = 0; i < 5; i++) { sendleader(); sendcommand(0x2d, 0x1e3a); sendtrailer(); } } void loop() { shutter(); while (1); }