プラレールにArduinoをつなげてDCモーターを制御する

eyecatch

プラレールのDCモーターにArduinoをつなげて制御してみました。具体的には、Arduinoとモータードライバ(TA7291P)をプラレールにつなげて制御します。

プラレールの回路は、電池とモーターとスイッチだけで構成されてるのでいじるのが楽で良いです。ちなみに、製造元は改造を推奨していないようなので、全く改造することなく制御するアプローチをとっています。

プラレールにArduinoを接続

今回使ったのは、「S-23 E257系あずさ」です。単二電池を使っており、また同じ単二電池を使っている他の車両より社内のスペースが広そうだったからです。

プラレール「あずさ」

この「あずさ」のガワを外していきます。ガワを外して電池を交換する仕様なので、製造元に怒られることはないでしょう(適当)。

あずさの中身

ガワを外したところです。電極がむき出しになっているので、ここにArduinoを接続していきます。車輪が回転しても良いように、ペットボトルのふたを使ってジャッキアップしておきます。

プラレール「あずさ」

電極にワニグチクリップを接続しました。プラス側の電極はつかみ所がなかったので、隙間からワニグチクリップを差し込んで内部の電極を直接はさんでいます。

Arduinoにスケッチをアップロード

これでプラレールにArduinoを接続する準備ができたので、プログラム(スケッチ)を書いていきます。また、モーターの制御にはモータードライバーTA7291Pを使います。

const int inputPin_1 = 9;
const int inputPin_2 = 10;
const int pwmPin = 11;
const int threshold_1 = 341; 
const int threshold_2 = 682; 

void motorBack(void){
    digitalWrite(inputPin_1,HIGH);
    digitalWrite(inputPin_2,LOW);
    analogWrite(pwmPin,255);
    delay(100);
}

void motorStop(void){
    digitalWrite(inputPin_1,LOW);
    digitalWrite(inputPin_2,LOW);
    analogWrite(pwmPin,0);
    delay(100);

}

void motorAhead(void){
    digitalWrite(inputPin_1,LOW);
    digitalWrite(inputPin_2,HIGH);
    analogWrite(pwmPin,255);
    delay(100);
}

void setup(){
  pinMode(inputPin_1,OUTPUT);
  pinMode(inputPin_2,OUTPUT);
  pinMode(pwmPin,OUTPUT);
}

void loop(){
  //可変抵抗からの入力値を取得(0-1023)
  int inputValue = analogRead(A0);  
  
  //可変抵抗からの入力値で回転を制御
  if (inputValue <= threshold_1) {
    motorBack();
  }
  else if (inputValue <= threshold_2){
    motorStop();
  }
  else{
    motorAhead();
  }
}

可変抵抗を使ってモーターの回転方向を変更できるようにしてみました(将来的にはPWMを使って回転数も制御したいので、可変抵抗を使っています)。

ブレッドボード図

回路図(ブレッドボード図)は以下のとおりです。

ブレッドボード図

注:Arduinoから直接電源をつなげると壊れるよ、とコメントをもらいました。

ブレッドボードの様子はこんな感じです。このくらいの制御であれば、そんなに複雑ではないですね。

Arduinoとブレッドボードをプラレールに接続

このままだと有線でまともに走れないので、無線化を進めて行こうと思います。

シェアしてもらえるとうれしいです。゚(´っωc`)゚。