AutoPilot (Flight Control Unit)
A320タイプのオートパイロットFCUを 自分が使いやすいように考え構成して製作しています。なかなか設定や操作機器などがたくさん集中していて難しく、製作を少しずつ進めています。
操作やスイッチなどの働きがすべて理解できたわけではないのですが、作り始めました。足りない部分があれば改良・改造すればいいのですから。
Airbusのコックピット機器のように 一列横並びにはせず、コンパクトにするため上下2列に分けました。 表示はSPDとALTが上の列、HDGとVSを下に配置しました。これはアナログメーターの配置と同じにして、直感的にわかるようにするためです。
7セグ表示にはMAX7219を2つ使い カスケード接続して4つの数値を表示しました。これまでのArduino MEGA2560がほぼ接続ピンを使い切ったので、無理をせずにもうひとつ別のArduino MEGA2560を使いました。7セグLEDはデジタルALTなどに使ったものと同じ小さい0.25inch 黄緑色LEDです。
MAX7219の表示モジュールとして 完成しているLED基板を使えば 製作は簡単なのですが、赤色LEDは警告の色のため 避けました。この部分は配線の手間がかかりますが、気に入ったものを作るための楽しい作業です。
飛行高度ALTの設定は 100ftまたは 1000ft 単位でロータリーエンコーダーで入力します。
10位と1位の桁はゼロを固定表示させます。 そのため ここはMAX7219には接続せずに 別配線です。 VerticalSpeed の入力も 100ft/min単位で10位と1位はゼロ固定です。3桁表示のLEDのうち いちばん右桁は使わないので表示させません。
MAX7219 がMOS-ICなのか TTL-ICなのか maxim & ANALOG DEVICESサイトを調べてもわからなかったので、製作中の静電破壊を避けるためにICソケットを使いました。入力信号電圧VIHが3.5Vmin ということは MOS-ICだと思えますが確認できていません。
スイッチは必要なものだけにしました。SPD/MACHのスイッチはマッハ表示をさせないのでなくしました。METRIC ALTもメートル表示にすることはないので省きました。ALT入力を100ft単位と1000ft単位とに切り替えるためのスイッチも必要ですが、Mobiflightではロータリーエンコーダーを回す早さによって切り替えられるので、これもなくせます。
文字の表示
SPDやALTなどの文字表示は黒のバックに白い文字が浮き出ています。これを作る方法を考えました。
利用したのは 文字をテープに書き出してラベルをつくるテプラです。TEPRAの仕組みは熱転写プリンターです。この黒い文字の抜けた跡のネガテープ、不要になって巻き取られているものを取り出しました。薄くて巻きぐせがあって扱いにくいものです。
LEDのバックライトで照らすときに明るさのむらができないように工夫しました。まずLEDとの距離を空けること、0.2mm厚のアルミ板で周囲を反射板に、さらに散乱光になるように透明アクリル材表面をサンドペーパーでこすります。これでも十分ではなかったので、液晶表示のバックに使われていたプリズムシートも切り出してはさみました。
ユニバーサル基板
基板上の主な部品配置です。ここにプルアップ抵抗やLEDへの電流制限抵抗、ICのコンデンサなどが加わります。Arduinoへのコネクタは2カ所にあります。
8x6cmのユニバーサル基板にすべてを詰め込みました。2つのMAX7219は24pinで長さもあって配置が難しかったのです。GNDとVccラインは縦横に格子状になるよう配置しています。7セグLEDは足の長さを利用して、ロータリーエンコーダーと高さに合わせた位置にしています。
MAX7219 などの ICに配線するときには、このように6mm幅の紙に端子名を記入したものを貼っておくと間違いが少なくなります。
LEDディスプレイ表示設定
4つの7セグLEDは MAX7219を2つ使って表示します。Mobiflightの設定には FSUIPCのoffsetを使いました。
7セグLEDとMAX7219との桁表示のための接続はこのようにしました。注意点は、Mobiflightの use display欄では 左桁から12345678の設定ですが、MAX7219のピン表示では 左上位桁から 76543210 となっていて、しばしば混乱してしまいます。
左3桁と右3桁をそれぞれ別の表示に使っています。ここでは dig3 と dig4 の2桁は使っていません。
数値の右詰表示
Mobiflight9.6 から 7セグLED表示が浮動小数対応に変更されたため、そのままでは右詰設定Use Left Paddinがうまく働いてくれません。 そのため Round関数を使って小数部分をなくすようにしました。
Altimeterと AirSpeedの7セグLED表示も この変更に対応させました。
Round($,0) のように記述しますが、round や ROUND ではありません。Rだけ大文字です。
$=12.345 のとき、Round($,1) にすると 12.3になります。Round($,0)では 12になり小数点以下がなくなり整数になります。値は四捨五入されます。
ロータリーエンコーダー設定
ロータリーエンコーダーを回す速さによって 入力の変化量を切り替えています。
この表の値は Sebastian Möbius氏のAutoPilot解説ビデオを参考にしています。回す速さslow と quickは10倍変化量が違います。また、SPDとALTではマイナスの値になって地下に潜らないように if構文を使っています。VerticalSpeedは下降のときにはマイナス表示です。
HDGの入力がうまくいかず、ちょっと手こずりました。
原因はFSUIPCからの方位角データが0~65536 ではなくて、-32768~+32768になっていることです。最上位ビットを符号に使っているのです。
そのために、たとえば北西の方向 315°へセットしようとすると、-45°のマイナス値になってしまいました。
いろいろ試して、エンコーダー入力にOffsetではなく、EventIDを使い。7segLED出力のTransformに if($<0,$/182+360,$/182) としました。
このことを調べるのに役立ったのは Mobiflight>Forum の書き込みです。他の人がすでにこのことを質問しているはずなので、それを探しました。また、その中で設定につかう数式にはスペースが含まれることはないことも再認識しました。読みやすいようにスペースで間を空けることはできないのです。
モード選択
Managed mode と Selected modeは ロータリーエンコーダー内のスイッチを押し込むことで切り換えます。 そして、どちらのモードになっているかを表示するための丸い小さなLEDを点灯させました。
プッシュスイッチでは押したときだけONになり、トグルスイッチのように状態を保持しません。トグルスイッチのようにON/OFF状態を保持できるようにするには MobiflightのMoreOption SetValueに if($=1,0,1) を使います。これで値が1のときには0に置き換えられます。そうでなければ (0のとき) 値は1になります。これで押すたびにON/OFF が切り替えられて 状態を保持できます。
モード表示LEDは数字の右横には空きスペースがなく、数字の上になりました。駆動するLEDの回路はMAX7219のdig3と dig4の端子が残ってますので、ここを利用しました。seg A を使って 0 または 1 を出力することで LEDをOn/Off します。
これは出力シフトレジスタ 74HC595を取り付ける基板の余裕がなく、Arduinoとの接続ラインも増やしたくないので、ちょっと工夫してみました。直列に入れた抵抗は 使ったLEDが必要とする電流が少なく、7セグLEDと明るさを揃えるためです。
管理モードの表示 - - -
Managed Mode のとき、7セグLEDに数値ではなく 3つのダッシュ - - - が表示されるようにしました。
切り替えるために、MD_SPD の数値を参照しています。この値をもとに Preconditionを使って 2つの表示のどちらかが働くように切り替えます。
参照に使ったMD_SPDは選択モードを表示させるために MAX7219のdig4を使ったLED出力です。
左端の赤い!マークは MD_SPD が0のため、こちらが動作していないことを表しています。
ALT 管理モードの5桁 - - - - -表示
ALT表示は5桁ですが設定は100フィート単位なので 下位2桁は00表示に固定していました。 ところが管理モードにしたときに 上位3桁は - - - に なるのに下位2桁は00固定表示のままです。管理モードのとき、ここも- - が表示される回路を考えました。
ダイナミック点灯ではなく、直流点灯のため各セグメントへの電流値は10mAに制限しています。全体では 10mA X 6 X 2桁=120mA
MAX7219からの信号を取り出して この制御に使うことが難しかったので、Arduinoからの信号を使って切り替えてます。Modifyのところで if($=1,0,1) としているのは 0と1を反転させるためです。回路を変更修正すればこれは不要です。
APマスタースイッチ
AutoPilotを起動させるマスタースイッチも プッシュボタンスイッチを使いました。(オルタネイト動作のスイッチは大きくて ここに使えません)。ここにも SetValueに if($=1,0,1) を使い ON/OFF状態を保持しています。APがON状態はスイッチ内蔵の青いLEDで表示しています。
AP1 はうまくマスタースイッチとして作動できるように設定できましたが、AP2 はMobiflightで設定の方法が見つけられていません。ひとつ作動すれば十分ですが。