Arduino でNゲージコントローラーを(A1-10)

カトーちゃんの曲線と、無改造のフレキシブルレールで動かそうと思ってましたが
さすがに、固定しないでフレキシブルレールを使うのは無謀のようで。。。(苦笑

イメージ 2
これを買っちゃいました(^^;
で、ユニトラック曲線線路だけで構成、っと。
テスト路線のチェックが終われば、カトちゃんのパワーパックで動かすときでも再利用しよう~!!!

というわけで、楕円形から ひょうたん型に変形!!!

イメージ 1
ちゃんと、動きました~!!!
仮のソフトウェアでの動作なので、可変抵抗で加速減速。ノッチ機能無し!
ただ、なぜか、正転・逆転で、スピード感が違う。。何故だろう??
おかげで、常点灯がちょっと暗めだなぁ・・・謎っ。。。
NゲージVVVF音なんかも再現できそうなので、それは、また今度。
PWM制御プログラム


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

int val0R = 0;           // 読み取った値を格納する変数
int val0D = 0;           // 読み取った値を格納する変数
int val1 = 1;           // 読み取った値を格納する変数
int val2 = 2;           // 読み取った値を格納する変数
int pwm10 = 0;
int vsw = 0;   // vol ON/OFF
int rsw = 0;   // reverse sw
int sw=0;

void setup()
{
  lcd.init();                      // initialize the lcd
  lcd.backlight();

  pinMode(4, INPUT_PULLUP);     // スイッチ用に入力に設定
  pinMode(6, INPUT_PULLUP);     // スイッチ用に入力に設定

  pinMode(9, OUTPUT);     // 出力に設定
  pinMode(10, OUTPUT);     // 出力に設定

}

void loop(){
  char buf[20];
 
  // Print a message to the LCD.

  val0R = 1023-analogRead(0)+42;    // アナログピンを読み取る
  val0D = int( (val0R)/85);

  val1 = analogRead(2);    // アナログピンを読み取る
  val2 = analogRead(3);    // アナログピンを読み取る
  vsw = digitalRead(4);  // 入力ピンを読む
  rsw = digitalRead(6);  // 入力ピンを読む

  sw = vsw + rsw*2;

  // 得た2つのアナログ値を1/8して、0-1023の値を0-255に変換
  pwm10 = val1/8 + val2/8;
  if(pwm10>127) pwm10++;     // 0-255の中で128を存在させない(笑

  if( rsw == 0 ){         
     digitalWrite(9, LOW);    // 正転
     analogWrite(10, pwm10 );
  }else{
     analogWrite(9, pwm10 );  // 逆転
     digitalWrite(10, LOW);
  }

  lcd.setCursor(0,0);
  sprintf(buf,"0=%4d:1=%3x:M=%d",val0R,val1,sw);
  lcd.print(buf);
  lcd.setCursor(0,1);
  sprintf(buf,"0=  %2d:2=%3x:%3d",val0D,val2,pwm10);
  lcd.print(buf);
  delay(100);
}