フライトシミュレータ用コントローラの製作

MSFS2020用のBluetoothフライトコントローラを製作しました

nRF52FlightStick

きっかけ

昨年Microsoft Flight Simulator 2020が発売され私も使ってみましたが、マウス操作では瞬時の操作が必要な時に間に合わないことが多く、キーボードに割り当てられている機能を覚えるのも大変で、操縦に適した入力機器はないものかと思案していました。

世の中にはフライトシム・マニアの方が大勢いらっしゃって、スティックコントローラやフライトヨークを利用し自室をコックピットにされている例が多々ありますが、私のように息抜きで離着陸するだけの用途には大げさすぎます。
一方、普通のゲームパッドではボタンに割当てた機能を忘れてしまうので、ここはフライトコントローラを自作してみようとなったわけです。

私がフライトシムで普段利用するのは旅客機(B787 or A320)で、1時間程度の近距離をオートパイロットで飛行することが多いので、この用途にあったフライトコントローラを製作することとしました。

基板に少しだけ余りがありますので、記事を読んで作ってみようと思った方2名様にお譲りします。
ただし、ケース加工やArduinoIDEの環境設定に苦労しますし、それなりの道具が必要です。

nRF52FlightStick の特長

  • 軽くて手軽に使える
  • 旅客機の操縦に必要な最低限の操作レバー・スイッチ類を装備
  • Bluetoothで無線接続
  • バッテリーの持続時間が長い(数十~百時間)

nRF52FlightStick の概要

操作スイッチ類

フライトコントローラですから、エルロン・エレベータ・ラダー・スロットルの基本機能は必須です。
また、フラップ・スポイラー・着陸装置・逆噴射・ブレーキ・パーキングブレーキは、トグルスイッチを利用して現在の入力状態が一目で確認できるようにしています。
さらに、オートパイロット用の切替ボタンや高度設定・速度設定用のダイヤルを装備し、入力操作を容易にしています。通常オートパイロットはコックピットパネル中心付近にあって、視認は容易ですから入力さえできれば問題ありません。

操縦中は、各種計器を見たり、窓外の障害物や滑走路を確認したり、機外から景色を楽しんだりと視点(カメラ)を頻繁に移動します。このため、カメラ切替ボタンやハットスイッチを装備して視点の切替が簡単にできるようにしています。

コントローラに搭載したスイッチ類は、いずれもMSFS2020の操作を割当てることで機能するようになっています。

上からオートパイロット、翼面および着陸装置、カメラ切替の順で配置

使用マイクロコントローラ

PCとの接続は無線にしたかったので、当初はESP32のBluetooth機能を利用したコントローラをプロトタイプとして製作しました。

ESP32利用のプロトタイプコントローラ

しかし、ESP32はBluetooth(BLE)でも消費電力が大きく常時80mAも流れるため、プロトタイプの単4乾電池3本では数時間で電池切れとなってしまいます。
たまには日本からハワイや欧米に飛んでみたいのですが、途中でコントローラを認識できなくなってしまうので、このような場合はバッテリーの持ちが重要になってきます。

そこで、今回はマイクロコントローラチップにnordic社のnRF52832を積んだAdafruit Feather nRF52 Bluefruit LEを採用しました。
このモジュールは4千円ほどしますが、Bluetooth接続時の消費電力が小さく数mAですみます。
nRF52FlightStickはバッテリーに1000mAhのリチウムポリマー(LiPO)を採用しましたが、バッテリーの持続は全く問題なくなりました。実際に測定していませんが、数十時間は持つでしょう。

なお、nRF52832の後継として高機能なnRF52840を利用したAdafruit Feather nRF52840 Expressが秋月電子でも販売されるようになり、物理的ピン配置は同じですので当コントローラーでも利用できるようにしています。
ただし、ピンへのIOの割当てが異なるため、ファームウェアは別のものを書込みます。(arduinoスケッチは同じですが、ヘッダファイルを代えています)

上のモジュールが
Adafruit Feather nRF52840 Express
左側はLiPO 1000mAh

基板の構成

フライトコントローラに使うレバーやスイッチ部品は高さが異なるため、ケースに収めたときのことを考慮して設計する必要があります。

このため、今回は2枚の基板を重ねて、その間をピンヘッダで電気的に接続する方式としました。
これにより、各基板を10x10cm以下のサイズにでき、10cm以上のサイズの基板1枚よりも安く製作することができます。(FusionPCBの場合、5枚ずつ製作し送料合わせて5千円程度でした)

赤い方が nRF52マイクロコントローラ やジョイスティック・スライドボリューム・ロータリーエンコーダなどが載るメイン基板、青い方はタクトスイッチやハットスイッチを載せるサブ基板です。

Adafruit Feather nRF52840 Express も1枚の基板ですので、正確には3重構造ですね。

製作方法

回路図等のデータは下記からダウンロードし、解凍してください。

回路図には部品表が含まれています。

ファームウェア書込み

Adafruit Feather nRF52 Bluefruit LE または Adafruit Feather nRF52840 Express へファームウェアを書込むには、Arduino IDE環境が必要です。
また、ボードマネージャの設定やAdafruit nRF52ライブラリの改変も必要(上記ファームウェアデータに同梱)となり、方法・手順を簡単には説明できないため、その方法はお問合せ要望に応じて別の機会に説明します。

なお、ライブラリ改変などの環境設定さえできていればファームウェアフォルダ内のスケッチ(inoファイル)を元に書き込むことは容易です。

基板作成

メイン基板(赤)の上にサブ基板(青)が乗ります

