【LEDだけじゃない!】Arduinoで色々制御する
Arduinoという名のLチカ専用機
Arduinoは電子工作系のDIYではもはや欠かせない存在なのですが、ネットでは
「LED繋ぎました!」→「チカチカしました!」→「いかがでしたか?」
という記事が多すぎですね。だから何なんだと。
…というわけで(?)、せっかくだからLチカだけでなく色々繋いでデジタル制御しましょう、というのが今回のお題です。
ちなみにこの記事はArduino UNO/MEGA2560/Micro/Nano/Nano Everyなどエントリーレベル かつ 5Vで動作するArduinoを対象としています。使用する部品はすべて秋月電子通商で購入できるものを使っています。型番だけ見ると見慣れない部品ばかりですが、ちゃんと買えます。
| 秋月電子通商 | http://akizukidenshi.com/catalog/ |
|---|
なお、この記事は回路図くらいは読める中級者向けです。繋ぎ方や応用の仕方によってはうまく動かない/壊れた!!等の不都合・不利益を被る可能性もありますが、あくまでも自己責任ということで。
「回路図って何すか?」とか「Arduinoって美味しいの?」とかいう人は適当にググったらいいです。(投げやり)
外部機器制御に使える端子
LEDやモーターなどを接続して制御するには、Arduinoの端子からそれらをON/OFFするための信号を出力させる必要があります。
下表で「○」の端子は信号出力に使用可能な端子です。注釈が付いていたり×のものは何かしらの制約がある、もしくは使用不可能な端子であることを示します。
| UNO | MEGA | NANO | EVERY | |
|---|---|---|---|---|
| D0(TX) | ○1 | ○1 | - | - |
| D0(RX) | - | - | ○2 | - |
| TX | - | - | - | ○1 |
| D1(RX) | ○2 | ○2 | - | - |
| D1(TX) | - | - | ○1 | - |
| RX | - | - | - | ○2 |
| D2 | ○ | ○ | ○ | ○ |
| D3 | ○ | ○ | ○ | ○ |
| D4 | ○ | ○ | ○ | ○ |
| D5 | ○ | ○ | ○ | ○ |
| D6 | ○ | ○ | ○ | ○ |
| D7 | ○ | ○ | ○ | ○ |
| D8 | ○ | ○ | ○ | ○ |
| D9 | ○ | ○ | ○ | ○ |
| D10 | ○ | ○ | ○ | ○ |
| D11 | ○ | ○ | ○ | ○ |
| D12 | ○ | ○ | ○ | ○ |
| D13 | ○3 | ○3 | ○3 | ○3 |
| D14(A0) | ○ | - | ○ | ○ |
| D15(A1) | ○ | - | ○ | ○ |
| D16(A2) | ○ | - | ○ | ○ |
| D17(A3) | ○ | - | ○ | ○ |
| D18(A4;SDA) | ○ | - | ○ | ○ |
| D19(A5;SCL) | ○ | - | ○ | ○ |
| A6 | - | - | ×4 | - |
| A7 | - | - | ×4 | - |
| D20(A6) | - | - | - | ○ |
| D21(A7) | - | - | - | ○ |
| D14(TX3) | - | ○ | - | - |
| D15(RX3) | - | ○ | - | - |
| D16(TX2) | - | ○ | - | - |
| D17(RX2) | - | ○ | - | - |
| D18(TX1) | - | ○ | - | - |
| D19(RX1) | - | ○ | - | - |
| D20(SDA) | - | ○ | - | - |
| D21(SCL) | - | ○ | - | - |
| D54(A0) | - | ○ | - | - |
| D55(A1) | - | ○ | - | - |
| D56(A2) | - | ○ | - | - |
| D57(A3) | - | ○ | - | - |
| D58(A4) | - | ○ | - | - |
| D59(A5) | - | ○ | - | - |
| D60(A6) | - | ○ | - | - |
| D61(A7) | - | ○ | - | - |
| D62(A8) | - | ○ | - | - |
| D63(A9) | - | ○ | - | - |
| D64(A10) | - | ○ | - | - |
| D65(A11) | - | ○ | - | - |
| D66(A12) | - | ○ | - | - |
| D67(A13) | - | ○ | - | - |
| D68(A14) | - | ○ | - | - |
| D69(A15) | - | ○ | - | - |
もっと詳しく知りたい方はこちらをどうぞ。
| Arduinoピンアサイン | https://ss1.xrea.com/tmct.s1009.xrea.com/ref/ta-xx-7e6g02.html |
|---|
前知識
さっそく色々繋いでみよう!……とその前に、Arduinoやパソコンを壊さないための基本事項をおさらいしておきます。
Arduinoのデジタル出力端子は一部の端子を除き、digitalWrite関数で自由に制御できます。
たとえば D5 端子を High/Low 制御する例を以下に示します。
pinMode(5, OUTPUT); // D5端子を出力端子にする
digitalWrite(5, HIGH); // D5端子からHighレベルを出力する
digitalWrite(5, 1); // D5端子からHighレベルを出力する(HIGH設定と同じ)
digitalWrite(5, LOW); // D5端子からLowレベルを出力する
digitalWrite(5, 0); // D5端子からLowレベルを出力する(LOW設定と同じ)
Arduinoの場合、
- HIGH に設定したときは約5V(3.3V系のArduinoは約3.3V)
- LOW に設定したときは約0V
…になります。
ちなみに、pinModeで INPUT に設定した端子に digitalWrite した場合は
- HIGH に設定したときは約5V(3.3V系のArduinoは約3.3V)でPullUpされた状態
- LOW に設定したときはオープン(無信号)
…になります。まとめると以下の通り。
| pinMode | digitalWrite | 端子の状態 | 備考 |
|---|---|---|---|
| OUTPUT | HIGH (1) | 約5V (3.3V系のArduinoは約3.3V) |
|
| ↑ | LOW (0) | 約0V | |
| INPUT | HIGH (1) | 約5V 20kΩ程度でPullUp (3.3V系のArduinoは約3.3V 20kΩ程度でPullUp) |
出力信号としては非常に弱いので、電流を流そうとするとたちまち電圧が下がります。 外部機器制御を行うには不向きな仕様です。 |
| ↑ | LOW (0) | オープン(無信号) | 入力端子となり何も信号が出力されない状態(ハイインピーダンス)になります。 |
要は「pinMode を OUTPUT にしてやれば端子から 5V が出るから、それを電源にして色々動かせばいい」のですが、残念ながら何でも繋げば動くってもんじゃありません。
たとえばモーターや豆電球を繋いで動かそうとすると、Arduino 上のマイコンが焼損します。最悪の場合、パソコンのUSBポートもダメージを受けます。
これは出力できる電流に制限があるためです。
Arduinoの端子から取り出せる電流には以下のような制約があります。見ての通り非常に心もとない電流量しか流せません。
- 1端子につき最大40mA(0.04A)まで
20mAまでを推奨 - 全端子の合計が最大200mA(0.2A)まで
表示用のLEDを繋ぐ程度ならほとんど気にしなくていいのですが、それ以外のものを繋ぐ場合は何らかの駆動回路を経由するだけでなく、駆動対象の電流量や電圧によっては別電源を用意する必要があります。
ここまで読んで「書いてることがよくわからない」という人は基本的な知識が足りていません。
以下はにわか知識で真似事をしようとすると非常に危険な内容も含まれるので、もう少し知識を付けてから実践しましょう。
LEDを制御する
まずは定番のLEDを繋いでみます。
基本的に信号出力可能な端子ならどこに繋いでも制御できます。Arduino UnoのD5に接続した例が以下。HIGH 出力で点灯、LOW 出力で消灯します。

