はじめに
PWM(パルス幅変調)を使った初めてのプロジェクトへようこそ!このチュートリアルでは、LEDを消灯状態から明るく、そして再び消灯へと滑らかにフェードさせるシンプルな回路を組み立てます。これは、analogWrite()を使って明るさやモーター速度、平均電圧の変化に応答するあらゆるデバイスを制御する方法を学べる、Arduino初心者向けの定番プロジェクトです。
今回は、SPICE準拠のアナログサポートを備えたブラウザ内回路シミュレーター Velxio を使用します。ハードウェアは不要で、ブラウザだけでOK!コードを編集して結果を即座に確認できます。

回路の解説
このプロジェクトで使用する部品と配線を見ていきましょう。
部品
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Uno | 1 | 動作の頭脳 |
| LED(任意の色) | 1 | 今回は青色LEDを使用 |
| 抵抗(220 Ω) | 1 | 電流制限抵抗(回路図には非表示ですが推奨) |
| ジャンパーワイヤー | 2 | 接続用 |
配線
- LEDアノード(長い足) → Arduinoの9番ピン(PWM対応ピン)に接続。
- LEDカソード(短い足) → ArduinoのGNDに接続。
重要: LEDを焼損から防ぐため、必ず電流制限抵抗(通常220 Ω~1 kΩ)をLEDと直列に接続してください。VelxioシミュレーターではLEDモデルに内部抵抗が含まれていますが、実際の回路では必ず追加する必要があります。
配線の詳細は以下の通りです:
- ワイヤー1(青): Arduinoの9番ピンからLEDアノード(A)へ。
- ワイヤー2(黒): LEDカソード(C)からArduinoのGNDへ。
たった2本の接続だけです。Arduinoの9番ピンはPWM信号を出力でき、これを使ってLEDの明るさを変化させます。

コードの解説
Velxioでコードエディターを開きます。以下のArduinoスケッチが表示されます:
// Fade LED with PWM
// Smoothly fade LED brightness
const int LED_PIN = 9; // PWM pin
int brightness = 0;
int fadeAmount = 5;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
analogWrite(LED_PIN, brightness);
brightness += fadeAmount;
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
delay(30);
}
動作の仕組み
LED_PIN = 9: 9番ピンはPWMに対応しているため使用します(Arduino Unoでは~マークが付いています)。brightness: 現在のPWM値(0~255)を保持する変数。0 = 消灯、255 = 最大輝度。fadeAmount: ループごとに明るさが変化する量。正の値 = 明るくなる、負の値 = 暗くなる。setup(): LEDピンを出力に設定。loop():analogWrite(LED_PIN, brightness)でPWM信号を出力。brightness += fadeAmountで明るさを増減。if文で明るさが0または255に達したかをチェック。達した場合、fadeAmountを反転して方向を逆転。delay(30)でフェードを遅くして視認可能に。
重要な概念
- PWM(パルス幅変調): デジタルピンを高速でオン/オフ切り替える技術。平均電圧(つまりLEDの明るさ)はデューティサイクル(オン時間とオフ時間の比率)に依存します。
analogWrite()でデューティサイクルを設定します。 analogWrite(): 0(常にオフ)から255(常にオン)までの値を受け付けます。pinMode(): ピンを出力(または入力)に設定。delay(): プログラムをミリ秒単位で一時停止。これがないとフェードが速すぎて見えません。
よくある問題とデバッグのヒント
-
LEDが点灯しない?
- LEDの接続が正しいか確認(アノードを9番ピン、カソードをGNDに)。
- コードがアップロードされているか確認(ツールバーのRunボタンをクリック)。
LED_PINが実際に使用しているピンと一致しているか確認。
-
LEDが最大輝度のまま?
- PWM対応ピン(Unoでは3、5、6、9、10、11)を使用しているか確認。13番ピンはPWM非対応。
digitalWrite()ではなくanalogWrite()が呼び出されているか確認。
-
フェードが速すぎる、または遅すぎる?
delay(30)の値を調整。大きいほどフェードが遅くなります。fadeAmountを変更してステップサイズを調整(例:1で非常に滑らか、10でより速く)。
-
シミュレーターが応答しない?
- キャンバスツールバーのResetボタンを使用。
- 必要に応じてページをリフレッシュ。

発展課題
基本的なフェードをマスターしたら、以下のチャレンジに挑戦してみましょう:
- 複数のLED: 10番と11番ピンにさらに2つのLEDを追加。順番に、または異なる速度でフェードさせる。
- ボタン制御: プッシュボタンを追加してフェードの開始/停止を制御。
- ポテンショメーターによる速度制御: ポテンショメーターを使ってフェード速度を調整(
delay(30)をアナログ入力から読み取った変数に置き換え)。 - RGB LED: RGB LEDを使用し、3つのPWMピンを制御して異なる色にフェード。
- シリアルモニター: 明るさの値をシリアルモニターに表示してデバッグ。
実際に試してみよう!
実際の動作を確認してみませんか?Velxioでライブサンプルを開いてください:
コードの編集、フェード速度の変更、新しい部品の追加も可能です。シミュレーターはブラウザ内で完全に動作し、ダウンロードやセットアップは不要です。
それでは、楽しいフェード体験を!