レッドインベーダーの部屋

なんか色々なことをしています。

Arduino 可変抵抗によるモーター2つの制御

前回に続き可変抵抗でモーターの制御をします。

今回は2つです。

 前回は↓

mrinvader007.hatenablog.jp

参考にしたサイト↓

建築発明工作ゼミ2008: Arduino 小型DCモータ/TA7291P

このサイトの下のほうにあるコメント欄に外部電源を使用せず動作させた場合のもしもが書かれていました。

シャットダウンするか過電流により燃えるみたいです。

 ドライバの8番につないでいる線をArduinoの5V端子につなげればいちおう回ると思いますが、Arduinoに過電流が流れて、シャットダウンするか燃えてしまうかもしれません。なのでDCモーターを使うときは、できるだけ外部電源にしたほうがいいです。

 禁止事項↓

ideahack.me

皆さんは外部電源を使用しましょう。

思ったよりArduinoは高いのでそんなに多くは購入できませんのでね。

 

本題に入ります。

可変抵抗の値で制御する部分は前回と同じでモーターの数が2つに増えただけです。

配線図は参考にしたサイトを見てください。

  1:GNDArduinoGND端子)と共有
 2:モータの端子へ接続
 3:非接続
 4:PWM端子(Arduino/アナログ出力端子)へ接続
 5:信号用端子(Arduino/デジタル出力端子)へ接続
 6:信号用端子(Arduino/デジタル出力端子)へ接続
 7:5V電源(Arduino/5V端子)と共有
 8:外部電源のプラス端子へ接続(乾電池など)
 9:非接続
10:モータの端子へ接続

 8番の外部電源のプラスは7番の5V電源と共有しています。

(本来はしないほうがいい。)

 

スケッチ↓(青文字)

const int mot1 = 7;
const int mot2 = 8;
const int mot12_PWM = 9;
const int mot3 = 1;
const int mot4 = 2;
const int mot34_PWM = 3;

void setup() {
pinMode(mot1, OUTPUT); //信号用ピン
pinMode(mot2, OUTPUT); //信号用ピン
pinMode(mot3, OUTPUT); //信号用ピン
pinMode(mot4, OUTPUT); //信号用ピン
}

void loop() {
//アナログ入力:0番ピンの値を2で割る
int val1 = analogRead(0) / 2; //0~511の値にする
int val2 = analogRead(1) / 2;

//静止/正転/逆転の状態に分けてプログラムする
{ if (val1 >= 255 && val1 <= 256) { //静止:255~256
//LOW,LOWでデジタル出力
digitalWrite(mot1, LOW);
digitalWrite(mot2, LOW);
} else if (val1 > 256) { //正転:257~511
//HIGH,LOWでデジタル出力
digitalWrite(mot1, HIGH);
digitalWrite(mot2, LOW);
//val1が大きいほど出力値も大きくなる
analogWrite(mot12_PWM, val1 - 256); //出力値:1~255
} else { //逆転:0~254
//LOW,HIGHでデジタル出力
digitalWrite(mot1, LOW);
digitalWrite(mot2, HIGH);
//val1が小さいほど出力値は大きくなる
analogWrite(mot12_PWM, 255 - val1); //出力値:1~255
}
}
{ if (val2 >= 255 && val2 <= 256) { //静止:255~256
//LOW,LOWでデジタル出力
digitalWrite(mot3, LOW);
digitalWrite(mot4, LOW);
} else if (val2 > 256) { //正転:257~511
//HIGH,LOWでデジタル出力
digitalWrite(mot3, HIGH);
digitalWrite(mot4, LOW);
//val1が大きいほど出力値も大きくなる
analogWrite(mot34_PWM, val2 - 256); //出力値:1~255
} else { //逆転:0~254
//LOW,HIGHでデジタル出力
digitalWrite(mot3, LOW);
digitalWrite(mot4, HIGH);
//val1が小さいほど出力値は大きくなる
analogWrite(mot34_PWM, 255 - val2); //出力値:1~255
}
}
}

 

動作確認↓

www.youtube.com

こんな感じです。

うまく動作しました。