抵抗 R はLEDの色によって変えましょう。
LEDの色と抵抗値は下表を参考に。血迷ってもArduinoにLEDを直結してはなりません。(※過電流で壊れます)
| LEDの色 | 抵抗値 |
|---|---|
| 赤・橙・黄・黄緑 | 560Ω |
| 青・白・純緑・青緑 | 330Ω |
抵抗値の計算について、もっと詳しいことを知りたくなった方はこちらの記事もどうぞ。
| LEDの抵抗値を計算しよう |
|---|
FlexLEDを制御する
上記の回路はArduinoを壊さないためにLEDに流れる電流をかなり(5mA程度に)制限しています。
この回路でFlexLEDなど準照明用LEDを点灯させた場合、思ったような明るさでは点灯しません。流した電流分の明るさでしか点灯しないからです。
そこでトランジスタで電流を増幅します。
以下に電源電圧5Vで3つのFlexLEDを制御する回路例を示します。この例では各LEDに約50mA流れます。電流が大きいのでLEDの電源はArduinoとは別に用意する必要があることには注意してください。HIGH 出力で点灯、LOW 出力で消灯します。

パワーLEDユニットを制御する
パワーLEDは照明用途に作られたLEDのことです。かなりの照度得られるため、うまく使うと実用的な照明器具を作ることができます。
例として24V電源で動作するパワーLEDユニットの電源をMOS-FETで制御する回路を示します(12V電源でもいけるはず)。この回路で10A程度までのLEDユニットなら制御することができます。ただしパワーLEDユニット自体やMOS-FETの放熱、配線の電流容量には留意が必要です。HIGH 出力でON、LOW 出力でOFFします。

