Chapter 06

🔰LEDの明るさを変えてみる - ⭐

kotaproj
kotaproj
2024.10.13に更新

💡やること

LEDの明るさを制御します。

🏁デモ

ledpwm

🔧パーツ一覧

no 部品名 個数 備考
1 ラズベリーパイ 1 4B
2 LED 1 -
2 抵抗-220Ω 1 -
3 ジャンパー線 適量 -
4 ブレッドボード 1 -

接続図


💻環境

開発環境

🍓4 : ラズベリーパイ4以前

  • Linux rpi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
  • Python 3.7.3 (default, Jan 22 2021, 20:04:44)

🍓5 : ラズベリーパイ5

  • Linux rpi5bagr 6.6.31+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.31-1+rpt1 (2024-05-29) aarch64 GNU/Linux
  • Python 3.11.2 (main, May 2 2024, 11:59:08) [GCC 12.2.0] on linux

ラズベリーパイの設定

特になし

モジュールのインストール

apt

4以前と5で分けて記載します。

🍓4 : ラズベリーパイ4以前

  • pigpioライブラリは、Raspberry PiのGPIOを制御するためのライブラリです。
  • 以下のコマンドは、はじめてインストールする場合のみ必要です。
    $ sudo apt install pigpio
    $ sudo service pigpiod start
    $ sudo systemctl enable pigpiod.service
    

🍓5 : ラズベリーパイ5

  • 特になし

pip

Pythonに関するモジュールをインストールします。

🍓4 : ラズベリーパイ4以前

$ python3 -m venv env
$ source env/bin/activate
(env) $ pip install pigpio
(env) $ pip install gpiozero

🍓5 : ラズベリーパイ5

$ python3 -m venv env
$ source env/bin/activate
(env) $ pip install gpiozero
(env) $ pip3 uninstall rpi-gpio
(env) $ pip3 install rpi-lgpio

📝手順

LEDの明るさを直接指定したり、明るい⇔暗いを繰り返すプログラムを実行します。

コード

動作は、コメントに記載しています。

🍓4 : ラズベリーパイ4以前

led_pwm.py
from gpiozero import PWMLED
from signal import pause
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep

# LEDのピン設定
PIN_LED1 = 21

def main():
    # LEDピン設定
    factory = PiGPIOFactory()
    led = PWMLED(PIN_LED1, pin_factory=factory)

    # だんだん明るくする
    # 25% -> 50% -> 75% -> 100%
    led.value = 0.25
    sleep(1)
    led.value = 0.50
    sleep(1)
    led.value = 0.75
    sleep(1)
    led.value = 1.0
    sleep(1)

    # 徐々に明るくし、徐々に暗くするを繰り返す
    try:
        led.pulse()
        pause()
    except KeyboardInterrupt:
        print("stop")
        led.off()


if __name__ == "__main__":
    main()

🍓5 : ラズベリーパイ5

led_pwm.py
from gpiozero import PWMLED
from signal import pause
from time import sleep

# LEDのピン設定
PIN_LED1 = 21

def main():
    # LEDピン設定
    led = PWMLED(PIN_LED1)

    # だんだん明るくする
    # 25% -> 50% -> 75% -> 100%
    led.value = 0.25
    sleep(1)
    led.value = 0.50
    sleep(1)
    led.value = 0.75
    sleep(1)
    led.value = 1.0
    sleep(1)

    # 徐々に明るくし、徐々に暗くするを繰り返す
    try:
        led.pulse()
        pause()
    except KeyboardInterrupt:
        print("stop")
        led.off()


if __name__ == "__main__":
    main()

実行手順

(env) $ python led_pwm.py

🔎ポイント

明るさを調整(PWM制御)

LEDの明るさを調整するのに、パルス幅変調(PWM:Pulse Width Modulation)調光方式を使用しています。
LED素子の点灯時間と消灯時間を制御することで明るさを調整しています。
点灯時間が長ければ明るく/短ければ暗くなります。この時間を制御しているのがPWM信号です。

コードとの対応は↓となります。

コードの説明

  • led.value = xxx
    • duty比を0.0 - 1.0(0% - 100%)で指定する
  • led.pulse()
    • 0% -> 100% -> 0% -> 100% -> ....を繰り返す