最近はまっているのが、室内用の超小型ヘリコプター「ハニービー(HoneyBee)」
めちゃめちゃ安定してよく飛びます。
こいつは、電波ではなくて、なんと赤外線で操作できるようになっています。
と言うことは、携帯電話(iアプリ)でも操作できるかも?
と思ってやってみたら、やっぱり動きました。
とりあえず、メインローターが回るようになっただけだけど、
インターフェースをちゃんと作って、携帯電話で操作できたら面白いね。
参考にさせてもらったのは、
インドアプレーンとロボット
と、
[doja]iアプリで赤外線リモコン信号を送信

以下とりあえずのソースコード。
まだ、メインローターが回るだけです。
import com.nttdocomo.device.IrRemoteControl;
import com.nttdocomo.device.IrRemoteControlFrame;
import com.nttdocomo.ui.*;
import java.io.ByteArrayOutputStream;
public class HoneyBee extends IApplication {
int freq = 38; // KHz
int base = 500; // usec
boolean status = false;
IrRemoteControl irc;
public void start() {
irc = IrRemoteControl.getIrRemoteControl();
//byte[] datas = new byte[3];
String source = "001101111000000000100000";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int i = 0; i < source.length(); i += 8){
int b = Integer.parseInt(source.substring(i, i + 8), 2);
baos.write(b);
}
byte[] datas = baos.toByteArray();
try {
Dialog dia = new Dialog(Dialog.BUTTON_OK, "IRリモコンテスト");
dia.setText("送信します\n");
dia.show();
/*
datas[0] = (Byte)Integer.parseInt("00110111", 2);
datas[1] = Byte.parseByte("010000000", 2);
datas[2] = 3;
datas[3] = 4;
datas[4] = 5;
datas[5] = 6;*/
send(datas);
Thread.sleep(10000);
dia.setText("送信しました\n");
dia.show();
this.terminate();
} catch (Exception e) {
}
}
public void send(byte[] data) {
irc.setCarrier(10000 / freq / 2, 10000 / freq / 2);
irc.setCode0(IrRemoteControl.PATTERN_HL, base * 1, base * 1);
irc.setCode1(IrRemoteControl.PATTERN_HL, base * 2, base * 1);
IrRemoteControlFrame[] ircf = new IrRemoteControlFrame[1];
IrRemoteControlFrame frame = new IrRemoteControlFrame();
frame.setFrameData(data, data.length * 8);
frame.setStartHighDuration(0);
frame.setStartLowDuration(0);
frame.setStopHighDuration(0);
frame.setFrameDuration(data.length * 8 * base * 4 / 100 + 60 + 85);
frame.setRepeatCount(IrRemoteControlFrame.COUNT_INFINITE);
ircf[0] = frame;
irc.send(1, ircf);
status = true;
}
}
めちゃめちゃ安定してよく飛びます。
こいつは、電波ではなくて、なんと赤外線で操作できるようになっています。
と言うことは、携帯電話(iアプリ)でも操作できるかも?
と思ってやってみたら、やっぱり動きました。
とりあえず、メインローターが回るようになっただけだけど、
インターフェースをちゃんと作って、携帯電話で操作できたら面白いね。
参考にさせてもらったのは、
インドアプレーンとロボット
と、
[doja]iアプリで赤外線リモコン信号を送信

以下とりあえずのソースコード。
まだ、メインローターが回るだけです。
import com.nttdocomo.device.IrRemoteControl;
import com.nttdocomo.device.IrRemoteControlFrame;
import com.nttdocomo.ui.*;
import java.io.ByteArrayOutputStream;
public class HoneyBee extends IApplication {
int freq = 38; // KHz
int base = 500; // usec
boolean status = false;
IrRemoteControl irc;
public void start() {
irc = IrRemoteControl.getIrRemoteControl();
//byte[] datas = new byte[3];
String source = "001101111000000000100000";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int i = 0; i < source.length(); i += 8){
int b = Integer.parseInt(source.substring(i, i + 8), 2);
baos.write(b);
}
byte[] datas = baos.toByteArray();
try {
Dialog dia = new Dialog(Dialog.BUTTON_OK, "IRリモコンテスト");
dia.setText("送信します\n");
dia.show();
/*
datas[0] = (Byte)Integer.parseInt("00110111", 2);
datas[1] = Byte.parseByte("010000000", 2);
datas[2] = 3;
datas[3] = 4;
datas[4] = 5;
datas[5] = 6;*/
send(datas);
Thread.sleep(10000);
dia.setText("送信しました\n");
dia.show();
this.terminate();
} catch (Exception e) {
}
}
public void send(byte[] data) {
irc.setCarrier(10000 / freq / 2, 10000 / freq / 2);
irc.setCode0(IrRemoteControl.PATTERN_HL, base * 1, base * 1);
irc.setCode1(IrRemoteControl.PATTERN_HL, base * 2, base * 1);
IrRemoteControlFrame[] ircf = new IrRemoteControlFrame[1];
IrRemoteControlFrame frame = new IrRemoteControlFrame();
frame.setFrameData(data, data.length * 8);
frame.setStartHighDuration(0);
frame.setStartLowDuration(0);
frame.setStopHighDuration(0);
frame.setFrameDuration(data.length * 8 * base * 4 / 100 + 60 + 85);
frame.setRepeatCount(IrRemoteControlFrame.COUNT_INFINITE);
ircf[0] = frame;
irc.send(1, ircf);
status = true;
}
}


こういう所からヒラメキが生まれるのかもしらんね~
どうもありがとう。
こういうのを作るのが面白いんだよねぇ。
仕事中に何やってんだか、、、、
ソースの方は、エラー処理もなにもない、DojaのAPIを並べたままのものなのでぜんぜん問題ないです。