PR

Raspberry Pi 5でPWM制御する方法|LEDの明るさを調整(gpiozero・Python)

4. Raspberry Pi

Raspberry PiでLEDの明るさを調整したいけれど、

・PWMとは何か分からない
・明るさを変える方法が知りたい
・Pythonでどう書けばいいのか分からない

と悩んでいませんか?

本記事では、gpiozeroを使ってPWM制御を行い、
LEDの明るさを調整する方法を初心者向けに解説します。

スポンサーリンク

PWMとは?

PWM(Pulse Width Modulation)とは、
信号のONとOFFの時間の割合を変えることで、
電圧を擬似的に制御する技術です。

この割合をデューティ比と呼びます。

デューティ比が大きいほどLEDは明るくなります。

PWMでは電圧を直接変えているのではなく、
高速でON/OFFを繰り返しています。

ONの時間が長いほど、LEDは明るく見えます。

今回やること

GPIO17に接続したLEDの明るさを、
PWMを使って段階的に変化させます。

準備するもの

・Raspberry Pi 5
・ブレッドボード
・LED
・抵抗(200Ω)
・ジャンパーワイヤー

配線方法

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

GPIO17は物理ピン11に対応しています。

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

Pythonコード

ファイル名:pwm_led_fade.py

from gpiozero import PWMLED
from time import sleep

led = PWMLED(17)

while True:
    # 徐々に明るく
    for i in range(0, 101):
        led.value = i / 100
        sleep(0.01)

    # 徐々に暗く
    for i in range(100, -1, -1):
        led.value = i / 100
        sleep(0.01)

コードを書いたら、

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

コード解説

PWMLEDクラスを使用することで、
簡単にPWM制御が可能になります。

led.value は 0〜1 の範囲で指定し、
0が消灯、1が最大の明るさです。
例えば、0.5の場合は「半分の明るさ」になります。

動作確認

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

sudo python3 pwm_led_fade.py

プログラムを実行すると、
LEDがゆっくりと明るくなり、
その後ゆっくり暗くなれば成功です。

もっと簡単な方法

gpiozeroでは、pulse()を使うことで
簡単にフェードイン・フェードアウトを実現できます。

while文を書く必要がなく、以下のコードだけで動作します。

from gpiozero import PWMLED
from signal import pause

led = PWMLED(17)

led.pulse()

pause()

pulse()はデフォルトでゆっくりと明るさが変化するように設定されています。

※pulse()はバックグラウンドで動作するため、
pause()などでプログラムを停止しないようにする必要があります。

■ どちらを使うべきか

・理解したい → for文のコード
・簡単に動かしたい → pulse()

初心者の方はまずpulse()から試すのがおすすめです。

よくある失敗

・GPIO番号の間違い(17以外)
・抵抗を入れていない
・sleepが短すぎて変化が分からない

応用

・フェードイン/フェードアウト
・ボタンと組み合わせて明るさ変更
・サーボモータ制御

関連記事

gpiozeroとは
LED点灯方法
ボタン入力方法

まとめ

本記事ではPWM制御を使ってLEDの明るさを調整しました。

・PWMで擬似的に電圧を制御
・gpiozeroで簡単に実装可能
・valueで明るさを調整

PWMを使うことで、デジタル信号しか扱えないGPIOでも、
アナログのような制御が可能になります。

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

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

次におすすめの記事

ボタンでLEDの明るさを調整する方法
・サーボモータをPWMで制御する方法(準備中)

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