Header Ads

Arduino温泉卵機の製作3(基本設計)

どうも、とらです(๑´∀`) 前回の詳細調査に引き続き、Arduino温泉卵機の基本設計を行うことにしました。
 






まずは機能と制約条件の確認


卵に関する一通りの調査から、Arduino温泉卵機には以下の機能が必要だと分かりました。


・指定した温度で温泉を作ることができる
・温泉を指定した温度に保つことができる
・温泉に卵を入れておくことができる
・温泉の温度をリアルタイムに知ることができる
・調理の温度プロファイルを後で作成することができる


ここで言う温泉は「お湯」という意味ですが、せっかくなので温泉という言葉にして抽象的に面白くしておきます。イメージにするとこんな感じですね。





次に制約条件です。地面を掘って温泉を作るわけではないですし、まきや火も使いません。既に構想段階で方向性は決めています。ですので「これに違反してはダメですよ」というルールとして

・電気ケトルを使う
・電気ケトルは改造しない
・Arduinoを使う

としておきます。




設計思想


機能と制約条件がまとまったので、それを支える設計思想も考えておきます。設計思想とは細々したものではなく、Arduino温泉卵機を作っていくにあたっての一貫した方針です。例えば

・身近にあるものを改造せずに組み合わせ、新規で作るものはモジュール化を優先的に考えて最小にする

としたとしましょう。

まず、「身近にあるものを改造せずに」ということで
ああ、だから電気ケトルをそのまま使うんだな」となります。

「組み合わせ」と「新規で作るものは
モジュール化かつ最小」から
一体型じゃなくてArduinoに組み合わせる使い回せるモジュールを作っていくんだな」ということが分かります。

以上のように、設計思想は開発者の意図を設計者に正しく伝える役割を果たし、設計者同士の意識合わせにも役立ちます。また設計者が何かに迷った時の道しるべにもなります。

今回は 開発者=設計者=とら なので設計者に開発者の意図を伝える必要はありませんが、製作を進めていく中で大きな目的を見失うこともあるかもしれません。そんな時はこの設計思想がとらを原点に返してくれる役割を果たしてくれるはずです。


個人で電子工作をしていると、知らず知らずのうちに余計なものを作り込んで、別のものを作る時に前作ったものからパーツを外して、というようなことを繰り返しているうちに家にガラクタが溜まってしまうことがあります。これを防ぐために、個人でやる時も設計思想があるといいと思います。

というわけで今回はこの設計思想でいきます。





温度制御メカニズム


今回は電気ケトルを使うため、発熱部は考えなくておkです。考えるべき部分は温度制御部です。


温泉の場合、地表で沸き出しているお湯の温度、お湯をためておく空間の体積、その空間を作っている物質、外気温などで温度が決まります。熱い温泉が豊富に湧き出しているところではお湯の温度もそんなに変わらず、卵を浸けておくだけで温泉卵ができます。ですので温度制御を考える必要はありません。

しかしArduino温泉卵機は湧き出しているお湯を使いませんし、お湯の量もたかだが1リットルです。保温機能のない電気ケトルを使うので、できたお湯はヒーターが切れればすぐに冷めてしまいます。逆にヒーターをつけっぱなしにすれば100℃になってゆで卵です。なので何らかの温度制御機構を付け加えることでArduino温泉卵機に必要な機能を実現する必要があります。


そこで Negative Feedback Loopというものを使います。これは体のあちこちで行われている制御機構です。一番分かりやすいのが体温の維持です。脳の視床下部には体の各部からやってくる体温の情報をモニタリングしている部分があり、体温が一定の値を越えると皮膚への血流を増やすなどして体温を下げるように指令を出します。逆に体温が一定の値を下回ると皮膚への血流を減らしたり筋肉を震わせて体温を上げるように指令を出します。








これをArduino温泉卵機に使うことにしましょう。脳の視床下部に当たる部分は言わずもがなArduinoを使います。体の各部からやってくる温度情報の部分は温度センサを使います。温度が一定以上に下がった場合の発熱源である筋肉は電気ケトルのヒーターになります。



皮膚に相当するものは今回はありません。皮膚はラジエーターの役割を果たしており、血をたくさん流すとそれだけ熱が放出されて体温が下がります。Arduino温泉卵機の場合、もし温度が高くなりすぎても、自然放熱による温度降下しか今のところは考えられませんので、温度が設定した値を下回った場合のみヒーターによる加熱で設定温度まで温度を回復する、ということにします。



上の脳のイラストでいうと左側の制御はない、ということになります。もし何かのエラーでお湯の温度が100℃になってしまったら、温泉卵ではなくゆで卵になってしまうということですね。


さて、脳から離れて分かりやすくブロックで描いてみましょう。


まずは左のReferenceから。これは基準になる値です。下にあるのはSensorで、今回は熱電対を使います。これからMeasured outputとして温度情報がやってきます。Referenceに照らし合わせたとき、どれだけずれているかがMeasured errorです。

Measured errorを受け取るのがControllerです。ControllerはArduinoですね。受け取った情報からどうしたらいいのかを判断をし、次のSystemに対する指令としてSystem inputを出力します。

これを受け取るのがSysytemです。今回のSystemは水と卵が入った電気ケトルです。それが熱くなって温度としてのSystem outputが現れます。それをSensorが数値にするわけですね。


それでは設定値を70℃にし、様子を見てみましょう。まずは電気ケトルの中のお湯の温度が設定値より低い時です。電気ケトルのヒーターが加熱してお湯を温めます。


続いて電気ケトルの中のお湯の温度が設定値より高い場合です。電気ケトルにはヒーターしかなく、お湯を冷ます機構はないので自然放熱で冷めるまで待つことになります。

以上を繰り返し行い、設定した温度を保つように制御します。



制御モード


温度制御メカニズムをどうやってArduinoで実現するのか、についてはいくつかやり方があります。一番簡単なのが、Electromechanical Relay(Electromagnetic Relay、電磁リレー、単にリレーと呼ばれることもある)を使い、電気ケトルを設定温度付近でOn/Offする方法です。

設定温度以下ならArduinoからリレーの電磁石に電流を流し、その機械的作用によって100Vの接点を閉じて電気ケトルに電流を流します。温度が設定以上なら電磁石への電流をとめ、接点を開いて電気ケトルをOffにします。



この単純なやり方はOn/Off制御と呼ばれます。しかしやってみると分かりますが、リレーのカチカチ音がうるさいです。

On/Off制御以外にもいくつかの制御モードがあって、その一覧が以下です。見て分かる通り、On/Off制御はカチカチうるさいだけではなく、温度制御している間ずっと温度が周期的に変化します。これでは「温泉(お湯)を指定した温度に保つ」という機能の実現が難しくなります。




上の一覧表を見る限り、一番下のPID(Proportional Integral Derivative)制御がよさそうです。他の制御モードに比べて早めに設定温度になるのと、一度温度が設定温度で安定した後は温度変化がほとんどありません。なのでこれを使うことにします。

PIDにはElectromechanical Relayではなく、接点のないSolid State Relay(SSR)がよく一緒に用いられます。これは内部にLED が入っていて、その光で100V側のOn/Offを半導体素子でやるものです。カチカチ音がしないので嬉しいですね。


このSSRを箱に組み込み、ACのインレットとアウトレット、それからSSRへのコントロール入力端子を備えたユニットを作ります。これのお陰で制約条件にある

・電気ケトルは改造しない

を満たすことができます。さらに設計思想にあるモジュール化をも満たすことができます。SSRのユニットは他の用途にも使い回せそうですね。



センサー


温度センサーにはいろいろ種類があり、種類によって熱応答反応時間、衝撃耐性、測定温度範囲、誤差が違います。

白金測温抵抗体(± 1.0℃以下)
サーミスタ(± 1.0℃以下)
IC(± 2.0℃以下)
熱電対(± 2.5℃以下)
(かっこ内は誤差)


今回のArduino温泉卵機では、特別な加工なしに電気ケトルのお湯の中に突っ込めるものがよさそうです。そこでArduino界隈でよく使われる熱電対を使うことにしました。




熱電対とは2つの異なる種類の合金を密着させたもので、熱を加えるとそれぞれの合金の間に温度に比例した電圧が発生します。この電圧を測定することで間接的に温度を知ることができます。ただし熱電対には冷接点補償というものが必要で、合金が密着していない端を氷水などで0℃にする必要があります。



熱電対には色々なタイプがあり、E, J, K, M, N, T, B, R, S, C, D, Gなどがあります。その中でもK型の熱電対が汎用的なものとして最も普及しています。以下はそれぞれの熱電対における温度によって発生する電圧のグラフです。





K型熱電対をArduinoで扱う際、熱電対アンプモジュールが必要になります。このモジュールは冷接点補償を代わりにやってくれるので氷水は不要になりますし、シリアル通信でArduinoにデータを送ってくれます。ライブラリも用意されており、簡単なメソッドで温度を取得できます。とても便利ですね(๑´ڡ`๑)






