Arduino

Arduinoを使って複数のLEDを制御する

過去に一つのLEDを点灯する回路をご紹介しました。LEDの順電圧はおよそ1.5v~3Vになりますが、これを複数個点灯させたい場合はどうなるのでしょうか。LEDを直列につなげたとするとつなげた数だけ順電圧がかかります。Arduinoの出力電圧は5vであるため、LEDの接続数によっては順電圧の合計値のほうが出力電圧を上回ってしまいます。※並列につなげた場合は順電圧は変わりませんが、Arduinoへ流れ込む電流が増え、各LED分だけ抵抗が必要になるなど効率が悪いため積極的には使われません。

そういった場合は、Arduinoの出力電圧でLEDを点灯させるのではなく、点灯用に別途電源を用意します。この電源を使ってLEDを点灯するにはトランジスタをスイッチング回路として用います。

そこで、今回はトランジスタを使って複数のLEDを制御する方法についてご紹介します。

Arduinoの制約について

冒頭でもちょろっと説明しましたが、Arduinoの出力電圧は5Vとなっています。そのため、駆動に必要な電圧が5Vより大きい部品は動かせません。例えば、DCモーターは駆動で12Vも必要となります。

また、Arduinoの各端子は20mAまでと決まっており、かつ全体で200mAまでしか使ってはいけないことになっています。

トランジスタを使った駆動回路

Arduinoの出力電圧では足りないときは、トランジスタと別途電源を用意して駆動回路を作成します。以前の記事でトランジスタについてご紹介しましたが、トランジスタの特性上ベースに電流が流れないとコレクタ-エミッタ間にも電源が流れず、回路が動きません。すなわち、Arduinoの出力をHighにすることで駆動回路が動きLEDが点灯する流れとなります。その回路図は以下となります。

この回路をスイッチング回路といいますが、メリットとしては『Arduinoの小さな出力で大きな電圧が必要な回路を起動できる』、『トランジスタを介すことで、Arduino側に大容量の電流が流れない』などがあります。

トランジスタの重要な項目

回路を設計する際にデータシートから読み取る重要な項目についてご説明します。

コレクタ-エミッタ間電圧(Vceo)

トランジスタの最大電圧のことです。駆動回路にはVceo以上の電圧をかけてはなりません。一般的には安全を考慮してVceoの半分の電圧値までを使用するようにします。

直流コレクタ電流(Ic)

トランジスタの最大電流のことです。駆動回路にはIc以上の電流を流してはなりません。一般的には安全を考慮してIcの半分の電圧値までを使用するようにします。

コレクタ損失(Pc)

耐えうる発熱の電力を表しています。式はPc=Vceo×Icとなります。コレクタ-エミッタ間電圧または直流コレクタ電流の値によっては、最大値が変わります。

直流電流増幅率(hfe)

ベース電流を何倍にしてコレクタに流せるかの指標です。例えばhfeが100の場合、コレクタにはベース電流の100倍までの電流が流せます。例えば、ベース電流が1mAだった場合、コレクタには100mAの電流が流れます。ただし、許容する以上の電流は流せません。例えば、許容する電流が90mAだった場合は100mAは流せません。

Arduino側の抵抗値を算出する際に必要となります。

ベース-エミッタ間電圧(Vbe)

トランジスタがオンの時にベースとエミッタ間にかかる電圧です。Arduino側の抵抗値を算出する際に必要となります。

2個のLEDを点滅させる

今回は2つのLEDを点滅させる回路を作成します。詳しくは後程説明しますが、LEDひとつで順電圧が2.6Vであるため、2つ直列にするとArduinoの出力電圧を超えます。そのため、トランジスタを使ったスイッチング回路を用います。

作成した回路

作成した回路を以下になります。

使用した装置及び部品は下表を確認してください。

Arduinoマイコン搭載の小型コンピュータ
ブレッドボード抵抗・ジャンパー線などを使って回路を作る基板
LED×2順方向に電圧を加えると発光する半導体
ジャンパー線電気を中継する線
抵抗100Ω電圧を下げる端子
抵抗10kΩ電圧を下げる端子
トランジスタ半導体のキャリアの運動によるスイッチング動作と増幅動作をもつ素子
電池9v用電源

回路作成時は以下の図も参考にしてください。

駆動回路の抵抗値

駆動回路側の抵抗値を求めます。今回は電源に9Vの電池を取り付け、流れる電流をArduinoに安全な20mA以下とします。まず、LEDの順電圧は下図のように20mAの時に約2.2Vです。

必要な抵抗値は R=9V-(2.1v×2)÷20mA ですので、24Ωとなります。手持ちの抵抗で一番近いのが100Ωでしたので今回は100Ωを使います。その場合流れる電流は、 I = 9v-(2.1v×2)÷100 ですので4.8mAとなります。

制御回路の抵抗値

次に制御回路側の抵抗値を求めます。まず、ベース-エミッタ間電圧(Vbe)と直流電流増幅率(hfe)を確認します。

上表からベース-エミッタ間電圧(Vbe)を1Vと、直流電流増幅率は80とします。ベースに流れる電流はコレクタ電流の80分の1となりますので、4.8mA÷80=0.06mAとなります。

ベース-エミッタ間電圧(Vbe)を1Vとすると、必要な抵抗はR=(5-1.0)÷0.06mA ですので約6667Ωとなります。手持ちでこの抵抗値に近い10kΩを今回は使います。

プログラムコード

プログラムコードは以下となります。

const int LED = 13;

void setup() {
  // put your setup code here, to run once:

  pinMode(LED,OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:

  digitalWrite(LED,HIGH);
  delay(500);

  digitalWrite(LED,LOW);
  delay(500);
}

実行結果

実行結果は以下を参照してください。

まとめ

今回はトランジスタを使って2つのLEDを点滅する回路をご紹介しました。Arduinoの最大出力電圧を超える回路を動かす場合は、別途トランジスタを使って別電源で動かします。今回のLEDに限らず、DCモーターなど必要とする電圧が高い部品を使う回路には欠かせないのがトランジスタとなります。

トランジスタの役割をしっかりと把握して、信頼性の高い回路を使っていきましょう。

参考書籍

Arduino電子工作