前回、DCモーターのON/OFFをArduinoで制御してみました。今回はさらにモーターについて掘り下げてみたいと思います。
ラジコンを例にとってもON/OFFだけではなく、通常の回転、逆回転、ストップ、ブレーキなどのように様々な動作がモーターに必要になってきます。今回はモータードライバを利用してモーターを制御してみましょう。
今回の電子工作レシピ
完成までの時間目安:60分
必要なパーツ
- Arduino本体(Arduino Uno R3)http://www.switch-science.com/catalog/789/
- ブレッドボード http://www.switch-science.com/catalog/313/
- DCモーター(FA-130RA-227 http://akizukidenshi.com/catalog/g/gP-06437/)
- モータードライバ(BD6222HFP http://akizukidenshi.com/catalog/g/gI-08041/)
- SOP16ピンDIP変換基板(http://akizukidenshi.com/catalog/g/gP-06541/)
- ダイオード(1N4007 http://akizukidenshi.com/catalog/g/gI-00934/)×2
- 抵抗器 10KΩ×2 / 100KΩ×2
- 温度センサー(lM61CIZ http://akizukidenshi.com/catalog/g/gI-02726/)
- コンデンサ(100μF http://akizukidenshi.com/catalog/g/gP-02724/)
- 単3電池ボックス(4本直列用)
- 単3電池×4本
- トグルスイッチ(http://akizukidenshi.com/catalog/g/gP-03913/)
DCモータードライバって何?
モータードライバ BD6222HFP
何やら小さい部品が登場しました。これがモータードライバです。色々な形がありますが、今回はこのモータードライバを使ってみます。モータードライバとはその名の通り、モーターをドライブ(制御)するための回路が詰まった集積回路(IC)です。
さっそく習うよりも慣れろ、ということでモータードライバも実際の回路をもとに動かしながらその使い方を学んでいきたいと思います。
実際に部品を手にとって見ていただくとわかるのですがこれまで使っていた部品に比べ、サイズがかなり小さいです。ICから出ている端子も幅が短く、ブレッドボード上に接続することがこのままではできないように感じます。
そんな時にはブレッドボード上で変換できるように、変換基板を利用します。SOP16ピンDIP変換基板の上に、ICを載せてハンダ付けを行っていきます。
今回利用するBD6222HFPはICの片側だけに端子がありますので、変換基板も片側だけを利用します。
SOP16ピンDIP変換基板
さっそく変換基板上にICを載せてハンダ付けを行っていきます。端子間の幅が非常に狭いので、これまでのパーツをハンダ付けするのに比べてやや難易度が上がります。このようなICをハンダ付けする場合は、ハンダごてが触れてもずれないように変換基板とICをしっかり固定する必要があります。
今回はこて台についているクリップで基板とICを固定していますが、クリップ等がない場合、変換基板とICをテープでとめたりするのがよいと思います。ただし、テープでとめる場合等は、ハンダ付けの途中でICが熱を持ってその熱でテープが溶けてしまうこともあるため、気をつけてください。
また、ハンダの量ですが、通常の部品に使っている量の半分も満たないくらいの量で十分ですので、ハンダの量が多くて隣の端子とくっついてしまった場合(私も今回1回やってしまいました…)は、ハンダ吸い取り線やハンダ吸取器などを利用すると良いでしょう。
ハンダ付け完了!
モータードライバの使い方
ハンダ付けが完了したところで、次にモータードライバのそれぞれの端子の役割をデータシートで確認してみます。BD6222HFPはこの小さいサイズで電圧6~15v、電流2Aの出力をモーターに流すことができます。
- VREF – モーター用の電源コントロール(3 ~ 15v)
- OUT1 – モーターへの出力端子
- FIN – RINと組み合わせて回転、逆回転、ストップ、ブレーキなどの信号入力
- GND – グランド
- RIN – FINと組み合わせて回転、逆回転、ストップ、ブレーキなどの信号入力
- OUT2 – モーターへの出力端子
- VCC – モータードライバ用電源入力(6~15v)
前回でも学んだように、モーターはArduinoを電源として動かすにはちょっと足りないため、別途電池を用意しましたね。モータードライバでは、モーター用の電源とモータードライバのIC用にそれぞれ電源入力端子があります。
VREFはモーターに電源を供給する端子です。モーターの回転数などはここに入力する電圧で決まります。VCCはモータードライバの起動用の電源供給端子です。
OUT1およびOUT2は出力端子ですのでモーターに接続します。前回も記述したようにモーターはプラスマイナス向き関係なく接続が可能です。
FINおよびRINはモータードライバを操作するための入力端子です。ここに様々なパターンで電流を流すことでモーターを制御することができます。
モータードライバを使ってモーターを動かしてみる
それぞれの役割がわかったところで、実際に簡単な回路を組み立てながら使い方を学んでいきます。
下記の回路はモータードライバを使って回転・逆回転をテストする回路です。左右どちらかのスイッチを押すと、FINまたはRINからモータードライバへ信号(電流)が送られモーターへ電流が流れます。

抵抗は100KΩを利用しています
Arduinoでモータードライバをコントロール
では、次にスイッチ部分をArduinoに置き換えてみましょう。Arduinoに置き換えることで、一定時間でモーターの回転を止めたり、逆回転にしたりということがプログラム側から制御できるようになります。下記のプログラムは1秒ごとに回転→休止→逆回転→休止を繰り返すプログラムです。
int leftP = 9; int rightP = 10; void setup() { pinMode(leftP, OUTPUT); pinMode(rightP, OUTPUT); } void loop() { digitalWrite(rightP, LOW); digitalWrite(leftP, HIGH); delay(1000); digitalWrite(rightP, LOW); digitalWrite(leftP, LOW); delay(1000); digitalWrite(leftP, LOW); digitalWrite(rightP, HIGH); delay(1000); digitalWrite(rightP, LOW); digitalWrite(leftP, LOW); delay(1000); }
今回はdigitalWriteでモーターに出力を行っていますが、モータードライバのVREFは入力する電圧によって回転数が変わりますので、analogWrite関数に置き換えることで回転数を変更することも可能です。ただ、出力が3v以下の弱い場合(BD6222HFPだと3〜15vが仕様)はモーターがキューンと泣くだけで回転はしません。
温度センサー付きデスクトップ扇風機
アナログ入力ピンと組み合わせることで光センサーなどのセンサーを使ってある一定の値になったらモーターを動かすなんてこともArduinoを利用することで手軽にできるようになります。
簡単な例を出すとすれば、温度センサーと組み合わせることで、温度が一定以上になると自作扇風機が回るなんてデバイスを作ることができますね。今回は温度センサーにLM61CIZを利用してみます。LM61CIZはよく利用されている温度センサーで-30度から100度まで測ることができます。
int leftP = 9; int rightP = 10; void setup() { pinMode(leftP, OUTPUT); pinMode(rightP, OUTPUT); Serial.begin(9600); } void loop() { int ans = analogRead(0); int tv = map(ans,0,1023,0,5000); int temp = map(tv,300,1600,-30,100) //温度が25度以上になったら回転を始める if(temp > 25){ digitalWrite(rightP, LOW); digitalWrite(leftP, HIGH); delay(1000); digitalWrite(rightP, LOW); digitalWrite(leftP, LOW); delay(1000); digitalWrite(leftP, LOW); digitalWrite(rightP, HIGH); delay(1000); digitalWrite(rightP, LOW); digitalWrite(leftP, LOW); } Serial.println(temp); delay(1000); }
赤文字で記した部分が、LM61CIZをArduino上で利用する際の変換式になります。今回はシンプルに温度センサーの値が25度を超えている場合(青文字のif文)にモーター出力を行っています。25度を超えている限りは常にモーターが回り続けるようになっています。
まとめ
簡単なモータードライバの使い方について少しわかったでしょうか?次回からはモータードライバのストップ、ブレーキなどの使い方も取り入れて、Arduinoで簡単なラジコンカーを作ってみたいと思います。
ラジコンカーを作るとなると、モーターは1個でいいの?左右に曲がる為のステアリング制御でモーター2個が必要?回路が大きくなるとラジコンカー自体の大きさも大きくなってしまう?などなど、色々考える必要が出てきますので、次回は簡易百葉箱でも行ったようにラジコンカーの仕様を決めて学びながら制作に取りかかってみたいと思います。