コントローラー


温度制御メカニズムに出て来たコントローラーにはArduinoボードを使います。Arduinoにはマイクロコントローラーが搭載されており、フリーのIDEでCのプログラムをちゃっちゃと書いてUSBで書き込むことにより、お目当ての動作をさせることができます。初心者の電子工作から製品のプロトタイピング、そして実際のIoTなどのサービスにまで使えてしまう優れものです。

ハードウェアの仕様がすべて公開されているので自分で互換機やモジュールを追加したりできます。そこまでしなくても機能を追加するボードが色々出ているので、アイディア次第で面白いものを作ることができます。

今回はセンサーからの温度情報を受け取り、設定温度と比べ、それに応じてSSRをコントロールするアウトプットを出す、という役割を果たしてもらいます。




システム


システムの部分はコントローラーから信号を受け取る部分でした。今回は水と卵が入った電気ケトルですね。わざわざ買わずに家にあったティファールのものを使います。




このケトルのいいところは1250Wのヒーターのお陰でお湯がすぐに沸くことと、お湯が沸いたら勝手に電源が切れることです。ただしArduino温泉卵機では70℃前後にお湯を保つので、もしかするとヒーターの容量が大き過ぎて設定温度付近での温度変化が大きくなってしまうかもしれません。自動電源Offに関しては100℃にまで上げないので勝手に電源は切れないはずです。これは望ましいことですね。

