気の向くままに辿るIT/ICT
webzoit.netウェブサイトホームページ
IoT・電子工作

Arduinoでトランジスタ/リレー/モータドライバを使ってDCモータを動かす

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Arduinoって?

Arduinoでトランジスタ/リレー/モータドライバを使ってDCモータを動かす

Arduinoでトランジスタ/リレー/モータドライバを使ってDCモータを動かす

2017/09/10

乾電池だけでDCモータを回す例

乾電池でDCモータを駆動

 140型DCモータなど模型などでよく使われるモータは、1.5V〜3V(単1/単2/単3/単4などの乾電池1〜2本程度)でプラスとマイナスをつなげば、簡単に動かすことができ、極性を逆にすれば、回転も逆になり、電圧の高低で回転スピードが変化する。

 写真では、中心が黒く周囲が白く見えるが、実際には、モータシャフトに十字に黒いビニールテープを貼った白く円形の紙を挿して回している状態。

ArduinoでDCモータを駆動する例

 それほど簡単に動かすことができるDCモータも数百mA〜1A程度もの電流を要するため、1ポート最大40mA程度というArduinoの出力電流の仕様上、そのままでは無理があるが、トランジスタやリレーとモーター用の別電源を使うなど、ちょっと工夫すれば、ArduinoでもDCモータを動作させることができる。

 そんなの面倒だから、電池だけで動かせばいいじゃないかと一瞬思うかもしれないが、ArduinoでDCモータを動かせるということは、プログラム次第でDCモータをそこそこ操ることができるということで単に電池につなぐだけよりも利用の幅が広がり、きっと手間をかけるだけの価値は十分にあるだろう。

 それでも不足するような用途には、回転角を指定できるステップ(ステッピング)モータと、これが脱調するようなより高速な動作・制御が必要な用途には、サーボモータとモータドライバを使うとよいだろう。

Arduino+トランジスタでDCモータを回す例

トランジスタとダイオードを使いArduinoでDCモータを駆動

 FET、MOSFETなど含め、トランジスタなら、Arduinoからの僅かな電流をトランジスタのベースに、コレクタ(この場合、同程度の出力があるエミッタでも可)をDCモータの入力、エミッタ(コレクタ)をGNDに配線すれば、相応のトランジスタを用意することでDCモータを回せるほどの、より多くの電流が流れる。(MOSFETなら電流量を電圧で制御できる。)

 ただし、万一にもArduinoの許容を超えるほど電流が逆流するとArduinoが壊れる可能性が大なので逆流防止に(整流)ダイオードを併用するのが賢明。

 大は小を兼ねるらしいが、ダイオードの選定については、まだよくわかっていない自身は、とあるDIYキットで使われていたものの1つ1N4004を買って使ってみている。

 コレクタ負荷、エミッタ負荷について調べてみたら、ダイオード、正逆転Hブリッジ、ドライバICなど含め、モータのOn/Off制御法に簡潔明瞭な説明があった。

 この回路で使ったのは、Arduino Uno x1、USBケーブル x1、DCモーター x1、400穴ブレッドボード x1、単3乾電池x2本とこれ用の電池ボックス x1、トランジスタ(NPN S8050) x1、ダイオード(1N4004)、LED 5mm(緑) x1、抵抗(220Ω) x1、ジャンパワイヤ適量、両端ワニグチクリップケーブル適量で激安品を確保すれば、700〜1000円程度でいけるのではないだろうか。

 スケッチは、ArduinoのD11のHIGHとLOWを一定時間で切り替えるだけ、回路もLED用の抵抗を追加した以外は、Device Plusページの後段にあるものそのままで、電池ボックスのプラスからモータの一端とダイオードのカソード、ダイオードのアノードにトランジスタのコレクタとモータの他端、UnoのD11から抵抗〜LEDアノード、LEDカソードからトランジスタのベース、トランジスタのエミッタを電池ボックスのマイナスにつなぐ。

 自身はまだやってみたことがないが、トランジスタを4つ使って回路を組むと正転・逆転も(停止も?)できる模様も、こうした回路であるHブリッジ付きのモータドライバを使うと簡単に制御できる。

 1秒ごとに連動してLEDが点灯・消灯しつつ、DCモータが回転・停止するスケッチを実行してみた動画がこれ(が、1秒だと慣性もあって完全には停止しない内に次の回転が始まるが...)。

