マイコン炊飯器作ってみた

Build your own computer controlled ricecooker

出オチですね.

世にマイコン炊飯器は数多あり,銘柄別炊き分けなど高機能化が進む一方,

家事の労力低減の代償として炊飯の方法も忘れられようとしている今,

「自分で炊飯パラメータを試行錯誤できる」炊飯器があったらなあと思って.

あと,出オチな見た目のものがやってみたかった.

今回はマイコンボードarduinoを利用して炊飯させます.

時間,温度,が主なパラメータになると思って設計しました.

(高機能炊飯器だと圧力や釜の重さも見ているかもしれない)

最初に炊飯器が何やっているかの調査をするために,炊飯曲線でググったところ,

リンクのサイトで炊飯の概要をゲットしました.

吸水,沸騰,煮る,蒸す,蒸らす,保温ができればよいのではないかと.

口伝でいうところの「はじめちょろちょろ」の取り扱いが問題ですね.後述します.

次に,これを調達し,

消費電力変化を調査して,

1合炊く時の時間火力変化を追いかけました.リバースエンジニアリングですね.

これにより,以下のような消費電力グラフが得られたので,

…だいぶしょぼくないかコレ?

まあ,これを一応参考にしつつ,適当にプログラムを組みます.

arduinoはいくつかのプログラム方式が利用できますが,

今回はBlocklyDuino(enhanced)を利用しました.

これを利用すると,いわゆるブロックプログラミング(scratch的なやつ)の結果が,

arduinoにわかる言語に変換してマイコンボードに書き込むことができます.

最初から文字でゴリゴリ書けないこともなさそうですが,あえてこの方法で.

プログラムの一部.

プログラムしたデータはページ末に添付されています.

zipファイル内の,

.xmlファイルがBlocklyDuino enhanced 用のデータ,

.inoがarduinoのIDEで開けるファイル,

.hexがコンパイルしたバイナリです.

ざっとブロックプログラミングで作ってから,

arduino用の言語にしたところでちょっとだいぶ手を入れてあります.

というかいくつかバグがあってBlocklyDuino enhancedの変換コードそのままでは動きません.

グローバル変数の位置,デジタル入力のプルアップ指定,

良く変更する数値をまとめたりといったあたりをはじめかなりいじりました.

ふつうのテキスト系エディタでのプログラミング経験があれば,

コンパイルエラーのメッセージや動作が挙動不審なところから探して適当に直せます.

本家blocklyduinoは,バグは少なそうなんですが,

これはこれで今主流のI2C接続のLCDが利用できないとか,

日本語の変数名を許容するものの変換されたコードはまず解読できなくなるとか,

どっちもどっちです.

初学者用環境なのに初学者にお勧めしにくいです.なんだこれ

それから温度計はブロックプログラミングのライブラリにないものを選択してしまったので,

arduino開発環境でライブラリの導入(OneWire,DallasTemperature)とコード書きをしています.

仮のシーケンスと炊いてから判明した現実との齟齬もブロックプログラミングには反映できてないです.

あと,本家blocklyduinoだと簡単に音階でのブザーが作れるので,

そこから切り貼りをしてちょこちょこ修正すると完了メロディを作ることができます.

Arduinoはmega 2560の互換品を使用していますが,

arduino unoでも問題ない使い方しかしていないと思います.

そのほか使ったマイコン用の部品は

・温度計

炊飯器に付属しているものがうまく使えなければ,

マイコンボード用のものを適当に調達します.

DS18B20互換のデジタル通信方式の温度センサを使ってみました.

・I2C LCD(これのせいでBlocklyDuino enhancedを使うことになった)

表示用です.20文字×4行のものにしてみました.

状態,タイマー,温度,経過時間を表示します.

・ブザーあるいはスピーカ

UI用です.ブザーの一部は音階に対応していないかもしれません.

・ブレッドボード

スイッチ置き場兼DC5Vの分配器などとして使います.

・タクトスイッチ

タイマーセットと炊飯開始,工程スキップ用ボタンです.

このほかの部品は,

・ヒューズ(今回はブレーカ)

うっかり直結すると悲劇なので必ず入れます.

・SSRソリッドステートリレー(炊飯器が約210Wなので,余裕を見て5A以上対応のもの)

DC5Vの信号でAC100Vを制御するための部品です.

便利ですがヒートシンクをつけておかないと破損することがあります.

Arduino用として売っているSSRは2Aまでなのでやめておくのが賢明です.

メカニカルリレーを選択するとヒータオフ時の電磁ノイズ対策をしないといけない気がします.

マイコン単品と違ってパスコンがどうのとかクロックがどうのとか余計なことを考えないでよいのでとてもべんり.


哀れな炊飯器(新品)を殺してばらして並べて揃えて晒してあげます.

