電子工作9 – 甘酒用恒温器の製作
概要
親戚から家庭で使える、甘酒造りに適する保温器具がないものか、という問い合わせがあった。Web上で、専用の保温器なるものがあるかどうか探してみたが、ない。さらに、Web上で、甘酒に関するHPを読んでみると、お粥と麹菌の混合物を発酵させるのに適する55ー60°Cに8ー10時間保つことがポイントであることが分かった。そこで、それらの温度に自由に設定出来、一定温度に保てる恒温器を自作することにした。従来、保温には電気ガマ(小生の電気ガマは保温モードで、麹菌の生きられない73°Cにも達する)や、コタツなどを使い、途中、何度もチェックすることが必要であった。自作の目標は、以下のようなものである。
1) 55ー60°Cの温度に、適宜設定できること。
2) 設定温度誤差は±1°C位。
3) 構造が簡単なこと。
4) PICマイコンを使う。
いろいろな試行錯誤の結果、口が大きく内容物の出し入れが便利なステンレス魔法びん(DUPLEX広口1.2L、口直径 75mm)を発酵容器に使い、普通の白熱電球を熱源にし、そして木製(市販の風呂用スノコをばらしたもの)恒温器内部の温度の検知と制御には、2個のサーミスタとPIC16F819 というマイコンを使うことにした。結果は上々で、8ー10時間経っても魔法びんの湯温(予備実験で使用)は下がらず、逆に、恒温器の設定温度に近づいた。金属製魔法びんの性能が結構良いのと、その口の部分の熱伝導性の良さが、効いていると思われる。ペットボトル(500、1000 mlとも)も試してみたら、その湯温は全く低下しなかった。ただ、口が狭いので、内容物の出し入れに不便で実用的ではない。
恒温器の全体図 (試作品)
恒温器の内部
恒温器の上部に設置した制御回路
回路
下に回路図を示す。
恒温器(内部寸法 28(D) X 28(W) X 35(H) cm)の中に設置したサーミスタ(石塚電子S103BL5)は10K ohm のVR (20 turns)と組み合わせて、温度が上昇すると電圧が上がるようにした。この電圧変化をPIC16F819のRA0(ピン17)から取込み、PIC中の10bitのADC(A/D Converter、Channel 0)でデジタル値に変換し、温度検知に使う。この値が設定値(=設定温度相当値)以下または以上に応じて、AC100Vの熱源となる電球コントロール用のSSR(Solid State Relay, D2W202F-2A) をON/OFF させる。また、何らかの理由で、恒温器内の温度がある一定(VRで変更可能、過熱防止)以上になった場合、システム全体をシャットダウンさせるため、もう1個のサーミスタ(液滴型10K ohm)(+10K ohm VR)からの出力が16F819のRA1(ピン18、Channel 1)に入る。さらに、熱フューズ(91°C)を組み込んで2重に安全をはかっている。器内の配線には耐熱線を用いた。恒温器(アルミ箔で内張してある)を構成している木材の発火温度は約250°Cとされているで、まず、火災を起こす可能性はないと思う。暴走時や温度設定のための調整に便利なように、リセットSWも設置した。室温20°C前後で、熱源の白熱電球は、40Wでは設定温度に達せず、60Wがちょうど良かった。室温が低い場合は100W 電球が必要になるかも知れない。空気を攪袢する目的で、器底に5Vの小型ファンを設置した。それでも器内では場所により最大で2°C位の温度差がでる。無いと、その差は4°C位になる。一般に耐熱温度が+60°C位とされているファンの耐久性が多少懸念される。
制御回路
[サーミスタの特性]
下の写真に使われた2種類のサーミスタを示す。上が恒温器の温度制御用の極薄型(S103BL5)、下が過熱温度検知用の液滴型(メーカー不明)。いずれも10K ohmで、それらの温度VS抵抗値変化の特性は類似している。極薄型は温度変化に対する反応が速い。
下表は極薄型タイプのS103BL5の先端を80°C位の温水に浸し、自然に温水の温度が低下する過程で抵抗値を測ったもの。温度が上がると抵抗が下がることが分かる。
温度°C |
45 |
50 |
55 |
58 |
60 |
63 |
65 |
70 |
75 |
78 |
抵抗値 K ohm |
4.87 |
4.10 |
3.48 |
3.28 |
2.95 |
2.69 |
2.50 |
2.17 |
1.84 |
1.66 |
左の過熱温度検知用液滴型サーミスタの先端を恒温器の中に差込み、温度と出力電圧の関係を調べてみた。すなわち、外部電圧として5.0Vをかけ、室温23°C中で出力電圧が2.0VなるようにVRを調整し、次いで、サーミスタの先端を器内に差込み、電源を入れた。そして、次第に上昇する器内温度とその時の出力電圧をVolt meterで測定した。結果は以下の通りであった。したがって、例えば、このVRセッテングで、70°Cになったらシステムをシャットダウンするようにするためには、出力が4.43Vになったら、プログラムのHalt(End)に飛ぶようにすれば良いことになる。
温度°C |
23 |
30 |
40 |
50 |
60 |
70 |
75 |
80 |
85 |
出力 V |
2.00 |
2.8 |
3.3 |
3.7 |
4.07 |
4.43 |
4.55 |
4.67 |
4.88 |
プログラム
このプログラムは、2個のサーミスタから得られた温度情報を基に、恒温器内を設定温度に一定に保ち、また、器内温度が異常に上昇した場合に、システムをシャットダウンする。下にフローチャートとPicBasic Pro(See項目“道具”)で書いたそのプログラムを示す。簡単に説明すると、初期設定(16F819を正しく動作させるため)後、発熱源の電球をONにし、RA0よりサーミスタデータを読み込み保存。ついで、サブルーチンに飛んで、恒温器内が異常に高温になっていないかをチェックし、YESなら即時システムをシャットダウンし、NOならもとに戻る。そして、前に読み込んだサーミスタからのデータが器内設定温度より高いか低いかを調べる。低ければ加熱を続けるルーチンを繰り返し、高かれば電球をOFFにするルーチンに飛び、器内が設定温度以下まで低下するのを待つ。設定温度以下になったら、最初の電球をONにするルーチンに戻る。つまり、過熱をチェックしながら、温度を上げ下げして、器内の温度を一定に保つというわけである。ここで使われている650や750という値は、AD変換時に基準電圧としてVdd=5Vを使い、ADCが10bit=1023 stepsなので、5Vが1023 stepsに相当することに由来する。例えば、上の値 650、750 (steps)は それぞれ 650X5/1023=3.17V、750X5/1023=3.66V となる。つまり、各(サーミスタ+VR)からPICへの入力電圧が、それらの値になると分岐することになる。実際には、VRでそれらの値は、温度制御に都合の良い様にかなりの程度可変できる。
プログラムのフローチャート
'Thm819d.bas 2005.10.26 – This time another thermistor for high-temp check &
'cut off the entire system was installed. Finally succeeded!
'This is a program to control a home-made Amazake Heater that has to be kept
'around 55-60 degrees C.
'The heater is heated with a 60-watt light bulb and its temperature is sensed
'by a film thermistor (S103SL5, Ishizuka). The changing voltage from a voltage
' divider combined with the thermistor is inputted into RA0 (Pin 17) as an
'analog value to ADC of 16F819.
'The voltage increases with increasing temperature.
'Detailed temp. ajustment can be made by turning the screw of VR (10K 20 trns).
'Pin connection ---
'Pin 18 (RA1) - anal volt input from thermister (high-temp check for safety)
'Pin 17 (RA0) - anal volt input from thermister (temp sensor)
'Pin 14 - Vdd
'Pin 5 - Vss (GND)
'Pin 4 (MCLR) - connected to Vdd via 4.7 K for Reset
'Pin 6 (PB0) - output to SSR (solid state relay D2W2202F) to drive the light bulb.
‘------[初期設定]------ PicBasic Proでの約束ごと。
Define ADC_BITS 10 '10-bits ADC used
Define ADC_CLOCK 3 'Internalclock used
Define ADC_SAMPLEUS 50 'sample timing
OSCCON=%01100100 '=100 (decimal), internal OSC=4MHz, freq. stable
ADCON0=%10000101 '=133 (decimal), Fosc/32, select channel 0 (RA0/AN0)
'bit2=1 to start ADC (goes to "0" when ADC is complete)
ADCON1=%10000000 '=142 (decimal), Right justified, AN0,AN1-analog input
'Vref+/Vdd, Vref-/Vss (GND): Internal volt standard for ADC
TRISA=%00000011 'PortA.0, PortA.1-analog inputs, the rest-outputs
TRISB=%00000000 'All B ports including RB0 are output.
Vin0 var word 'Vin0 - voltage input from channel 0 (RA0/AN0)(16 bits)
Vin1 var Word 'Vin1 - voltage input from channel 1 (RA1/AN1)
Lampht var PortB.0 'Lampht-lamp heater (incandescent lamp)
‘------[実際のプログラム]------
LampON: High Lampht 'Lampht -> ON (turn on)
Loop1: ADCIN 0, Vin0 'Read Vin0 from PortA.0 (AN0).
Pause 50 'Wait 0.05 sec (Delay but no polling is used).
Gosub Hitempcheck 'High-temp check & cut-off subroutine)
Pause 50
If Vin0>650 then 'This value was found through experiment (0 - 1023 steps)
Goto LampOFF 'Go to Lamp-off routine
Endif
Goto Loop1
LampOFF: Low Lampht 'Lampht -> OFF (turn off)
Pause 10000 'Wait 10 sec.
Loop2: ADCIN 0, Vin0 'Read Vin0 from PortA.0.
Pause 50
If Vin0<650 then
Goto LampON
Endif
Goto Loop2
Hitempcheck: 'Subroutine to check an excessive temp increase
ADCON0=%10001101 '=141 (decimal). Select channel 1 (RA1/AN1)
ADCIN 1, Vin1 'Read Vin1 from PortA.1.
Pause 50
If Vin1>750 then 'This value was found through experiment (0 - 1023 steps)
Goto Halt
Endif
ADCON0=%10000101 'Select channel 0 (RA0/AN0) - return to channel 0
Return
Halt: Low Lampht 'Turn OFF the lamp heater.
End 'End the operation.
[AKI Programmer で書き込み時のConfig. setting]
FOSC INTRC_RA6=I/O
WDTE Enable
PWRTE Disable
MCLRE RA5=MCLR
BODEN Enable
LVP RB3=I/O
CPD Not_Protect
WRT All_Enable
DEBUG Disable
CCPMX CCPI1=RB2
CP Not_Protect
[上記プログラムのヘキサファイル内容]
以下がAKI Programmerを使って実際のPICに焼き込まれた。
:020000040000FA
:100000005128A000A00DA00D200D3839C1389F0047
:100010000030A100323022201F151F190D281E08A4
:10002000A10083161E084C28A301A200FF30A207DE
:10003000031CA307031C4C280330A100DF3022203F
:100040001628A101E83EA000A109FC30031C2B28C2
:10005000A00703182828A0076400A10F282820184B
:100060003128A01C3528000035280800A2000330E4
:100070003C28A20006303C28A80023082102031DCA
:1000800043282208200204300318013003190230EB
:100090002805031DFF304C288313031383126400CB
:1000A0000800831664308F00831285309F0083160A
:1000B00080309F000330850086018312061483166A
:1000C0000610831200300120B8002108B900323038
:1000D00014209320323014203808A0003908A100E1
:1000E0000230A3008A303920031D7728782862283F
:1000F00006108316061083122730A3001030152037
:1001000000300120B8002108B9003230142038082E
:10011000A0003908A1000230A3008A303620031D58
:1001200092285E2880288D309F0001300120BA007F
:100130002108BB00323014203A08A0003B08A1007F
:100140000230A300EE303920031DA728AA288530ED
:100150009F00080006108316061063008312AD2866
:02400E00663F0B
:00000001FF
[過熱防止最高温度の設定法]
恒温器の温度設定のためのサーミスタをA、過熱防止の最高温度設定のためのサーミスタをBと仮定する。温度計の検知部の先を器内に差し込んでおく。BのVRを温度が上がる方向に十分回して適当なところに固定、電源を入れる。温度が次第に上がるのを確認しながら、AのVRを回してON/OFF繰り返しが起きる温度を、設定したい過熱防止のための最高温度、例えば、70°C、まで上げてやる。この時点で、器内はON/OFF繰り返しながら70°C の一定温度に保たれる。次いで、BのVRを温度が下がる方向に少しずつ回して、電源が完全に切れてしまう(プログラムのラベルHaltの飛んだ)のを確認する。少し時間をおいて器内の温度が下がるのを待ち(20秒位)、リセットSWを押して、電源を再びONにし、前と同じ温度に達すると、電源が完全に切れてしまうのを確認する。これで過熱防止の最高温度は70°Cに設定された。後はAのVRを徐々に下げて醗酵に適す55−60°Cの間の温度(ON/OFFが起こる温度)に設定する。
結果
下図のように、60W電球使用して、製作した恒温器の電源を入れると、約20分で最高温度に達し(外気温20°C前後で)、次いで、サーミスタが動作して、電球のON/OFFの繰返しが始まる。そして、1−2°C低下して、一定温度になる。
製作した恒温器を大体60°C位に設定し、その中に温度60°C前後の温水を95%位詰めた魔法瓶(1.2L)を置き、電源を入れ、器内の温度変化と魔法瓶中の温水の温度変化を測ってみた。温度は恒温器の上部に開けた穴からデジタル温度計(NT-301)の針状検温部(12 cm)を差し込んで行った。下表に結果を示す。魔法瓶の湯温は61.3−>62.2°Cと11時間弱経っても全く低下せず、むしろ、1°Cほど上昇した。さらに、60°C前後の温水を詰めた魔法瓶と、保温機能のないペットボトル(500 ml)を使って、同様の実験を行ったところ、魔法瓶はもちろん、ペットボトルの湯温は、11時間後で恒温器の温度とほぼ同じになることが分かった。つまり、ペットボトルなども醗酵容器に使えるということである。
経過時間 Hr : :min |
湯温 °C |
恒温器内温度 °C |
LED ON/OFF |
0 |
61.3 |
22 |
ON |
1 :15 |
- |
59.3 |
ON |
1 : 55 |
- |
61.3 |
ON/OFF |
2 : 08 |
- |
61.7 |
ON/OFF |
10 : 52 |
62.2 |
61.7 |
ON/OFF |
ON/OFF = 電球の点滅が続く状態、 60W電球使用
いろいろテストした結果、SSRが熱源の電球をON/OFFさせる温度が、恒温器中に何もない時、魔法瓶が入っている時、あるいは、その中に入っている内容物が温水か単なる水かで微妙に違うようである。したがって、例えば、器内温度検知用のサーミスタに付いているVRで器内温度を60°Cに設定する場合は、60°Cの温水の入った魔法瓶を器内に入れて行うのが良いようである。
[実際に甘酒をつくってみた]
麹(¥300/200g)ともち米(¥600/1kg)を近くのスーパーで購入し、甘酒をつくってみた。
下の写真は使用した麹(冷温乾燥の“みやこ”こうじ)である。予備実験(麹30gに対しもち米1合使用)で、出来上がった甘酒は、一応甘さは出たが、麹の繊維が残った。今回は、繊維が残らないようにするためと、醗酵反応が良く進むようにするために、袋から出した米粒状の麹(左下の容器)を、左上のミキサーで粒子径が大体1/4位になるように粉砕して用いた(右下の容器)。
甘酒は以下のようにしてつくった。
1.
先ず、もち米1合(カップ1杯)を水に1時間位うるかした後、水をカップ2.5杯加えて、電気ガマの早炊きモードでお粥をつくった。
2. 別のなべに移し、50ccほど湯を加え、かき混ぜやわらかくし、流水で冷やして 60°C位にした。
3. 上記の細かくした麹170g(袋の全内容量200g内30gは予備実験で使用)を、2.のなべの中のお粥に混ぜ、少量の水を加えて良くかき混ぜた(魔法瓶に流し込める程度にやわらかくなるように)。
4. なべをかき混ぜながら、ガスコンロ上で慎重に温度を60°C位に調節した。
5. なべの中身を、熱湯で滅菌済みの魔法瓶の中に、すばやく流し込んだ。魔法瓶に蓋をして上下に2−3回振り、内容物の温度を測ったら53°Cであった。
6. ガス抜きのため、魔法瓶の蓋の上についているストッパーをOPENの状態にして、恒温器に入れ、保温を開始した。
7. 恒温器は約1時間後、56.8°CでON/OFF を開始、保温を継続。保温を停止した10時間後の直前には、61.8°CでON/OFFを繰返していた。出来上がった甘酒の温度は58.3°Cであった。つまり、内容物は10時間、53−58.3°Cの間で醗酵が行われたことになる(途中2回、魔法瓶を上下に振って攪拌した)。
出来上がった甘酒は90°C位に加熱して菌を失活させた。どろどろしていて大変甘く、ペットボトルに入れて保存しても2相に分かれない。市販のものと変わらないと思われる。
どろどろしたお粥と麹の混合物(60°C位)を醗酵容器の魔法瓶に入れているところ
10時間後に出来上がった甘酒、どろどろしていて大変甘い
余談
恒温器だけの材料費は3000円程度。しかし、この方式にたどり着くまでに、1200Wの電気コンロでの実験のため、15A対応のSSR(Solid State Relay)を組み上げたり、高容量の電線を使ったり、結構大変であった。 結局 Simple is best! のこの方式に落ち着いた。SSRを使った単なる電球のON/OFFの繰り返し(3回位/分)による温度制御であるが、冷却ファンのかすかな回転音以外、全く無音なのがいい。