水耕栽培ではLEDのパルス駆動にメリットがあることは LEDのパルス制御で成長促進と消費電力節約の一石二鳥 でご紹介しました。

パルス制御を実現するために、Raspberry Piで制御を行います。前回PythonでPWM制御をしようとして失敗したので、今回はWiringPiを使います。うまくいきましたよ!

パルス制御

パルスって矩形(くけい)と言う意味です。矩形制御ってなに?という話があるかと思いますが、on/offする時にスイッチonとoffを繰り返すことをパルス制御と言います。下の図のように確かに四角い・矩形がたくさん出てきます。

パルス制御は消費電力が低い、発熱しにくい

Steve Jobs率いる初期のAppleがApple II のパソコンの電源にスイッチング電源を使った話は有名です。無駄な電力を消費しないように必要な時に電気を流すという制御をしています。今の世の中、スイッチング電源でない電源は圧倒的に少ないでしょうから、それだけみなさんの身近にあることになります。

パルス制御の重要な2つのパラメータ

パルス制御する上で重要な2つのパラメータがあります。一つは周期、もう一つはDuty比というものです。

  • 周期 : 図のTで矩形の周期ですね。
  • Duty比 : a / T (%)

例えばDuty比、50%というと、2a = Tが成り立ちます。

パルス制御の一般的な呼び方

パルス制御のことはPWM(Pulse Width Modulation)というのが一般的です。PWM制御ができるかどうかは接続する素子の応答特性によるものが大きいです。蛍光灯はもちろんできなくて、LEDであれば可能な制御方法です。

蛍光灯はPWMで制御できない

蛍光灯は応答特性が良くないため、PWM制御ができません。LEDを使うメリットはここにもあります。

Raspberry PiとWiringPiの導入

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制御を実現しましょう!

PORTの制御はWiringPiを使います。

Wiring Piを使う理由

前回Pythonで失敗しました。Software制御しかできなかったのが大きな原因です。今回はRaspberry PiのハードウェアPWM制御を使いたいと思います。Wiring Piはハードウェア制御をサポートしているので今回は失敗しないはずです。

Wiring Piってなに?

WiringPiはGordon Hendersonさんが開発したRaspberry PiのGPIOを簡単に制御できるライブラリです。ライブラリはC言語で動くように準備されています。今回は触れませんが、他の言語でも動作できるようにラッパーが用意されているようです。

Wiring Piのインストール方法

WiringPiのライブラリの確認

Raspberry PiでLEDを制御するためにはGPIOの制御が必要です。GPIOの制御とPWM制御するために必要な関数について説明します。

wiringPiSetupGpio

Raspberry PiにはBroadcomという会社のSoC(System On Chip)が載っており、GPIOを制御します。この関数を呼ぶとそれぞれのGPIOポートを番号で呼ぶことができるようになります。

pinMode

I/OのInput / Outputの設定をします。OUTPUTの場合はOUTPUTを指定します。PWMの場合はPWM_OUTPUTです。InputはINPUTです。

pwmSetMode

SoCがBalancedとMarked Spaceという二つのPWMをサポートしています。こちらに仕様がかいてあります。Balancedは高速切り替えが必要なモードに使われ、Marked Spaceは高速な切り替えが必要なものに使われるようです。Marked Spaceは周期的なDutyや周波数が変わらないもので仕様するのであれば問題ありません。

pwmSetRange/pwmSetClock

周波数がこれらで決まります。Raspberry Piはベースの周波数が19.2MHzです。これに対しこの関数で設定した値で割った値が周波数になります。

19.2MHz / (pwmSetRange * pwmSetClock)が周波数となります。

pwmWrite

Duty比を決めます。pwmSetRangeが基準となりますので、pwmWrite/pwmSetRangeがDuty比になります。

プログラムの作製

サンプルプログラムを作製してみました。

  • CPUへの負荷低減のため、10秒ごとに時間のチェックをするようにしています。
  • Dutyの比は引数として受け取ります。
  • PWM周波数はこちらできめた200us=5000Hzで固定です。
    • 植物の光合成は200usおきに行われるようなので400usの周期で200us on / 200us offにするのがおすすめです。今回のプログラムは200usの周期なのでご注意ください。
  • 昼間は赤色が点灯するようにしています。夜は青です。

実験結果

うまく動きました。意図した通り、5000kHzになっております。

Screen Capture

まとめ

WiringPiを使えば正確に周波数制御ができることが確認できました。Sampleプログラムも紹介しましたので、PWM制御をするのであればWiringPiを使用することをお勧めします!

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