概要
PWM (パルス幅変調) はある一定周期の間隔で動的に変化するパルスを送信することができる仕組みです
モーターの制御や光の強弱の変化などに使われます
RaspberryPi でも PWM が使えるようなので LED を使って試してみました
環境
- Raspberry Pi Type B Single Board Computer 512MB
- Raspbian 8.0 (Jessie)
- Kernel Version 4.1.7+
- WiringPi
- wiringpi2 (Python) 1.1.1
事前準備
今回は WiringPi を使って PWM 制御を行うので事前にインストールしておいてください
wiringpi2 のインストール
wiringpi2 は WiringPi 用の Python ライブラリです
pip を使えば簡単にインストールできます
- sudo pip install wiringpi2
今回は Python スクリプトから PWM を制御します
配線
今回は LED の調光を PWM で変化させてみます
なので、L チカ配線をしてください
L チカ配線の方法はこちらを参考にしてください
一点ポイントとしては RaspberryPi 上で PWM の信号を送信するためには GPIO 18 番を使う必要があります
なので、アノード ( + ) 側の GPIO は 18 番に接続するようにしてください
PWM 送信用スクリプトのデプロイ
- cd work/
- mkdir python_wiringpi_pwm
- cd python_wiringpi_pwm
- vim controls_pwm.py
import wiringpi2 as wiringpi
import time
OUTPUT = 2
PWM_PIN = 18
SLEEP_TIME = 0.03
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(PWM_PIN, OUTPUT)
for i in range(0, 1024, 16):
print(i)
wiringpi.pwmWrite(PWM_PIN, i)
time.sleep(SLEEP_TIME)
for i in range(1024, 0, -16):
print(i)
wiringpi.pwmWrite(PWM_PIN, i)
time.sleep(SLEEP_TIME)
- sudo python controll_pwm.py
で実行すると LED が明るくなった後に徐々に暗くなると思います
ポイント
wiringPiSetupGpio で 18 番の GPIO を初期化します
実は初期化の方法には 3 通りあり他に「wiringPiSetup」「wiringPiSetupSys」があります
前者で初期化した場合は 1 番を指定する必要があり、後者で初期化した場合は 12 番を指定する必要があります
どれを使って初期化しても同じ GPIO を指すことになりますが、コールするメソッドによって初期化する GPIO の番号が違うので注意してください
range で 0 から 1024 の範囲でパルス幅を変化させています
RaspberryPi の場合指定できるパルス幅の範囲が 0 から 1024 のためそうしています
他のマイコンボードなどではもっと広い範囲の指定ができる場合があり、その場合にはより精度の高い制御ができます
二つ目の for 文は LED の明るさを暗くするために用意しています
最後に
紹介は以上です
PWM を使うと、このような動的な制御がプログラム上でできるようになります
PWM の王道といえばおそらくサーボモータだと思うので次回はサーボモータの制御をしてみたいと思います
0 件のコメント:
コメントを投稿