Arduinoとモータードライバ(L293D)でDCモーターを制御する
使ったもの
DCモーター
L293D (モータードライバ)
はじめに
DCモーター自体はただ単に電源を繋げば回転します。
ただarduinoのI/Oピンをそのまま使ってのモーターを動かすことはできません。
それはDCモーターを動かすには大きな電流が必要になるのですが、ArduinoのI/Oピンはだいたい20mA~40mAほどしか流せないからです。
そこでモータードライバを使用することによりモーターの回転、反転、停止、回転数制御などを簡単に行えるようになります。
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になるのでモーターは停止します。
こちらに上記と同じサンプルがあるので、こちらも参考にしていただければと思います。
参考資料
アルサーガパートナーズ株式会社のエンジニアによるテックブログです。11月14(木)20時〜 エンジニア向けセミナーを開催!詳細とご応募は👉️ arsaga.jp/news/pressrelease-cheer-up-project-november-20241114/
Discussion