なお、この回路が制御対象として想定するのは放熱ユニットと電流制限回路が内蔵されたパワーLEDユニットです。とくに、電流制限回路が内蔵されていないパワーLEDは絶対に直結してはなりません。
…言っている意味がわからない場合はもう少し回路について勉強するか、大人しく市販品を購入して利用することをお勧めします。
ブザーを制御する
Arduinoで音を鳴らしたい場面はわりとありますね。
基本的には発振回路を内蔵したブザーを接続すればいいのですが、Arduinoに直結した場合は電流不足でうまく動かないことがあるためトランジスタを経由して駆動します。
まずは一番簡単なArduinoの電源(5V)で動作する電子ブザー(「ピー」という音が鳴るブザー)を接続する例。
この回路では5V 60mA程度までの電子ブザーを鳴らすことができます。HIGH 出力でON、LOW 出力でOFFします。

もっと大きな電流を消費する大音量のブザーや5Vより高い電圧で動作するブザーの場合、ブザー用の別電源を用意します。
以下の回路はブザー用の電源(12V)をダーリントントランジスタで駆動しています。0.2A程度までのブザーを安全に駆動することができるでしょう。HIGH 出力でON、LOW 出力でOFFします。

もしメカニカルブザー(電子式発振回路ではないブザー)を使う場合、逆起電力でトランジスタが破損するのを防ぐために以下のようにツェナーダイオードで保護します。
この回路はトランジスタの放熱に注意すれば1A程度までのブザーを駆動することができます。HIGH 出力でON、LOW 出力でOFFします。

メカニカルブザーは「ブー」とか「ビー」とかいかにも物が震えているような音が鳴ります。
内部に電磁石と金属の接点が入っており、接点が震えることで音を鳴らしています。
安価で低電圧でも大きな音が鳴らせますが、消費電流も大きめです。
リレー(有接点リレー)を制御する
リレーはいわゆる電磁石で動作するスイッチです。比較的大きな電流を制御できるので制御できるモノの幅がぐっと広がります。
これもブザーと同様、比較的電流を食うのでArduino直結だとうまく動かなかったり、Arduinoが壊れてしまったりします。
また、コイル(誘導負荷)が使われているため逆起電力に対する対応も必要になります。
まずは比較的小さなリレーを制御する回路です。逆起電力でトランジスタが壊れないようツェナーダイオードで保護しています。
この回路では5Vで動作する1つのリレーを制御します。この回路に使用しているリレーはコイル電流30mA程度です。コイル電流50mA程度までのリレーならこの回路で駆動することができます。HIGH 出力でON、LOW 出力でOFFします。

上記回路ではArduinoから5Vをもらっているため、消費電流の都合で駆動できるリレーはせいぜい1〜2個までです。
もっとたくさんのリレーを制御するためには、以下の回路のようにリレー用の電源を別に用意する必要があります。HIGH 出力でON、LOW 出力でOFFします。

パワーリレーを制御する
普通のリレーは接点で制御可能な電流容量はせいぜい1〜2A程度です。
それより大きな電流を制御したい場合はパワーリレーを使いますが、パワーリレーは大きな接点を動かすためにより多くの電流を消費するため上記の回路では駆動することができません。
そこで以下の回路のようにより多くの電流が制御可能なトランジスタで駆動します。HIGH 出力でON、LOW 出力でOFFします。

リレーの接点容量と負荷の種類について
リレーのスペックシートには、リレーの接点で制御可能な電流容量(定格電流)が記載されていますが、定格電流未満であれば何でも制御できるわけではなく少し余力が必要です。
接点の定格電流容量に対してどれくらいの余力が必要か、目安を以下に示します。(※あくまで目安です)
| 負荷の種類 | 例 | 使用可能な電流 |
|---|---|---|
| 誘導負荷:リレー | リレー | 接点定格の50%以下 |
| 誘導負荷:コイル | モーター 電磁コイル ソレノイド |
接点定格の10%以下 |
| ランプ負荷 | 白熱電球 豆電球 ハロゲンランプ |
接点定格の8〜10%以下 |
| コンデンサ負荷 | 電源回路 コンデンサ回路 |
接点定格の2〜5%以下 |
| トランス負荷 | トランス回路 | 接点定格の8〜10%以下 |
| 上記以外(抵抗負荷) | - | 接点定格の50%以下 |
このように、接続するモノの種類によっては数ランク大きな接点を持ったリレーを選定する必要があります。
接点容量ギリギリ、またはオーバーするような電流量の制御を続けた場合、接点が傷んで溶着する(=OFFにならなくなる)可能性が大きく高まります。
とくに電熱器具などを制御する場合はOFFにならないと火災の原因になることもあるためくれぐれも注意しましょう。
SSR(ソリッドステートリレー)を制御する
SSRは半導体で構成されたリレーです。普通のリレー(有接点リレー)との違いを以下に示します。
| 項目 | 内容 |
|---|---|
| メリット | - 接点がないため強い衝撃で誤動作することがない。 - チャタリング(接点状態が変わった時のバウンド)が発生しない。 - 接点が溶着することがなく比較的長寿命。 - 制御側の電流が比較的少ない。(〜10mA程度) - 多くのSSRは制御側に電流制限回路を内蔵しており制御信号に直結可能。 - ゼロクロス動作に対応しているものは制御時のノイズ発生が理論上ない。 |
| デメリット | - 多くのSSRはACのみ制御可能。 ※DCで使用可能なものはフォトMOSリレーと呼ばれることが多い。 - たいてい数Vの損失があるため放熱が必要。 - 有接点リレーと比較すると高価。 |
※フォトMOSリレーは電流容量の割には非常に高価であるため、DIYではほとんど出番はないでしょう。
たいていのSSRの制御側(DC側)は電流制限回路と赤外LEDで構成されていて数mA程度で動作するので、Arduinoに直結しても余裕で駆動することができます。
回路例を以下に示します。HIGH 出力でON、LOW 出力でOFFします。

