SSブログ

NゲージをAruduinoで制御 [その他]

PCを使ってAruduinoからNゲージを簡単に制御できるらしいということを知ってやってみた。
参考:http://www.geocities.jp/y_taka216/ramonino/home.html

家にある材料を使って、TA8429があったので、それで作ったのがこれ。
図面PWM.PNG

実際はブレッドボードを使って、こんな感じ。
DSCF3274.JPG

・DCモーター用ICのTA8429はIN1、IN2にPWMを入れるやり方と、STにPWMを入れるやり方があるようだが、今回は、AruduinoのPWM端子をケチりたい気分だったのと、ブレーキ機能がよくわからないので、STに入れることにした。
In1,In2をPWMにする 参考:http://www.maizuru-ct.ac.jp/control/machida/elec/motor/motorbody.htm
STをPWMにする 参考:http://hirose.sendai-nct.ac.jp/~ckuma/micom/3664/motor4.html
・なんとなく方向を確認したかったのでIn1,In2にLEDをつけて、どっち向きへの信号かをわかるようにした。
・12Vがショートしていろんなものが壊れるのはいやだったので、電源はパワーパックのものを流用した(安全装置ついているので)。でも、TA8429に-12Vとか入れたら何かが壊れるかも。

プログラムはこんな感じでAruduinoのCOM通信でスピード、方向を変更できるようにした。

------------------------------------------------------------------------
#define DIR1 12
#define DIR2 13
#define PWM_PORT 11
#define ADD 10

void setup() {
  // put your setup code here, to run once:
  pinMode(DIR1,OUTPUT);
  pinMode(DIR2,OUTPUT);
  Serial.begin(9600);
  Serial.print("Ready");
}

void loop() {
  // put your main code here, to run repeatedly:
  static int v = 0;
  if(Serial.available() > 0)
  {
    int ch = Serial.read();
    //Serial.write(ch);

    switch (char(ch))
    {
      case 'a':
        if(v < 250)
          v += ADD;
        break;
      case 'd':
        if (v > -250)
          v -= ADD;      
        break;
      case 's':
          v = 0;      
        break;
      default:
        break;
    }
    Serial.println(v);
  }
  //blink
  analogWrite(PWM_PORT,abs(v));
  if (v > 0 )
  {
    digitalWrite(DIR1,HIGH);
    digitalWrite(DIR2,LOW);
  }
  else
  {
    digitalWrite(DIR1,LOW);
    digitalWrite(DIR2,HIGH);
  }
  delay(10);
}

------------------------------------------------------------------------

動かし方は、
a:左に加速する
s:ストップ
d:右に加速する
(AruduinoのシリアルモニタはEnterを押さないと送信されない)

そのときの動画がこれ。


ピーピーうるさいかも。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0