はじめに
Arduinoで大電流のLEDをいくつか制御する必要が出てきました。Arduinoは数十mAまでしか出せないため、小さなLEDは点灯できても100mA以上の明るいLEDやサーボモーターなんかは動かせません。Arduinoは制御信号を出すだけにし、大電流の電源は別のところから取ることになります。
一般にリレーモジュールとトランジスタが選択肢になりますが、回路を小型にするにはトランジスタです。ここではトランジスタとトランジスタアレイの使い方を備忘録として残しておきます。
材料
Arduino Uno
トランジスタはNPN型の一番安いもの(2N5551L-B-T92-K)を用意しました。
トランジスタアレイはNPN型でよく使われる型番(ULN2003AN)を用意しました。トランジスタが7個並んでいる感じです。
あとは適当なLED×7個、LED用の適当な抵抗(12V駆動なので強めの10kΩ)×7個、ベースエミッタ間抵抗(これも適当に10kΩ)×2個、ACアダプタ(12V, 2A)、DCジャック、配線用のジャンパワイヤです。
トランジスタとアレイで1系統制御
データシートでエミッタ、ベース、コレクタの足を確認します。今回の2N5551L-B-T92-KはEBCですが種類によってはECBもあるとのこと。
ブレッドボード上で次のように配線。これら2つは同じ動きをします。
デジタル出力2番ピンをHIGHにするとLEDが光ります。動作確認の様子は省略しますので、12V系統と5V信号系統の流れをしっかり理解しておきます。NPN型なのでトランジスタの上流側に全ての負荷(LED)を置きます。
青い点線はベースエミッタ間抵抗、赤い点線は名前は分かりませんが高電圧がかかったときに逃がす役割があるとのこと。いずれもこれくらいシンプルな回路なら省略しても影響ありません。アレイは内部でベース抵抗・ベースエミッタ間抵抗をしてくれているらしいので非常にコンパクトに収まります。
トランジスタアレイで7系統制御
次のように配線。デジタル出力の2~8番ピンを使いました。
Arduinoに書き込みます。
void setup(){
// シリアルポートを9600 bps[ビット/秒]で初期化
Serial.begin(9600);
// 2~8番ピンをoutputに
for (int i = 2; i <= 8; i++){
pinMode(i, OUTPUT); digitalWrite(i, LOW);
}
}
void loop(){
// 順に点灯
for (int i = 2; i <= 8; i++){
digitalWrite(i, HIGH);
delay(300);
digitalWrite(i, LOW);
}
delay(300);
// 複数を点灯
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
delay(300);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
delay(300);
}
デジタル出力ピンはデフォルトをLOWにし、HIGHにしたときだけ導通します。複数チャンネルを同時に光らせる場合はトランジスタアレイの定格電流を超えないように注意します(できれば定格の半分未満と言われている)。
さいごに
いろいろ頑張ってPythonから制御することもできました。次回はシフトレジスタを学びます。