駆動側(AC側)にゴチャゴチャと色々付いていますが、これは保護回路です。火災防止のため必ずヒューズは入れましょう。
- TSV07D271KRは「バリスタ」という部品で、いわゆるサージ吸収素子です
もし落雷などでACラインの電圧が上がりすぎた場合は自分が犠牲になって大電流を流し、ヒューズを飛ばしてくれます。(このときバリスタはたいてい爆発的に破損します) - 10kΩ/10Wの抵抗は擬似負荷です
AC電源で動作するほとんどのSSRは「トライアック」という部品で構成されていますが、トライアックはある程度の電流を流さないとうまく動作してくれません。
この抵抗はそのための負荷抵抗です。ONしているときに触ると「けっこう熱いな」と感じる程度には発熱するので注意してください。 - 0.1uと100Ωの抵抗はスナバー回路です
駆動側(AC側)をON/OFFした瞬間、行き場のなくなったエネルギーによって電圧が大きくバウンスすることがあるため、それを抑えるための回路です。
急しゅんな電圧変化をコンデンサ経由で100Ωの抵抗に流し、熱に変換することでバウンスを抑えます。
これがないとSSRがOFFにならなくなったり、上昇した電圧に耐えられず壊れてしまう場合があります。
もっとたくさんのSSRを駆動したい場合、さすがに制御側の電流量が足りなくなってしまうので以下の回路のように別電源を用意し、トランジスタ経由で駆動するのが良いでしょう。HIGH 出力でON、LOW 出力でOFFします。

電球(ランプ負荷)を制御する
次は電球です。
光るだけならLEDと同じですが、点灯した瞬間に定格の10〜15倍ほどの電流(ラッシュ電流)が流れるためArduinoに直結できないのはもちろん、制御回路としてもかなり余裕を持たせて設計する必要があります。
以下の回路では7A程度流せるダーリントントランジスタを使って外部電源で駆動しています。
外部電源から供給されるのは5Vですが、ダーリントントランジスタによって1V程度は下がるので電球に掛かる電圧は約4Vになります。HIGH 出力で点灯、LOW 出力で消灯します。

モーターを駆動する
ここではステッピングモーターではなくブラシ付きDCモーター(整流子を内蔵したDCモーター)を繋いでみます。
ブラシ付きDCモーターはトルクが大きい反面、始動直後や高負荷で回転数が落ちたときに非常に大きな電流が流れるほか、内蔵された整流子(ブラシ)が強烈にノイズを撒き散らすためノイズ対策は必須になります。
以下の回路では5V無負荷時0.7A程度までのブラシ付きDCモーターを駆動することができます。動作電圧が6V程度までのモーターはこの回路で十分でしょう。
ツェナーダイオードで逆起電力対策を行っているほか、コンデンサでノイズを低減させています。コンデンサはモーターの直近に付けることが効果的です。HIGH 出力でON、LOW 出力でOFFします。

モーターの駆動電圧が高くなると異常が起きたとき回路やモーターが焼損するリスクが高まるため、モータードライバを利用した方が安全です。
以下は TB6643KQ で12Vのモーターを駆動する例です。
このモータードライバはモータードライバ自体を保護する回路(電流制限・温度制限)を内蔵しているほか、正転・反転・ブレーキなども行うことができます。
詳しくは説明しませんが、スペックシートは日本語なので読めばわかるでしょう…

まとめ
Arduinoで色々なモノを制御する方法を紹介しました。(Raspberry Piでもほぼ同じ回路で制御できるでしょう。)
この記事を参考に、色々なモノを制御する楽しさをぜひ体験してくださいね。