Arduino+リレーモジュールでDCモータを回す例

 これを踏まえ、1秒から3秒に変更したものの、それ以外は全く同じスケッチでトランジスタではなく、リレーモジュールを使ってDCモータを動作させてみた動画がこれ。(完全に停止したことは判別できる一方、やはり、DCモータに慣性があるのでOFFの際、リレーモジュール上のLEDやスイッチ切り替え音とは微妙に一致しない。)

 ここでは、直流電圧で別電源の直流電圧を制御しているが、リレーなら、Arduinoからの僅かな電圧・電流で大きな電圧・電流を制御でき、DC(直流)だけでなくAC(交流)電源に接続されたものも制御できるのでリレーの仕様にもよるが、入力DC5VでAC100Vの家電を制御することも可能となる。

 この回路で使ったのは、Arduino Uno x1、USBケーブル x1、DCモーター x1、単3乾電池x2本とこれ用の電池ボックス x1、リレーモジュール(入力DC5V) x1、ジャンパワイヤ適量、両端ワニグチクリップケーブル適量で激安品を確保すれば、こちらも700円〜1000円程度でいけるのではないかと。

リレーモジュールを使いArduinoでDCモータを駆動

 リレーの場合は、Arduinoとリレーモジュール間でリレー用の電圧(今回仕様のリレーは入力5V)、リレー用のGND、信号出力ポート(今回はD11)とリレーモジュールのSIG(signal)を接続、ネジ止め端子台となっているリレーモジュールの出力(NO/(COM)/NC)の内、NO/(COM)か、NC/(COM)を使い、(COM)を別途用意したDCモータ用電源(乾電池など)のマイナスに接続、NOかNCの何れかとDCモータ用電源のプラスをDCモータに接続すれば機能する。

 尚、NOはNormal(ly) Open(通常・何もしないとき、回路がOFF/開)、COMは、Common(共通(のGND))、NCは、Normal(ly) Close(通常・何もしないとき、回路がON/閉)。

 リレーでDCモータを扱う場合でも逆流の懸念はあり、リレーモジュールであれば、入力と出力間において内部で電気信号 => 光 => 電気信号と変換することで電気的に絶縁しながら信号を伝達する半導体素子オプトカプラ/フォトカプラによって実質逆流を防止し、回路を保護する回路が搭載されたものと、そうでないものがあるのでオプトカプラ付きを選ぶのが、単体のリレーからモジュールを自作するならオプトカプラを載せるのが賢明。

 近年、ここで使ったような比較的大きな箱型でカチカチ音のする物理的なスイッチを切り替える機械式リレーではなく、半導体による無接点の切り替えで長寿命、静音な小型化されたソリッドステートリレー(SSR)が主流となっているようである一方、SSRには、ソーラーパネルなどでも使われるような、ネジ留めのごっついタイプもある模様。

NEC 2705絶縁保護フォトカプラ付きSRD-05VDC-SL-C 1チャンネル リレーモジュール
[2017/09/24]

 先で使った37センサ・モジュールキットに入っていたリレーモジュールにはないが、本来は、このリレーモジュールのように光接点により、入出力が電気的に絶縁保護されたオプトカプラ(写真のフォトカプラはNEC 2705)付きのリレーモジュール(写真のリレーはSRD-05VDC-SL-C)を使うのが安全。(今日、届いたので掲載。)

 もう1つ届いた、ソリッドステートリレーOMRON G3MB-202Pを使ったモジュールで駆動・停止には、ロッカスイッチを利用し、DCモータを動かしている動画がこれ。

 これも接続は同様だが、ArduinoボードからVCC(5V/3.3V)をSSR/Solid State RelayのDC+に、GNDをブレッドボード上でコモンとしてSSRのDC-とロッカスイッチの一端を接続、ロッカスイッチの他端とSSRのCH1を繋げば入力側はOK。

 この状態で出力側の一方をDCモータの一端へ、他方をDCモータ用電源(ここでは乾電池)のマイナス、DCモータ用電源のプラスをDCモータの他端へつなぐと機能する。