外装,釜,蓋,ヒーター,温度ヒューズ以外の臓物は不要なので排除します.

旧頭脳.マイコンのパッケージ表面は品番が分からないよう細工されている.

回路.リレーとノイズ除去,マイコン用の電源,温度計用の補助回路,ブザーが載っている.

ヒーター,210 W.発熱体がアルミニウムで鋳込まれている.接続してある耐熱コードは再利用.

温度センサ(ntc)はついていましたが,温度係数が不明なので別のものを付けました.

温度ヒューズ(172 ℃)も同じところに設置されていました.

ブレーカとソリッドステートリレーを外装横に設置します.

マイコンボードその他を搭載していきます.

できるだけ見た目が出オチになるように!

炊飯してみました.

ごはん.

ポイントとなるのは測った温度の取り扱いでしょう.

釜の中の温度が知りたいのに対して,実際には釜の外を接触式に測っており,

センサの周辺にヒーターがあるという,内部温度より高く出るのか低く出るのかわからない状態からであり,

適当に設定温度を変えながらカットアンドトライしますが,

あまりミスすると生煮えのコメが大量発生するので,

生贄にした炊飯器の頭脳が最初に(最期に?)

炊飯したときのグラフと突き合わせるのが良いでしょう.

今回は沸騰工程を水のみで行い温度計の調整をした後に,

一度炊いてみて,標準炊飯時間を超過した際などの事故時には手動で工程をスキップしながら

炊いてみたところ生煮え/焦げフリーでテストできました.

作ってみると,意外とシンプルな方法でコメが炊飯できることが分かります.

というか,炊いてすぐまともに食べられればいい程度なら,

たいていの方法で食えるものができます.

時間たってもおいしいかどうかは別.

市販炊飯器は専用機となることで手間を省いた代わりに,

「炊飯」をブラックボックス化してしまうのがデメリットでしょう.

自作炊飯器なら,自分で考えた制御方式と再現性の両方を手に入れることができます.

釜の外の水やごみをとっておけという理由も納得です.

正しく温度が取れないと釜内の温度をあてにした仕組みが崩壊します.

本当は釜底の接触式でない方法で釜内温度をとるべきだと思いますが,

このへんはメーカの開発だとたくさんの炊飯実験から内部を推定するんでしょうたぶん.

やってみると分かることとしては,熱板式の加熱方法では伝熱や熱容量の関係で,

ヒーターを止めても温度が上がり続けるなどの制御を外させる要素がありました.

スチーム機能でもついていない限り炊飯器の1合当たりの消費電力はマイコンでもIHでも大差ありません.

そのため高機能炊飯器のほとんどがIH(誘導加熱)であることは,

どうせやっぱり制御はマイコンがしている訳だしずっと意味のないことだと考えていました.

しかし,釜を直接加熱しないと細かい温度制御はまず望めないという事情がありそうです.

(ただ,IH炊飯器をハックするのは元々の基板をうまく利用する必要があるので難易度は格段に上がりそうです)

火力について,炊飯器の加熱出力はフルパワーで10分程度で沸騰に達するような出力に設定されているようです.

沸騰までの時間は10分が適当といわれており,

沸騰工程において炊飯時にヒータの火力調節をする意味はあまりありません.

ハナから強火出力は出ません.

弱くする意味も,5合の機種で1合しか炊かないけどおいしく炊きたい,

とかの場合までカバーしようとするときは制御必要かも,程度です.

家電の中で,残り時間がなぜか途中から表示されるものとかわりとありがちですが,

今回の炊飯器もそうです.可変する箇所があると残り時間が確実にわかるまでにある程度工程を進めないといけないんですね.

高機能な炊飯器だと炊飯時間がスタート直後にわかるので,何かもう少し賢いことをしているのでしょう.

プログラム入れ替えると保温調理器になりそう.

炊飯実験時のグラフ.

煮る工程のプログラムミスで蒸し工程に行かなかったのでスキップ.

蒸し工程に行ったものの温度センシングが工程漏れしていたため,加熱が始まらない.

システムリセットと工程スキップ機能を活用して,再度の沸騰工程で代替した.

煮る工程が瞬殺された.沸騰判定温度が高くてそこで煮込みすぎた.

また,蒸す工程は温度は測れたものの,工程終了条件に反映していないことに気づいたので途中スキップ.

炊飯工程を通しで実行できた.

釜内の水が減ると温度上昇が急になることがわかる.

もしかしたら,Δ℃で制御するほうが煮る工程をより活かせるかもしれない.

添付の「プログラムデータ」について,

CC BY-SA (クリエイティブ・コモンズ・ライセンス 表示-継承)とします.

まああまり上手なコードではないかと思われますが.

参考になるようでしたら使ってください.

ハードウェア次第ですが,手元の環境では1合炊飯テストをパスしています.

Shimalith