Arduino

自動水やり機を作ってみた1 【 Arduinoとトランジスタを使った、モーター制御】

Arduinoと電動灯油ポンプを使った「鉢植え用の自動水やり機」の製作を通して、 Arduinoとトランジスタを使った、モーター制御回路の設計方法をまとめた記事となっております。

Arduinoとトランジスタを使って、モーターを制御する回路を設計する

Arduinoとトランジスタを使えるようになれば、電子工作の幅も広がります。部品のデータシートの確認や抵抗器の計算など、難しく感じるところもあると思いますが、できるだけわかりやすく解説していきたいと思います。

目次
  1. 必要物品一覧
  2. 回路の確認
  3. 電動灯油ポンプのスペック確認
  4. トランジスタの選定
  5. トランジスタのベースに流れる電流IBの算出
  6. 抵抗器RBの選定
  7. 還流ダイオードの選定
  8. プルダウン抵抗の選定
  9. 動作確認

必要物品一覧

必要部品

No 品名 単価 備考
1 電動灯油ポンプ 700円  
2 Arduino Uno 3,000円 互換ボードでも可
3 トランジスタ (2SC3422) 40円  
4 抵抗① (210~420Ω) 10円 Arduinoートランジスタ間の抵抗
5 抵抗② (10KΩ) 10円 プルダウン抵抗
6 ダイオード (1N5406) 50円 還流ダイオード
7 単三電池2本 50円  

・使用する道具

No 品名 単価 備考
1 ブレットボード 300円  
2 ジャンパーワイヤ 300円 セット品
3 単三用電池ボックス 50円  
4 電圧電流計 自作(テスターでも可)

回路の確認

上の図が回路図になります。
赤字の部分がすでに使用する部品で確定している部分になります。

  • 3V・・・電動灯油ポンプが単三電池2本(直列)で作動するため
  • マイコン・・・Arduino Unoのスペックより

青字の部分がこれから選定していかないといけない部品になります。

  • Tr・・・トランジスタ
  • RB・・・マイコン,トランジスタの過電流を防止する抵抗
  • RP・・・プルダウン抵抗
  • D・・・還流ダイオード

Arduinoからの電気をTrのBーE間(ベースーエミッタ間)に流すor流さないかで、TrのCーE間(コレクターエミッタ間)に電気を流すor流さないを制御する回路になります。

「 Arduinoからの出力の5Vでモーターを動かせば?」と思う方もいると思いますが、マイコンは基本的にあまり電流を流せません。

今回使用するArduino Unoも最大で20mAしか出せないため、モーターを動かせるほどの電流を流せないわけです。

電動灯油ポンプのスペック確認

では、どのぐらいの電流値があれば今回使用するモーター(電動灯油ポンプ)は動くのでしょうか?電動灯油ポンプの電気的なスペックを確認していきたいと思います。

回路図設計をしていく中で知っておきたい電動灯油ポンプのスペックは動作する際の電圧と電流です。電圧はすでに3Vと分かっているため、電流値を測定していきます。

配線自体は簡単かと思います。写真での測定結果は0.66Aでした。しかし、この測定結果はモーターに負荷を加えてない状態での測定結果です。実際は水をくみ取るという負荷がかかります。水をくみ取っている(負荷がかかっている状態)時の電流値は最大で1.2Aでした。

トランジスタの選定

モーターが必要とする電流値がわかったので続いてトランジスタの選定を行っていきたいと思います。今回は家に余ってた5点のNPNトランジスタから選んでいきたいと思います。

項目 2SC1815L 2SC2120 2SC3422 2SC3851A 2SC3039A
単価(円) 5円 5.5円 40円 50円 60円
C-E間定格電圧
(VCEO)
50V 30V 40V 400V 80V
B-E間定格電圧
(VBEO)
5V 5V 5V 7V 6V
コレクタ電流
(IC)
150mA 800mA 3A 7A 4A
ベース電流
(IB)
50mA 160mA 1A 3A 1A

今わかっている数値から

  • C-E間定格電圧(VCEO)・・・3V以上
  • B-E間定格電圧(VBEO)・・・5V以上
  • コレクタ電流(IC)・・・1.2A以上
  • ベース電流(IB)・・・20mA以上

である必要性があります。

コレクタ電流ICはモーターが必要とする電流が1.2Aを流せなければならないため、SC1815Lと2SC2120は使用できないことがわかります。

今回は2SC3422を採用します。2SC3851Aと2SC3039Aは使用しても問題なさそうですが定格電圧が高すぎかつ価格も少し高いため使用しないことにします。

