検索コード

レッスン98-4:Arduinoを使ってLEDライトをフェードさせる:明るさの制御

レッスン98-4:Arduinoを使ってLEDライトをフェードさせる:明るさの制御

LEDはいたるところにあります — インジケーター、ディスプレイ、装飾照明 — しかしほとんどの初心者は、単に点けたり消したりするだけで止まってしまいます。このプロジェクトは次のステップに進みます。Arduino内蔵のPWM(パルス幅変調)機能を使って、LEDを滑らかにフェードイン・フェードアウトさせます。急な点滅ではなく、明るさが徐々に上がったり下がったりすることで、自然な調光、呼吸のような効果、そして純粋にデジタルなピンからのアナログ的な制御を実現します。結果をすぐに目で確認できるため、最も満足度の高い最初のプロジェクトの一つであり、同じ技術が実際の製品におけるモーター速度制御、オーディオ音量、バックライトの調光を支えています。

LED-5mm-green

フェードを理解すれば、幅広い実用的な製作に応用できます:

  • 気を散らす点滅ではなく、穏やかに脈打つデバイス上の「呼吸する」ステータスインジケーターの作成
  • 周囲の明るさや時間帯に基づいてLEDナイトライトを自動的に調光する
  • LCDやOLEDディスプレイのバックライトの明るさを制御する
  • 明るさレベル間を滑らかに移行するムード照明や装飾ランプの製作
  • 徐々に明るくなって自然に目覚めさせる、ゆっくりとした日の出目覚まし時計のシミュレーション
  • 小型DCモーターやファンに速度制御を追加する(同じPWMの原理が適用されます)

このチュートリアルはRobojax Arduinoステップバイステップコースの一部であり、特に10のうちのプロジェクト4を扱っています:Arduinoを使ってLEDライトをフェードさせる。完全なプログラムは記事の下からダウンロードできます。

ハードウェアと部品

330_ohm_resistor
330 ohm 0.25 watt resistor

このプロジェクトの部品リストは最小限です — これまでにArduinoを触ったことがあれば、必要なものはすでに揃っているでしょう:

  • 1× Arduinoボード(Uno、Nano、Mega、または互換ボード)
  • 1× LED(5mmまたは3mm、色は任意)
  • 1× 抵抗(200Ω~1000Ω — 300Ω~1kΩの範囲が適しています)
  • ブレッドボードとデュポンジャンパーワイヤー
  • プログラミングと電源用のUSBケーブル

LEDについての重要な注意点:長い脚がアノード(プラス)で、短い脚 — またはプラスチックケースに平らな端がある側 — がカソード(マイナス)です。これを逆にするとLEDは単に点灯しないので、電源を入れる前に再確認してください。

抵抗値については、トランスクリプトで計算を説明しています (動画の03:49にて):一般的なLEDは約2Vを降下し、およそ10mAの電流を必要とします。5V電源では、残りの3Vが抵抗で降下する必要があり、R = V/I = 3V / 0.01A = 300Ωとなります。実際には、300Ωから1000Ωまでの範囲で動作します — 値が高いほどLEDは暗くなるだけです。フェードの場合、明るさを変化させるので、これは実際には問題ありません。

配線ガイド

Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw

配線はできる限りシンプルです。LEDのアノードは抵抗を介してArduinoのPWM対応ピンに接続します — このプロジェクトではピン3です。カソードはグラウンドに接続します。

なぜ特にピン3なのでしょうか?すべてのArduinoピンがPWMをサポートしているわけではないからです。ほとんどのArduinoボードでは、PWM対応ピンはチルダ記号(~)でマークされています — 通常、Unoではピン3、5、6、9、10、11です。非PWMピンを使用すると、analogWrite()は可変出力を生成しません。LEDは単にオンかオフになるだけです。

回路を次のように接続します:

  1. LEDをブレッドボードに挿入し、どちらの脚がアノード(長い方)でどちらがカソード(短い方/平らな側)かを確認します。
  2. LEDのアノードを抵抗を介してArduinoのピン3に接続します。
  3. LEDのカソードをArduinoのGNDピンに接続します。
  4. ArduinoをUSB経由でコンピュータに接続します。

コードの説明

このプロジェクトのスケッチは、古典的なArduinoの「Fade」サンプルに基づいており、いくつかの調整が加えられています。すべての行を説明するのではなく、自分の実験で調整したい部分に焦点を当てましょう。

ユーザー設定可能な変数

コードの先頭で、3つの変数が動作全体を制御します:

int led = 3;           // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 3;    // how many points to fade the LED by
  • led — これはLEDが接続されているピンを定義します。デフォルトはピン3ですが、PWM対応のピン(ボード上で~マークが付いているもの)ならどれでも変更できます。LEDを別のピンに移動した場合は、この値を合わせて更新してください。
  • brightness — これは現在の明るさレベルで、0(消灯)から255(最大輝度)までの範囲です。コードでは0から始まりますが、その範囲内の任意の値から始めることもできます。
  • fadeAmount — これが最も試しがいのある変数です。各サイクルで何段階の明るさ「ステップ」を進むかを制御します。3のような小さな値では、ゆっくりとした緩やかなフェードになります。20のような大きな値では、LEDが非常に速くフェードインとフェードアウトを繰り返します。トランスクリプトでは(動画の22:37)でこれが実演されています — 5から20に変更すると、効果が劇的に速くなります。

フェードの仕組み

フェードの核心は、loop()内の2行で行われます:

analogWrite(led, brightness);
brightness = brightness + fadeAmount;

ループを通過するたびに、現在の明るさの値がanalogWrite()を使ってLEDに書き込まれ、その後、明るさがfadeAmountだけ増加されます。analogWrite()関数はPWMを使ってアナログ電圧をシミュレートします — ピンを高速でオンとオフに切り替え、オン時間とオフ時間の比率が知覚される明るさを決定します。

明るさが0または255に達すると、コードはfadeAmountの符号を反転させて方向を逆にします:

if (brightness <= 0 || brightness >= 255) {
  fadeAmount = -fadeAmount;
}

これにより、LEDがフェードインし、次にフェードアウトし、再びフェードインする — 連続的な呼吸サイクルが生まれます。ループの最後にあるdelay(30)がアニメーション全体の速度を制御します。遅延を短くするとフェードが速くなり、遅延を長くすると遅くなります。

値を使った実験

2つの変数が視覚効果を最も大きく左右します:

  • fadeAmountを増やすと、より速く劇的なフェードになります。10や20を試してみてください。
  • fadeAmountを減らすと、ゆっくりとした穏やかな呼吸効果になります。1や2を試してみてください。
  • delay()の値を調整すると、ペースを変更できます。遅延を小さくするとサイクル全体が速くなり、大きくすると引き伸ばされます。

小さなfadeAmountと短い遅延を組み合わせると、非常に滑らかでほとんど有機的なフェードが生まれます — アンビエント照明に最適です。大きなfadeAmountと短い遅延では、速いパルス効果が生まれます。

ライブプロジェクトのデモンストレーション

コードがアップロードされると、LEDが消灯から最大輝度までゆっくりと明るくなり、その後暗くなり、無限に繰り返されるのが見えます。トランスクリプトでは(動画の22:25)でデフォルトの動作が示されています — 滑らかで中程度の速度のフェードです。

fadeAmountを20に変更すると、LEDは非常に速くフェードインとフェードアウトを繰り返します — ほとんどちらつきのように。3に設定すると、フェードには明らかに長い時間がかかり、リラックスした緩やかな変化が生まれます。これは動画の(動画の23:02)で明確に実演されています。

このプロジェクトの素晴らしさは、コード変更の効果をすぐに確認できることです — 配線の変更は不要で、変数を編集して再アップロードするだけです。このタイトなフィードバックループにより、PWMとタイミングがどのように相互作用するかの直感を養うのに最適な方法となっています。

連続的に実行するのではなく、プッシュボタンでフェードをトリガーするように拡張したい場合は、別のチュートリアルで扱っています — 以下の関連プロジェクトセクションをご覧ください。

この動画の関連プロジェクト

チャプター

  • [00:00] 10のArduino LEDプロジェクトの概要
  • [01:22] コースと必要な部品の紹介
  • [02:29] LEDの理解:記号、極性、種類
  • [03:49] オームの法則を使ったLED抵抗値の計算
  • [05:53] プロジェクト1:LEDの点灯と消灯
  • [12:43] プロジェクト2:プッシュボタンによるLED制御
  • [17:13] プロジェクト3:プッシュボタンでLEDをトグル
  • [20:12] プロジェクト4:LEDのフェード — コードの解説
  • [22:25] フェードのデモンストレーションとフェード速度の調整
  • [23:20] プロジェクト5:プッシュボタントリガーによるLEDフェード
  • [27:32] プロジェクト6:シーソーLED効果
  • [30:47] プロジェクト7:5つのLEDを使ったウォーキングライト
  • [36:41] プロジェクト8:プッシュボタンで制御するウォーキングライト
  • [42:25] プロジェクト9:ポテンショメーターを使ったLED電圧レベルメーター
  • [49:25] プロジェクト10:Arduino信号機

画像

Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
936-Lessson 98-LED-4: Arduino code to fade the LED light
言語: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

必要かもしれないもの

ファイル📁

Arduinoライブラリ(zip)

ユーザーマニュアル