1万円でPCR装置をDIYその5。必要な温度制御に成功!が、温度制御プログラム難しい。。。
カテゴリー:PCR装置を作ろう(記事数:6)

↑B


2017.12.11

1万円でPCR装置をDIYその5。必要な温度制御に成功!が、温度制御プログラム難しい。。。


 ↑上記が1万円弱で作製したPCR装置でPCR反応に必要な94℃30秒、60℃30秒、72℃60秒を行ったところです。青色が温度、赤色が加熱/冷却の制御ログです。温度を一定に維持するところで波打っているのが分かるかと思いますが、温度制御が難しいです。。。。。現状で設定温度±1℃ぐらいで維持していますが、高価な市販のPCR装置はぴったり温度に合わしていてこんなブレはないので、まだまだですね。

 特に94℃などの高温で維持する場合と、60℃という比較的低温で維持する場合では同じアルゴリズムでは制御出来ませんでした。具体的には94℃では周囲への放熱が激しいのか温度低下が早く、94℃付近に近づくものの、ぴったり合わせようとすると94℃を超えることが出来ず、上記グラフではこれで92℃を超えてから94℃を超えるまで70秒間もかかり時間をロスしています。ただ94℃→60℃の移行は40秒、60℃→72℃の移行は10秒で完了しており市販のPCR装置を考えても悪くない感じです。まだまだ改良の余地がありますが、現状でもPCR出来そうな気がします。

以下がPythonによるプログラムです。



Pythonに慣れてないので色々変な記述があるかもしれません。個人的メモとしては
(1)atexitというモジュールで正常終了、ctrl+cでの終了含めてスクリプト終了時に実行するコードを仕込むことが出来る。これはIoTプログラムに便利!
(2)Pythonはグローバルな関数をサブルーチン内から変更したい場合は「global」宣言が必要(15行目)。参照するだけならいらない。
(3)サブルーチンは呼び出す部分より上に記述しないと参照出来ない。一番下に書くとnot definedって出る。

前回までの検討↓

で、単純に温度を超えてから加熱、冷却を制御していたのでは±4℃ぐらいの温度変動が出てしまうことが分かりましたので改良し、現在は「0.5秒前の温度と現在の温度から温度の上昇トレンドを算出して、2.5秒後の到達温度を予想、設定温度を超えているようなら加熱/冷却を止める」というものです。ただ、これだけだと前述した60℃一定に保つ時と同じアルゴリズムでは94℃一定に保つ時に問題があるので、とりあえず適当に「高温の時は加熱を少し増やす」(26行目)の処理を入れてどうにか誤魔化しています。
こういう制御をPID制御というらしいのですが、
実はこのプログラムにたどり着くまでに色々な制御方式を試したりパラメーターを調整しました↓

当初、単に設定温度に近づけば加熱/冷却を弱めれば良いんじゃないかと思っていたのですが、この方式だと、たとえば(1)20℃→70℃に加熱した時と(2)60℃→70℃に加熱した時で、どちらかがうまくいかなくなります。今の温度だけ見て制御するのはダメみたいです。

そこで数秒先の温度を予測するような現在のスクリプトにして、冷却/加熱を設定温度を超える前に行うことで、どうにかこの記事の最初の温度グラフを実現出来るようになりました。

とりあえずは今のプログラムでPCRやってみようかと思いますが、±1℃波打つのはどうにかしたいと思っています。ただし温度センサーからのフィードバックを使って制御するのはこれが限界かもしれません。というのも、温度変化があってから制御を変えてもすでに遅くで設定温度を行きすぎてしまうのです、これは温度測定の頻度を短くしても同じでした。これ以上の精度で制御するには、温度センサーの値のみに頼らず、装置内部の温度状態を予測する必要がありそうです。

下記は採用するか分かりませが机上で検討中の次世代方式の制御プログラムです。

「ペルチェ」と「センサー」部位の2コンパートメントの温度遷移モデルとして、それぞれを温度が遷移します。また3番目のコンパートメントとして室温に熱が遷移(逃げていく)部分を設定し、連立微分方程式を立ててペルチェ温度とセンサー温度をシミュレーションしました。パラメーターをモンテカルロ法で最適化したところ±1℃で制御することがシミュレーションでは出来ました(下記グラフ)。この方法だと94℃でも60℃でも同じ数式でいけますが、ただ実際の装置のパラメーターは自分で設定しないといけないんだよね。結局、この記事の上記で紹介したシンプルなプログラムをちょっと修正して使う気がします。



PCRはなかなか難易度が高いですが、同じ装置で4℃保冷庫とか、37℃インキュベーターとか、13℃一定ワインセラー(笑)とかは簡単に作れそうなので、そっちも今後作りたいなと思っています。

Category:PCR装置を作ろう



※当サイトで実施している実験において使用している試薬・機器は全て一般の人が購入・入手可能なものです。入手方法は過去に紹介されているはずですが、見つけられない場合はコメント欄等でお問合せください。

コメント

いいっすね!=289
001 [12.12 15:09]uspkt@OCN:こんなIF文の山の複雑なロジック、普通PID制御とは呼ばんやろ。PID は proportional integral derivative の頭文字。生の値と積分値、微分値にそれぞれ係数掛けて足すだけ。比例制御+積分制御+微分制御=PID制御。Wikipediaに書いてある式そのまま計算しなさい。あとはパラメータ調整すればWikipediaにあるグラフのアニメーションのように最適な応答曲線が得られる。 (70)
002 [12.12 15:14]uspkt@OCN:ON/OFF の2値制御だと温度が安定しないから、1bitΔΣ的に考えて、可能な限り短い周期でON/OFF繰り返して、平均値が目的の出力になるように PWM の関数組むけど、モータドライバーってそれ最初からあるんじゃ??? (59)
003 [12.12 15:39]uspkt@OCN:PIDって言ってるのは、今のやつ作る前のなのか。誤読してた。でもそれパラメータ調整失敗してるだけだと思う。 (20)
004 [12.12 16:09]gのつく会社:管理人氏バイオもハードもソフトもいけるとかレア人材過ぎる。GMに紹介するからうちに来い笑 (10)
005 [12.14 22:12]ななしさそ★42:相手というか反応対象が溶液なので、これで十二分な制御精度だと思いますよ。昔のある身ブロック式サーマルサイクラーはこれよりずっと甘かった(±1度かつハンチングもそれなり)。ただ、実際に反応状態で、マイクロチューブに温度計ぶっ刺さないときちんと反応するかは判らない気が。あと、ペルチェの逆電流で冷却はかけないんですか? (17)
006 [03.09 00:30]すごい@Au:すごいけど、大学のゴミ捨場に古いサーマルサイクラー捨ててあるよねぇ。俺なら拾って満足だな。 (13)
007 [03.09 00:34]そうそう@Au:今時3stepでPCR回してる人も珍しいんじゃないかな? (15)

名前
コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数: ↑B
[RSS]

→カテゴリー:PCR装置を作ろう(記事数:6)