トランジスタのベースに流れる電流IBの算出

コレクタ電流ICが1.2Aと分かったので、IBにどれだけの電流を流せばよいかがわかるようになりました。使用する式を下記に示します。

hFE=IC/IB

hFEは直流電流増幅率といい、式の通りコレクタ電流(IC)とベース電流(IB)の比になります。 2SC3422のデータシートでhFEを確認してみましょう。

hFEがどれだけ不安定な数値かがわかると思います。使用条件が悪くなってもしっかり電流を流せるように小さめの値で計算することをお勧めします。今回hFEは120で計算していきたいと思います。

hFE=IC/IB から IB=IC/hFE へ式を変換
IB=1.2A/120=0.01A

ベース電流IBは10mA以上流れれば、コレクタ電流ICに1.2A以上流れるためOKということがわかりました。この数値を使って抵抗RBの抵抗値を算出していきます。

抵抗器RBの選定

抵抗器RBはトランジスタやマイコンの故障を防ぐためにマイコン‐ベース間に接続されます。この抵抗がないとマイコン-ベース-エミッタ間には抵抗となる部品がないため、ほぼショート状態となり、電流が無限大に流れてしまします。(ベース-エミッタ間の抵抗は少量なので無視)実際はマイコンが流せる電流値以上は出ませんが、定格スペック以上の電流値が流れますので、

  • マイコンが過大な電流を流すことができず故障
  • トランジスタが電流に耐えられず故障

という結果になります。しかし、マイコンからの電流量が少なすぎるとコレクタ電流ICが少なくなってしますため適度な抵抗の選定が必要になります。

マイコンが最大電流を流すときの抵抗RB

今回使用するArduino Unoは最大で20mAしか流せません。そこからオームの法則を使えば抵抗値を求めることができます。この時知っておきたいのがトランジスタのベース‐エミッタ間の電圧降下です。こちらも2SC3422のデータシートで確認してみましょう。

25℃でコレクタ電流ICが1Aの時のベース‐エミッタ間の電圧は約0.8Vのようです。

オームの法則の式 RB=(Vin-VBE)÷IB から
RB=(5V-0.8V)÷0.02A=210Ω

コレクタ電流ICが1.2Aになるときの抵抗RB

コレクタ電流ICが1.2Aになるときのベース電流IBは10mAと分かっているため、そこから抵抗の大きさを求めます。

オームの法則の式 RB=(Vin-VBE)÷IB から
RB=(5V-0.8V)÷0.01A≒420Ω

これらのことから抵抗器RBは

210Ω<RB<420Ω

から選べばOKということになります。今回は抵抗330Ωを使いたいと思います。

還流ダイオードの選定

モーターの電源がOFFになったときに発生する逆起電力によるトランジスタの破損を防ぐためのダイオードになります。

実際にアマゾンで売っている簡易的なオシロスコープで今回使用するモーターの逆起電力を見てみたところ最高で70Vありました。

この逆起電圧をトランジスタに加えるとトランジスタが壊れてしまうため、還流ダイオードを付けます。

調べてみると逆耐圧が電源電圧の10倍以上で、順電流がコイルに流れる電流より大きい整流ダイオードを使うのが良いようです。今回は1を使いたいと思います。逆耐圧は600V、順電流が3Aになります。

還流ダイオードについてはもう少し理解を深めて記事にしたいと思います。

動作確認

最終的な回路図は次のようになりました。

実際に配線してみました。この時に基本的にはブレットボードで配線を作成しますがトランジスタの配線でコレクタ-モーター間とエミッターモーター間は少し太めの配線で作成しました。

ブレットボードには大きな電流は流せないためです。(500mA以上はやめた方が良いようです。)試しにブレットボードで配線してみたら明らかにモーターのパワーが落ちました。

実験用に作ったArduinoのプログラムはLEDチカチカさせるときのものと同じです。「delay」の秒数を変えてしっかり水をくめるかを確認してみてください。

Arduinoのプログラムの書き方については以前、記事にしたので参考にしてみてください。
{初めてArduinoを使う方へ【Arduino IDEのインストール~Lチカまで】}

まとめ

Arduinoからはあまり大きい電流は流せず、モーターのような大きな電力を使う危機に繋がてしまうと壊れる可能性がある。そのため、抵抗器を使って大きい電流が流れないようにする。大きい電力を使いたいときにはトランジスタを使って電流を増幅させる。

ここを理解していただければ問題ないと思います。次回は実際に鉢植えにつけていきたいと思います。