LEDパルス制御の導入 Raspberry Pi使います。

LEDのパルス制御で成長促進と消費電力節約の一石二鳥で光合成の特性を考えて光の当て方を工夫すれば少ない照射 = 少ない消費電力 で栽培できることを紹介しました。”時は金なり”ですので早速導入してみたいと思いますっ!

パルス制御のおさらい

パルス制御は別名PWM(Pulse Width Modulation)と呼ばれ、任意の周期Tに対し、信号のon / offの繰り返し制御を行うものです。光合成反応では200 us(10^-6秒)周期で明るい期間が30%以上であれば成長を損なうことはないというものでした。

水耕栽培においては蛇足ですが、LED照明の明るさ調整はPWMで行うことができます。onの時間を短くしていけば暗い期間が増えていくので暗く感じます。

on/offを切り替えてちらつきがあるんじゃない?という疑問があるかもしれませんが、人間の目には限界があって、ある速度以上であればまったくon/offに気づきません。この性質を利用して明るさを調整するのです。

人間の目の限界の例ですが、よく聞くテレビのスペックの30fpsとか、ゲーム用のモニターの60fpsとかが参考になると思います。動画は静止画の集まりですが、そのスピードで静止画が切り替わっても区別できないのでカクカクせずに動画が見えるのです。

Raspberry PiでPWM制御

Raspberry Piってなに?

Raspberry Piってご存知でしょうか。小型のパソコンでGPIO(General Purpose I/O ) portがついています。I/O portがあるので電子工作と非常に相性がいいです。またパソコンですのでOSを入れれば簡単にプログラムを動かすことができます。

 

Raspberry Pi 3 MODEL B

新品価格
¥4,800から
(2017/5/16 23:06時点)

Raspberry Piで使用するPort

Raspberry PiのGPIOはPWM出力に対応したportがひとつ用意されています。Port 18です。このPortのPWMはハードウェア制御なので誤差が少ないです。ソフトウェアでのPWMではパソコンと同じで動いているソフトの影響を受け、制御が不安定になります。このportで最適なPWM制御を実現しましょう!

PythonでのPWM制御が実はソフトウェア制御でした

お手軽装置ように作ったProgramがありました。こちらです。こちらを変更します。

PythonではRPi.GPIOというライブラリを使うので公式サイトを見てみました。公式サイト

Note that this module is unsuitable for real-time or timing critical applications. This is because you can not predict when Python will be busy garbage collecting. It also runs under the Linux kernel which is not suitable for real time applications – it is multitasking O/S and another process may be given priority over the CPU, causing jitter in your program. If you are after true real-time performance and predictability, buy yourself an Arduino http://www.arduino.cc !

Note that the current release does not support SPI, I2C, hardware PWM or serial functionality on the RPi yet. This is planned for the near future – watch this space! One-wire functionality is also planned.

Although hardware PWM is not available yet, software PWM is available to use on all channels.

むむむっ!という状態でした。前半はいいよ、多少はね、、と思いながら読むと後半になるとなんとソフトウェア制御しかサポートしていないと書いてあります(!)。これは困りましたね、、。ソフトウェアのPWMは全部のportでサポートしてますよー、と当たり前のこと書かれても、、、。

とりあえず実装してみて実害ないか確認する感じですかね。

サンプルプログラムを見てみる

公式サイトを見てみました。こちらです。結構簡単にできるようです。

これらを事前準備としてプログラムを変更しましょう。

ソフトウェアへの実装

周波数 200usec = 5,000Hz ですね、1/(200 * 10^-6)

私のプログラムは時間になったら赤色と青色のLEDを切り替えるようになっています。ですので不要な部分もありますが、、ちゃんと、PWMの設定もしていますよ。

実験結果

ん、、?周波数もあっていないし、パルス幅もバラバラ。。。 これはちょっと使えないなー。あと、ソフトウェア制御のためか、処理が少し入るとちょっとちらつきます。。。

まとめ。Pythonの標準ライブラリはPWMに向いていない

PythonのRaspberry Pi用のライブラリ:RPi.GPIOでのPWM制御は、私にはうまく使い込めませんでした。誤差が大きいですし、周波数の設定もうまくできません。Port 18でハードウェア制御できるWiringPiを検討します。

記事を読んでいただいてありがとうございます。この記事がいいなと思ったら下記のSNSボタンのクリックをお願いします。励みになります😁