Raspberry PiでLEDの明るさを調整したいけれど、
・ボタンで明るさを変える方法が分からない
・PWMと組み合わせた使い方が知りたい
・実用的な制御方法を学びたい
と悩んでいませんか?
本記事では、ボタン入力とPWMを組み合わせて、
LEDの明るさを段階的に変更する方法を解説します。
今回やること
・GPIO17 → LED(PWM出力)
・GPIO18 → ボタン(入力)
ボタンを押すたびにLEDの明るさを変化させます。
回路構成
■ LED(GPIO17)
GPIO17 → 抵抗 → LED(+)
LED(−)→ GND
■ ボタン(GPIO18)
GPIO18 → ボタン → GND
※gpiozeroでは内部プルアップが有効なため、
ボタン側に外部抵抗は不要です。
今回は以前の記事(Raspberry Pi 5でボタン入力してLEDを制御する方法)で構築した
環境をそのまま使用しています。
Pythonコード
ファイル名:button_pwm_led.py
from gpiozero import PWMLED, Button
from signal import pause
led = PWMLED(17)
button = Button(18)
brightness = 0.0
def change_brightness():
global brightness
brightness += 0.2
if brightness > 1:
brightness = 0
led.value = brightness
print(f"明るさ: {brightness}")
button.when_pressed = change_brightness
pause()
コードを書いたら、
Ctrl + O → 保存
Ctrl + X → 終了


コード解説
PWMLEDを使用することで、LEDの明るさを0〜1の範囲で制御できます。
※brightnessは0〜1の範囲で指定します。
1に達したら0に戻るようにしています。
ボタンが押されるたびに、
brightnessの値を増やし、明るさを変更しています。
※ボタンは押した瞬間のみ反応します。
押し続けても明るさは変化しません。
今回のコードでは、0 → 0.2 → 0.4 → 0.6 → 0.8 → 1.0 の
6段階で明るさが変化します。
※細かく明るさを調整したい場合は、
0.2ではなく0.1などに変更すると段階が増えます。
動作確認
ターミナルで以下を実行します。
sudo python3 button_pwm_led.py

ボタンを押すたびに、
・暗い → 少し明るい → 明るい → 最大 → 消灯
と変化すれば成功です。
実行直後は消灯状態です。
ボタン押下1回目


ボタン押下2回目


ボタン押下3回目


ボタン押下4回目


ボタン押下5回目


ボタン押下6回目


最初に実行した直後の状態に戻ります。
なぜボタンで明るさを制御できるのか?
ボタンを押すとGPIO18の状態が変化し、
プログラムがイベントとして検知します。
そのタイミングでPWMの値(led.value)を変更することで、
LEDの明るさを制御できます。
(ボタンが押されるたびにbrightnessの値を増やしているため、
LEDの明るさが段階的に変化します。)
よくある失敗
・GPIO17と18を間違えている
・pause()を書いていない
・brightnessが1を超えている
・LEDの向きが逆
応用
・長押しで明るさ連続変化
・ボタン2つで明るさ増減
・センサー入力と組み合わせる
関連記事
・gpiozeroとは
・LED点灯方法
・ボタン入力
・PWM制御
まとめ
本記事では、ボタン入力とPWMを組み合わせて、
LEDの明るさを制御する方法を解説しました。
・ボタンでイベント検知
・PWMで明るさ制御
・組み合わせることで実用的な制御が可能
こちらの記事で使用しているRaspberry Pi 5 はこちら
▶ Amazonで詳細を見る
本記事では、こちらの電子工作キットを使用しています。
▶ OSOYOO(オソヨー) Raspberry Pi 用 学ぶ電子工作キット(Amazonへのリンク)
次におすすめの記事
・長押しで明るさを連続的に変化させる方法
・ボタン2つで明るさを増減する方法(準備中)