下記に注意して、基板に部品をハンダ付けします。

  • 背の低い表面実装部品(チップ抵抗、チップコンデンサ、ダイオード)から先に取付ける
  • ショットキーバリアダイオードは極性がある
  • 各スイッチ類は正確な位置に取付けないとケースの穴にはまらない
  • トグルSWは中点付(SW1/2,SW3/4)と無(SW5,6,7,8)があるので基板のシルク印刷を確認する

ジョイスティックのレバーは、aitenndoのジョイスティックキャップを途中で切ってはめ込みます。
このとき、レバーとジョイスティック部品の間に、薄い塩ビ版を挟み込みます。塩ビ版は、直径3cmほどに丸く切って中心に直径4mmほどの穴を開けておきます。
こうしておくと、部品にホコリが入るのを防ぐことができます。

ハットスイッチ(サブ基板の右下の緑色基板)部品はピンヘッダで接続するようになって販売されています。ピンヘッダの黒いプラスチック部分の高さが余分なので、ピンだけを使って基板同士が密着するようにハンダ付けします。
また、ハットスイッチ用のレバーは市販されていないので、プラスチック画びょうの頭部分を利用します。画びょうの針をライターで熱して引き抜いた後、2~2.3mmのドリルで3mm深程穴を開けます。

ケース加工

フライス盤CNC1610proと加工前のケースパネル

nRF52FlightStickは、タカチ電機工業のABS樹脂ケースWSC10-14-5を使用しています。
同ケースはパネル面が手前に傾斜していて、いかにも操作パネルらしい形状ですが、ここに多くの穴を開けるのは大変でした。
丸穴だけならドリルで開けられますが、スライドボリュームやトグルスイッチ用の長穴をきれいに開けるのはそれなりの工具が必要です。
タカチ電機はケースの加工や化粧シートの製作も行ってくれますが、せっかくの機会ですので格安CNCフライス盤CNC1610proを購入してケース加工に挑戦しました。
使用するソフトウェアは、どれもフリーのAR_CAD、NCVC、GrblControl(Candle)です。

CNCフライス盤で苦労したのは、テスト用のABS樹脂板で何度やってもABS樹脂が融けてエンドミルに絡み付いてしまうことです。
結局、 GrblControl(Candle) の回転数設定が実際のrpmではなく、スピンドルモーターの最大回転数を1000とした時の比率を入力すればよいことがわかり、ようやくきれいに切削できるようになりました。
CNC1610proのスピンドル最大回転数は約10000rpmですので、ABS樹脂切削に適した5000~6000rpmで切削するには回転数を500程度で設定すればよかったのです。
それに気づかず、ずっと6000とかで設定して最大回転数で切削したためにABS樹脂が融けていたのでした。

パネルシートの加工と貼付け

シート貼付け後のパネル

パネル面には銀色つや消しのシートを貼って、シートには各スイッチ・ボタンの機能を印刷するようにしたのですが、このシートにきれいな穴を開けるのも難しいです。
試行錯誤の末、やはりシート専用のカッティングマシンに頼らざるを得ないと判断し、シルエットportrait3というマシンを購入しました。
シートには、あらかじめ押しボタンスイッチの穴の位置や名称などをレーザープリンタで印刷しておきますが、ズレないようにカッティングするのにトンボ印刷が活躍してくれました。

カッティングのコツは、シートをケースに貼り付ける時のことを考えてシール台紙も一緒にカッティングしておくことです。
シートを台紙からはがしてしまうと、位置調整の貼り直しができないため一発勝負になって結局失敗します。
台紙がついた状態でマスキングテープなどで仮止めし、台紙をゆっくり剥がしながら貼り付けるとうまくいきます。

シルエットportrait3
粘着質のプラシートに材料を貼付けてカットします

完成

(参考)部品代合計 約1万円(nRf52 3k, 基板 1k, ケース 1k, LiPO 2k, その他 3k)

PC設定

Windows PCで使えるようにするには、Bluetoothデバイスとして認識させる必要があります。
 Windows ー 設定 ー デバイス ー Bluetoothとその他のデバイス
  +Bluetoothまたはその他のデバイスを追加する
    デバイスを追加する nRF52 Flightstick をクリック

認識されると下図のように接続済みになります。

なお、上記ウインドウでバッテリー残量を確認できるように見えてますが、残量表示は最初に認識した時の数値から変わりません。
そこで、BluetoothBatteryMonitorというアプリをインストールすると、バッテリー残量をモニターすることができます。ただし7日の無料トライアル期間終了後は有料(約$5)です。

BluetoothBatteryMonitor

ゲームコントローラーとして使えることを確認するため、
 コントロールパネル ー デバイスとプリンターの表示 ー nRF52 Flightstick を右クリック
  ゲームコントローラーの設定 ー 8軸64ボタン デバイス ハット スイッチ付き ー プロパティ
と進めると下のようなウィンドウが出てきます。
スティック・ノブ・ボタン・スイッチを操作して動作を確認します。

なお、X回転・Y回転・Z回転とスライダーの1つは実装されていないので動きません。

MSFS2020の設定

MSFS2020でnRF52FlightStickを使うためには、機能割当てが必要です。
 OPTIONS ー CONTROLS OPTIONS
で、各機能にスティック・ノブ ・ボタン・スイッチを 割り当てます。

MSFS2020のコントローラ設定画面

大空へ

使えるようになったら大空へ旅立ちましょう。

21:9の大画面なら、雄大な景色を楽しめます。

2021.9.13 by tomo

コメント

タイトルとURLをコピーしました