ラベル リモコンアプリ作成 の投稿を表示しています。 すべての投稿を表示
ラベル リモコンアプリ作成 の投稿を表示しています。 すべての投稿を表示

2010年7月3日土曜日

RMT-DSLR1パターン

他人からみたら、まったくもってどうでもいい、赤外線リモコンの解析結果。

//SONY RMT-DSLR1解析結果
//1110 0010 1011 1000 1111 0xE2B8F0 スライドショー
//0101 0010 1011 1000 1111 0x52B8F0 ズームイン
//1101 0010 1011 1000 1111 0xD2B8F0 ズームアウト
//1011 1100 1011 1000 1111 0xBCB8F0 ゴミ箱
//1111 1100 1011 1000 1111 0xFCB8F0 右
//1110 1100 1011 1000 1111 0xECB8F0 2SEC
//1101 1000 1011 1000 1111 0xD8B8F0 ヒストグラフ
//0100 1100 1011 1000 1111 0x4CB8F0 回転
//0101 1100 1011 1000 1111 0x5CB8F0 上
//1001 1100 1011 1000 1111 0x9CB8F0 決定
//1101 1100 1011 1000 1111 0xDCB8F0 下
//1011 0100 1011 1000 1111 0xB4B8F0 SHUTTER
//0010 1000 1011 1000 1111 0x28B8F0 DISP
//0000 0100 1011 1000 1111 0x04B8F0 インデックス
//0011 1100 1011 1000 1111 0x3CB8F0 再生
//0001 1100 1011 1000 1111 0x1CB8F0 MENU
//0111 1100 1011 1000 1111 0x7CB8F0 左
//1000 1000 1011 1000 1111 0x88B8F0 PRINT

ビット長はすべて20ビット、開始終了のHLも同じ。なので基本的にはパターンの変更だけでOKポイです。
パターンも前8ビットが違うだけで後半の12ビットは一緒だしね。
その気になれば、RMT-DSLRもどきはすぐ作れそうですね。

ま、こんなつまらない話もなんなんで、今日のうし君。
丹念に歯磨き中。

2010年6月29日火曜日

NEX用 リモコンアプリ

最近、なかなかまとまった時間がとれず、アプリを作っている暇がありません。
2時間ぐらいあれば、なんとかなりそうな気がするんだけどね。
うし君の相手に、大忙しなのさ。

まぁ、とりあえず、NEX-5のシャッタを切るだけのものなら、
 
import com.nttdocomo.device.*;
import com.nttdocomo.ui.*;
public class RemoteTest3 extends IApplication {

int freq = 38; // KHz
int base = 100; // usec

IrRemoteControl irc;

public void start() {
irc = IrRemoteControl.getIrRemoteControl();

Dialog dia = new Dialog(Dialog.BUTTON_OK, "IRリモコンテスト");
try {
dia.setText("送信します\n");
dia.show();

irc.setCarrier(5000/freq, 5000/freq ); //一般的なキャリア
//0:High=0.6ms,Low=0.6ms
irc.setCode0(IrRemoteControl.PATTERN_HL, base*6, base*6);
//1:High=1.2ms,Low=0.6ms
irc.setCode1(IrRemoteControl.PATTERN_HL, base*12, base*6);

//開始フレーム
IrRemoteControlFrame frame1 = new IrRemoteControlFrame();
frame1.setFrameData(
new byte[]{(byte)0xB4,(byte)0xB8,(byte)0xF0}, 20);
//1011 0100 1011 1000 1111
frame1.setStartHighDuration(base*24); //スタートはH 2.4ms
frame1.setStartLowDuration(base*6); //L 0.6ms
frame1.setStopHighDuration(0); //ストップパルスは使わない
frame1.setFrameDuration(45 * 10); //フレーム長(0.1ms)
frame1.setRepeatCount(5);

//空フレーム
IrRemoteControlFrame frame2 = new IrRemoteControlFrame();
frame2.setFrameData(new byte[]{(byte)0x0}, 0);
frame2.setStartHighDuration(0);
frame2.setStartLowDuration(base*1);
frame2.setStopHighDuration(0);
frame2.setFrameDuration(1000 * 10);
frame2.setRepeatCount(IrRemoteControlFrame.COUNT_INFINITE);

IrRemoteControlFrame[] ircf
= new IrRemoteControlFrame[] {frame1,frame2};
irc.send(ircf.length, ircf); //送信
Thread.sleep(1000); //1秒間
irc.stop();
dia.setText("送信しました\n");
dia.show();
} catch (Exception e) {
dia.setText("エラー"+ e.getMessage());
dia.show();
}
this.terminate();
return;
}
}
こんな感じで、

