検索コード

レッスン98-5:Arduinoを使ってボタンが押されたときにライトをフェードさせる

レッスン98-5:Arduinoを使ってボタンが押されたときにライトをフェードさせる

このレッスンでは、コマンドでフェードアウトするライトを作ります。押しボタンを押すと、LEDが最大輝度で点灯し、そこから滑らかに暗くなって消灯します。これはArduinoの初心者にとって最も役立つパターンの一つです。なぜなら、デジタル入力(ボタン)とPWMアナログ出力(LEDの明るさ)を組み合わせており、単に何かをオン・オフするのではなく、変化の速度滑らかさを制御する方法を学べるからです。

LED with resistor on breadboard connected to Arduino with a push button
LED with resistor on breadboard connected to Arduino with a push button

オンデマンドのフェードは、実際の製品のあらゆる場所で見られます。ここで学んだことを活用できる実用的な方法をいくつか紹介します:

  • ソフトオフ表示灯 — ランプがパッと消える代わりに、ボタンを押すとゆっくり暗くなり、家電や3Dプリントの筐体ではるかに洗練されて見えます。
  • スリープ/スタンバイモード — ボタンを押すと明るいステータスLEDが暗くなって消えるので、夜間に邪魔にならず、回路は通電したままです。
  • 「フェード・トゥ・ブラック」ステージまたはモデル照明 — 1つのボタンで、突然の消灯ではなく、LEDストリップやパネルを滑らかに調光できます。
  • バッテリー節約のフィードバック — モーメンタリのボタン押下で明るい確認フラッシュが表示され、それがフェードアウトするので、LEDが全点灯するのは短時間だけです。
  • インタラクティブアートや小道具 — タッチでトリガーされる「息を吐く」ようなエフェクトは、コスプレ、ジオラマ、博物館の展示に最適です。

核心となる考え方はシンプルです。ボタンがArduinoに「今すぐフェードを開始しろ」と伝え、ArduinoがLEDの明るさを255(最大)から0(消灯)まで小さなステップで下げていきます。ステップが小さく、すばやく行われるため、目にはジャンプではなく滑らかなフェードとして見えます。

これまでにLEDをフェードさせたことがない場合、基本的な明るさ制御はレッスン98-4:Arduinoを使ったLEDライトのフェード:明るさ制御で扱っています。このレッスンは、その基礎の上に押しボタンをトリガーとして追加して直接構築しています。

ハードウェアと部品

330_ohm_resistor
330_ohm_resistor

これは非常に低コストな製作です — ここにあるものはすべて標準的なスターターキットの材料です:

  • Arduinoボード(Uno、Nano、Mega、または互換ボード)
  • LED 1個(5 mmまたは3 mm、色は任意)
  • 押しボタンスイッチ1個(モーメンタリ、4ピンのタクタイル型がよく合います)
  • LED用抵抗1個 — 200 Ωから1000 Ωの範囲(定番の220 Ωまたは330 Ωが最適)
  • ブレッドボードとデュポンジャンパワイヤ
  • プログラミング用USBケーブル(有線なしで動かしたい場合はバッテリーまたは5 Vアダプター)

LED抵抗についての簡単な注意:LEDは両端に約2 V、約10 mAの電流が必要です。5 V電源の場合、抵抗が残りの3 Vを降下させる必要があるため、オームの法則から約300 Ωになります。300 Ωから1000 Ωまでの範囲ならどれでも動作します — 値が大きいほどLEDは暗くなるだけです。抵抗の使用は任意ではありません。これがないとLEDははるかに多くの電流を引き込み、焼き切れてしまいます。

配線ガイド

Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch

配線は意図的に最小限です。LEDのアノード(長い脚)は抵抗を通してデジタルピン3に接続し、カソード(短い脚、パッケージの平らな側)はグランドに接続します。押しボタンはデジタルピン2とグランドの間に接続します — コードがArduinoの内蔵プルアップを有効にするため、外部プルアップ抵抗は不要です。

LEDの極性に注意してください。プラスチック本体の平らな側と短い脚がカソード(負極)を示します。逆に挿入するとLEDは単に点灯しません — 損傷は起こらず、ひっくり返すだけです。

押しボタンについて、4ピンのタクタイルスイッチを使用する場合、ピンは内部的にペアになっていることを覚えておいてください。4本のピンのうち2本は常に接続されています。導通モードのマルチメーターを使って、押したときにビープ音が鳴るペアを見つけ、各側から1本ずつピンを使用します。片側はピン2へ、もう片側はグランドへ接続します。

コードの説明

スケッチは短く、変更したいもののほとんどは冒頭の数行にあります。ユーザーが設定可能な部分は次のとおりです:

const int pushButtonPin = 2;//プッシュボタンスイッチが接続されているピン
const int LEDPin = 3;//LEDが接続されているピン
const int fadeAmount = 10;    // LEDをフェードさせる量
const int fadeSpeed = 5;//フェード時間(ミリ秒)。値が小さいほどフェードが速くなる

