入門者向け

Arduino(アルディーノ)電子工作の基本⑤ モータを動かし自動制御する

第1回:電子部品を動かそう!
第2回: Arduinoの準備
第3回:デジタル出力でLEDを点灯制御しよう
第4回:LEDの明るさを調節する

 

※この記事は2019年9月10日に公開した記事を再編集し、2022年3月25日に再度公開しました。

デバプラでは、Arduinoのさまざまな応用作品例をご紹介していますが、どんなものをつくるにも大事なのは基礎知識!
ということで、今回あらためてお届けするのは、Arduino(アルディーノ)電子工作の基本の「キ」。教えてくれるのは、『これ1冊でできる!Arduinoではじめる電子工作 超入門』などの入門編の書籍でも有名な、福田和宏さんです。

さて、前回はLEDの明るさを制御できるようにしてみましたが、今回は大きな電流が流れるモータの制御方法について説明していきたいと思います。

ドローンや車などといった機器には、モータを利用して動かしています。モータは電源に接続すると回転運動を作り出せる電子部品です。モータにタイヤやプロペラを取り付けることで、回転させて移動や上昇などといった動作ができるようになります。

Arduinoでは、モータを制御することも可能です。前回説明したLED同様に、モータに供給する電源をオン、オフすることで、モータを回転させたり、停止させるといった制御ができます。他のセンサーなどと組み合わせれば、障害物が近づいたときにモータを停止するといった自動制御もできるようになります。

01

モータは接続する電源の向きを逆にすると回転が逆方向になります。さらに、流す電流の量を調節することで回転の速度を変化させることも可能です。これにより、移動時は高速に回転させて動かしたり、停止時は徐々に回転をゆっくりにして目的の位置にぴたりと停止する、障害物にぶつかったら逆回転でバックし、他の方向に移動するといった複雑な動作も可能となります。そこで今回は、Arduinoでモータを制御する方法について説明します。

 

目次

  1. モータの動作にはドライバが必要
  2. モータをArduinoに接続する
  3. プログラムでモータを制御する
  4. モータの回転速度を変化させる

 

モータの動作にはドライバが必要

Arduinoのデジタル出力では、High、Lowを切り替えることができLEDなどの点灯制御に利用しました。この機能を利用すればモータへの電気の供給にも利用できるはずです。しかし、実際にはモータを直接Arduinoに接続しても動作させることはできません。

モータを動かすには大きな電流が必要となります。例えば、今回利用するモータの「RE-280RA」の場合、1A以上の電流を流すこともあります。しかし、Arduinoのデジタル出力端子は20mAまでしか流せません。これ以上の電流を流してしまうとArduino自体が壊れてしまう恐れがあります。このため、モータをArduinoの出力端子に接続して制御をしてはいけません。

11

そこで利用するのが「モータドライバ」です。モータドライバは、モータを制御するために利用する電子部品です。モータ動作用の電源にモータを接続した回路を用意し、その中にモータドライバを入れ込みます。モータドライバは外部からの信号によってモータ動作用の回路を接続したり切ったりすることができ、モータの回転、停止の制御ができます。制御用の信号はほとんど電流が流れないため、Arduinoを接続しても問題なく制御できるようになります。

12

また、モータドライバによっては制御信号で回転する方向を切り替えることができます。2つの制御端子を搭載しており、一方をHighにすると正転、もう一方をHighにすると反転するようになっています。これにより、正転、反転、停止の制御が可能となります。

 

モータをArduinoに接続する

では、実際にArduinoからモータを制御してみましょう。以下のような電子部品を利用するので用意しておきます。

DCモータ

モータ本体です。このうち乾電池といった直流で制御できるモータを「DCモータ」といいます。今回は「RE-280RA」を利用します。RE-280RAは4.5Vまでの電圧をかけることができます。

21

モータドライバ

モータを制御するために利用します。Arduinoからの信号に従ってモータに電源を供給したり、回転方向を切り替えるなどの機能を備えています。
今回は以下のスペックのものを使用しています。

【絶対最大定格(Ta=25℃)】
電源電圧(VCC):18V
電源電圧(VM):18V
出力電流(lomax):1A
動作温度範囲:-20〜75℃
保存温度範囲:-55〜150℃

【推奨動作範囲】
電源電圧(VCC):6.5〜15V
電源電圧(VM):6.5〜15V
出力H電圧設定:<VCC,VM

番号 端子名 機能
1 VREF 出力H電圧設定端子
2 OUT2 出力端子
3 RNF 出力部GND
4 OUT1 出力端子
5 VM 電源(モータ出力部)
6 VCC 電源(小信号部)
7 FIN 制御入力(正)
8 GND GND
9 RIN 制御入力(逆)

コンデンサ0.1μF

コンデンサは少量の電気をためることのできる電子部品です。モータでは動作時に雑音を発生します。雑音は他の電子部品の動作に悪影響を与える恐れがあります。そこで、コンデンサをモータの両端子に接続しておくと、雑音を軽減することができます。

23

抵抗10kΩ(1/4W)

突然電流が多く流れて電子部品が壊れないようにするため、抵抗をつかって電流を抑制できます。今回はモータに供給する電圧の指定するため、Arduinoの3.3V端子からモータドライバに接続しています。通常、電流はほとんど流れませんが、場合によって大きな電流が流れてしまう恐れがあるため、10kΩの抵抗を接続して大きな電流が流れないようにします。10kΩの抵抗には、「茶黒橙金」とカラーコードが印刷されています。

24

電池

電池スナップ

