DCモーターを使う[拡張その①]
前回の記事ではまずは回転させてみようということでしたが、今回はそれを拡張して、
- スイッチで回転方向(CW & CCW)を切り替える
- 回転速度をボリュームで調整する
という二つの機能追加をやってみます。
目 次
スイッチで回転方向を切り替える
タクトスイッチを2個使い、それぞれをCW(時計回り)、CCW(反時計回り)を選択用にする。
スイッチ端子をデジタルピンのD9とD8に接続して値を読み取るようにします、デジタピンはpinMode(9,INPUT_PULLUP)というようにプルアップ抵抗有りで宣言します。
Arduino接続回路
回路的には前回記事の回路にアドオンした物になります。
回路図は以下の様になります
スケッチ
[Sample-1] SketchName:”DCmotor_advance1″
#define IN1 12 //TA7291入力ピンIN1に接続するデジタルピン番号
#define IN2 11 //TA7291入力ピンIN2に接続するデジタルピン番号
#define IN3 9 //SW1に接続するデジタルピン番号
#define IN4 8 //SW2に接続するデジタルピン番号
#define VREF 10 //TA7291入力ピンVREFに接続するPWM出力ピン番号
void setup() {
pinMode(IN1, OUTPUT); //IN1(D12ピン)を出力モード指定
pinMode(IN2, OUTPUT); //IN2(D11ピン)を出力モード指定
pinMode(IN3, INPUT_PULLUP); //IN3(D9ピン)を入力モード&プルアップ抵抗有り指定
pinMode(IN4, INPUT_PULLUP); //IN4(D8ピン)を入力モード&プルアップ抵抗有り指定
digitalWrite(IN1, LOW); //IN1(デジタルピン12)をLOW
digitalWrite(IN2, LOW); //IN2(デジタルピン11)をLOW
//初期設定ではIN1(D12ピン),IN2(D11ピン)の双方をLOWレベルにする、モーターはストップ状態となる。
}
void loop() {
//IN3(D9ピン)がLOWレベル(00)か否かを判定
if (digitalRead(IN3) == 00) {
//判定結果が真(LOW)であれば以下の文、2行を実行
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}
//IN4(D8ピン)がLOWレベル(00)か否かを判定
if (digitalRead(IN4) == 00) {
//判定結果が真(LOW)であれば以下の文、2行を実行(上記if文とは回転方向が逆になっている)
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}
analogWrite(VREF, 255);//Vref端子にPWM値=255を加える(最大値)
delay(500);
}
ボリュームで回転速度調整
今までの回路に、更にボリュームを追加して回転速度調整機能を追加してみます。
ボリュームで+5Vを分圧してその値をanalogRead()関数で読み取り、数値換算後にanalogWrite()関数の値に反映させるという処理の流れになります。
Arduino接続回路
回路図は以下の様になります
ボリュームには端子が3ピンあります、そしてそれぞれを+5V、GND、A0ピンに接続します。
2個ほど上の配線図でのボリュームのイラスト図と現物とはサイズと形状が微妙に異なります、そのため判り易いように実物の画像を以下に載せます。
(画像の上をクリックで拡大画像が表示されます)
(画像の上をクリックで拡大画像が表示されます)
スケッチ
[Sample-2] SketchName:”DCmotor_advance2″
#define IN1 12 //TA7291入力ピンIN1に接続するデジタルピン番号
#define IN2 11 //TA7291入力ピンIN2に接続するデジタルピン番号
#define IN3 9 //SW1に接続するデジタルピン番号
#define IN4 8 //SW2に接続するデジタルピン番号
#define VREF 10 //TA7291入力ピンVREFに接続するPWM出力ピン番号
void setup() {
pinMode(IN1, OUTPUT); //IN1(D12ピン)を出力モード指定
pinMode(IN2, OUTPUT); //IN2(D11ピン)を出力モード指定
pinMode(IN3, INPUT_PULLUP); //IN3(D9ピン)を入力モード&プルアップ抵抗有り指定
pinMode(IN4, INPUT_PULLUP); //IN4(D8ピン)を入力モード&プルアップ抵抗有り指定
digitalWrite(IN1, LOW); //IN1(デジタルピン12)をLOW
digitalWrite(IN2, LOW); //IN2(デジタルピン11)をLOW
//初期設定ではIN1(D12ピン),IN2(D11ピン)の双方をLOWレベルにする、モーターはストップ状態となる。
}
void loop() {
uint16_t analogIn, vrefValue ;
//IN3(D9ピン)がLOWレベル(00)か否かを判定
if (digitalRead(IN3) == 00) {
//判定結果が真(LOW)であれば以下の文、2行を実行
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}
//IN4(D8ピン)がLOWレベル(00)か否かを判定
if (digitalRead(IN4) == 00) {
//判定結果が真(LOW)であれば以下の文、2行を実行(上記if文とは回転方向が逆になっている)
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}
analogIn = analogRead(0) ; // アナログ0番ピンからボリュームでの分圧電圧値を読む
vrefValue = map(analogIn, 0, 1023, 100, 255) ; // 分圧電圧値をPWM値にマッピングする
//A0入力値(0~1023の値を100~255に対応するようにマッピング
analogWrite(VREF, vrefValue);//Vref端子にPWM値=vrefValueを加える
delay(500);
}







![DCモーターを使う[基本を知る] DCモーターを使う[基本を知る]](https://umek.topaz.ne.jp/mameduino/wp-content/uploads/2018/07/DSCN2734_Re-150x150.jpg)