低温調理用のコントローラを作る5
概要
調理コントローラのプログラムの雑な設計と実装を紹介します。
設計
低温調理に求められるのは、温度管理と時間管理です。この内時間管理については、プログラムでやる必要が無いかなと思います。調理終了時には、加熱槽からパックを取り出さなければならないのですが、これに関してはコントローラは何もできません。せいぜいアラーム音をならすぐらいでしょう。
ここでは割り切って、温度管理のみを行うコントローラを実装します。
制御方法
制御方法は、いろいろなものがありますが今回は簡単なヒステリシス制御と、熱容量による制御の二種類を実装します。
ヒステリシス制御
ヒステリシス制御は簡単な制御で、ヒータがONになる温度とOFFになる温度を設定し、現在の温度によってヒータのON-OFFを切り替えます。
閾値が1つのときとくらべてノイズに強く、制御対象の詳細がわからなくてもある程度の制御ができますが、オーバーシュート(加熱しすぎ)が発生するという弱点もあります。
今回使用している熱源は、150Wのヒータなのでオーバーシュートはそれほど気にしなくてもいいでしょう。これを一つ目の制御方法として採用します。
熱容量による制御
今回の制御対象は水温です。一般に、物質の温度とエネルギーの関係は、以下の式で求めることができます。
熱量Q[J] = 熱容量C[J/K] * 温度差⊿T[K]
そして、ヒータが発生する熱量は以下の式で求めることができます。
熱量Q[J] = 電力P[W] * 時間t[sec]
さらに、ヒータの電力と熱容量は調理中に変わることはありません。つまり、有る時間加熱したときの温度変化は以下の式で求めることができます。
温度差⊿T[K] = 係数 * 時間t[sec]
ここで係数は水の量や食材によって、調理毎に異なるため以下の2ステップをおこなえば水温が制御できます。
- 一定の時間加熱し、その間の上昇温度によって係数を算出する。
- 目標値と現在値の差(と係数)から、必要な加熱時間を算出する。
このうち2を、一定時間ごとに行うことにより目標の温度にすることができます。時間は水晶発振子によって取得できるので、簡単に実現できそうです。これを二つ目の制御方法として実装します。
PID制御
これも実装したいのですが、今回は見送り。(上の2つで調理ができてしまったので)
実装
実装は特に書くこともありません。Cでサクサク書くだけです。
機能紹介・操作
というわけで、完成したコントローラの紹介です。基本操作はエンコーダで選択、Aで決定、Bでキャンセルです。
電源を入れるとメインメニューが表示され、以下の4メニューがでます。それぞれを選んでAで決定します。
- Temp Monitor
- Heat Control
- Hysteretic
- Settings
モード紹介
Temp Monitor
温度計です。温度センサーの現在値を表示します。
Bでメインメニューに戻ります。
Heat Control
熱容量による制御をします。目標値を設定すると、係数の計算後、目標温度になるまで加熱を行います。目標温度に到達したら、以降その温度を維持します。
Bでメインメニューに戻ります。
Hysteretic
ヒステリシス制御をします。ヒーターをONにする温度(lower)とヒーターをOFFにする温度(upper)を指定すると、温度に応じてヒーターのON-OFFをおこないます。
Bでメインメニューに戻ります。
Settings
各種設定を行います。
今はパイロットランプ(ヒータON時と、センサー読み取り時のインジケーター)の有効無効のみが設定できます。
(そのうちPIDのパラメータとかを設定できるようになるはず)
HEX
ここに置きます。
ThermostaticCooker - Google ドライブ
書き込みはISPMK2をつかっている場合は以下のコマンドで
avrdude.exe -pm328p -cavrispmkII -Pusb -u -Uflash:w:cooker_v010.hex:a -Ulfuse:w:0xd2:m
低温調理用のコントローラを作る4
概要
完成した基板に部品を実装して、低温調理用のコントローラを作成します。
コントローラを組み立てる
基板が届きました
基板が届きました。発注から到着まではわりと早かったです。これに部品を実装してコントローラを完成させます。
使用する部品の調達
使用するパーツは、設計時にすでに選定しています。以下のパーツを使います。いろいろ忙しかったこともあり、秋月電子の通信販売で部品の調達を行いました。別に秋月じゃなくてもいいですが、私は秋月大好きマンなので贔屓にしています。
部品番号 | 数量 | 部品名 | 通販コード |
---|---|---|---|
IC | 1 | ATMEGA328P-PU | I-03142 |
Q1 | 1 | 水晶発振子 32.768KHz | P-04005 |
LCD | 1 | LCDモジュールAQM1602A-RN-GBW | P-08779 |
J1 | 1 | 2.1mm標準CDジャック 基板取付用 | C-00077 |
X_TEMP1 | 1 | ターミナルブロック 3ピン | P-01307 |
X_HEATER | 1 | ターミナルブロック 2ピン | P-01306 |
S1,S2 | 2 | タクトスイッチ | P-03647 |
ENC | 1 | ロータリーエンコーダ | P-06357 |
LED1~3 | 3 | 5mm LED | |
R1,R3,R7 | 3 | 470Ω カーボン抵抗 1/6W | |
R2,R4~6 | 4 | 10KΩ カーボン抵抗 1/6W | |
R8~11 | 4 | 100Ω カーボン抵抗 1/6W | |
C1~3 | 3 | 1μF 積層セラミックコンデンサ | |
C4~8 | 5 | 0.1μF 積層セラミックコンデンサ | |
JP | 1 | 2×2ピン 2.54mmピッチ ピンヘッダ | |
- | 2 | ジャンパピン 2.54mmピッチ | |
CON1 | 1 | 2×3ピン 2.54mmピッチ ピンヘッダ | |
CON2 | 1 | 1×6ピン 2.54mmピッチ ピンヘッダ |
はんだ付け
特段いうことも無いです。背が低くて、熱に強い部品から実装していきます。一号機は色々する予定なので、AVRは直接はんだ付けせずにICソケットを噛ませます。LCDと水晶発振子は、はんだだけだと固定強度に不安があるので、別途ホットボンドで固定しました。
はんだ付けがおわるとこんな感じ。温度センサも接続しています。
はんだ付けの確認
検図済みですし、特に検証はしなくていいでしょう。はんだ付けが失敗していないかだけ確認します。
動作確認
ジャンパの設定
ACアダプタの極性がどちらでもいいようにジャンパを設けました。センタープラスのアダプタを使うときは1-2、3-4と接続します。
温度センサの接続
Amazonで買った温度センサを接続します。左のコネクタにそれぞれ接続します。大体黒がGND、赤がVCCです。
プログラムの書き込み
ここまできたら、プログラムを書き込みます。CON1にAVRライタを接続してPCからプログラムを焼きます。
これでコントローラの完成です。
プログラムの実装と中身については別途紹介します。
流行りの低温調理用のコントローラを作る1
概要
低温調理器が高かったので、そこそこ良いコントローラを自作します。
低温調理とは
要は従来よりも低い温度でする調理のことです。わたしは低温調理というとあまりピンときません。真空調理法とか適温調理とか、恒温調理とか言ったほうが実態に合っている気がします。こんなの↓が安定して作れます。
肉!
なければ作る
低温調理法自体は前々から知ってはいましたが、Twitterやマンガなど、随所で聞くようになったので、じゃあやってみようと。
で、クリスマスに先に挙げた定番のローストビーフを作ったのですが、まあめんどくさい。
それ専用の製品(Anovaとか)を使えばいいのですが、それなりにお値段が張るので、ならば自分で作ってしまおうというだけの話。
作戦
最近は、プリント基板が2000円ちょっとで作れますので、専用の基板を起こします。プリント基板を作ると10枚とか20枚の単位でのオーダになるので、せっかくなら他の人に使ってもらいたい。そこで、調理器を以下のような感じで作ろうと思います。
なるべく安く
高いのが正義ではないです。最安である必要はないけど、それなりに安く仕上げたい。
作りやすく作る
個人的には、SMDを手はんだとか楽しいのですが、さすがにツライ。作成時にガチガチなスキルが必要ないように、使いやすい部品を使う。
部品の調達に困らないものを作る
作りやすくと似たような観点ですが、調達が簡単な部品で作ろうかと思います。通販で手に入るものがほとんどなのですが、色んな所から入手したりと大変。基本的にはAmazonと、秋月で入手できる部品のみで作成したい。
そこそここだわる
実は、低温調理喜の自作自体は難しくないのです。サーモスタットと水槽用のヒータ(または投げ込み式湯沸かし器)を使えば簡単にできてしまいます。が、良くてヒステリシス制御なので、面白くない。せめて比例制御ぐらいは付けたい。
スケジュール
構想がクリスマスからなので、今コレを書いている時点である程度の実装まで完了しています。
春節のお休みが終わるタイミングで基板を発注する予定。