制約条件にあるとおり、改造はしません。改造してしまうと普通に使いたい時に困りますし、親に怒られる危険性があるからです。



プログラム


先に決めた機能を振り返ってみます。

・指定した温度で温泉を作ることができる
・温泉を指定した温度に保つことができる
・温泉の温度をリアルタイムに知ることができる
・調理の温度プロファイルを後で作成することができる
・温泉に卵を入れておくことができる


卵を入れておけること以外は全部プログラムに関わりそうです。ですので、プログラムの機能としては以下が必要になります。

・温泉卵を作る温度を設定できる
・センサーからの温度データをもとにPID制御を行い、SSRへの出力データを作成する
・センサーからの温度データををリアルタイムに画面に表示する
・温度データをDBに格納する

温度プロファイルに関してはプログラムに含めてしまうと大変なので、今はDBからのデータから手作業で横軸時間、縦軸温度のグラフを作ることにします。構想にあったMVPですね。決してさぼっているわけではありません(๑´ڡ`๑)



まとめ


以上でArduino温泉卵機のベースとなる以下のことが決まりました。

・機能
・制約条件
・設計思想
・温度制御モード
・センサー
・システム
・プログラム

これで基本設計を終わりにしたいと思います。

つづく

0 件のコメント:

Powered by Blogger.