Arduino+DCモータドライバでDCモータを制御する例

 更にDCモータドライバというDCモータを制御するためのドライバモジュールが市販されており、普通、保護回路も搭載されているはずなので、これを使うとより手軽にDCモータを扱うことができるだろう。

[2017/09/13] モータドライバを追加発注、2週間前後で届く予定なので後日、モータドライバによるDCモータ制御について掲載予定。

L9110S Hブリッジ付きモータドライバでDCモータを駆動
[2017/09/24]

 届いたところで、とりあえず、L9110S Hブリッジ付きモータドライバでDCモータを駆動させている様子。

 ちなみにこの写真では、出力のMOTOR A側を使うことにし、VCC/GNDをArduinoボード(Uno)、A-1A/A-1Bピン(なぜかA-1Bのみ逆に印字されてる)を電池、MOTOR Aの端子台にDCモータをつないだ。

 正転・逆転・停止は、ここで電池につないでいる2本をArduinoボードのデジタルピンの内、任意の2本につないでプログラム的に制御する必要がある。

 あっさり見つかったHow to use the HG7881 (L9110) Dual Channel Motor Driver Moduleのスケッチが秀逸。

 シリアルモニタから高速・低速・逆転・停止にそれぞれ緩急付けるメニューを指定することができるようになっている。

 ちなみに逆転の逆転で正転...というわけにはいかず、正転している場合に逆転するようになっている模様。

 DCモータの制御についてトランジスタ、リレー、モータドライバと見てきたが、他にも方法はあるかもしれないものの、思いつかない。

 手動で速度をコントロールしたい場合には、ポテンショメータ(可変抵抗)や、これにボリュームつまみがついた速度・ボリューム・調光コントロールモジュールなどを使うとよいだろう。

HiLetgo Arduino互換機UNO R3 ATmega328P(USBチップCH340G)

HiLetgo Aruduino互換 UNO R3 ATmega328P/ATmega16U2開発ボード

HiLetgo Nano V3.0 ATmega328P 5V 16MHz CH340G

HiLetgo 400穴ブレッドボード(8.5x5.5cm)

HiLetgo ミニブレッドボード SY-170(5個)

HiLetgo 40PCS デュポン ワイヤー ジャンパー ブレッドボード 接続ワイヤー (オス-メス)1P-1Pピッチ 2.54mm 長さ 20CM [並行輸入品]

HiLetgo ジャンパーワイヤー(オス-オス)40本(長さ20cm)

HiLetgo ジャンパワイヤ オス-オス 長さ各種65本

HiLetgo 1/4W 金属皮膜抵抗バッグ 41種x20個=820個

HiLetgo トランジスタアソートメント(17種x10個 計170個)

SODIAL(R)25×1N4004 400V 1A アキシャルリードシリコン整流ダイオード

HiLetgo 5V 2チャンネル リレー モジュール リレー拡張ボード オプトカプラー保護 [並行輸入品]

HiLetgo 5V 1チャンネルソリッドステートリレーモジュール低レベルトリガAC 240V 2A PLC

HiLetgo 5mm LEDダイオード管 5色種類LEDダイオードバッグ 各20pcs合計100pcs [並行輸入品]

HiLetgo 5Aミニ DC モータ PWM 速度コント ローラー 3V-35V スピード コントロール スイッチ LED 調光器 [並行輸入品]

HiLetgo L9110S Hブリッジ ステッパ モータドライブ モジュール デュアル DC ステップ モータ ドライバ コントローラボード