こんな感じ。

2010年6月22日火曜日

リモートコマンダー解析

会社の上司で、α900を持っている人がいたので、さっそく頼み込んで借りてきました、

リモートコマンダー、RMT-DSLR1。
NEX-5の前面についている赤外線受信部で、シャッターを切ることができるリモコンです。
太っ腹なことに、SONYの中級以上の一眼レフには標準で付属されるらしいです。

こんなにいっぱいボタンありますが、NEX-5で使えるのは、SHUTTERと2SECだけという状態でした。
だったら、もうちょっと気の利いた小さいリモコンのラインナップをそろえておけば良いいんじゃないかな。
自分の場合は、NEX-3とNEX-5の選別の大きな要因だったりしますが、赤外線リモコンって、あんまり需要ないのかなぁ。

まぁ、観光地なんかの集合写真とかじゃ、誤動作多くて使えなさそうだけどね。


それはさておき、さっそくですが、以前、お工作した赤外線受信機で解析してみました。

結構複雑なのね、SONYのリモコンのパターンって。
それでも、ビット列さえできてしまえば、docomoの携帯電話なら簡単にリモコンiアプリが作成できそうです。
ただ、これだけ冗長だと、代替としてつかえるリモコンなさそうだなぁ。
赤外線APIが公開されていないauの携帯の人とかの人は難しそうですね。

今日は、仕事でいっぱいいっぱいなので、アプリ作成は後日ということで。

2008年9月27日土曜日

2008年9月18日木曜日

リモコンアプリ

iアプリ完成。
iアプリのカメラリモコンといったら、SILKYPIX リモコンQRが有名だけど、最近、起動するのに携帯電話の時間を過去にずらさないと使えなくなっちゃったからね。

本当は公開したいところだけど、恒久的に使用できるホームページスペース持ってないので、むりっぽ。

とりあえず、リモートコントローラーFを忘れても、撮影できるのがうれしいかな。
便利便利。

2008年9月17日水曜日

iアプリ作成2

調子にのって、リモコンのテストの続き。
今度は、レリーズ中のパルスもしっかり発信するようにしてみる。


オシロスコープを見ているとレリーズ中のパルスは、大体250msに1回の頻度で発生しているみたい。
第1フレームは450msで開始プロトコルを発生させて、
第2フレームは250msで一番最初に4msの1パルスを発生させればいいだけなんだね。
てなわけで、ごにょごにょと。
 
import com.nttdocomo.device.*;
import com.nttdocomo.ui.*;

public class RemoteTest2 extends IApplication {

int freq = 38; // KHz
int base = 1000; // usec

IrRemoteControl irc;

public void start() {
irc = IrRemoteControl.getIrRemoteControl();

Dialog dia = new Dialog(Dialog.BUTTON_OK, "IRリモコンテスト");
try {
dia.setText("送信します\n");
dia.show();

irc.setCarrier(5000/freq, 5000/freq ); //一般的なキャリア
//0:High=1ms,Low=1ms
irc.setCode0(IrRemoteControl.PATTERN_HL, base*1, base*1);
//1:High=3ms,Low=3ms
irc.setCode1(IrRemoteControl.PATTERN_HL, base*3, base*3);

//開始フレーム
IrRemoteControlFrame frame1 = new IrRemoteControlFrame();
frame1.setFrameData(new byte[]{(byte)0x80}, 8);
frame1.setStartHighDuration(base*10); //スタートは10ms
frame1.setStartLowDuration(0); //1とあわせて13ms+3ms
frame1.setStopHighDuration(0); //ストップパルスは使わない
frame1.setFrameDuration(450 * 10); //フレーム長(0.1ms)
frame1.setRepeatCount(1);

//レリーズ用パルスフレーム
IrRemoteControlFrame frame2 = new IrRemoteControlFrame();
frame2.setFrameData(new byte[]{(byte)0x0}, 0);
frame2.setStartHighDuration(base*4); //4msパルス
frame2.setStartLowDuration(0);
frame2.setStopHighDuration(0);
frame2.setFrameDuration(250 * 10);
frame2.setRepeatCount(IrRemoteControlFrame.COUNT_INFINITE);

IrRemoteControlFrame[] ircf =
new IrRemoteControlFrame[] {frame1,frame2};
irc.send(ircf.length, ircf, 30); //送信

Thread.sleep(3000); //3秒間

irc.stop();

dia.setText("送信しました\n");
dia.show();

} catch (Exception e) {
dia.setText("エラー"+ e.getMessage());
dia.show();
}
this.terminate();
return;
}
}

