2007年06月11日

Arduino

Flashからモータを動かす

モータを基盤とは別の外部電源を使って、動かしてみる。
moter.jpg

ソースをダウンロード

使う部品
モータドライバ TA7291P (カタログ)
マブチモータ FA-130RA

moter_d.jpg
モータドライバは、外部電源を使えるだけでなく、
モータの回転方向と速度を調整してくれる。

ピンは、左から以下の機能がある。

1. GND
2. モーターに接続
3. 接続しない
4. 速度調整のためのPWM(今回は9に接続)
5. モータ回転方向,停止制御 (今回は5に接続)
6. モータ回転方向,停止制御(今回は6に接続)
7. 5V
8. モーター電源(今回は、ACアダプターの5Vに接続)
9. 接続しない
10. モーターに接続

arduinoのソースサーボを流用)

int motorPin1 = 5;            // モータ入力ピン
int motorPin2 = 6;            // モータ入力ピン
int speedPin = 9;             // 速度調整ピン

int keta, sum;                // データ受信用
int pulse = 0;               // PWMのHIGHの値
char cwFlg = 'c';             // モータ回転方向

const int KETAMAX = 4;        // 受信桁数
 
void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(speedPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if(Serial.available()>0){       // データが来た
    int val = Serial.read();
    if(val == 'c' || val == 'n'){ // データのはじめ
      cwFlg = val;                // 回転方向
      iniKeta();
    }else{                  // 数値データ
      val -= 48;            // アスキー→数値に変換
      for(int i=1; i < keta; i++){  // 桁数を計算
        val *= 10;
      }
      sum += val;
      keta --;
      if(keta == 0){        // すべてのデータ受信終了
        pulse = constrain(sum, 0, 10000);  // オーバーフローする値を切り捨て
      }
    }
  }
  
  if(pulse == 0){           // モーター停止
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
  }else if(cwFlg == 'c'){   // 時計回転
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
  }else{                    // 反時計回転
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
  }
  
  // PWMで出力調整
  digitalWrite(speedPin, HIGH);
  delayMicroseconds(pulse);
  digitalWrite(speedPin, LOW);
  delay(10);
}

// 最初の桁に戻る
void iniKeta(){
  keta = KETAMAX;
  sum = 0;
}
サーボと違うところは、データの最初で、モータの回転方向を決めている。
if(val == 'c' || val == 'n'){ // データのはじめ
  cwFlg = val;                // 回転方向

モータードライバーの8番ピンは、5V以上必要なので、乾電池で動かすときは、注意する必要がある。