Arduinoでモーターの制御がしたく、Mini L298NというDCモータードライバーを使ってみました。
トランジスタやら使う方法もあるようなのですが、パーツを組み合わせるだけで使えることと、何より速度制御が行えるということでMiniL298Nを使ってみました。
用意するもの
ものはすべてAliexpressで揃えました。
到着が遅かったりしますが、めちゃくちゃ安いです。
Aliexpressの商品は品質トラブルが多いのですが、電子部品はあまり問題ないようです。
買う人が厳しくチェックするので、すぐ淘汰されるんでしょうね。
スターターキット
私は初めから目的が決まっていたので部品をバラで買いましたが、これからArduino始める人はAmazonあたりでスターターキットを買うのがいいと思います。
「Arduino スターターキット」で検索すればいくつか出てきます。
その中でモーターが含まれているやつを買えばいいはずです。
スターターキットもAliexpressのほうが安いのですが、届くの長いとやる気が失せてしまいますから。
Arduino Uno
Arduinoにもいろいろ種類があるようなのですが、一番標準的なのがこのUnoです。
スターターキットとかについてくるのもこれですね。
Unoを買っておけば間違いないと思います。
Windowsで互換品のArduinoを認識できないときは
Aliexpressで買うと安いのですが、私が買ったやつは互換品だったせいか、Windowsで使うにはUSBドライバをインストールする必要がありました。
もしWindowsでArduinoが動かなくて、デバイスマネージャーでUSB2.0のエラーがあったら、下記サイトよりUSBドライバーをダウンロードしてインストールしてください。
一応VirusTotalで調べてみましたが、何年も前からあるドライバーで問題もなさそうでした。
バージョンはCH341serというので大丈夫でした。
ほかのバージョンでも大丈夫かもしれません。
Mini L298N
https://s.click.aliexpress.com/e/_9ASWzMs.click.aliexpress.com
DCモータードライバー(DCモーターコントローラー)です。
モーターをコントロールしてくれるやつです。
これ1つで2つのモーターを別々に制御できます。
回転方向と速度の調整が可能です。
2相4線のステッピングモーター1つの制御もできると書かれています。
L298N(こちらでも可能)
L298NというMiniがついていないドライバーです。
Mini L298Nはこの製品の低価格版という位置づけのようです。
許容できる電圧や電流が大きく、なによりはんだ付けが不要です。
ICチップに放熱板がついていて、見た目にも高そうです。
つなぎ方が少し違うのですが、L298Nの記事はたくさんあるのでそちらを参照してください。
↓例えばこちら
DCモータコントローラを使って複数のモータを制御する | 物を作る者
MB102 または電池
https://s.click.aliexpress.com/e/_AWXTtCs.click.aliexpress.com
ブレッドボード用電源モジュール(MB102)も用意します。
ArduinoのI/O pinの出力は5V 20mAなのでモーターの電力をI/O pinから取ると過電流でArduinoが壊れてしまいます。
そこで電源モジュールから電力を取ります。
電池数本でも代替可能です。
この電源モジュールは700mAの出力を持つので、モーターも動かせます。
といっても無理は禁物で、私はこれで一度にたくさんモーターを動かそうとして壊してしまいました。
煙を吐いてお亡くなりに… 燃えなくてよかった。
正しいかわかりませんがモーターが5Vの電圧に対応していたので、そのあと電源は5V 2.4AのUSB電源アダプターから直接取ってしまいました。
モーター
電源モジュールを使うなら、3Vか5Vに対応するDCモーターならなんでもいいです。
適当な何かで。
Aliexpressでも探せますし、ミニ四駆のモーターは3Vなのでそれでもいけます。
ケーブルとブレッドボード
https://s.click.aliexpress.com/e/_AWibf8s.click.aliexpress.com
パーツをつなぐのに必要です。
ブレッドボード図
下図のような感じで接続していきます。
Mini L298Nをブレッドボードに乗せるには、ピンをはんだ付けする必要があります。
モーターの適正電圧に合わせて、電源モジュールの3Vと5Vのジャンパーピンを差し換えてください。
私は電源モジュール壊したり、Mini L298Nを直接ケーブルとはんだ付けしたりしたのでブレッドボード使っていません。
下のモーター2個のが電池式なのは、電源モジュールだと壊れるかもしれないからです。
プログラム
クラスとかも普通に使えるみたいです。
最大出力で使う
単にモーターをON/OFFできればよいのであればdigitalWrite()
を使います。
回転、停止、逆回転、停止を1秒ずつ行い繰り返すサンプルです。
const int out1 = 11; // 11番のI/O pin const int out2 = 10; // 10番のI/O pin void setup() { pinMode(out1, OUTPUT); pinMode(out2, OUTPUT); } void loop() { // モーターを回転させます digitalWrite(out1, HIGH); delay(1000); // 1秒そのまま // モーターを停止させます digitalWrite(out1, LOW); delay(1000); // モーターを先ほどとは逆方向に回転させます digitalWrite(out2, HIGH); delay(1000); // モーターを停止させます digitalWrite(out2, LOW); delay(1000); }
速度調整して使う
速度を調整したいのであればanalogWrite()
を使います。
出力電圧を256段階で調整できます。
例えばUnoなら0~5Vを0~255の範囲で調整できます。
モーターの電源の電圧が違えば、その範囲での調整となります。
(例えば9Vの電池を使うなら0~9Vの範囲で調整されます)
アナログ出力(PWM)に対応したPIN(3,5,6,9,10,11番)を使う必要があります。
analogWrite()
の解説ページには「PIN5,6はちょっと電圧高く出るかもよ」みたいなことが書かれています。
出力半分、最大、停止を1秒ずつ行い繰り返すサンプルです。
const int out1 = 11; // 11番のI/O pin const int out2 = 10; // 10番のI/O pin void setup() { pinMode(out1, OUTPUT); pinMode(out2, OUTPUT); } void loop() { // モーターを半分で回転させます analogWrite(out1, 127); delay(1000); // 1秒そのまま // モーターを最大で回転させます analogWrite(out1, 255); delay(1000); // モーターを停止させます analogWrite(out1, 0); delay(1000); }
2個同時に使う
モーター2個をバラバラに制御できます。
const int out1 = 11; // 11番のI/O pin。モーターA const int out2 = 10; // 10番のI/O pin。モーターA const int out3 = 9; // 9番のI/O pin。モーターB const int out4 = 8; // 8番のI/O pin。モーターB void setup() { pinMode(out1, OUTPUT); pinMode(out2, OUTPUT); pinMode(out3, OUTPUT); pinMode(out4, OUTPUT); } void loop() { // モーターAとモーターBをどちらもフル回転させます。 digitalWrite(out1, HIGH); digitalWrite(out2, LOW); digitalWrite(out3, HIGH); digitalWrite(out4, LOW); delay(1000); // モーターBはそのままで、モーターAのみ逆回転させます。 digitalWrite(out1, LOW); digitalWrite(out2, HIGH); delay(1000); // モーターAの出力を約3分の2にします。モーターBは約3分の1にします。 analogWrite(out2, 170); analogWrite(out3, 85); delay(1000); }
終わりに
電子工作はさっぱりなのですが、なんとかできてしまいました。
Arduinoすごい
Mini L298Nの使い方を書いた記事が検索してもなかったので書きましたが、知識が浅いので間違っている箇所があるかもしれません。
その場合はご指摘いただけると幸いです。