X-Plane コクピットの自作に挑戦!
X-Plane イグニッションキーのコントロール
ロータリースイッチを使用して、イグニッションキーを制御。
イグニッション OFF、R、L、BOTH、STARTをコントロール。
今回の実際のレイアウトと配線図です。
ゴチャゴチャしてますが、他の配線が見える右上は無視して下さい。5つのプッシュボタンをTeensyに繋いでいるだけです。
5つのボタン左からOFF、LEFT、RIGHT、BOTH、STARTになっています。
OFFとSTARTは分かりますが、中央の3つは必要? 双発機などで必要になるのかも、後で検証します。
プッシュボタンをしっかり取り付けるのがポイントです。これが動作しない原因になります。
ピンはこれ以外でももちろん動作します。色々試して見てください。
イグニッションキーについてここに詳しく解説されています。2つある点火プラグの右、左ということらしいが、スタートまでキーをいっぱいに廻して、エンジンスタートさせた後、キーは自動的にBOTH(両方)に止まるのでしょうね多分、普通はこれで飛行、点検のためにLeftやRightの位置にキーを回すとその位置の点火プラグだけがマグネットから電気が供給されるとうことかな?なんとなくこれでしょう。詳しくわかる方のご助言をお聞きしたいですね。
イグニッションキーのスケッチ
これは、スケッチを公開しているこのサイトから頂きました。
お陰で、イグニッションの問題も解決。但し、このピンで接続すると動きが前後したのでピンを変えました。Teensy 2.0の場合は、一応以下のピン配置でうなくいくと思います。ピンの位置は他の位置でももちろんうまくいくと思いますが、色々テストするといいと思います。
お陰で、イグニッションの問題も解決。但し、このピンで接続すると動きが前後したのでピンを変えました。Teensy 2.0の場合は、一応以下のピン配置でうなくいくと思います。ピンの位置は他の位置でももちろんうまくいくと思いますが、色々テストするといいと思います。
X-Plane_IgnitionKey.ino
#include "Bounce.h" // per X-Plane DataRef docs enum IGN_KEY_POSITION { IGN_OFF = 0, IGN_LEFT = 1, IGN_RIGHT = 2, IGN_BOTH = 3, IGN_START = 4 }; // button input pins const int Pin_IgnOff = 1; const int Pin_IgnRight = 2; const int Pin_IgnLeft = 5; const int Pin_IgnBoth = 9; const int Pin_IgnStart = 3; Bounce ignOff = Bounce (Pin_IgnOff, 5); Bounce ignRight = Bounce (Pin_IgnRight, 5); Bounce ignLeft = Bounce (Pin_IgnLeft, 5); Bounce ignBoth = Bounce (Pin_IgnBoth, 5); Bounce ignStart = Bounce (Pin_IgnStart, 5); // output dataref/commands // the ignition key dataref does not engage the starter for some reason // so we'll also use the normal engage_starter_1 command FlightSimInteger ignPosition; FlightSimCommand engineStart1; void setup() { pinMode (Pin_IgnOff, INPUT_PULLUP); pinMode (Pin_IgnRight, INPUT_PULLUP); pinMode (Pin_IgnLeft, INPUT_PULLUP); pinMode (Pin_IgnBoth, INPUT_PULLUP); pinMode (Pin_IgnStart, INPUT_PULLUP); ignPosition = XPlaneRef("sim/cockpit2/engine/actuators/ignition_on[0]"); engineStart1 = XPlaneRef("sim/starters/engage_starter_1"); pinMode (LED_BUILTIN, OUTPUT); } void loop() { FlightSim.update(); ignOff.update(); ignRight.update(); ignLeft.update(); ignBoth.update(); ignStart.update(); // non-blocking input to update ignition key position if (ignOff.fallingEdge()) ignPosition = IGN_OFF; if (ignLeft.fallingEdge()) ignPosition = IGN_LEFT; if (ignRight.fallingEdge()) ignPosition = IGN_RIGHT; if (ignBoth.fallingEdge()) ignPosition = IGN_BOTH; // engage starter using command as well as by moving key if (ignStart.fallingEdge()) { ignPosition = IGN_START; engineStart1.begin(); digitalWrite (LED_BUILTIN, HIGH); } if (ignStart.risingEdge()) { engineStart1.end(); digitalWrite (LED_BUILTIN, LOW); } // debug code for hardware test // if ( ignOff.read() == LOW || // ignRight.read() == LOW || // ignLeft.read() == LOW || // ignBoth.read() == LOW || // ignStart.read() == LOW // ) { // digitalWrite(LED_BUILTIN, HIGH); // } else { // digitalWrite(LED_BUILTIN, LOW); // } }
13行目からが繋ぐピンの位置です。
const int Pin_IgnOff = 1;
const int Pin_IgnRight = 2;
const int Pin_IgnLeft = 5;
const int Pin_IgnBoth = 9;
const int Pin_IgnStart = 3;
セスナ172SPなら、エンジンを切った状態から一番右のスタートボタンでエンジンがかかります、その時、スロットルを押上げて、ミクスチャーノブも押し上げておくこと。
作成した一番左のプッシュボタンでエンジンOFFになります。
const int Pin_IgnOff = 1;
const int Pin_IgnRight = 2;
const int Pin_IgnLeft = 5;
const int Pin_IgnBoth = 9;
const int Pin_IgnStart = 3;
セスナ172SPなら、エンジンを切った状態から一番右のスタートボタンでエンジンがかかります、その時、スロットルを押上げて、ミクスチャーノブも押し上げておくこと。
作成した一番左のプッシュボタンでエンジンOFFになります。
- 低価格コクピットの自作
- DataRefEditor
- プルアップとプルダウン
- Nav1の周波数の設定をロータリーエンコーダで行う
- スロットルコントロール
- イグニッションキーコントロール
- 針路バグコントロール
- 針路バグとエレベータトリムの切り替え
- 回転動作を粗いと微細で設定 & 3つのモードの切り替え
- ギアのアップダウンコントロール
- ロータリーエンコーダの色々な数値の設定
- トグルスイッチコントロール
- ロータリースイッチコントロール
- Teensy&キーボードボタン
- Teensy&ジョイスティックボタン
- プッシュスイッチでトグルを実現
- プッシュスイッチでLEDをONにしたままにする
- Teensy & I2C接続キャラクターLCDモジュール
- 7セグで数字を表示
- X-Plane LED ON/OFF
- マウスホイールの活用
- B 737-800
- B747-400
- B 777 Worldliner
- SiteMap
Contents