どうも、なかしー(@nakac_work)です。
僕は自動車や家電製品のマイコンにプログラミングをする組み込みエンジニアとして働いています。
Arduinoを使ってモーターをPWM制御で回転させたいんだけど、どうすればいいの?
と悩んでいる方もいると思います。
そんな方のために、次の3つの内容をお伝えします。
- Arduinoでモーターを回転させる方法
- Arduinoでモーターの回転方向を切り替える方法
- ArduinoでモーターをPWM制御する方法
この記事を読みながら実践することで、Arduinoでモーターを自由に操作できるようになりましょう!
もしも、PWM制御がよく分からない方はさきにこちらの記事を読んでください!
>>マイコンのPWM制御とは【現役エンジニアが教える電子工作】
タップできるもくじ
Arduinoでモーターを回転させる方法
モーターに電流を流してあげれば、回転します。そして、回転数(回転する速度のこと)は電流値に比例します。
しかし、問題が1つだけあって「Arduinoから出力できる電流値は約20mA」しかありません。
モーターを回すには20mAは少なすぎます。
そこで必要なのがモータードライバー回路です。
モーターを回すための専用のICもありますが、今回はトランジスタを使って動かしたいと思います。
その回路がこちらです。
トランジスタは電流を増幅する役割です。
Arduinoの出力できる電流が約20mAだとしてもトランジスタを使えば1Aぐらい流すことができます。
モーターに並列に接続しているダイオードの必要性を知りたい方はこちらの記事を読んでください!
>>モーターにダイオードを並列に繋ぐ理由とは?【ブレッドボードで実験】
Arduinoでモーターの回転方向を切り替える方法
モーターの回転方向を変えたい場合はHブリッジ回路を使います。
モーターは「フレミングの左手の法則」を利用して回転しています。
- 中指・・・電流の流れる方向
- 人差し指・・・磁界の方向
- 親指・・・力の向き
力の向きを変えたいなら、「電流の流れる方向」もしくは「磁界の方向」を変えてあげればOKです。でも、モーターは「磁界の方向」が決まっているので「電流の流れる方向」を変えてあげましょう。
先ほどの回路上のトランジスタを対角線どうしでONして上げると電流が流れます。
このトランジスタを使ったHブリッジ回路を使うことでモーターの回転する方向を変えることが出来ます。
モーター用のICの中身もこのようになっています。
ArduinoでモーターをPWM制御する方法
今回は回転する向きを切り替えれる方でモーターの回転数を上げていくプログラムを組みます。
この回路の左側のトランジスタ2つを11ピンに、右側のトランジスタ2つを10ピンに接続しました。
モーターをPWM制御するフロー図は下のようになります。
フロー図に沿ってプログラミングをするとこのようになります。
unsigned char count = 0;
void setup() {
count = 30;
}
void loop() {
//どちらか一方を必ず0にする
analogWrite(11,0);
analogWrite(10,count);
delay(50);
count++;
if(count < 30) {
count = 30;
}
}
analogWrite(ピン番号,0~255)
今回のポイントはanalogWrite関数です。
単純にHIGHかLOWか出力するならdigitalWrite関数を使いますが、PWM制御を行う時は先頭の文字がdigitalからanalogに変わります。
PWM制御のデューティ比100%にするなら255を0%にするなら0を入力すればOKです。
もしも、反転させたい場合は10ピンのanalogWrite関数の値を0にして、代わりに11ピンに値を入力してあげればOKです。
このプログラムでは50msecごとに回転数が上がるようになっています。
そして、変数countがオーバーフロー(255を超えた)時に0だとモーターが回転しないので、if文でcountが30になるように制御しています。
ArduinoでモーターをPWM制御する方法|まとめ
この記事では「ArduinoでモーターをPWM制御する方法」を紹介しました。
ポイントは
- モーターを回転させるためにトランジスタを使う
- 回転方向を切り替えたいならHブリッジ回路を使う
- ArduinoでPWM制御をするならanalogWrite関数を使う
Arduino関連の人気記事
>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】
>>Arduinoでできることを紹介【逆にできないことは何?】
当ブログで人気のArduino入門キット