🐙

Arduinoとモータードライバ(L293D)でDCモーターを制御する

2023/08/29に公開

使ったもの

DCモーター
L293D (モータードライバ)
https://www.ti.com/product/ja-jp/L293D

はじめに

DCモーター自体はただ単に電源を繋げば回転します。
ただarduinoのI/Oピンをそのまま使ってのモーターを動かすことはできません。
それはDCモーターを動かすには大きな電流が必要になるのですが、ArduinoのI/Oピンはだいたい20mA~40mAほどしか流せないからです。

そこでモータードライバを使用することによりモーターの回転、反転、停止、回転数制御などを簡単に行えるようになります。

L293Dの仕様

データシート 
https://www.ti.com/jp/lit/gpn/l293d

L293Dのピン配置はこのようになっています。

1,2EN: ドライバチャンネル1および2を有効にします(アクティブハイ入力)
<1:4>A: ドライバ入力、非反転
<1:4>Y: ドライバ出力
3,4EN: ドライバチャンネル3および4を有効にします(アクティブハイ入力)
VCC1: 内部ロジック変換用の5V電源
VCC2: 4.5 V~36Vのドライバ用の電源VCC

このL293Dは1,2CHと3,4CHで2つのモーターを制御することができます。

簡易的な説明をすると
1,2ENは1,2CHのドライバ制御を有効か無効にするかのピンです。入力することで有効になります。(3,4ENも同様)
また今回はやっていないですが、ENはPWMで制御電力を調整できます。

<1:4>Yはモーターの+ -に接続します。

そして<1:4>Aのピンに対しArduinoからHIGHかLOWを出力することで制御ができます。
例えば1Aと2Aを使用する場合下記のようになります。

それでは回路図を踏まえ説明していきたいと思います。

回路図

今回作成したサンプルはボタンを2つ用意し、押してれば回転(一方は反転)し押していなければモーターはストップする回路になります。
一応Arduinoも9V電池で動くようにしています。Arduinoを電池駆動する場合はVinに接続すればOKです。(対応電圧7-12V)

上記にあるL293Dの仕様と照らし合わせて解説していくと下記のようになります。
4.5: GND
8: ドライバ用の電源。9V電池と接続
16: ICの電源。Arduino側の5V出力と接続
1: 1,2CHを使用するので1,2ENに対しArduino側の5V出力ピンと接続
3,6: モーターに接続
2.7: Arduino側7,8ピンと接続

後はボタンをArduino側12,13ピンに接続しています。

コード

void setup()
{
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  
  pinMode(12, INPUT_PULLUP);
  pinMode(13, INPUT_PULLUP);
}

void loop()
{
  
  if (digitalRead(12) == LOW) {
      digitalWrite(7, HIGH);
      digitalWrite(8, LOW);
  }
  
   if (digitalRead(13) == LOW) {
      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
  }
  
    if (digitalRead(12) == HIGH && digitalRead(13) == HIGH) {
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
  }
}

全体のコードは上記のようになっていて、12か13のボタンが押されている間、7,8からLOWかHIGHが出力され回転します。
そして12,13どちらのボタンも押されていなければ、7,8はLOWになるのでモーターは停止します。

こちらに上記と同じサンプルがあるので、こちらも参考にしていただければと思います。
https://www.tinkercad.com/things/36UYmX30Yp7-l293d-dcmotor-sample

参考資料

https://deviceplus.jp/arduino/arduino_f05/
https://cediablog.com/arduinolesson15/
https://iot.keicode.com/arduino/arduino-l293d-dc-motor.php
https://stemship.com/arduino-beginner-dcmotor/

Arsaga Developers Blog

Discussion