L293D モータードライバを使ってDCモータを制御してみます。
電源供給モジュール
小型の DC モーターは、UNO R3 ボードのデジタル出力よりも多くの電力を必要とします。モーター電源を UNO R3 ボードから直接供給しようとすると、UNO R3 ボードに損傷を与える可能性があります。 そのため、電源モジュールを使用して外部電源を供給します。

- オン/オフ スイッチ
- 電源表示LED
- 入力電圧: 6.5-9v (DC) 5.5mm x 2.1mm 電源プラグ
- 出力電圧: 3.3V/5V
- 最大出力電流: 700mA
- ブレッドボードへの独立した制御レール出力 0v, 3.3v, 5v
- その他、外部使用に便利な出力
- Size: 2.1 in x 1.4 in
- 外部デバイスに電源を供給するためのオンボード USB デバイスコネクタ
今回は、9Vの角形電池を接続してDCモータへ外部電源を供給します。
L293D モータドライバIC


Pin No. | Pin Name | Pin Function |
---|---|---|
1 | EN1/2 | ドライバーチャンネル1と2を有効にする。 |
2 | 1A | ドライバー1入力 |
3 | 1Y | ドライバー1出力 |
4,5,12,13 | GND | GNDとヒートシンク ピン |
6 | 2Y | ドライバー2出力 |
7 | 2A | ドライバー2入力 |
8 | VCC2 | モータ用電源。入力電圧:4.5V ~ 36V |
9 | EN3/4 | ドライバーチャンネル3と4を有効にする |
10 | 3A | ドライバー3入力 |
11 | 3Y | ドライバー3出力 |
14 | 4Y | ドライバー4出力 |
15 | 4A | ドライバー4入力 |
16 | VCC1 | 内部ロジック用の 5V 電源 |
L293D は、2台のDCモーターを制御することが出来ますが、今回は1台のみ動かします。
使い方は、GND、VCC2に外部電源を繋ぎ、EN1/2、1A、2AにArduino UNO R3を繋ぎます。モーターは、1Yと2Yを繋ぎます。
EN1/2ピンをHIGHにして、1AをHIGH、2AをLOWにすると正回転、1AをLOW、2AをHIGHにすると逆回転を行います。EN1/2ピンにアナログ出力で電圧を調整すると回転速度を調整することができます。
データシートの一部を載せておきます。


使用部品
必要な部品は以下になります。
- Elegoo UNO R3 x 1
- 830 tie-points Breadboard x 1
- 電源供給モジュール
- 9V1Aアダプター & 9V角形電池
- L293D IC
- ファンブレード & 3-6V DCモーター
- M-M Jumper wires x 5

以下のスターターキットに使用部品はすべて同梱されています。
回路をつくってみる


以下は、実際の配線写真です。


このままだとファンブレードの回転に支障があるので、台を3Dプリンタで作成してDCモーターを乗っけました。


電源供給モジュール | Arduino UNO R3 | L293D | DCモータ |
---|---|---|---|
D5 | ① EN1/2 | ||
D4 | ② 1A | ||
③ 1Y | 赤ケーブル | ||
– | GND | ④ GND | |
⑤ GND | |||
⑥ 2Y | 黒ケーブル | ||
D3 | ⑦ 2A | ||
5V+ | ⑧ VCC2 |
プログラムを動かしてみる
チュートリアル付属のコードを動かしてみます。
//www.elegoo.com
//2016.12.12
/************************
Exercise the motor using
the L293D chip
************************/
#define ENABLE 5
#define DIRA 3
#define DIRB 4
int i;
void setup() {
//---set pin direction
pinMode(ENABLE,OUTPUT);
pinMode(DIRA,OUTPUT);
pinMode(DIRB,OUTPUT);
Serial.begin(9600);
}
void loop() {
//---back and forth example
Serial.println("One way, then reverse");
digitalWrite(ENABLE,HIGH); // enable on
for (i=0;i<5;i++) {
digitalWrite(DIRA,HIGH); //one way
digitalWrite(DIRB,LOW);
delay(500);
digitalWrite(DIRA,LOW); //reverse
digitalWrite(DIRB,HIGH);
delay(500);
}
digitalWrite(ENABLE,LOW); // disable
delay(2000);
Serial.println("fast Slow example");
//---fast/slow stop example
digitalWrite(ENABLE,HIGH); //enable on
digitalWrite(DIRA,HIGH); //one way
digitalWrite(DIRB,LOW);
delay(3000);
digitalWrite(ENABLE,LOW); //slow stop
delay(1000);
digitalWrite(ENABLE,HIGH); //enable on
digitalWrite(DIRA,LOW); //one way
digitalWrite(DIRB,HIGH);
delay(3000);
digitalWrite(DIRA,LOW); //fast stop
delay(2000);
Serial.println("PWM full then slow");
//---PWM example, full speed then slow
analogWrite(ENABLE,255); //enable on
digitalWrite(DIRA,HIGH); //one way
digitalWrite(DIRB,LOW);
delay(2000);
analogWrite(ENABLE,180); //half speed
delay(2000);
analogWrite(ENABLE,128); //half speed
delay(2000);
analogWrite(ENABLE,50); //half speed
delay(2000);
analogWrite(ENABLE,128); //half speed
delay(2000);
analogWrite(ENABLE,180); //half speed
delay(2000);
analogWrite(ENABLE,255); //half speed
delay(2000);
digitalWrite(ENABLE,LOW); //all done
delay(10000);
}
C++最初は、0.5秒毎に5回ほど正回転、逆回転を行います。
次に3秒間正回転、1秒制御なし、3秒間逆回転を行います。
次は、徐々に回転を遅くた後で、回転を速くしています。
Lesson22 リレー
さらにリレーを追加して動かしてみたいと思います。
リレーとは、電気信号でスイッチをオン/オフするもので、磁石等を使用して接点を繋いだり、離したりすることでオン/オフを切り替えます。


なお、リレーの端子は短くブレッドボードのピンの位置と合っていないので、真ん中のピンは少し曲げて差し込んでいます。しっかりと回路を繋ぐにはソケットが必要かもしれません。
今のところ原因不明ですが、上の回路はDCモーターは動きませんでした。
リレーのスイッチオンは、聞こえるので電源の電圧もしくは電流の問題ではないかと思います。
以上
コメント