ソニーのデジカメ NEX のリモート撮影 (ATtiny13A 版) [Arduino]
NEC形式のリモコンを ATtiny13A を使ってつくりましたが、今回はSONYのリモコン(SIRC形式)です。
対象はうちのデジカメ NEX-5N です。
まずはデータの解析です。専用のリモコンを購入すればいいのですが、もったいないので 「マルチリモコン iRemo2」 という iモードのアプリが作ったデータをもとにしています。
マルチリモコン iアプリ iRemo2 « FUTABA WEB
http://www.256byte.com/i-remo/
<解析結果>
コマンドのデータ 7 ビットに、機種の識別コード 13 ビットの計 20 ビットでした。
これを踏まえて、先日のスケッチを少しいじって完成です。
PB0 のピン はPWM出力以外なら使うことはできるみたいです。
リセットピンを除くと4本残り、これをインターバル撮影の間隔の指定に使えそうです。
対象はうちのデジカメ NEX-5N です。
まずはデータの解析です。専用のリモコンを購入すればいいのですが、もったいないので 「マルチリモコン iRemo2」 という iモードのアプリが作ったデータをもとにしています。
マルチリモコン iアプリ iRemo2 « FUTABA WEB
http://www.256byte.com/i-remo/
<解析結果>
■SHUTTER ||||_||_|_||_||_|_||_|_|_||_|_||_||_||_|_|_|_||_||_||_||_ Binary : (LSB) 1011010-0101110001111 (MSB) Data : 0x2D (7bit) Adr. : 0x1E3A (13bit) ■2SEC ||||_||_||_||_|_||_||_|_|_||_|_||_||_||_|_|_|_||_||_||_||_ Binary : (LSB) 1110110-0101110001111 (MSB) Data : 0x37 (7bit) Adr. : 0x1E3A (13bit) ■MOVIE ||||_|_|_|_||_|_|_||_|_||_|_||_||_||_|_|_|_||_||_||_||_ Binary : (LSB) 0001001-0101110001111 (MSB) Data : 0x48 (7bit) Adr. : 0x1E3A (13bit)
コマンドのデータ 7 ビットに、機種の識別コード 13 ビットの計 20 ビットでした。
これを踏まえて、先日のスケッチを少しいじって完成です。
// PWMで40kHzをつくる赤外線リモコン (ATtiny13A (1.2MHz), SIRC版)
#include <util/delay_basic.h>
#include "wiring_private.h"
void setup() { // OC0B (Arduino的には1番ピン(PB1)) を 40kHz PWM 出力にする。
DDRB |= B00000010;
TCCR0A = (0<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B = (1<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00);
OCR0A = 29; // (( 1.2MHz / 40kHz ) / 1(分周) ) - 1 = 29
OCR0B = 10; // duty比を1/3にする ( 1.2MHz / 40kHz ) / 3 = 10
TIMSK0 = 0; // タイマー割り込みの不許可 (Arduinoの時間系関数と競合するのでつぶす)
}
void loop() {
sendIrSIRC1M2Hz( 0x2D | (uint32_t) 0x1E3A << 7, 20 ); // SONY alpha Shutter
sendIrSIRC1M2Hz( 0x2D | (uint32_t) 0x1E3A << 7, 20 ); // 2回送ってみる。
delayDeciseconds1M2Hz( 49 ); // 5秒のdelay
}
void sendIrSIRC1M2Hz( uint32_t d , uint8_t len ) { // T = 0.60msec = 180 loops @ 1.2MHz
// リーダ
sbi(TCCR0A, COM0B1); _delay_loop_2( 720 ); // リーダ ON (4T)
cbi(TCCR0A, COM0B1); _delay_loop_2( 180 ); // リーダ OFF (1T)
// データ (コマンド+アドレス)
for(uint8_t i = 0; i < len; i++) {
sbi(TCCR0A, COM0B1); _delay_loop_2( (d>>i) % 2 ? 360 : 180 ); // データ ON (0:1T/1:2T)
cbi(TCCR0A, COM0B1); _delay_loop_2( 180 ); // データ OFF (1T)
}
// トレーラ OFF 全長75T:( 75T - 5T(リーダ) - (2.5T(平均T) * ビット数) ) * 180 loops
_delay_loop_2( 12600 - 450 * len ); // トレーラ OFF (おおよその時間)
}
void delayDeciseconds1M2Hz( uint16_t ds ) { // 1.2MHz動作時 0.1sec単位のdelay
while( ds-- ) _delay_loop_2( 30000 ); // 1MHzなら 25000
}
PB0 のピン はPWM出力以外なら使うことはできるみたいです。
リセットピンを除くと4本残り、これをインターバル撮影の間隔の指定に使えそうです。
SONY デジタル一眼カメラ α NEX-5N ダブルレンズキット ホワイト NEX-5ND/W
- 出版社/メーカー: ソニー
- メディア: エレクトロニクス