ラズパイでRGBフルカラーLEDを使おう(2)
こんばんは。國松です。
前回はフルカラーLEDを7色まで点灯させました。しかし、フルカラーと名前がついているのに7色ではさみしいのでもう少し細かく色を制御したいと思います。そのために今回はpigpioのPWMを使っていきたいと思います。
参考サイト
vasco blog ~ゆとりの戯言~(フルカラーLEDを使ってみた(ソフト制御編))
Life with IT(pigpioライブラリでPWMを使ってLEDの明るさを変えてみる)
raspberry piでフルカラーLEDを扱う IoT編(その1 pigpio)
pigpioとは
ラズパイのGPIO制御ライブラリの1つです。これまでGPIOの制御にはRPi.GPIOとWringPIを使ってきました。第3のライブラリの登場です。pigpioは高速&高性能なGPIO操作が特徴です。
pigpioと他のライブラリの比較などは以下のサイトが参考になります。
参考サイト
からあげ(Raspberri PiのGPIO制御の決定版pigpioを試す)
pigpioのインストール
1 2 3 | sudo apt-get update sudo apt-get install pigpio |
pigpioの使用
pigpioを使用する前には必ずpigpiodというデーモンを立ち上げる必要があります。
1 | sudo pigpiod |
毎回デーモンを立ち上げるのが面倒ならpigpioの自動起動を設定。
1 2 3 | sudo systemctl enable pigpiod sudo reboot |
PWMとは
PWMとは『Pulse Width Modulation(パルス幅変調)』の略でパルス信号のデューティ比を変化させて変調する信号方式の事です。パルス信号とはOnとOffを繰り返す電気信号のことです。
デューティー比はパルス幅を周期で割ることで求められます。PWMはLEDの明るさを制御したり、モーターの速度制御、サーボモーターの角度制御などに用いられます。
周期(周波数)を保ったままデューティ比を変化させるとデューティ比が小さいときはLEDが暗く、デューティ比が大きいときはLEDが明るく点灯しているように見えます。
今回はこのPWMを使ってフルカラーLEDの色を制御していきたいと思います。
フルカラーLEDをグラデーション点灯させる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import pigpio from time import sleep #RGBのポート番号の設定 GPIO_R = 17 GPIO_G = 27 GPIO_B = 22 FREQ = 50 #pwm周波数 RANGE = 100 #pwmの範囲 #pigpioの設定 pi = pigpio.pi() p = [GPIO_R, GPIO_G, GPIO_B] for i in range(3): pi.set_PWM_frequency(p[i],FREQ) pi.set_PWM_range(p[i],RANGE) try: d = [0,0,0] r = [3,5,7] while True: sleep(0.1) for i in range(3): pi.set_PWM_dutycycle(p[i],d[i]) d[i] += r[i] if d[i] >= RANGE or d[i] <= 0: r[i] *= -1 d[i] += r[i] except KeyboardInterrupt: pass for i in range(3): pi.set_mode(p[i],pigpio.INPUT) pi.stop() |
チカチカが激しく色の変化がよくわかりませんが7色より多く色を出せた気がしません。
正直pigpioライブラリーの使い方とpwmの理解が不足していたため動かす事で手一杯でした。再チャレンジしたいと思います。