2018/02/13

micro:bit で低温調理

このネタは自分の facebook のタイムラインにも投下してるんですが、もう少し説明をクドクドと付け加えてブログに書き起こし直しました。

システム全景

低温調理でローストビーフを調理するのに、Anova とか出来合いをマシンを買うのはつまらないし、安くないから電子工作しよう!

という話です。

ことの始まりは、ローストビーフを炊飯器で作るレシピを試してみたら温度コントロールが思うようにならないので、電気ポット使ってどうにかならないかと思い、ググったら既にやってる人 Raspberry Piでつくる! 柔らかローストビーフ♪を見つけました。
ラズパイは持ってるんですが、温度調整ごときにラズパイ使うのも勿体無いので、別環境に移植しました。SSR も 3.3V 駆動したかったのと、コストを抑えるため、別なものを使っています。

最初に言います。PI 制御部分のコードは上記ブログの niku.py version 2.0 から移植させていただきました。ありがとうございます。パラメータもチューニングしようかと思ったんですが、同じ値を使ってみたら悪くないので、そのまんま。。重ね重ねありがとうございます。

おかげさまで我が家ではこのマシンはローストビーフのシーズンに活躍しております。ローストビーフだけでなく、低温調理チャーシューもお気に入りです。

まず最初に一昨年ぐらいに Nucleo の mbed に実装したのですが、去年末には micro:bit に移植しました。ここでは micro:bit 版について書いておきます。

回路図
手書きですみません

実体配線図1

実体配線図2

LM60 はスーパーX で固めて防水加工
GND 端子がチップに直結しているので
温度が伝わりやすいよう GND は
気持ちスーパーXを薄めにしてます

回路は簡単かと思います。

回路概要ですが、温度センサー LM60BIZ の出力 Vo を ADC 入力 AIN0 に入れ、ポットの電源のコントロール出力を P8 に出しています。100V の電源を ON/OFF している SSR は 100V AC のケーブルの片側を切って挟んでいるだけ。micro:bit とは取り外しの手間とか考えてステレオミニジャックで繋いでますが、直接接続しても問題ありません。使用した 秋月の SSR キット は 3.3V でも ON/OFF 出来るので、micro:bit の出力で直接コントロール出来ます。また SSR には秋月で大きめな?ヒートシンクつけています。なお AIN1 にはリファレンス電圧をシャントレギュレータ NJM431L から供給しています。

基本的には LM60 (秋月へのデータシートへのリンク)は温度に比例した電圧を出力するので、その電圧を micro:bit の ADC で測ればいいのです。ADC の結果はリファレンス電圧 3.3V の電圧を 1024 分割した値として得られます。

ちなみに micro:bit の回路図は https://github.com/bbcmicrobit/hardware/blob/master/SCH_BBC-Microbit_V1.3B.pdf のようです。

micro:bit の ADC のリファレンス電圧 3.3V は上記回路図を見るとわかるように、多分 nRF51288 の AVDD の電位のことを指していて、+V_TGT より供給されています。

+V_TGT は3通りの電圧の供給方法があって、 NXP のマイコン MKL26Z128VFM4 に入力された USB からの 5.0V 電源によって作られた 3.3V VREG33OUT か、CON1 コネクタに繋がれたバッテリー VBAT もしくは micro:bit のエッジコネクタから +V_TGT に直接供給される電源ということになります。

MKL26Z128VFM4 は USB I/F と 3.3V レギュレータを兼ねているようなのですが(レギュレータ出力以外は nRF51822 の SWD に繋がる線がある)、そのレギュレータ出力 VREG33OUT は MIN 3V, TYP 3.3V, MAX 3.6V とリファレンスには程遠く、しかもその出力は BAT60A というショットキーを挟んで +V_TGT に接続されます。いくらそのショットキーが低ドロップ電圧と言っても多少なりとも下がるわけで(MIN 0.1V の模様)。。全く信用なりません。他の経路からは電池からの供給だったりするので(アルカリ電池だったら 1.5V x 2 = 3.0V)、3.3V ですらないわけです。

という訳なので別途リファレンス電圧を用意して、その ADC の結果と、LM60 の ADC の結果から LM60 の出力電圧を計算にて求めて、少しは精度をあげてみようという試みを行なってみました。

リファレンス電圧には NJM431L シャントレギュレータを使いました。秋月で入手できるし、使い方も簡単。少しはマシなはずです。

NJM431 は、抵抗を通して VKA に VREF〜36V の電圧を与えると VKA には VREF の電圧が出力される素子です。回路構成は NJM431 のデータシートの TEST CIRCUITS の 1. で、その INPUT に micro:bit の VDD (3.3V ぐらい) を接続し、抵抗には 200Ωを挟んでみました。ELECTRICAL CHARASTERISTICS にあるように、VKA には TYP = 2495mV 出てるはずです。念のために VKA をテスターで電圧を測ってみたら 2475mV でしたので、コードには AIN1 に 2475mV 入ってくると仮定して、AIN0 に入ってくる LM60 の出力 Vo を計算で求めてます。AIN0/AIN1=Vo/2475 の単なる比例計算から求まります。どれ程精度が上がったのかはちゃんと確認してませんが、電源が変わってもリファレンスは一定のはずです。さー、どこまで効果があるのやらw

