Raspberry PiでLEDの明るさを調整する際、
・1つのボタンでは使いづらい
・明るさを上げる・下げるを分けたい
・より実用的な操作をしたい
と感じたことはありませんか?
本記事では、ボタンを2つ使用して、
LEDの明るさを「増やす」「減らす」操作を実装する方法を解説します。
今回やること
・GPIO17 → LED(PWM出力)
・GPIO18 → ボタン①(明るくする)
・GPIO27 → ボタン②(暗くする)
ボタンごとに明るさを増減させます。
回路構成
■ LED(GPIO17)
GPIO17 → 抵抗 → LED(+)
LED(−)→ GND
■ ボタン①(明るくする)
GPIO18 → ボタン → GND
■ ボタン②(暗くする)
GPIO27 → ボタン → GND
※gpiozeroでは内部プルアップが有効なため、外部抵抗は不要です。


Pythonコード
ファイル名:two_button_pwm_led.py
from gpiozero import PWMLED, Button
from signal import pause
led = PWMLED(17)
button_up = Button(18)
button_down = Button(27)
brightness = 0.5 # 初期値
led.value = brightness
def increase():
global brightness
brightness += 0.1
if brightness > 1:
brightness = 1
led.value = brightness
print(f"明るさ: {brightness}")
def decrease():
global brightness
brightness -= 0.1
if brightness < 0:
brightness = 0
led.value = brightness
print(f"明るさ: {brightness}")
button_up.when_pressed = increase
button_down.when_pressed = decrease
pause()


コード解説
ボタンを2つ用意し、それぞれに役割を持たせています。
・button_up → 明るさを増やす
・button_down → 明るさを減らす
ボタンごとにbrightnessの値を増減しているため、
LEDの明るさを自由に調整できます。
※ボタンを押すたびに明るさが変化します。
連続で押すことで細かく調整できます。
※brightnessは0〜1の範囲で制御しています。
※初期値を0.5にすることで、
起動時にLEDが半分の明るさで点灯します。
動作確認
・上ボタン → LEDが明るくなる
・下ボタン → LEDが暗くなる
それぞれ正常に動作すれば成功です。
※Pythonでは小数(float)は2進数で管理されているため、
0.7999999のように表示される場合があります。
これは仕様によるもので、動作には問題ありません。
実行直後

上ボタンを押下


下ボタンを押下


なぜボタン2つで制御できるのか?
各ボタンの押下イベントを個別に処理しているため、
それぞれ異なる動作を割り当てることができます。
その結果、「増加」と「減少」を分けた制御が可能になります。
よくある失敗
・GPIO番号の間違い(18と27)
・brightnessが0未満や1を超えている
・pause()を書いていない
応用
・長押しで連続増減
・液晶表示と組み合わせる
・音量やモータ速度制御
関連記事
まとめ
本記事では、ボタン2つを使用して、
LEDの明るさを増減する方法を解説しました。
・ボタンごとに役割を分ける
・PWMで明るさ制御
・実用的な操作が可能
こちらの記事で使用しているRaspberry Pi 5 はこちら
▶ Amazonで詳細を見る
本記事では、こちらの電子工作キットを使用しています。
▶ OSOYOO(オソヨー) Raspberry Pi 用 学ぶ電子工作キット(Amazonへのリンク)
