FlightGear用アナログトリムタブホイールをArduino Nanoで自作 ─ Python経由でUDP連携
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 (または互換ボード) | 1 | |
| ロータリーポテンショメーター (10kΩ推奨) | 1 | トリムホイール操作用 |
| 電解コンデンサー 100µF | 1 | 電源安定化用 |
| Adafruit SSD1306 0.96インチ OLED (128×64, I2C) | 1 | トリム位置表示用 |
| ジャンパーワイヤー | 1セット |
必要なソフトウェア環境
- Arduino IDE
- Python 3 (Anaconda推奨) + ライブラリ:
pyserial,socket,sys - FlightGear フライトシミュレーター
Anaconda使用時のライブラリインストール:
conda install -c anaconda pyserial
プロジェクト概要

フライトシミュレーター「FlightGear」で航空機のエレベータートリムタブをアナログ操作するためのコンパクトなハードウェアコントローラーを自作します。Arduinoから直接FlightGearへシリアル通信でコマンドを送ることはできず、Pythonスクリプトを介してUDPパケットに変換して送信するワークアラウンドが必要です。
トリムホイールとは?
トリムタブ(補助翼)の偏向角を調整し、パイロットが操縦桿を保持しなくても一定のピッチ姿勢を維持できるようにする装置です。実機ではコックピットにホイールやレバーとして設置されています。

システム構成(3つのスクリプト)
- Arduinoスケッチ:ポテンショメーター値を読み取り、シリアル出力。OLEDにゲージ表示
- Pythonスクリプト:シリアル受信 → UDPパケット化 → FlightGearへ送信
- XMLプロトコルファイル:FlightGear側の汎用プロトコル定義(
<FlightGearRoot>/data/protocol/に配置)
Arduinoスケッチのポイント
U8glibライブラリでOLED制御(ディスプレイタイプは2行目で調整)- ポテンショメーター値(0-1023)を
map()で -100〜100 (トリム値) と 0〜90 (針角度) に変換 - 回転方向が逆なら
map()の第4・5引数を入れ替え - ディスプレイなしでも動作可能(視覚フィードバックなし)
Pythonスクリプトの設定
host = "localhost" # または 127.0.0.1
port = 21567 # 任意の未使用ポート
tty = "COM4" # Arduino接続ポート (Arduino IDEで確認)
実行:python c:\path\to\arduinoElevatorTrim.py
注意:Arduinoシリアルモニタ使用後は、ボードを一度抜き差ししてからPythonスクリプトを実行してください。
FlightGear起動オプション
起動時(コマンドラインまたはランチャー)に以下を追加(スペースなし):
--generic=socket,in,30,localhost,21567,udp,arduinoElevatorTrim
意味:ソケット経由で入力、30Hz、localhost:21567、UDP、プロトコル定義はarduinoElevatorTrim.xml
リポジトリ
全ファイルはGitHubで公開:
https://github.com/dciliberti/arduinoElevatorTrimOLED
製造プロセス
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- アナログ風LED POVクロック – Arduino Nanoで作る残像時計
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- ArduinoとTEA5767で作る高性能FMラジオ受信機
- Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き
- Arduino RGBカラーミキサーの製作 - ステップバイステップチュートリアル