あと、LM60 の Vo と GND 間には 0.1uF のコンデンサを入れるといいです。出力の安定感がかなり向上します。VS+ GND 間はそれほどでもなかったので省略してます。お好みでどうぞ。また ADC の結果は複数回取って平均した方がいいです。そうしないと結果がバラつきます。

ちなみに回路図には書いてありませんが、micro:bit 用電源のために、USB 電源プラグ用のコンセントが AC 電源プラグに並列に接続してあります。無くてもいいですが、一つにまとまってると使いやすいのでそうしてます。

部品表
ちょっとうろ覚えなところもあり(2018/2現在)。
ざっくりこんなもんだと思って下さい。
このリスト+電気ポットです。

部品価格購入先
micro:bit2160円秋月電子
micro:bit Breakout (+ headers)842円マルツ
ソリッド・ステート・リレーキット25A(20A)250円秋月電子
ヒートシンク54x50x15mm110円秋月電子
LM60BIZ 温度センサー100円秋月電子
NJM431L シャントレギュレータ30円秋月電子
200Ω カーボン抵抗1/4W6円千石電商
0.1uF 積層セラミックコンデンサ15円秋月電子
ブレッドボード270円秋月電子
ブレッドボード・ジャンパーワイヤ10cmセット180円秋月電子
3.5mmステレオミニジャックDIP化キット150円秋月電子
3.5mmステレオジャックMJ-073H60円秋月電子
ステレオミニジャックケーブル108円百均
micro USB ケーブル108円百均
AC USB 電源プラグ108円百均
2P ACソケット105円千石電商
ケース108円百均
ケーブル類数百円〜秋月電子・千石電商
ゴムブッシュ秋月電子
3φネジ少々秋月電子
電気ポットを除くとざっくり 5000円ぐらいでしょうか。
安い。。とは言えないか。
でも micro:bit は使い回し出来るのでそれは差っ引いてもいいですかね?

コード
さて micro:bit でハマった点は、JavaScript ブロックエディタだと、整数演算しか出来ないところ。最初気づかずに結果が合わずに悩みました。mbed 環境にしてしまえばなんでもござれなんでしょうが、ここは敢えて JavaScript ブロックエディタで挑みます。従って、少数は整数に桁上げをしたり、演算の順序を気にして精度落とさないようにしたりして最後に割って桁戻しています。32bit の整数での演算だろうから、演算範囲から多分オーバーフローはしないなという仮定でコードを簡単に書いています。


ちなみに PI 制御部分のコードは冒頭に書いた通りです。上記ブログに PI 制御の概要が書かれているので興味ある方は読んで見るといいですよ。

プログラムの動作について:

  • デフォルトで表示されている値はPWMの値。0〜A です。スクロールしないよう一桁に抑えたかったので16進数です。
  • A+B キーでモードを切り替えられます。
  • ノーマルモード(デフォルト)では A ボタンで今の温度を表示、B ボタンでターゲット温度を表示。
  • ターゲット変更モードでは A でマイナス、B でプラス。温度表示は、温度 x 10℃です。32.5 ℃だったら、325 と表示されます。
  • USB の方のシリアルに温度情報とかをテキストで出してますので必要に応じてモニタしてもらえればと。Kp, Ki パラメータをチューニングしたい時にも役に立つと思います。

コードの中で特筆すべきテクニックを駆使しているようなところは全然ありませんので参考までに。デフォルトでPWMの値を表示させているのは半分デバッグの意味合いもあります。温度表示でもいいんですが、PWMループをある程度正確に保つためにリクエストがあった時のみ温度表示させています。温度は複数桁(3桁)を表示させるのでスクロールになってしまい、時間がかかり、PWMループが狂ってしまうからです。

キャリブレーション
実はコードそのままでは若干温度がズレてしまいました。変数 toffset で調整することが出来るようになっています。うちの環境では +2℃ほどズレているようなので、-20を入れて調整しました。温度計がない場合は沸騰したお湯とか氷水で温度のチェックをして、この値で調整してみてください。

そのうちキャリブレーションにも対応させて、値を外付けの EEPROM に保存しようかと思って、EEPROM をブレッドボード上に載せてます。micro:bit のフラッシュも不揮発性メモリとして使えるようですが、プログラムを書き換えると飛んでしまうようなので、外付けの EEPROM を使おうと思っています。氷水と沸騰したお湯の温度を測って toffset を計算させて、EEPROM に格納しようかと。micro:bit 起動時に EEPROM にマジックナンバーが書いてあれば、toffset の値をロードさせるというようなコードにするつもりです。

