PR

Arduino学習⑲ Lesson21 DCモーター
Arduinoの勉強会。L293DモータードライバICを使ってDCモーターを動かしてみた。

Arduino学習

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 NamePin Function
1EN1/2ドライバーチャンネル1と2を有効にする。
21Aドライバー1入力
31Yドライバー1出力
4,5,12,13GNDGNDとヒートシンク ピン
62Yドライバー2出力
72Aドライバー2入力
8VCC2モータ用電源。入力電圧:4.5V ~ 36V
9EN3/4ドライバーチャンネル3と4を有効にする
103Aドライバー3入力
113Yドライバー3出力
144Yドライバー4出力
154Aドライバー4入力
16VCC1内部ロジック用の 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
ファンブレードと3-6V DCモーター

以下のスターターキットに使用部品はすべて同梱されています。

回路をつくってみる

チュートリアル付属の回路図
チュートリアル付属の配線図

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

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

電源供給モジュールArduino UNO R3L293DDCモータ
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モーターは動きませんでした。
リレーのスイッチオンは、聞こえるので電源の電圧もしくは電流の問題ではないかと思います。

以上

0

コメント

タイトルとURLをコピーしました