ずいぶん昔に作った【パッケージから】巡音さんがやってきた【召喚】のソースが見たいと言われたのだけど、そんなものは残ってなかったのでとりあえずやっつけでARToolkitのマーカの代わりにSURFの画像マッチングを使うプログラムを作成。
ソースはこちら
OpenCV2.1, Ubuntu11.10, ARToolkit 2.72.1で動作確認しています。
ARToolkitのsimpleTest.cをベースに、OpenCVのfind_obj.cppの関数を利用しています。
すごく汚いコードな上、エラーチェックもせず、メモリ解放もろくにやってないので、ソースを見る人は覚悟してください。
Monday, December 5, 2011
Saturday, December 3, 2011
MTM07行ってきた
Make: Tokyo Meeting 07に行ってきました。
ついつい面白がってポケットガイガーとか、AquesTalk picoとか買ってみたり。
kumaduinoの基盤とか、他にもいろいろ。
ああいうの見に行くと、やっぱり自分でもなにか作りたくなるね。
ついつい面白がってポケットガイガーとか、AquesTalk picoとか買ってみたり。
kumaduinoの基盤とか、他にもいろいろ。
ああいうの見に行くと、やっぱり自分でもなにか作りたくなるね。
ラベル:
日記
Saturday, August 27, 2011
Saturday, July 30, 2011
Sunday, July 10, 2011
Saturday, June 25, 2011
EP121のACアダプタ修理
うっかりEP121を落としたらプラグが割れてしまったので、とりあえず何とか対処してみました。
まずは共立エレショップでDCプラグの注文。内径1.1φ、外径3.0φ。
ただDC12V/0.5Aなのがかなり心配。19Vの3.0Aをフルに通すことは無くても、発熱とかしないといいけど…
ジャンクに19.5Vがなかったので、19Vでも多分大丈夫だろうと確保。ジャンクのくせに高い。
被覆を剥いて適当にはんだ付け。
今のところ動作に問題なし。
まずは共立エレショップでDCプラグの注文。内径1.1φ、外径3.0φ。
ただDC12V/0.5Aなのがかなり心配。19Vの3.0Aをフルに通すことは無くても、発熱とかしないといいけど…
ジャンクに19.5Vがなかったので、19Vでも多分大丈夫だろうと確保。ジャンクのくせに高い。
被覆を剥いて適当にはんだ付け。
今のところ動作に問題なし。
ラベル:
雑記
Friday, June 10, 2011
JPEGカメラ
スイッチ・サイエンスのLinkSpriteシリアル接続JPEGカラーカメラを動作テスト。
とりあえず何も考えずにシリアルに出力して、それをそのまま保存してみる。
一応撮影はできるみたいだけど、やっぱり転送速度が遅い。
9600bpsだから仕方ないんだけどね。
撮影はArduinoで下のようなプログラムを使ってテスト。
リセットボタンを押すと吐き出されてくるバイナリを、そのままシリアルコンソールで保存しただけ。
ひとまず使えることは確認できた。
/*
JPEG Camera Example Sketch
Hardware Notes:
The camera Rx/Tx should be attached to pins 2 and 3.
IMPORTANT: The JPEG camera requires a TTL level shifter between the camera output
and the arduino. Bypassing this may damage the Arduino pins.
*/
#include <JPEGCamera.h>
#include <NewSoftSerial.h>
JPEGCamera camera;
char response[32];
unsigned int count=0;
int size=0;
int address=0;
int eof=0;
void setup()
{
//Setup the camera, serial port
camera.begin();
Serial.begin(9600);
//Reset the camera
count=camera.reset(response);
delay(3000);
//Take a picture
count=camera.takePicture(response);
//Get the size of the picture
count = camera.getSize(response, &size);
while(address < size)
{
//Read the data starting at the current address.
count=camera.readData(response, address);
//Store all of the data that we read to the SD card
for(int i=0; i
//Check the response for the eof indicator (0xFF, 0xD9). If we find it, set the eof flag
if((response[i] == (char)0xD9) && (response[i-1]==(char)0xFF))eof=1;
Serial.print(response[i], BYTE);
//If we found the eof character, get out of this loop and stop reading data
if(eof==1)break;
}
//Increment the current address by the number of bytes we read
address+=count;
//Make sure we stop reading data if the eof flag is set.
if(eof==1)break;
}
}
void loop()
{
}
さて、次の目標はと…
とりあえず何も考えずにシリアルに出力して、それをそのまま保存してみる。
一応撮影はできるみたいだけど、やっぱり転送速度が遅い。
9600bpsだから仕方ないんだけどね。
撮影はArduinoで下のようなプログラムを使ってテスト。
リセットボタンを押すと吐き出されてくるバイナリを、そのままシリアルコンソールで保存しただけ。
ひとまず使えることは確認できた。
/*
JPEG Camera Example Sketch
Hardware Notes:
The camera Rx/Tx should be attached to pins 2 and 3.
IMPORTANT: The JPEG camera requires a TTL level shifter between the camera output
and the arduino. Bypassing this may damage the Arduino pins.
*/
#include <JPEGCamera.h>
#include <NewSoftSerial.h>
JPEGCamera camera;
char response[32];
unsigned int count=0;
int size=0;
int address=0;
int eof=0;
void setup()
{
//Setup the camera, serial port
camera.begin();
Serial.begin(9600);
//Reset the camera
count=camera.reset(response);
delay(3000);
//Take a picture
count=camera.takePicture(response);
//Get the size of the picture
count = camera.getSize(response, &size);
while(address < size)
{
//Read the data starting at the current address.
count=camera.readData(response, address);
//Store all of the data that we read to the SD card
for(int i=0; i
if((response[i] == (char)0xD9) && (response[i-1]==(char)0xFF))eof=1;
Serial.print(response[i], BYTE);
//If we found the eof character, get out of this loop and stop reading data
if(eof==1)break;
}
//Increment the current address by the number of bytes we read
address+=count;
//Make sure we stop reading data if the eof flag is set.
if(eof==1)break;
}
}
void loop()
{
}
さて、次の目標はと…
ラベル:
電子工作
Sunday, May 29, 2011
XBee組み立て
スイッチサイエンスのXBeeピッチ変換基板とソケットのセットを組み立ててみた。
ついでに動作確認のために適当にUSB変換モジュールと組み合わせ。
手持ちのじゃ5Vしか取れないけど、たまたま手元に3.3VのレギュレータがあったからそれをかましてXBeeに電力供給。
USBモジュールのRXをXBeeの左上から2番目(Vccの下)に、TXを3番目に接続してひとまず完成。
X-CTUをインストールして、接続テストをすると問題なく接続できて、
Modem Configurationタブで設定を読み込みも成功。
…というところまででいったん終了。設定や通信テストはまた今度。
ついでに動作確認のために適当にUSB変換モジュールと組み合わせ。
手持ちのじゃ5Vしか取れないけど、たまたま手元に3.3VのレギュレータがあったからそれをかましてXBeeに電力供給。
USBモジュールのRXをXBeeの左上から2番目(Vccの下)に、TXを3番目に接続してひとまず完成。
X-CTUをインストールして、接続テストをすると問題なく接続できて、
Modem Configurationタブで設定を読み込みも成功。
…というところまででいったん終了。設定や通信テストはまた今度。
ラベル:
電子工作
Wednesday, May 25, 2011
秋月のATmegaキット
秋月のATmega168/328マイコンボードキット――というよりもArduinoキットと言った方が良いかも。
とりあえず組み立てて、Arduinoブートローダを書き込んでみた。
結構苦労して、最終的には楽な方に逃げてしまったのだけど、まあそれも含めて覚え書き。
結論から言うと、ATMega168Pへの書き込みがどうしてもうまくいきませんでした。
使ったのは純正のAVRライタ。
ブートローダの書き込みにはpermissionが~と言われるので、とりあえず管理者モードでArduinoIDEを起動
この辺りのサイトを参考に/usr/share/arduino/hardware/tools/avrdude.confを差し替え。
http://d.hatena.ne.jp/LaclefYoshi/20110108/1294475337
http://www.geocities.jp/arduino_diecimila/bootloader/index.html
なんか妙なエラーが出たのでコメントアウト…はともかく、それでも結局うまく書き込めない。
(avrdude.confは元に戻しました)
WindowsのAVR Studioからブートローダを書き込んでみると、エラーも無くブートローダの書き込み自体は成功している様子。
そこでArduinoIDEからスケッチを書き込もうとすると
結局よくわからないので、マイコンをATMega328Pに取り替えて、ターゲットボードをArduinoUNOとしてIDEからブートローダを書き込んでみると、拍子抜けするほどあっさり成功。
ライタを外してスケッチを書き込んでみるとちゃんと動く。
…よくわからないけど動いたから良いや。168Pも普通のマイコンとしてなら使えるだろうし。
とりあえず組み立てて、Arduinoブートローダを書き込んでみた。
結構苦労して、最終的には楽な方に逃げてしまったのだけど、まあそれも含めて覚え書き。
結論から言うと、ATMega168Pへの書き込みがどうしてもうまくいきませんでした。
使ったのは純正のAVRライタ。
ブートローダの書き込みにはpermissionが~と言われるので、とりあえず管理者モードでArduinoIDEを起動
$ sudo arduinoあとは168で5Vのブートローダを選べば…
avrdude: Expected signature for ATMEGA168 is 1E 94 06秋月のキット付属のマイコンはATmega168pで168じゃないから、チェックでハネられてしまうみたい。
Double check chip, or use -F to override this check.
この辺りのサイトを参考に/usr/share/arduino/hardware/tools/avrdude.confを差し替え。
http://d.hatena.ne.jp/LaclefYoshi/20110108/1294475337
http://www.geocities.jp/arduino_diecimila/bootloader/index.html
なんか妙なエラーが出たのでコメントアウト…はともかく、それでも結局うまく書き込めない。
(avrdude.confは元に戻しました)
WindowsのAVR Studioからブートローダを書き込んでみると、エラーも無くブートローダの書き込み自体は成功している様子。
そこでArduinoIDEからスケッチを書き込もうとすると
avrdude: stk500_recv(): programmer is not responding
結局よくわからないので、マイコンをATMega328Pに取り替えて、ターゲットボードをArduinoUNOとしてIDEからブートローダを書き込んでみると、拍子抜けするほどあっさり成功。
ライタを外してスケッチを書き込んでみるとちゃんと動く。
…よくわからないけど動いたから良いや。168Pも普通のマイコンとしてなら使えるだろうし。
ラベル:
電子工作
Monday, May 16, 2011
1ステップ目でボードから白煙
12ステップで作る組込みOS自作入門の1ステップ目。
USBシリアル変換ケーブルではうまく書き込みできなかったので、デスクトップのWin機からFDTで書き出そうとして電源とケーブルをボードに繋いだまま設定をしていたら……表面実装のLEDが凄く光ったかと思うとボードが白煙を上げはじめた。
あわてて電源を抜いてLEDを見ると、すっかり白濁してあきらかにお亡くなりになっている様子。
……というか、ここまで焼けたLEDを作ったのは初めて。
えーと、プログラムの転送と実行は一応無事に出来ました。
どう考えても他の部品が無事だとは思えないんだけど、せめて本を読み終わるまでは耐えてほしいな。
USBシリアル変換ケーブルではうまく書き込みできなかったので、デスクトップのWin機からFDTで書き出そうとして電源とケーブルをボードに繋いだまま設定をしていたら……表面実装のLEDが凄く光ったかと思うとボードが白煙を上げはじめた。
あわてて電源を抜いてLEDを見ると、すっかり白濁してあきらかにお亡くなりになっている様子。
……というか、ここまで焼けたLEDを作ったのは初めて。
えーと、プログラムの転送と実行は一応無事に出来ました。
どう考えても他の部品が無事だとは思えないんだけど、せめて本を読み終わるまでは耐えてほしいな。
ラベル:
本
Saturday, May 14, 2011
ASUS EP121の公式ペンドライバ公開
いつの間にか野良ドライバのリンクが切れている…と思ったら公式ドライバが公開されていたみたい。
野良ドライバを削除してから公式ドライバを入れてみる。
削除はデバイスマネージャから右クリックで削除するときに
「このデバイスのドライバーソフトウェアを削除する」
にチェックを入れるだけ。
一通り消したら再起動。
(わざわざ消さなくてもよかったかもしれないけど、念のため)
新ドライバはEee Slate EP121のダウンロードページで、OS:Windows7 64bitを選択して、タッチパッドのの一番上の「V7.0.2.21」ってのがそうみたい。
ダウンロードすると「ISD_DualTouch_702-21.rar」ってのが落ちてきたので解凍。
できたフォルダの中のsetup.exeを実行するだけ。
後は「コントロールパネル -> ハードウェアとサウンド->ペンタブレットのプロパティ」で調整。
好みによって「ペンとタッチ -> タッチ入力設定の変更 -> 入力デバイスとして指を使う」のチェックを付けたりはずしたり。
…野良ドライバよりいいところはコントロールパネルの「ペンタブレットのプロパティ」で表示される日本語フォントがきれいになったことくらい?
精度は変わらないか若干悪くなったような……どうだろ、悪くなったような気がするのはさすがに気のせいかもしれない。
新しく買った人には必須のドライバだと思うけど、野良ドライバ導入済みの人は敢えて入れる必要ないかも。
野良ドライバを削除してから公式ドライバを入れてみる。
削除はデバイスマネージャから右クリックで削除するときに
「このデバイスのドライバーソフトウェアを削除する」
にチェックを入れるだけ。
一通り消したら再起動。
(わざわざ消さなくてもよかったかもしれないけど、念のため)
新ドライバはEee Slate EP121のダウンロードページで、OS:Windows7 64bitを選択して、タッチパッドのの一番上の「V7.0.2.21」ってのがそうみたい。
ダウンロードすると「ISD_DualTouch_702-21.rar」ってのが落ちてきたので解凍。
できたフォルダの中のsetup.exeを実行するだけ。
後は「コントロールパネル -> ハードウェアとサウンド->ペンタブレットのプロパティ」で調整。
好みによって「ペンとタッチ -> タッチ入力設定の変更 -> 入力デバイスとして指を使う」のチェックを付けたりはずしたり。
…野良ドライバよりいいところはコントロールパネルの「ペンタブレットのプロパティ」で表示される日本語フォントがきれいになったことくらい?
精度は変わらないか若干悪くなったような……どうだろ、悪くなったような気がするのはさすがに気のせいかもしれない。
新しく買った人には必須のドライバだと思うけど、野良ドライバ導入済みの人は敢えて入れる必要ないかも。
ラベル:
雑記
Wednesday, May 11, 2011
簡単カメラコントロール画面
prototype.jsを使って簡単な操作画面を設定。
prototype.jsには詳しくないけど、サンプル通りにカメラコントロール用cgiを呼び出して、cgiから返ってきたカメラの角度を更新するだけ。
カメラ画像はffserverで作ってるmjpg。そのままブラウザで扱えるから楽。fpsは1で画像も小さくしてるから、ただの確認用だけど。
とりあえずこれで必要最低限の機能は完成。
しばらく運用テストしてみて、不具合があったら修正。
cgiはこんな感じ。
prototype.jsには詳しくないけど、サンプル通りにカメラコントロール用cgiを呼び出して、cgiから返ってきたカメラの角度を更新するだけ。
カメラ画像はffserverで作ってるmjpg。そのままブラウザで扱えるから楽。fpsは1で画像も小さくしてるから、ただの確認用だけど。
とりあえずこれで必要最低限の機能は完成。
しばらく運用テストしてみて、不具合があったら修正。
cgiはこんな感じ。
#!/usr/bin/ruby #移動指示を受け取って現在の角度を返すcgi require 'rubygems' require 'serialport' require 'cgi' cgi = CGI.new #基本ステッピング角度0.75 #このシステムは一回に付き0.75*4*5 = 15 maxAngle = 8 print "Content-type: text/html\n\n" port = "/dev/ttyUSB0" #arduinoのポート番号 sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE) f = open("angle") count = f.gets.to_i f.close f = open("angle","w") if cgi["move"] == "r" and count < maxAngle sp.write cgi["move"] count += 1 elsif cgi["move"] == "l" and 0 < count + maxAngle sp.write cgi["move"] count -= 1 end #15を掛けて角度に直したものを表示 puts count*15 f.puts count f.close sp.close
ラベル:
電子工作
Monday, May 9, 2011
ありあわせでガワ作成
部屋に転がってた板切れやメモ帳の表紙やネジやらで適当に
オンラインカメラのガワを作成。
もう少し旋廻速度は遅くていいかな。
回転角度をもう少し細かく調整する必要もありそう。
ともかくこれでカメラ側の準備は一応終了。
次はWebインタフェースを作れば試作品は完成。
将来的には無線と太陽電池でOpportunityみたいなのを作りたいな。
オンラインカメラのガワを作成。
もう少し旋廻速度は遅くていいかな。
回転角度をもう少し細かく調整する必要もありそう。
ともかくこれでカメラ側の準備は一応終了。
次はWebインタフェースを作れば試作品は完成。
将来的には無線と太陽電池でOpportunityみたいなのを作りたいな。
ラベル:
電子工作
Sunday, May 8, 2011
コマンドラインでステッピングモータ制御
ここしばらくモータをいじっていたのは、遠隔のライブカメラを動かしたいという理由だったので、
ひとまずコンソールからモータを動かせるようなプログラムを作ってみた。
あとは電子の付かない純粋な工作と、Webから操作できるように適当なページとCGIの作成で、
まあそれはどうとでもできるでしょ。
ひとまずコンソールからモータを動かせるようなプログラムを作ってみた。
あとはrubyのruby-serialportあたりを利用してコマンドを送ってもいいし、もっと単純にコマンドラインから
int pin[4] = {8,9,10,11}; int incomingByte = 0; int STEPWAIT = 50; void setup(){ Serial.begin(9600); for(int i=0;i < 4;i++){ pinMode(pin[i], OUTPUT); } } void loop(){ //入力があったら対応 if (Serial.available() > 0) { incomingByte = Serial.read(); switch(incomingByte){ case 'r': turnRight(10); break; case 'l': turnLeft(10); break; } } delay(100); } /** 右回転 */ void turnRight(int count){ for(int i=0; i< count;i++){ for(int j=0;j<4;j++){ int pre = j-1; int next = j+1; if(pre < 0){ pre = 3; } if(next > 3){ next = 0; } digitalWrite(pin[pre], LOW); digitalWrite(pin[j], HIGH); digitalWrite(pin[next], HIGH); delay(STEPWAIT); } } pinOff(); } /** 左回転 */ void turnLeft(int count){ for(int i=0; i < count;i++){ for(int j=3;j>=0;j--){ int pre = j+1; int next = j-1; if(pre > 3){ pre = 0; } if(next < 0){ next = 3; } digitalWrite(pin[pre], LOW); digitalWrite(pin[j], HIGH); digitalWrite(pin[next], HIGH); delay(STEPWAIT); } } pinOff(); } /** オフ */ void pinOff(){ for(int i=0;i<4;i++){ digitalWrite(pin[i], LOW); } }
$ echo llrl > /dev/ttyUSB1こんな感じのコマンドを送るだけでも動作する。
あとは電子の付かない純粋な工作と、Webから操作できるように適当なページとCGIの作成で、
まあそれはどうとでもできるでしょ。
ラベル:
電子工作
Saturday, May 7, 2011
Thursday, May 5, 2011
Arduinoでステッピングモータ回してみる
モータは同じくSPG20-332。
以前買って放置していたArduinoで、ものすごく適当な回路を組んでみた。
で、コードはこんな感じ。
…自分で作っといてなんだけど、まさかこれで動くとは思わなかった。
さすがにパワーが足りない気もするけど、ちょっと何かを動かす程度ならこれでいいかも。
あー、パワーを増すなら2層励磁という手もあるのか。
というわけでコードを書き換え。
楽だからありがたいけど、何の苦労もないからいまいち達成感が無い。
以前買って放置していたArduinoで、ものすごく適当な回路を組んでみた。
で、コードはこんな感じ。
/* 適当ステッピングモータ */
int pin[4] = {10,11,12,13};
void setup(){
for(int i=0;i < 4;i++){
pinMode(pin[i], OUTPUT);
}
}
void loop(){
for(int i=0;i<4;i++){
digitalWrite(pin[i], HIGH);
delay(20);
digitalWrite(pin[i], LOW);
delay(20);
}
}
…自分で作っといてなんだけど、まさかこれで動くとは思わなかった。
さすがにパワーが足りない気もするけど、ちょっと何かを動かす程度ならこれでいいかも。
あー、パワーを増すなら2層励磁という手もあるのか。
というわけでコードを書き換え。
/* 適当ステッピングモータ 2相励磁 */ int pin[4] = {10,11,12,13}; void setup(){ for(int i=0;i < 4;i++){ pinMode(pin[i], OUTPUT); } } void loop(){ for(int i=0;i<4;i++){ int pre = i-1; int next = i+1; if(pre < 0){ pre = 3; } if(next > 3){ next = 0; } digitalWrite(pin[pre], LOW); digitalWrite(pin[i], HIGH); digitalWrite(pin[next], HIGH); delay(20); } }この程度のパワーがあれば大体の用は足りるような気がする。
楽だからありがたいけど、何の苦労もないからいまいち達成感が無い。
ラベル:
電子工作
Tuesday, May 3, 2011
ステッピングモータを回してみる
ちょっと電子工作の練習にステッピングモータを回すことにした。
使うのはユニポーラステッピングモータSPG20-332。
これを単3電池4本で駆動してみた。
練習なので手作業のスイッチ駆動。
シートによると1ステップで0.75°動くらしいけど、そんなの見てもよくわからないので目立つように付箋をくっつけた。
実際の動きはこんな感じ。
…あんまり面白くないけど、まあ動作確認だから。
マイコンでいじるなら四本のピンから順番に信号送ればいいのかな?
まだまだ知らなきゃいけないことが多いなぁ。
参考にしたのはこの辺。
使うのはユニポーラステッピングモータSPG20-332。
これを単3電池4本で駆動してみた。
練習なので手作業のスイッチ駆動。
シートによると1ステップで0.75°動くらしいけど、そんなの見てもよくわからないので目立つように付箋をくっつけた。
実際の動きはこんな感じ。
…あんまり面白くないけど、まあ動作確認だから。
マイコンでいじるなら四本のピンから順番に信号送ればいいのかな?
まだまだ知らなきゃいけないことが多いなぁ。
参考にしたのはこの辺。
ラベル:
電子工作
Sunday, April 24, 2011
Subscribe to:
Posts (Atom)