LEDの基礎知識
LED(Light Emitting Diode)は発光ダイオードと呼ばれる半導体素子で、電流を流すと光を発します。電子工作で最もよく使われる部品のひとつで、点滅させる「Lチカ」は電子工作の入門として定番のプロジェクトです。
LEDには必ず極性があります。リード線(足)の長い方がアノード(陽極・プラス)、短い方が**カソード(陰極・マイナス)**です。また、LEDの内部を見ると、小さい方の金属片がアノード側です。アノードをプラス(電源側)、カソードをマイナス(GND側)につなぐことで電流が流れ、発光します。
一般的な5mm砲弾型LEDの仕様は以下の通りです。
| 色 | 順方向電圧(VF) | 定格電流(IF) |
|---|---|---|
| 赤 | 約1.8〜2.2V | 20mA |
| 黄/橙 | 約1.8〜2.2V | 20mA |
| 緑 | 約2.0〜2.5V | 20mA |
| 青 | 約3.0〜3.5V | 20mA |
| 白 | 約3.0〜3.5V | 20mA |
このVF(順方向電圧)と電源電圧の差が、抵抗で消費する電圧になります。
保護抵抗の計算方法
LEDに直接5Vをかけると過電流で即座に焼き切れます。必ず保護抵抗(電流制限抵抗)を直列に接続しなければなりません。抵抗値はオームの法則で計算できます。
計算式:
R = (電源電圧 - LEDの順方向電圧VF) / 定格電流IF
例1:ArduinoのデジタルピンにLEDを接続(赤LED)
R = (5V - 2.0V) / 0.020A = 150Ω
150Ωに最も近い規格値は150Ωまたは220Ωです。計算値より大きめの抵抗を選べばLEDの寿命が伸びます(少し暗くなりますが問題ありません)。
例2:青色LED(VF = 3.2V)の場合
R = (5V - 3.2V) / 0.020A = 90Ω
100Ωまたは150Ωを選択します。
Arduinoのデジタルピンから直接LEDを制御する場合、多くの入門記事では220Ω〜470Ωを使用しています。定格よりやや暗くなりますが、部品へのダメージを最小限にできるため、入門段階ではこの範囲の抵抗を選ぶのが無難です。
基本回路の作り方
ブレッドボードを使った最も基本的なLED点灯回路です。ブレッドボードの使い方を先に確認しておくとスムーズです。
必要な部品:
- Arduino Uno
- LED(色は任意)
- 抵抗 220Ω(または330Ω)
- ジャンパーワイヤー 2本
- ブレッドボード
接続手順:
- Arduinoの9番ピン(PWM対応)からジャンパーワイヤーをブレッドボードへ引く
- ブレッドボード上で抵抗(220Ω)の一端を接続
- 抵抗のもう一端にLEDのアノード(長い足)を接続
- LEDのカソード(短い足)からジャンパーワイヤーでArduinoのGNDピンへ接続
この回路でデジタル制御(ON/OFF)とPWM制御(明るさ調整)の両方が試せます。
ArduinoコードでLEDを制御する
デジタル制御(ON/OFF)
const int LED_PIN = 9;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH); // 点灯
delay(500);
digitalWrite(LED_PIN, LOW); // 消灯
delay(500);
}
digitalWrite() はピンをHIGH(5V)またはLOW(0V)にする関数です。delay()の値(ミリ秒)を変えることで点滅間隔を調整できます。
PWMで明るさを調整する
PWM(Pulse Width Modulation、パルス幅変調)は、高速でON/OFFを繰り返すことで疑似的なアナログ値を作り出す技術です。ArduinoのPWMピン(ピン番号にチルダ~がついたもの)で使用できます。
const int LED_PIN = 9; // 9番はPWM対応ピン
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// フェードイン
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(LED_PIN, brightness);
delay(10);
}
// フェードアウト
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(LED_PIN, brightness);
delay(10);
}
}
analogWrite(ピン番号, 値) の値は0(完全消灯)〜255(最大輝度)で指定します。このコードでLEDがゆっくり明るくなり、ゆっくり暗くなる「呼吸エフェクト」が実現できます。
複数のLEDを順番に点滅させる
const int LED_PINS[] = {9, 10, 11}; // 3つのLED
const int NUM_LEDS = 3;
void setup() {
for (int i = 0; i < NUM_LEDS; i++) {
pinMode(LED_PINS[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < NUM_LEDS; i++) {
digitalWrite(LED_PINS[i], HIGH);
delay(200);
digitalWrite(LED_PINS[i], LOW);
}
}
配列を使うことで複数のLEDをすっきりしたコードで管理できます。LEDを追加したい場合は配列に要素を追加し、NUM_LEDSの値を変更するだけです。
RGB LEDで色を作る
RGB LEDは赤(R)・緑(G)・青(B)の3色のLEDが一つのパッケージに入ったLEDです。各色の明るさをPWMで制御することで、任意の色を混色して表現できます。
RGB LEDにはアノードコモン(全色のアノードが共通)とカソードコモン(全色のカソードが共通)の2種類があります。入門用にはカソードコモン型が配線しやすいです。
const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;
void setColor(int r, int g, int b) {
analogWrite(RED_PIN, r);
analogWrite(GREEN_PIN, g);
analogWrite(BLUE_PIN, b);
}
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop() {
setColor(255, 0, 0); // 赤
delay(1000);
setColor(0, 255, 0); // 緑
delay(1000);
setColor(0, 0, 255); // 青
delay(1000);
setColor(255, 165, 0); // オレンジ(赤+緑の混色)
delay(1000);
}
LEDの種類と選び方
| 種類 | 特徴 | 主な用途 |
|---|---|---|
| 5mm砲弾型LED | 最も一般的、安価 | インジケーター、Lチカ練習 |
| 3mm砲弾型LED | 小型、狭い場所に最適 | 小型機器の表示灯 |
| RGB LED | 1素子で多色表現 | 演出照明、状態表示 |
| NeoPixel(WS2812B) | デジタル制御、複数連結可 | テープLED、イルミネーション |
| 表面実装(SMD)LED | 基板直付け用、超小型 | プリント基板の組み込み |
特にNeoPixel(WS2812B)は、信号線1本で複数のLEDを独立して制御できる高機能なLEDです。ArduinoではFastLEDまたはAdafruit NeoPixelライブラリを使って簡単に制御できます。
よくあるトラブルと対策
LEDが点灯しない場合:
- LEDの向き(極性)を確認する(長い足がプラス側)
- 抵抗値が大きすぎないか確認する(10kΩ以上だと暗すぎて見えない場合がある)
- ブレッドボードの接触不良を疑う(別の行に刺し直す)
- ArduinoのGNDが接続されているか確認する
pinMode()でOUTPUTに設定しているか確認する
LEDがすぐに切れた場合: 保護抵抗なしで直接接続した可能性が高いです。抵抗を必ず直列に入れてください。
まとめ
LED制御の要点をまとめます。
- LEDには極性がある(長い足がアノード=プラス側)
- 保護抵抗は必須。オームの法則で計算、220〜470Ωが入門の目安
- デジタル制御には
digitalWrite()、明るさ調整にはanalogWrite()を使う - PWMピン(チルダ〜付き)でアナログ的な制御が可能
- RGB LEDで混色すると多彩な色表現ができる
LEDの制御をマスターしたら、次はセンサーの値によってLEDの色や明るさを変える応用へ進んでみましょう。センサーについてはセンサーの種類と選び方ガイドを参考にしてください。
よくある質問
Q. LEDに抵抗が必要な理由は何ですか?
LEDは電流を制限しないと過電流で焼き切れます。オームの法則で必要な抵抗値を計算し、保護抵抗を必ず直列につなぎましょう。5V回路で一般的なLEDなら220Ω〜470Ωが目安です。
Q. LEDの向きを間違えると壊れますか?
LEDには極性(プラスとマイナス)があります。逆につないでも通常は壊れませんが、点灯しません。足の長い方(アノード)をプラス側に接続します。
Q. PWMで何ができますか?
PWM(パルス幅変調)を使うと、LEDの明るさを0〜100%で調整できます。ArduinoのanalogWrite()関数でPWM制御が可能で、フェードイン・フェードアウトなどの演出ができます。
Q. ArduinoのデジタルピンとPWMピンの違いは何ですか?
デジタルピンはHIGH(5V)とLOW(0V)の2値のみ出力できます。PWMピン(チルダ記号〜がついたピン)はanalogWrite()で0〜255の値を指定でき、疑似的なアナログ出力ができます。