2007年06月11日
Arduino
Flashからモータを動かす
モータを基盤とは別の外部電源を使って、動かしてみる。
使う部品
モータドライバ TA7291P (カタログ)
マブチモータ FA-130RA

モータドライバは、外部電源を使えるだけでなく、
モータの回転方向と速度を調整してくれる。
ピンは、左から以下の機能がある。
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以上必要なので、乾電池で動かすときは、注意する必要がある。