pushButtonPinLEDPinは、Arduinoにどのピンに配線したかを伝えるだけのものです。ボタンをピン4に、またはLEDをピン9(PWM対応ピン)に移動した場合は、配線に合わせてこの2つの数値を変更するだけです。LEDピンはPWMを必ずサポートしている必要があることに注意してください — Unoではピン3、5、6、9、10、11のいずれかになります — フェードにはanalogWrite()が必要だからです。

fadeAmountは各明るさステップの大きさを制御します。明るさは0から255まで変化するので、fadeAmountが10の場合、LEDはおよそ25ステップで暗くなります。値が大きいほどフェードは粗く速くなり、値が小さいほど滑らかで遅くなります。

fadeSpeedは各ステップ間の遅延時間(ミリ秒)です。これはエフェクトの感触を決める最も重要なつまみです。5 msの値では素早くキビキビしたフェードになり、30 ms以上の値ではゆっくりと優雅な調光になります。fadeAmountと組み合わせることで、この2つの値で思い通りの特性にフェードを調整できます。

知っておく価値のある内部変数もあります:

int brightness = 255;    // LEDの明るさ
int pushButtonStatus = 0; // ピン2からのプッシュ値

brightnessは255から始まります。つまり、ボタンを押すたびにLEDは最大輝度から始まります。フェードをもっと暗い点 — 例えば半分の明るさ — から始めたい場合は、これを128に変更してください。

ロジック自体はこのように動作します:ループがボタンを読み取ります。押されている場合(内部プルアップのためLOW)、brightnessがゼロより大きい限りwhileループが実行されます。そのループ内でArduinoは現在のbrightnessをLEDに書き込み、fadeAmountを減算し、fadeSpeedミリ秒待機して、繰り返します。ボタンが押されていない場合、LEDは単に0に書き込まれ、オフのままです。

重要な詳細が1つあります:内部プルアップとは、ボタンが押されていないときにピンがHIGHを読み取り、押されているときにLOWを読み取ることを意味します。だからこそ、コードは押下を検出するためにLOWをチェックしているのです。もし外部プルダウン抵抗に切り替えた場合は、この比較をHIGHに変更する必要があります。

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

アップロードすると、動作は即座で満足のいくものです。ボタンを押すとLEDは最大輝度にジャンプし、その後、制御可能な期間で目に見えて暗くなっていきます。ボタンを離すとLEDは消灯し、もう一度押すとフェードが最大輝度から再開します。

ビデオでは、いくつかの設定でフェードが実演されているので、違いを見て聞いて確認できます。fadeAmount = 20ではフェードは速く粗く — 目に見えるいくつかのステップでゼロに達します。fadeAmount = 10に下げるとかなり滑らかになり、fadeAmount = 3にするとフェードが明らかに長くなり、ほぼ連続的に見えます。fadeSpeedの値も同様に劇的な効果があります:1 msに設定するとフェードはほぼ瞬時になり、より大きな値では引き延ばされます。

この実験を試してみてください:fadeAmount = 5fadeSpeed = 30に設定します。ゆっくりと穏やかな調光が得られ、まるで明かりが眠りにつくように見えます。次にfadeAmount = 50fadeSpeed = 1に設定すると、ハードで速いカットになります。どちらも「間違い」ではありません — すべてはあなたが望む雰囲気次第です。

同じボタンのトグル動作については、レッスン98-3:Arduinoでプッシュボタンを使ってトグルLEDをオン/オフする方法で別途扱っており、よりシンプルな押すと点灯するバージョンはレッスン98-2:Arduinoでプッシュボタンを使ってLEDをオン/オフする方法にあります。

フェードはモーメンタリ接点によってトリガーされるため、この同じ回路はLEDの代わりにリレーやMOSFETを駆動するのに自然に適しています — 12 Vランプ、モーターのソフトスタート、または発熱体のウォームアップをフェードさせることができます。ボタンは単なるトリガーであり、何をフェードさせるかはあなた次第です。

このビデオの関連プロジェクト

チャプター

  • [00:00] 10個のLEDプロジェクトの概要
  • [01:00] Arduinoステップバイステップコースの紹介
  • [02:29] LEDの基礎:記号、極性、電流
  • [03:49] オームの法則を使ったLED抵抗の計算
  • [05:53] プロジェクト1:LEDの点灯と消灯
  • [12:43] プロジェクト2:押しボタン付きLED
  • [17:13] プロジェクト3:押しボタンでLEDをトグル
  • [20:12] プロジェクト4:LEDのフェーディング
  • [23:20] プロジェクト5:押しボタンでLEDをフェーディング
  • [27:32] プロジェクト6:シーソーLED
  • [30:47] プロジェクト7:ウォーキングライト
  • [36:41] プロジェクト8:押しボタン付きウォーキングライト
  • [42:25] プロジェクト9:LED電圧レベルメーター
  • [49:25] プロジェクト10:Arduino信号機

画像

Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
押しボタン付きでArduinoに接続されたブレッドボード上の抵抗付きLED
押しボタン付きでArduinoに接続されたブレッドボード上の抵抗付きLED
937-Lessson 98-LED-5: Arduino code to fade the LED when push button is pressed
言語: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

必要かもしれないもの

ファイル📁

Arduinoライブラリ(zip)

ユーザーマニュアル