モータを回転させるための電源には乾電池を利用します。ここでは9Vの電圧を供給できる006Pを利用します。また、電池をブレッドボードに接続するために電池スナップを利用します。

25

26

みの虫クリップジャンパー線

モータには端子が付いておりブレッドボードまで配線する必要があります。通常は導線を端子にはんだ付けします。しかし、みの虫クリップジャンパー線を使うと、クリップをモータの端子に挟み込むだけで配線でき、はんだ付けの手間がなくなります。

27

各部品が準備できたら、次のように接続します。

28

モータは、みの虫クリップで端子を挟んでモータドライバの2、4番端子に接続します。なお、モータ動作時に雑音を発生し、他の機器に影響を及ぼすことがあります。そこで、モータの両端子にコンデンサを接続することで、雑音を軽減させています。

モータは別途用意した電池から電源を供給できるようにします。そこで、モータドライバの5番端子と3番端子に電池を接続することで電池から電源が供給できるようになります。

また、今回利用するモータは、最大4.5Vまでと加える電源の範囲が決まっています。このため、9Vの電池で電圧が大きすぎるためモータが壊れてしまう恐れがあります。そこで、モータドライバの1番端子にモータに出力する最大の電圧を指定しておきます。今回は、3.3Vまでモータに電圧を供給できるようにします。Arduinoの3.3V電源を1番端子に接続して電圧の最大値を指定します。モータドライバの7番、9番端子でモータの回転制御ができます。そこで、Arduinoの5番、6番端子にそれぞれ接続し、Arduinoの出力で制御できるようにしておきます。

 

プログラムでモータを制御する

接続ができたら実際にプログラムでモータを制御してみましょう。モータの回転は、Arduinoの5番、6番端子の出力で制御できます。この2つの端子にHighまたはLowを欠けることで、回転や停止、回転方向を制御できるようになっています。BA6956ANの場合は、以下のように制御することができます。

BA6956ANの端子 7番端子 9番端子
Arduinoに接続した端子 5番端子 6番端子
停止 Low Low
正転 High Low
反転 Low High
ブレーキ High High

正転する場合は、5番端子をHigh、6番端子をLowを出力するようにします。以下のプログラムをArduinoに書き込むとモータが正転を開始します。

10行目で5番端子をHighを出力するようにし、11行目で6番端子をLowを出力するようにしています。
逆方向に回転させたい場合は、5番端子をLow、6番端子をHighを出力するようにします。プログラムは次のようにします。

10行目で5番端子をLowを出力するようにし、11行目で6番端子をHighを出力するようにしています。モータを停止させたい場合は、5番、6番端子の両方をLowを出力するようにします。プログラムは次のようにします。

なお、どちらもHighを出力するとブレーキがかかり、どちらもLowにするよりも短い時間で停止できます。

 

モータの回転速度を変化させる

前回は、LEDをPWMという出力方法を使うことで明るさを変化させることができました。モータについてもPWMで制御することで、回転速度を変化させることができます。短い時間でHighとLowを切り替えることで、モータが回転、停止を交互に切り替わり、実際は通常よりも回転速度が遅くなります。Highの時間が長ければ、回転速度が速くなり、逆に短くなると遅くなります。

モータの場合は、回転したい方向の制御端子をPWMで出力し、もう一方の端子は常にLowの状態にしておきます。正転の場合は、5番端子をPWMで出力し、6番端子はLowに保ちます。反転の場合は、逆に6番端子をPWMで出力し、5番端子をLowに保つことで実現できます。正転で速度を制御するプログラムは次のようにします。

プログラムは、10行目で5番端子にPWMの割合を半分(最大が255)で出力し、11行目で6番端子をLowの状態に保っています。10行目の数を変化させれば、速度が変化します。ただし、モータはHighが特定の割合よりも小さい場合は回転しません。値を小さくしてモータが回転しない場合は、それ以上の値を指定するようにしましょう。5番端子の出力する値を徐々に増やしたり、減らすことで、徐々に速度を変化できます。次のプログラムでは、停止状態から徐々に回転速度が速くなり、最大まで達したら逆に徐々に速度が遅くなり、停止します。

今回は、LEDやモータといったArduinoから電子部品を制御する方法について説明しました。次回は、スイッチの状態をArduinoで調べる方法について説明していきたいと思います。

——————————————————————————————————————–

※モータドライバに関する基礎知識をもっと知りたい方はローム「Techweb」をチェック!

 

 

今回の連載の流れ

第1回:電子部品を動かそう!
第2回: Arduinoの準備
第3回:デジタル出力でLEDを点灯制御しよう
第4回:LEDの明るさを調節する
第5回:モータを動かし自動制御する(今回)
第6回:スイッチの状態を読み取る
第7回:アナログ入力で電圧を読み取る
まとめ:Arduino電子工作のまとめ! マイコンを使った電子工作基礎の基礎編

smartwatch_ebook_banner_580-230
アバター画像

札幌在住のライター。電子工作やパソコン、Linux、スマートフォンなどの記事を執筆。「ラズパイマガジン」や「日経Linux」へ記事の執筆。著書として「これ1冊でできる!ラズベリー・パイ 超入門 」(ソーテック社)、「電子部品ごとの制御を学べる!Arduino 電子工作 実践講座」(ソーテック社)、「Arduino[実用]入門」(技術評論社)など。 現在、ものづくりをしたいメンバーを集めて電子工作を利用した作品などを制作する「サッポロ電子クラフト部」を主催(https://sapporo-elec.com/)。誰でも参加可能ですので、ご参加をお待ちしています。

高専ロボコン2017解剖計画