改良予定
まずはキャリブレーションと EEPROM 書き込みを追加したいです。
あとは、タイマーとブザーかな。Nucleo (mbed)版はタイマーとブザーは付けたんですが micro:bit 版は見ての通りまだです。それ程困らないし。ま、いっか。

レシピ
あ、肝心のローストビーフのレシピです。
このマシンのお陰て安定して作れるようになりました。

材料:
牛もも肉500g程度
塩胡椒またはシーズニングを適当に(肉の重さの1%程度がいいみたいです)

手順:

  1. 肉は常温に戻しておく(冷蔵庫から出して30分程度放置)
  2. 塩胡椒またはシーズニングをまぶす(3. の直前に)
  3. フライパンで全てにお好みの時間焼き目をつけます。
    そんなに簡単に奥まで火は通りません。
    火の通っていない断面で確認しながら調整して下さい。
    ちゃんと焼き目を入れるのは表面の殺菌にもなるので必ず焼きましょう。
  4. ジップロックに肉を入れる。口は完全に閉じずに端にストローを挿す。
  5. ジップロックを水を張った電気ポットに沈め、
    ストローから空気を吸って空気を抜いたらジップロックを閉める。
    水に沈めると空気を抜きやすいです。
    空気の層が残っていると温度が伝わりにくいです。ちゃんと抜くこと。
  6. micro:bit で温度調整開始!
    ミディアムレアの 57〜58℃だと 500g なら 60分もあれば出来上がります。
    それより長時間放っておいても火が入りすぎることは無いです。
    時間が長い方が柔らかくなる。。ような気がする。色々お試しください。
  7. 出来たらジップロックごと氷水に入れて急速冷凍。
    細菌の繁殖する温度をスキップさせることと、肉を落ち着かせるのが目的。
  8. 30分程度は放っておいてからカットして食べましょう!
    お好みで再度焼き目を入れてからでもいいですよ。
    お好みのソースやら、ホースラディッシュなどの薬味を添えて。

くれぐれも食中毒には気をつけて下さい!

余談
2011年にアメリカに出張した時に、プライムリブっていうのを食べた衝撃がすごくて、自分のうちでもいい感じに火を通したローストビーフが食べたい!と思ったのがそもそものきっかけ。あ、うちでもプライムリブやってみたいんだけど、なかなかハードル高いので(肉の値段やら入手やらサイズなど)、そこらへんで入手可能なモモ肉や肩ロース肉で我慢してます。それにしてもアメリカでは指定した焼き加減でキッチリ焼いてくれたりと、流石は肉食文化、スゲーと感心したもんです。

プライムリブ1ポンド(確か$30以下)
カリフォルニア、ミルピタスの Black Angus にて
柔らかくて、とろけるようです。うっとり。

アメリカに行ったらもう一度食べたい。うー。





2018/02/10

HHK (PD-KB400WNS)

PD-KB02(手前) と PD-KB400WNS(奥)

ようやく買い換えました。HHK (Happy Hacking Keyboard)。やっぱり入力デバイスは重要ですよ。ちょい高ですが。ストレスなく入力出来るとその分頭を思考に割けるので生産性が上がる気がする。

えぇ、気がするだけです。気のせいです。きっと。

でも Control キーの位置(Aの隣にしてくれ)と英語配列は譲れません。これらが違うと本当に思考止まります。会社支給のノートパソコンは大概日本語配列なので速攻それだけは直します。15年ぐらい前まではキーボードバイリンガルだったけど、今は英語配列一本に絞っちゃったんで、日本語配列だと記号は目で探してしまいます。

自宅では MacBook Pro 使ってるので、HHK使わないんですよ。あくまでもHHKは仕事用。手前の方の PD-KB02 は 2003-05 製造なんで 14 年は使いました。ここから数多くの RTL を含む各種言語によるプログラム等が生み出されたんだよね。感慨深い。

ところで最後まで PD-KB400WN と迷ったのだけど、Type-S 若干静かだろうということと、知人が PD-KB400WS 持ってるってことだったので(多分 WNS ではない)、対抗して WNS に決めましたw

今のオフィスは結構静かなので、他人がガツガツ叩くキーボードは結構響きます。まぁ、そんなわけで Type-S にしといてちょうど良かったのかも。PD-KB400WNS と PD-KB02 の静粛性は主なキーではそれ程大きな差は感じないのですが、スペースキーやシフトに関しては PD-KB02 は金属のガイドみたいなのが入ってるので、かちゃかちゃうるさいんですよ。それが無くなっただけでもイイ。PD-KB400WNS はサクサクという感じの音です。PD-KB02 と比較して若干タッチも軽くなったので力の弱い小指に優しいのもいいです。

PD-KB02 は押入れに行くことになります。スペアとしてとっておこう。