ラベル 自動操縦パネル の投稿を表示しています。 すべての投稿を表示
ラベル 自動操縦パネル の投稿を表示しています。 すべての投稿を表示

2011年6月25日土曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その7)

どんなパネルにするか決めました。

Boeing,Airbusとか、特定の機体を使うというのではない八方美人タイプなのでどれでもそこそこいけるパネルにしたいと考えました。
で市販品を参考にしようとさがすと、GoflightのGF-MCPというのを見つけました。
宣伝文句を見ると”一般的な航空機に対応”と書いてます!


Goflightは前回紹介したBoeing 737タイプのMCP-PROというのも発売しておりメーカとしてきっと厳選した結果GF-MCPのようなスイッチ・ディスプレイ構成となってるんだろう!とポジティブに考えます。

でありがたくパクら参考にさせてもらいます。
まぁこんなに格好良くは作れないでしょうし、家庭事情にあわせて小さくコンパクトなものにして多少の工夫をしようと思います。


2011年6月24日金曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その6)

試作基板の回路図をまとめました。
簡単だけど時間をあけるとあっぱらぱーになりそうなので…

みなさんeagleでどうやって回路図をビットマップにしてるんだろう、と思っていたらexp2imageというulpが準備されているんですね。


run exp2image color 150 .bmp 91 92 94 95 96


詳しくはeagleのインストールディレクトリの ulp/exp2image.ulpを参照。
91、とかのレイヤーナンバーを覚えるのが少々面倒。

2011年6月21日火曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その5)

ロータリーエンコーダの取りこぼし問題を根本解決しました。

解決方法は前回述べたように、

  1. ロータリエンコーダの回転にあわせたカウンター(1byte)をPCへ送る。
  2. PCではループでそれを受け取り、
    • 増えていれば設定高度増加イベント(EVENT_ALT_INC)を送る。
    • 減っていればその逆、EVENT_ALT_DECを送る。
というものです。

ただ、設定高度増加イベント自体を直接送れないためいったん自前のイベント番号に割り当てる必要がありました。
(このあたりはSDKのサンプルを参考にしました)

FSX自体は上記増減イベントがたくさん積まれてもちゃんと処理してくれるようです。
(カウンタの折り返し処理をミスって、一気に255増えてもちゃんと"25500feet"増えてました…)

プログラムは今のところ無限ループで動かしていますが、sleepを使った負荷軽減を図りました。
ただ、ロータリエンコーダを回す、という操作に対しLED表示の追従が遅れるのでsleep(10)にしています。(前述のように取りこぼす、というわけではない。)

これでフィージビリティスタディ終了(前回終了宣言してたけど…)です。

2011年6月20日月曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その4)

PCからデータを送って表示することに成功しました。
ちょっと感動。


0次試作ということで
・オートパイロットon/off  およびその状態表示(LED)
・高度保持 on/off およびその状態表示(LED)
・設定高度の表示/変更
が出来ることを確認しました。

ムービーを貼っときます。


ロータリースイッチはゲームパッドのボタンとして左回り・右回りに応じてそれぞれ違うボタンを押したていでPCに送信。
ただ、取りこぼすことがあるようで改良が必要っぽい。
くりくり回すと高速でボタンを連打した状態になるのでそもそも速度が成り立っていないのかもしれません。
USBのポーリングインターバルを短くしてみたりしましたがあまり改善しませんでした。
総パルスカウント数を送るようにして、PC側でそのパルスカウントに増減に応じてPC内でFSXで値を増減させる指示をするのが根本解決、かと。

とはいえ、USBでの情報のやりとり、表示の方法についてはフィージビリティスタディができたのでこれを元にして本番のMCPデザインにはいろうと思います。

ファームウェア、PC側のプログラム整理しておこう。

P.S.
EZ-USBのコンパイラが"RAM足りねぇ"と言い始めた… 対策考えなきゃ。

2011年6月17日金曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その3)

下記を行うことができました。

1.HIDジョイスティックとHID準拠デバイスを作れた
HID準拠デバイスは7segLEDの表示内容をPCから出力指示するためのもの。
2.HIDジョイスティックではロータリエンコーダの左右の回転でオートパイロットの設定高度が変えられることを確認した。
3.LEDのダイナミック表示ができるようになった(PCからの通信で値を送るまでにはいたらず)
4.1.でHID複合デバイスとして作ることができた。
これで、一台でジョイスティック、LED表示デバイスを扱えるようになりハンドリングが楽になると思います。

PCからの通信が今までに経験がなく、サンプルプログラムがどれも微妙に旧い、ずれてる、というったものなので読みといていく作業が大変そう。

とりあえず7segLEDでお約束の?カウンタが動作しています。

複合デバイス(Composite Device)でゲームコントローラ、
HID準拠デバイスが同居

今回はまったところ。
・デスクリプタのWordAlignがずれていると微妙な動きになることがある。
→例えば、デバイスの名前がおかしくなるとか。
・サイプレスのサンプルが参考になった。
http://japan.cypress.com/?rID=12932
でも、微妙に製造元文字列が設定されないとかのバグ(仕様?)なぞが散りばめられている。
しかし、コンパイルすれば、キーボード、マウス、バルクデバイスが同居する。
・なんども抜き差ししているうちにはまった感じになり、デバイス削除だのベンダーIDだの変更をしたがそのうち認識してた・・・
・認識したのが開発機のみか、と疑いEEPROMに焼いて他のPCでも試した。ちゃんとうまくいった。
・最初、サイプレスのANなんどかデバイスの削除とかをやったり、ベンダIDを変えたりプロダクトIDを変えたりしてるうちになーんとなく治った。原因の分からない、もやもやした幕切れ

2011年6月16日木曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その2)

PIC18を使って、と思っていましたが家に眠っているEZ-USBを有効活用することにします。
PIC18が安く入手が容易な昨今、EZ-USBの出る幕はないのかなぁ。

使ったのはEZ-USB FX2ボードbyストロベリーリナックス製。


パネルの電気的な仕様を決めるための試作基板。


LEDつきスイッチ、ロータリーエンコーダ、7セグLEDを載せました。
MCPの動作をさせるために必要な基本的なアイテムです。
これらをうまく動作させることができれば本格的に製作しようと思います。

ひとまず、
自動操縦のOn/Offおよびそれを示すインジケータ
オートスロットルOn/Offおよびそれを示すインジケータ
オートスロットル設定変更(ロータリーエンコーダ)
オートスロットル設定値ディスプレイ(7セグ)
ってとこですかね。

2011年6月8日水曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その1)

Microsoft Flight Simulator(FSX)で遊び中。最新版。

自動操縦で飛ぶときにいちいち画面の中のパネルのスイッチをマウスでやると面倒くさいし、興ざめ。

自動操縦用のパネルの売り物もあったりする。

売り物はこんなの。Goflightのやつ。

カッコいい。けど4万円ぐらいする。

欲しいけど、飽きちゃうとまた悲惨なので作ることにする。

課題は二つ
1.FSXから現在の自動操縦の設定高度とかを読みだして表示する。
2.スイッチ入力をFSXに送る。

で、まずサーベイがてら
1.FSXから値を読みだしてコマンドプロンプトに表示する
2.キーボードであるキーを押すとFSXの自動操縦の設定高度をインクリメントする
の二つのプログラムを作った。

はじめはSDKのことがよくわからず、VisualStudioの設定もよくわからずイライラしたけど、なんとかできた。

あとは物理的なパネルを作ることにする。
PIC18のUSB付きのでHID+GPIOみたいなのを作って、上記のプログラムと結合するつもり。

USB、ちゃんと出来るかな。