X-Plane コクピットの自作に挑戦!
X-Plane スロットルのコントロール
Teensyを使うと、ボリュームを回して、スロットルをコントロールすることができます。

X-Plane 10.31r3-3
このスロットルをコントロールします。


今回の実際のレイアウトと配線図です。見本の動画の後半に出てくるスロットルです。

Pixelmator
赤枠内が実際の配線見本、左上にサーボ、中央にTeensy、右下にボリューム

Nav1図面 2.ai @ 300% (CMYK_プレビュー)

10KΩボリュームと、サーボを使用しています。


サーボは3本が出ていますが、色に注意して配線。規格書をよく見てください。ボリュームも同じですが、配線が間違っているとショートした状態になり、熱を出して危険ですので、実際に電圧をかけたときに熱くならないか、匂い等、十分注意して見守るように。



Arduinoでスロットルサーボのスケッチを選択
Arduinoで「スケッチの例」メニューから「ThrottleServo」を選択。

名称未設定-1
この画面は「NavFrequency」になっていますが、「ThrottleServo」はその下です。


ThrottleServoのスケッチを最初から簡単に説明します(Arduionではプログラムのことをスケッチという)


#include <Servo.h>

Servo motor;                      // an RC Servo motor
FlightSimFloat throttle;          // access to X-Plane's throttle
const int motorPin = 2;
const int potentiometerPin = A0;  // Analog 0: Teensy = 23, T++ = 38
int previousAnalog = -100;
5行目からの const int motorPin = 2; はサーボは2番ピンを指定しています。
6行目の
const int potentiometerPin = A0; はボリュームを繋ぐピンですが、A0はTeensy 2.0では21番ピンになります。

Teensyに書き込みます。

NavFrequency | Arduino 1.0.6

ここまで完了すれば、後は配線を済ませて、X-Planeを起動するだけです(セスナ172SPを使用していますが、どの機体でも同じです)。
X-Planeが起動し、間違いなく設定できていたら、ボリュームを回すと、下の画面のレバーが移動して実際にスロットルをコントロールします。

X-Plane 10.31r3-3

ThrottleServo.ino

#include <Servo.h>

Servo motor;                      // an RC Servo motor
FlightSimFloat throttle;          // access to X-Plane's throttle
const int motorPin = 2;
const int potentiometerPin = A0;  // Analog 0: Teensy = 23, T++ = 38
int previousAnalog = -100;

// setup runs once, when Teensy boots.
//
void setup() {
  motor.attach(motorPin);
  throttle = XPlaneRef("sim/flightmodel/engine/ENGN_thro[0]");
  throttle.onChange(viewThrottle);
  Serial.begin(9600);
  Serial.println("Throttle Demo");
}

// loop runs repetitively, as long as Teensy is powered up
//
void loop() {
  // normally the first step in loop() should update from X-Plane
  FlightSim.update();

  // when human motion chances the port, change throttle
  int analog = analogRead(potentiometerPin);
  
  // "more than 6" allows for some noise
  if (analog < previousAnalog - 6 || analog > previousAnalog + 6) {
    throttle = analog / 1023.0;
    previousAnalog = analog;
    int angle = throttle * 70.0 + 30.0;
    motor.write(angle);
    Serial.print("(Analog)  Throttle = ");
    Serial.println(throttle);
  }
}

// When X-Plane changes the throttle....
//
void viewThrottle(float val)
{
  int angle = val * 70.0 + 30.0;
  motor.write(angle);
  Serial.print("(X-Plane) Throttle = ");
  Serial.println(throttle);
}
comments powered by Disqus
Contents