「ちょっとまってくださいよぉ」 -4ページ目

レチクル回転機と拡大表示機能の追加(EADS Vol.6)

USB-IO⇒ST-4コンバーター用ソフトにつけたレチクルの表示と水平・垂直方向への移動機能。
でも、レチクルが回転できると便利だよね。
カメラが望遠鏡に対してまっすぐについていればいいけど、構図などの影響で回転させた場合に役に立ちそう。

というわけで、回転機能を付けたよ。
そして、レチクル表示モードの際だけ特別にもう一つ機能を追加。

拡大表示!

レチクルのターゲット部分を拡大して表示する。
そう、ゴルゴ仕様。

それに伴ってレチクルの表示アルゴリズムも変更。
これまではOpenCVで注目領域を作り、そこにレチクル画像をマスクで透明化して貼り付けていた。
でも、もっともっと単純に、円と直線を直接書き込むことにしたよ。

最初からこうするべきだったな・・・

それでは、いつもの動画です。

デモとして、
1.上下左右の移動
2.回転
3.拡大
4.拡大後の上下左右移動
5.拡大時の上下左右の移動が拡大解除時にも有効
このへんを映してるよ。

USB-IO⇒ST-4コンバーター用ソフトの進捗状況だよ!(EADS Vol.5)

ドSの果てしない野望はもちろん潰えていない。
でも、前回の記事のタイトルが長すぎて途中で切れていることに気が付いた。
なんとかせねば・・・

このプロジェクトの名前を決めよう!

というわけで、「ドSの果てしない野望」をエキサイトで翻訳してみた♪

結果・・・「Endless ambition of ドS 」

こんなん出ました^^;
クラーク博士、お久しぶりです!

でも、これも長い。
略してしまおう。

Endless Ambition of "Do S"だから・・・
EADS計画。

これからは、(果てしない野望への第○歩)を「EADS vol.○」にしよう。

さて、くだらないことはここまで。
この次も単なる進捗状況の記録だけなんだけどね。

【今日の進捗】

1.OpenCVによる動画保存部分と表示をスレッド化した。
2.Hidの受信部分をスレッド化した。
  (ただし、受信は行っていない。)
3.上記のことで、WM_TIMERは不要になり削除した。
4.上下左右の制御ボタンを改良し、マウスで押している間は常にモーターが動くようにした。
  ・Hookでマウスイベントを早い段階で取得。
  ・Hookしたイベントを処理。
  これにより、制御時間のSleepが不要になった。

【確認動画】

RAは赤経だから、日周運動で常に動いているよ。
RA+のときはRAの回転が止まる。少し解りにくいかな。
RA-のときはRAの回転が速くなってる。
DEC+、DEC-のときはそれぞれ回転してるのが解ると思う。

とりあえず、今日のところはこれで合格。

次の課題は、レチクルの回転かな。

