ラズベリーパイで低温調理器を作る!(ソフトウェア編)

今回はソフトウェア編ですが、プログラムで温度を制御するので、

ただプログラムが正常に動作するかどうかだけではすみません。

温度制御を思った通りに動作させるため、実際の測定を行いながら

プログラムの作成、パラメータの変更など実験を繰り返すこととなりました。



■ON-OFF制御プログラム(2位置動作)


ON-OFF制御による温度制御とは、2位置動作制御とも呼ばれ、

簡単に言うと目標温度より実際の温度が低ければヒーターをONにし、

目標温度より実際の温度が高ければヒーターをOFFにするという単純な温度制御です。

よく使われるものに「こたつ」があります、

サーモスタットで点けたり消したりを繰り返し温度を維持しています、

また昔の「クーラー」などもこんな制御でしたね。

では実際に実験してゆきます。


下のグラフは目標温度を60℃に設定し、実測したON-OFF制御プログラムによる温度の動きです。


やはり、ハンチング(上下動)を繰り返す動きとなりました。

ほぼ目標温度の上側で上下動をしていて、動きとしては良い制御ではありません。

今回使用したスロークッカーはヒーターが200Wと弱く、土鍋の外側にヒーターがある構造のため温度を急速に上げにくく、また下がりがにくいのでハンチング幅は思ったより小さい感じです。


炊飯器でローストビーフを作る動画をYouTubeなどでよく見かけますが、

単純なプログラムですがこちらの方がずっと良さそうです。




■PID制御を導入する!


もう少ししっかりした制御を行おうとすると、やはりPID制御になるようです。


ところで、PID制御って何?


PID制御とはよく聞く言葉ではありますが、

実際にどのような制御か詳しく知らなかったので少し勉強してみました。


PIDとは「Proportional-Integral-Differential」の略で、


それぞれ

Proportional:  「比例」

Integral:    「積分」

Differential:  「微分」 


だそうです。。。

難しくなってきた ヽ(゚Д゚;)ノ!!


要するに比例と微積分を使ったフィードバック制御ですね。


Wikiより



・P制御

P「比例」制御は、PID制御の中で目標温度までの制御で大きな役割を持ち、

ハンチングが少ないのが特徴です。

半面、目標温度に近くなると制御が弱くなり目標になかなか近づけなくなる。

(オフセット現象)


・I制御

I「積分」制御は、P制御の短所であるオフセットを打ち消すための制御を付加します。

P制御で目標に近づけなくなった、あともう少しのチョイ足し効果が期待できる。

単独制御も可能。


・D制御

D「微分」制御は、応答速度を早くする効果があり、急激な温度変化が起こったときに威力を発揮します。

単独制御はできない、P制御と併用する。




■世の中には、こんな素敵なものが!!


そんな難しい制御を自作しなくても市販で良いものがあるんじゃないかって?

そりゃ、ありますよね。


アズビル株式会社さん(旧:株式会社山武)のデジタル指示調節計シリーズ


高精度制御ロジック『RationaLOOP(Ra-PID)』と オーバーシュート抑制に大きな効果を発揮する 『Just-FiTTER』を搭載。

普通のPID制御より高精度な制御、ファジィ推論を備えたPIDオートチューニング。

ステキ!!


友達の会社のカッコいい製品。

ですが、自分でつくることに意義がある!

ということで、やはり自作することにします。(^^;




■PID制御をプログラムに実装してみた!


では、実際にPID制御を実装したプログラムを使ってみます。


下のグラフは目標温度を60℃に設定し、温度を実測したものです。



ON-OFF制御に比べ、PID制御は明らかに温度が安定しているのがわかります。

PIDをいろいろと変化させてみましたが、青いラインのPID:P=8.0,I=0.06,D=1を採用することにします。


下は、今回作成したプログラム、low_temp_cooker.py を実行した画面です。

60℃設定では下記のように実行します。

python3 low_temp_cooker.py 60


10秒毎に温度を測定し、画面を更新しながら温度を制御します。

10秒間のうち、ヒーターをONする時間、OFFする時間の割合を変化させ温度をコントロールしています。


ヒーターコントロールは遅い周期ですが、パルス波のデューティ比を変化させている

れっきとしたパルス幅制御(変調)( pulse width modulation、PWM)ですね。



ソースコードはこちら↓


low_temp_cooker.py

 


このプログラムを作成するのにあたり、参考にさせて頂いたサイト様、感謝致します。m(__)m


Dの微分的は制御は時間あたりの温度変化を傾きとし平均変化率に置き換えた、

なんちゃって微分制御!(笑)

温度変化率の割合で制御したかったのですが、この低温調理器の特性上応答速度が遅く、食材投入時の制御に弱いので、急激な温度低下が発生したときはD制御が全力で出動するようなプログラムになっています。



・温度センサーの分解能について

使用した温度センサーの最小分解能は0.25℃でしたが、温度制御を実際に行ってみて正確な制御をするには0.1℃以下のもっと小さい分解能が必要だと感じました。

まぁ、工業用の制御ではないので問題は無いのですが。




今回、PID制御をプログラムに実装する必要に迫られ、微分積分を勉強することになりました。

学生の頃、まさか将来焼肉のために微積分を使うことになるとは夢にも思いませんでした。。。(笑)

勉強はしておくものですね。


さて次回はいよいよ、

ラズパイ・低温クッカーに肉を投入してゆきます!!






ICT&電子工作、諸々の備忘録(仮)

プログラミング、電子工作、Raspberry Pi、IoTなどなど。 コンピューター活用、応用技術など、勉強しながら徐に記してゆきたいと思います。