こんな感じかな?

とりあえず、出力してみると、


いい感じにリモートコントロールFと同じになりました。

iアプリ作成

とりあえず、テスト的にiアプリを組んでみる。

Vistaだからなのか、JDK1.6だからなのか、自宅の環境だと、どうもDojo-5.1が不安定すぎるような気がする。

そうこうして、1時間ばかりで、

とりあえず、それっぽく作ってみた。
フレームのスタート部が13msにしなければならないけど、どうやっても10ms以上にできないし、データ部のパルスが1つ削れない状態なんだけどね。
 
import java.io.*;
import java.util.*;

import com.nttdocomo.device.*;
import com.nttdocomo.ui.*;

public class RemoteTest extends IApplication {

int freq = 38; // KHz
int base = 1000; // usec
boolean status = false;

IrRemoteControl irc;

public void start() {
irc = IrRemoteControl.getIrRemoteControl();
byte[] datas = createData("11111100");

Dialog dia = new Dialog(Dialog.BUTTON_OK, "IRリモコンテスト");
try {
dia.setText("送信します\n");
dia.show();

send(datas);
Thread.sleep(10000);

dia.setText("送信しました\n");
dia.show();

} catch (Exception e) {
dia.setText("エラー"+ e.getMessage());
dia.show();
}

this.terminate();
return;
}

public byte[] createData(String source) {
int len = source.length() % 8;
if(len>0) {
source += "00000000".substring(0,8-len);
}
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
for(int i=0; i < source.length() ; i+=8 ) {
int buf = Integer.parseInt( source.substring(i,i+8), 2 );
out.write(buf);
}
out.close();
return out.toByteArray();
} catch(Exception e) {
return new byte[0];
}
}

public void send(byte[] data) {
irc.setCarrier(10000 / freq / 2, 10000 / freq / 2);
irc.setCode0(IrRemoteControl.PATTERN_HL, base * 1, base * 4);
irc.setCode1(IrRemoteControl.PATTERN_HL, base * 1, base * 1);

IrRemoteControlFrame frame1 = new IrRemoteControlFrame();
frame1.setFrameData(data, data.length * 8);
frame1.setStartHighDuration(base*10);
frame1.setStartLowDuration(base*3);
frame1.setStopHighDuration(0);
frame1.setFrameDuration(470 * 10);
frame1.setRepeatCount(1);

IrRemoteControlFrame[] ircf = new IrRemoteControlFrame[] {frame1};
irc.send(1, ircf);
status = true;
return;
}
}

かなりいい加減なんだけど、ためしにK20Dに向けてみたら、シャッター落ちるでやんの。

こっちも、かなりいい加減な作りなのね。

2008年9月15日月曜日

回路で遊ぶ

「家にいても、ちょっと寂しいので、どこかに散歩に行きたいね。」
ということで、久しぶりに秋葉原まで行って見ることに。
前々から、秋葉原で欲しいものがあったしね。

で、ヨドバシカメラの駐車場に車を止めて、
妻は、ヨドバシカメラにiPod nanoをいじりに。
自分は、千石電商まで、回路部品の買出しに。結構距離あって、半泣き状態で。

さらに、久々というか、10年ぶりの部品探しに手間取って、小一時間かけて、なんとか部品を集めることに。
あ~ぁ、つかれた、つかれた。

で、帰宅後1時間ぐらいかけて、組んだのが、

PIC-3704という赤外線受信モジュールと10uF,0.01uFのコンデンサ、1.5KΩの抵抗だけのいたってシンプルな回路。
こんなの、今時なら小学生の夏休みの工作っていうレベル。
一応、回路図はこんな感じで。

そういえば、半田ごても10年ぶりに握ったなぁ。

で、なんに使うかというと、

こんな感じで、パソコンのUSB(電源用)とオーディオ口につなげて、リモコンの発信状況を調べるのに使います。


ハンディ・オシロスコープという、フリーソフトを使ってみるとこんな感じで、リモコンのプロトコルが視野的に確認できるんです。
ちなみに、調べているのは、PENTAXのリモートコントロールFというリモコンね。


とりあえず、解析結果はこんなところで。
押しっぱなしにしていると、レリーズ状態の確認パケットが飛んでいるようだけど、それはまた追々に。

後はiアプリを組んでくだけだぁ。