LoginSignup
1
0

More than 1 year has passed since last update.

BVE 鉄道シミュレーターで自宅運転台を動かそう~3Dプリンタで自宅運転台を作ろう

Posted at

BVE 鉄道シミュレーターで自宅運転台を動かそう~自宅運転台を作ろうの続きです。
前回は板金で作った為、「自分には作れない」
という意見を頂いたので今回は、3Dプリンタで作ってみる事にします。

部品の用意

今回も、書泉や東急ハンズで売っていた、東京メトロの部品を使用しました。
速度計はATCメータではなく、SC-11という電流計や電圧計を使用し、それらしくしています。
(電流計のため値が10倍になっています。150Vまでの電圧計を使用することをお勧めします)
圧力計はブレーキ指令を使っています。
もちろん、速度計や、圧力計を用意できる場合は、そちらを使用することをおすすめします。

コントローラ基板

BVE 鉄道シミュレーターで自宅運転台を動かそう~Arduino Unoで動かす を基に製作します。
https://qiita.com/usashirou/items/4f5ad751152834698919
今回は ArduinoUno の代わりに ArduinoNano で動くメータ制御基板を製作しました。
ArduinoNano3,5,6,9,10,11 のピンで PWM が使用可能です。

注意:5・6番ピンはデューティー比の問題がある為使わない方が良いようです。
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2153

ATmega328P の仕様通り最大6個のPWMが使用可能です。
本基板では6個のうち2個が共用となり、アナログ、サーボで最大6個のメータを動かす事が出来る仕様としました。

プログラム

BVE 鉄道シミュレーターで自宅運転台を動かそう~Arduino Unoで動かす を基に、以下のようにしました。
今回は、速度、パイロットランプ、ブレーキ指令に対応させます。
基板につける可変抵抗もそれに合わせて2個のみとなります。
https://qiita.com/usashirou/items/4f5ad751152834698919

//https://qiita.com/Ninagawa_Izumi/items/6a18249a31a87dad84e2
char dai0;
char dai1;
char dai2;

#define elements 3 //カンマで区切るデータの最大項目数
String data_string; //シリアルで受け取る全文字列
char *p; //文字列をカンマで分割するstrtok処理で使うポインタ
String p_string; //上記ポインタで区切った文字列の仮格納用
String data_array[elements]; //カンマ分割されたstrデータを格納する

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);

  // digitalWrite(10, HIGH );

  Serial.begin(19200);
  Serial.setTimeout(10);        // タイムアウトの時間を100msに変更
}

void loop() {
  if (Serial.available() > 7 ) {
    data_string = Serial.readStringUntil(0x0a); //シリアルデータを改行記号が現れるまで読み込む
    data_string.trim(); //文字列を念のためトリミングする
    int data_len = data_string.length() + 1; //str→char変換用にデータの長さを調べる
    char data_char[data_len]; //str→char変換用のchar配列を準備
    data_string.toCharArray(data_char, data_len); //ようやくstr→charに変換
    p = strtok(data_char, ","); //カンマ分割の1要素目を行う
    p_string = p; //一旦strにいれる
    data_array[0] = p_string; //最終目的の配列に1要素目を格納

    for (int i = 1; i < elements; i++) { //2要素名以降について、要素数分だけデータ配列に格納
      p = strtok(NULL, ","); //カンマ分割の2要素目以降のstrtokはこの書式になる
      if (p != NULL) { //要素が空でない場合はその要素をデータ配列に格納
        p_string = p;
        data_array[i] = p_string;
      } else {
        data_array[i] = "0"; //要素が空の場合はデータ配列に0を格納
      }
    }
    //データを表示する
    for (int i = 0; i < elements ; i++) {
      dai0 = data_array[0].toInt();
      if (dai0 == 1) {
        digitalWrite(2, HIGH );
      }
      if (dai0 == 0) {
        digitalWrite(2, LOW );
      }

      dai1 = data_array[1].toInt();
      if (dai1 == 1) {
        analogWrite(11, 57);
      }
      else  if (dai1 == 2) {
        analogWrite(11, 80);
      }
      else  if (dai1 == 3) {
        analogWrite(11, 95);
      }
      else  if (dai1 == 4) {
        analogWrite(11, 118);
      }
      else  if (dai1 == 5) {
        analogWrite(11, 145);
      }
      else  if (dai1 == 6) {
        analogWrite(11, 162);
      }
      else  if (dai1 == 7) {
        analogWrite(11, 180);
      }
      else  if (dai1 >= 8) {
        analogWrite(11, 220);
      }
      else if (dai1 == 0) {
        analogWrite(11, 33);
      }
      dai2 = data_array[2].toInt();
      if (dai2 >= 0 && dai2 <= 125) {
        analogWrite(10, dai2 * 1.6);
        Serial.print("C");
        Serial.print(data_array[2]);
      }
    }
    Serial.println();
  }
}

モデリング

パイロットランプ、2メーターが入るように設計していきます。
Meter.jpg

3Dプリンタで出力

今回製作する自宅運転台は本体を左右で分割して出力しました。
簡単に作るという割に出力は意外と大変で片側40時間程度かかっています。
Base.jpg
パイロットランプのカバーが綺麗に成形出来ていないので、この後、削ってしまいました。
DSC_0850 (2).JPG

仮組

パイロットランプ5V で点灯するものを選びました。
これにより、他の電源や制御用ICが無くても使用可能です。
右手前には、電車でGoコントローラー の基板を付けられるようにしています。
DSC_0857 (2).JPG

組立

それでは組立て行きましょう。
DSC_0901 (2).JPG
DSC_0913 (2).JPG
メータ制御用基板と電車でGoコントローラー制御用基板を組付けます。
DSC_0916 (2).JPG

完成

DSC_0936 (2).JPG

動作の様子

最後に、電車でGoコントローラーを取り付けて動作させてみました。
制御基板はBVE 鉄道シミュレーターで自宅運転台を動かそう~電車でGoコントローラーを使う~2

DSC_0926 (2).JPG

動作映像

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0