どうも、なかしーです。
僕は自動車のマイコンにプログラミングをする組み込みエンジニアとして働きつつ、YouTubeでArduinoの使い方を解説しています。
>>なかしーの電子工作部
ArduinoとトランジスタでLEDを点灯させる方法を知りたいなぁ
という悩みにお答えします。
Arduinoなどのマイコンから出力できる電流は限られています。
例えば、Arduino Unoの場合は1ピンから出力できる電流は20mAで、合計で最大100mAとなっています。
そのため、電流を多く必要とする7セグメントLEDを光らせたり、モータを回転させたりすることができません。
しかし、マイコンとトランジスタを組み合わせて使うことで、この弱点を補うことが可能です。
この記事では「ArduinoとトランジスタでLEDを点灯させる方法」について紹介します。
トランジスタの使い方を理解することで、7セグメントLEDやDCモータを制御することも可能です。
タップできるもくじ
トランジスタの特徴について
トランジスタを使うとこんなことができます。
- 電流を増やす
- 電気的なスイッチ
トランジスタには「NPN型」と「PNP型」の2種類があり、端子がそれぞれ3つあります。
端子は「ベース」と「エミッタ」と「コレクタ」となっています。
種類と端子はこの後の説明で重要なので覚えてください!
トランジスタを回路図に書く時はこんな記号を使います。
詳しく紹介します。
電流を増やす
トランジスタはベースの電流に応じて、コレクタとエミッタ間に流す電流を変えることができます。
NPN型かPNP型かによって、エミッタの電流の向きが違います。
NPN型は「コレクタ→エミッタ」ですが、PNP型は「エミッタ→コレクタ」となっています。
覚えるときのポイントは次の通りです。
- NPN型:部品からGNDに電流を流すときに使う
- PNP型:電源から部品に電流を流すときに使う
電気的なスイッチ
ベースに電流を流すだけでは、コレクタとエミッタ間に電流は流れません。
ベースとエミッタ間に一定値以上の電圧を与える必要があります。
(データシートにはVBEと書かれてる)
その一定値を基準よりも低い電圧のときはコレクタとエミッタ間に電流は流れませんが、高い電圧だと電流が流れます。
Arduinoにトランジスタを繋げる
Arduinoのデジタルピンとトランジスタのベースの間に抵抗を挟んで接続します。
抵抗はコレクタとエミッタ間に流したい電流値から計算をします。
NPN型の場合は
PNP型の場合は
となります。
hfeはデータシートに電流増幅値と書かれてあると思います。
ArduinoとトランジスタでLEDを点灯させるプログラム
Arduinoとトランジスタを組み合わせた例として、こちらの回路を動かしたいと思います。
この回路の+5Vは外部電源(Arduinoとは別)を使っているので、Arduinoの+5Vを繋がないでください。
トランジスタをトグルスイッチに置き換えてみると分かりやすくなると思います。
スイッチを下に倒すとON状態になります。
左上のスイッチをONで、下のスイッチをOFFにすると回路が開いている状態なので黄色のLEDは点灯しません。
下のスイッチをONにすると閉回路になってLEDが点灯します。
下のスイッチをONにしたまま、左上のスイッチをOFFにするとLEDは点灯しなくなります。
スイッチをトランジスタに戻し、ベースの抵抗にArduinoを繋いでみます。
その上でプログラムを作りました。
#define LED_Y 2
#define LED_R 3
#define SW 4
void setup() {
pinMode(LED_Y, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(SW, OUTPUT);
}
void loop() {
/*LED消灯*/
digitalWrite(LED_Y, HIGH); //OFF
digitalWrite(LED_R, HIGH); //OFF
digitalWrite(SW, LOW); //OFF
delay(500);
/*LED点灯*/
digitalWrite(LED_Y, LOW); //ON
digitalWrite(LED_R, LOW); //ON
digitalWrite(SW, HIGH); //ON
delay(500);
/*LED_RED点灯*/
digitalWrite(LED_Y, HIGH); //OFF
digitalWrite(LED_R, LOW); //ON
digitalWrite(SW, HIGH); //ON
delay(500);
/*LED_YELLOW点灯*/
digitalWrite(LED_Y, LOW); //ON
digitalWrite(LED_R, HIGH); //OFF
digitalWrite(SW, HIGH); //ON
delay(500);
}
0.5秒ごとに全消灯→全点灯→赤色LEDだけ点灯→黄色LEDだけ点灯と切り替わります。
ArduinoとトランジスタでLEDを点灯させる方法
この記事では「ArduinoとトランジスタでLEDを点灯させる方法」について紹介しました。
Arduinoから出力できる電流は最大100mAでモータを回したり、7セグメントLEDを光らせるのには物足りません。
そこで、トランジスタの電流を増やす特性を利用し、Arduinoの出力に応じて外部から電流を流したり、流さなかったり制御すれば解決します。
Arduino関連の人気記事
>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】
>>Arduinoでできることを紹介【逆にできないことは何?】
当ブログで人気のArduino入門キット