USB-IOでDD-2コントローラー(ST-4改造仕様)を動かしてみたよ!(果てしない野望への第

USB-IO⇒ST-4コンバーターと経由して、DD-2コントローラーを制御するための回路を実際に作ってみたよ。
ドSは壮大な勘違いをしていたんだけど、貧スタさんの助言もあってこんな感じに作ってみた。

注意
ST-4仕様のオートガイダー(Nexguide)用に改造されたDD-2コントローラーに接続することを前提にして作っています。
同様の行為をしたことにより、破損、怪我等の問題が生じても責任は負いかねますので、自己責任でお願いします。
ドS「○」は一切の責任を負いません。

うん、直結^^;

USB-IOはオープンドレイン(コレクタ)じゃない。
USBから5Vの電圧が直接かけられる。
TC4069UBPの入力電流は±10mAだから、1kオームの抵抗をかませれば5mA。
これでいいはず、いいはずだきっと・・・

動作確認をしてみたよ。

操作中の画面を録画しながらだったので、途中で少し止まっちゃってるときがあるけど・・・
普通に使っている分には問題なかったよ。

ソフト面で修正が必要なところは・・・
(1)マルチスレッド化
(2)ボタンコントロールのサブクラス化

(2)は何かというと、制御用ボタンの動作。Windowsのボタンって、押したままの状態では動作が始まらない。
押して⇒「離す」のタイミングで動作が始まる。
なので、ボタンを押している間、モーターを回し続けるということができない。
今はテストだけなので、ボタンが1回押されたら任意の時間(今回は500m秒)動かすようにしてるけど、改良が必要だね。

ただ、これがちょっと面倒。
Visual C++(SDK)でプログラムしている場合、ボタンコントロールのサブクラス化という方法が必要になる。
これやると大きな関数が増えてしまうので、マルチスレッド化が終わってからやったほうがいいかな。

とりあえず、今回は動作確認できたということでOK。

オープンドレイン(コレクタ)の再勉強をしてみたよ!

USB-IO⇒ST-4コンバーターへの回路を考えてみたんだけど、USB-IOの出力ピンはオープンドレイン(コレクタ)にはなっていないとの指摘を受けたよ。
オープンドレインの仕組みを図にすると、こんな感じ。


NPNトランジスタのベース部分に電圧がかかっていない(OFF)のとき、コレクタとエミッタには導通がない。
コレクタ部分の電圧は、「不定」になる。
だから(1)の回路図と同じことになる。
電源Vからの電圧は、コレクタ側に吸い込まれることなくLEDの方に流れ、点灯することになる。

逆に電圧がかかっている(ON)のとき、コレクタとエミッタに導通が生まれる。
だから(2)の回路図と同じことになる。(スイッチは繋がった状態)
こうなると、電源Vからの電圧は、GNDに直結されたコレクタ側に吸い込まれ、抵抗の高いLED側には流れない。
よってLEDは消灯状態になる。

はい、次がポイントです。

オープンコレクタの場合、ONなら「吸い込む」。OFFなら「不定であり、吸い込まない」。
ベース部分へのON、OFFに関わらず、コレクタ部分からHighが出力されるわけじゃない。
「吸い込める」か「吸い込めない」かが大切になる。

だから次段の回路で電源を確保するために、プルアップが必要になるんだね。

理屈はなんとなくわかった・・・

でもやってみなけりゃわからない。
ドS科学実験で!

ブレッドボードの配線ケースに無造作に転がっていたNPNトランジスタの2SC1815。
これを使って超簡単オープンドレイン実験だ。

【注意】
プロから見ると、電源が!とかこんな抵抗じゃダメ!とかのご意見もあるかもしれませんが、パーツの破損などのリスクは覚悟の上でやっております。
パーツの破損、やけど等の怪我、火災などが発生する可能性もあります。
同様の実験をされる場合は、自己責任でお願いいたします。
ドS「○」は一切の責任を負わないものとします。

追記:(2012.1.13)
くっしーさんよりご指摘がありました。
2SC1815は
絶対最大定格でB-E間(VEBO)5V、ベース電流(IB)50mAなので、9V電池を使ってこの実験を行うとトランジスタが壊れます。
ベースと電源の間に、20~47KΩの抵抗を入れるのがよいそうです。


先ほどの回路に抵抗をもう一つ付けてこんなのをブレッドボードに作ってみたよ。


右側のトランジスタが2SC1815。
一番下の端子がベース、真中がコレクタ、一番上がエミッタ。
オープンドレイン(コレクタ)なので、真中のコレクタを左の回路に伸ばして接続してるよ。

まずは右側の回路に電源を繋いでいる状態。


ベースに電圧がかかっているので、コレクタからエミッタに電気が流れる道ができる。
左の電池から来た電流がコレクタ側に吸い込まれ、エミッタを通ってGNDに流れてしまう。
だから、LEDに電流は流れず、消灯しているね。

次に右側の回路に電源を接続していない状態。
(右の電池から黒い線が繋がっていない)


この場合は、コレクタ部分は「不定」であり、エミッタとの導通はない状態になっている。
だから、左の電池から来た電流はLEDまで流れ、点灯しているね。

LEDの点灯は、あくまでも左側の電池によるもの。
右側の電源は関係ない。

オープンドレイン(コレクタ)形式の回路では、次段の電源を得るためにプルアップ抵抗が必要ということが、この実験でもよくわかる。
だって、左側は電源に繋がっていないんだからね^^

このことは、電圧の違う回路を繋げるのにとても役に立っているようだよ。
電気って面白い!

USB-IO⇒ST-4コンバーター用ソフトを作ってみたよ!(果てしない野望への第3歩)

USB-IOを使ってDD-2コントローラを操作する環境を作りたい。
さらに、USBカメラを接続してavi形式の動画を保存したい。
できれば簡易オートガイダーになってほしい。
ドSの果てしない野望・・・

ハード面ではまだまだ問題がありそうなので、まずはソフト面でのプロトタイプを作成してみたよ。

【実装した機能】
1.4つのボタンで、USB-IOの4つのピンを制御。
2.USBカメラからの画像を表示し、avi形式で録画保存。
3.コーデックは、XviDとその他(一覧を表示して選択)を実装。
4.レチクルの表示、非表示の切り替え。
5.レチクルの上下・左右への移動。

【問題点】
1.動画保存のループにTIMERイベントを使っているので、安定しない。これはスレッドにするべきかな。
2.USB-IOへの出力はできるけど、入力ができていない。
3.レチクルの回転が思うようにいかない。

少しずつ解決できればいいな。

今日の目玉はレチクルの表示と移動の機能。
OpenCVの着目領域ROI(Region Of Interest)に対して、レチクル画像をマスクして貼り付けてみたよ。
ROIの位置指定をスライダーコントロールから得るようにして、上下・左右の移動が実現できた。

【外観】


【レチクルの表示】


【レチクルの移動】


スナイパーになった気分になれる!
自己満足♪