PR

Raspberry Pi 5でボタン長押しでLEDの明るさを変える方法(PWM・gpiozero)

4. Raspberry Pi

Raspberry Piでボタンを使った制御に慣れてきたら、

・長押しで連続的に変化させたい
・より実用的な操作を実装したい
・PWMと組み合わせた応用を学びたい

と感じることはありませんか?

本記事では、ボタンの長押しを検知して、
LEDの明るさを連続的に変化させる方法を解説します。

スポンサーリンク

今回やること

・GPIO17 → LED(PWM出力)
・GPIO18 → ボタン(入力)

ボタンを押している間、LEDの明るさが徐々に変化します。

回路構成

■ LED(GPIO17)
GPIO17 → 抵抗 → LED(+)
LED(−)→ GND

■ ボタン(GPIO18)
GPIO18 → ボタン → GND

※gpiozeroでは内部プルアップが有効なため、
ボタン側に外部抵抗は不要です。

今回は以前の記事(Raspberry Pi 5でボタン入力してLEDを制御する方法)で構築した
環境をそのまま使用しています。

Pythonコード

ファイル名:button_long_press_pwm_led.py

from gpiozero import PWMLED, Button
from time import sleep

led = PWMLED(17)
button = Button(18)

brightness = 0.0

while True:
    if button.is_pressed:
        brightness += 0.01
        if brightness > 1:
            brightness = 0
        led.value = brightness
        sleep(0.01)

コードを書いたら、

Ctrl + O → 保存
Ctrl + X → 終了

コード解説

button.is_pressedを使用することで、
ボタンが押されている間の状態を取得できます。

押されている間だけbrightnessの値を増やし、
LEDの明るさを連続的に変化させています。

※brightnessは0〜1の範囲で制御しています。

whileループで高速に繰り返し処理を行っているため、
ボタンを押している間、brightnessの値が連続的に増加します。
※whileループで常に処理を行うため、
CPU負荷が増える点に注意してください。

※sleepを入れることで、明るさの変化速度を調整しています。
値が小さいほど速く変化します。

動作確認

ターミナルで以下を実行します。

sudo python3 button_long_press_pwm_led.py

ボタンを押し続けると、

・LEDが徐々に明るくなる
・最大値に達すると再び暗くなる

という動作になれば成功です。

※ボタンを離すと、その時点の明るさで固定されます。

※より滑らかに変化させたい場合は、
brightnessの増加量(0.01)を小さくすると調整できます。

短押しとの違い

短押し(when_pressed)は「押した瞬間」だけ反応しますが、
長押し(is_pressed)は「押している間ずっと」反応します。

よくある失敗

・sleepがないため高速すぎる
・brightnessが1を超えている
・GPIO番号の間違い

応用

・長押しで音量調整
・モータ速度制御
・押す長さで処理を変える

関連記事

ボタン入力
PWM制御
ボタン+PWM(段階調整)

まとめ

本記事では、ボタン長押しによってLEDの明るさを連続的に変化させる方法を解説しました。

・is_pressedで状態を取得
・PWMで連続制御
・より実用的な操作が可能

こちらの記事で使用しているRaspberry Pi 5 はこちら
 ▶ Amazonで詳細を見る

本記事では、こちらの電子工作キットを使用しています。
 ▶ OSOYOO(オソヨー) Raspberry Pi 用 学ぶ電子工作キット(Amazonへのリンク)

タイトルとURLをコピーしました