PWMでRaspberryPiに接続したLEDの明るさを変える
RaspberryPiでLEDの点灯は簡単にできたので、次にLEDの明るさ調整を試してみたいと思います。
PWM
明るさの調整は、PWM(Pulse Width Modulation)という方法用いることで実現可能です。
PWMというのはパルス信号のONである時間(パルス幅)を調整することにより流れる電流量を変えるような仕組みです。
OFFの時間と較べONの時間が長くなるほど電流量が大きくなり、短くなるほど電流量が小さくなります。 その特性を利用することでLEDの明るさを調整することが可能となります。
以下の動画は実際にPWMでLEDの明るさを動的に変えて点滅させた様子です。
Raspberry PiでPWMを利用する
それでは、Raspberry PiでPWMを利用するにはどうすればいいでしょうか。
WiringPiというライブラリを使用することで簡単にPWMを利用可能です。
wiringpiのインストール
以下はRubyでWiringPiを使用する場合の説明となります。
Raspbian Jessieの場合、WiringPiはすでにインストールされているため、RubyからWiringPiを操作するためのGemをインスールすればOKです。
ただし、 ruby-dev が入っていないとGemのインストールに失敗するので、先にインストールしておきます。
$ sudo apt-get install -y ruby-dev $ sudo gem install wiringpi
RubyでPWMを使用するコード
require 'wiringpi' LED = 4 begin io = WiringPi::GPIO.new io.soft_pwm_create(LED, 0, 100) while true (0..100).each do |x| io.soft_pwm_write(LED, x) sleep(0.01) end (0..100).each do |x| io.soft_pwm_write(LED, (100 - x)) sleep(0.01) end end rescue Interrupt io.soft_pwm_write(LED, 0) end
上記のコードを sample.rb
で保存してください。
ちなみに、上記のコードではLEDを GPIO23 に接続した場合の例となります。
※ RaspberryPiのピン番号とWiringPiのピン番号は異なるので注意が必要です。それぞれの対応は以下のページで確認できます(下の方の画像)。
実行
$ sudo ruby sample.rb
だんだんと明るくなり、その後、だんだんと暗くなることを確認できると思います。
処理を止める際は Ctrl + C
を入力してください。
ちょっとだけ雑に解説
8行目の soft_pwm_create
の3番目の引数 100
は pwm_range
です。
io.soft_pwm_create(LED, 0, 100) # 8行目
pwm_range
は何かというと、LEDの明るさを何段階に設定するか、というように考えると分かりやすいかと思います。
100を設定した場合、100でもっとも明るく、0でもっとも暗くなります。
今回のコードでは0からはじめ、 soft_pwm_write
で1ずつ値を加えるように書き換えています。
100までいったところで、今度は1ずつ減らすように書き換えています。
このようなコードで、だんだんと明るく、その後だんだんと暗くなるような点滅を実現できます。
おわりに
ライブラリを使うことで簡単にPWMを使用し、LEDの明るさを変えることができました。
今度はフルカラーLEDを使って色をだんだんと変えていくような実装を試してみたいと思います。
参考
PWM制御
Rubyでwiringpiを使う | ぬわーーーーーーー!!!

Raspberry Pi 3 Model B (Element14)
- 出版社/メーカー: RASPBERRY-PI
- メディア: エレクトロニクス
- この商品を含むブログ (2件) を見る