サンプル輸送用の温度管理されたコンテナ
コンポーネントと消耗品
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> ![]() |
| |||
| ||||
| ||||
| ||||
| ||||
|
アプリとオンラインサービス
| ||||
![]() |
|
このプロジェクトについて
サーモパーセル氏:サンプル輸送用の温度制御コンテナ
目的は、従来のメールサービスで機密性の高いサンプルを安全に輸送するために使用できる温度制御されたコンテナを開発することです。 Mr ThermoParcelと呼ばれる私たちのプロトタイプデバイスは、4〜37°Cの温度範囲で動作し、電源アダプター、内部バッテリー、または自動車用電源ソケットやラップトップ充電器などの他の12V電源から電力を供給できます。
私たちのプロジェクトの起源
私たちのアイデアは、私たちの学術研究で直面した実際の問題、つまり温度に敏感な生物学的サンプルを共同研究者と安全に交換することに由来しています。ビオラはマラリア病に取り組んでおり、血液サンプルを送受信する必要があることがよくあります。ただし、保管および輸送中にサンプルが適切な温度に保たれていない場合、サンプルは簡単に劣化して役に立たなくなる可能性があります。これは、サンプルにマラリアに特別な反応を示し、まれな患者からの貴重な種類の血液が含まれている場合、さらにいらいらします。
このタイプの血液サンプルを送る一般的な方法は、出荷前に完全に凍結し、冷凍品には標準の宅配便を使用し、配達後に慎重に解凍することです。凍結/霜取りは常にサンプルの一部を変更または損傷し、霜取りプロセス自体は追加の化学物質を必要とする特定のプロトコルに従うため、依然として高価であることを除けば、このようなシステムは理想からはほど遠いです。さらに、アイテムはキャンパスの小包保管庫にある大学に配達されることが多く、不適切な保管条件と配達通知の遅延がサンプルの劣化の原因となることがよくあります。
デザインコンセプト
化学薬品の配送から再利用された、小包サイズの従来のポリスチレン容器に温度制御システムを統合しました。血液サンプルを使用して最適化およびテストしましたが、同じシステムを、細胞、培地、温度感受性化学物質、エマルジョン、酵素など、他のさまざまな生物学的材料に使用したり、固形物に適合させたりすることもできます。
>システムの概念を図1 に示します。 。冷却はペルチェモジュールで実現され、低温側はポリスチレン容器内の小さなサンプルボックスに接続され、高温側は外部ヒートシンクに接続されます。加熱は、サンプルボックス内にヒーターマットを配置して行います。温度はサンプルと接触するセンサーを使用して常に監視され、加熱/冷却強度はArduinoコントローラーによって調整されます。
<図>

実装
コンテナハードウェア デザイン
外部コンテナは、寸法が250x250x250mm、壁の厚さがすべての面で45mmのポリスチレン製の箱です。これは、標準的なメールサービスを使用したラボ配送で使用される一般的なタイプの箱です。プラスチック製の筐体(125x70x40mm)が内部に配置され、2本の50mL遠心分離管が含まれています。これらのチューブは、生物学的および感染性物質、カテゴリーB UN3373の規制に従って二次包装として機能します(リンク: http://www.un3373.com/info/regulations/ )。一次サンプルは、検体を含む6本の2mLエッペンドルフチューブで、漏れを防ぐために吸収性組織で分離されています。サーモパーセル氏は、硬い二次包装を、より多くの検体を入れることができる柔軟なポーチに置き換えることにより、最大50mLの液体サンプルを保管することができます。最大3つまたは4つの15mLチューブ(リンク:https://www.alphalabs.co.uk/laboratory-products/consumables/sample-handling/sample-transport/95kpa-pouches)。内部ボックス内の加熱/冷却の均一性を改善し、銅シート、サンプル、および温度センサー間の熱接触を確保するために、サンプルの周囲に電気絶縁性の固化ゲルを注入しました。サンプルを含む内箱を図2 に示します。 。
<図>
冷暖房システム
内部温度は、サンプルと接触して配置された100オームの測温抵抗体(または測温抵抗体、RTD)で監視され、ペルチェモジュール(冷却)またはヒーターマット(加熱)を使用してPIDシステムで制御されます。ボックスの外側でペルチェからの熱を放散するために、ペルチェモジュールの高温側は、3本の銅製ヒートパイプを介して外部の銅片およびヒートシンク(CPUクーラー)と熱接触します。コールドサイドは、ボックスを通過する薄い銅シートに取り付けられ、サンプルを均一に冷却します。熱結合の詳細を図3 に示します。 。
加熱マットは、温度センサーとサンプルに接触するように内部エンクロージャー内に配置されます。
<図>



エレクトロニクスと配線
冷暖房規制
サーモパーセル氏が使用するペルチェモジュールの定格は、最大冷却電力で3.9Aおよび7.6Vです。温度を効果的に制御するために、ペルチェモジュールに供給される電力量は、PTN78020W降圧調整可能スイッチングレギュレータを使用して電子的に管理されます。レギュレータは7〜36Vの範囲の入力電圧を受け入れ、2.5〜12.6Vの範囲の出力を生成しますが、出力が入力から2Vを引いた値を超えることはできないという制限があります。出力電圧は、デバイスデータシートの表に従って、2つのレギュレーションピン間に特定の抵抗値を設定することによって調整されます。 ThermoParcel氏は、Arduinoによって制御されるMCP41100 100kOhmデジタルポテンショメータを使用して、温度の読み取り値に基づいて出力電圧を電子的に調整します。 PTN78020Wの出力電圧範囲全体で1MOhmを超える電圧変動が必要なため、デジタルポテンショメータが100kOhmに設定されている場合でも、ペルチェモジュールに電圧が印加されるため、ペルチェモジュールを使用して「オフ」にすることはできません。デジタルポテンショメータのみ。同じ規制の概念は、ヒーターマットで実行される加熱にも適用されます。マットは、電流を熱として放散する単なる抵抗器であり、電圧を調整することは、供給される電力を制御する直接的な方法です。
電源
ThermoParcel氏が主電源ソケットの近くにいる場合、12VDC電源を使用してPTN78020Wに直接電力を供給します。これにより、最大電力でペルチェを駆動するのに十分な最大10Vの出力が可能になり、プロジェクトの目的のために十分な電力でヒーターマットが使用できるようになります。 PTN78020Wレギュレーターの7〜36Vの入力範囲を考えると、ThermoParcel氏は、ラップトップやその他の電子機器に使用されるほとんどのDC電源、および自動車に見られるシガレットライターソケットでも駆動できます。外部電源が利用できない場合、ThermoParcel氏は3.7V、10400mAhのリチウムイオン電池で駆動されます。バッテリは引き続きPTN78020Wレギュレータに電力を供給しますが、ペルチェモジュールを駆動するために必要な入力電圧(PTN78020W入力で10〜12V)に到達するには、XL6019昇圧DC-DCコンバータを最初にバッテリ出力に接続します。
>Arduino配線
可能な場合は、ボードのジャックソケットを介して、12V外部入力から直接Arduinoに電力が供給されます。内蔵バッテリーを使用する場合は、XL6019コンバーターからの出力を使用して同様の電圧がソケットに設定されます。
Arduinoは、デジタルポテンショメータの抵抗を制御することにより、ペルチェモジュール/ヒーターマットに供給される電力を調整します。配線は、sleemanjのMCP41シリーズライブラリの指示に従って行われ、ポテンショメータは可変抵抗器構成になっています。 Arduinoは、温度センサーの読み取りに使用されるAdafruit MAX31865 Pt100 RTDアンプ、および温度データとシステム動作の表示に使用されるAdafruit RGBLCDシールドにも接続されています。これらは両方とも、製品ページにある完全なAdafruitドキュメントに従って配線されています。
ソフトウェア
Arduinoに接続されているすべてのAdafruitモジュールは、それぞれのライブラリで動作し、デジタルポテンショメータはsleemanjのMCP41シリーズライブラリで動作します。 ThermoParcel氏のArduinoコードのコア機能は、PID閉ループシステムで実装される温度制御に関連しています。温度設定値は、LCDディスプレイのシールドボタンを介してユーザーが提供します。次に、測定された各温度測定値を使用して設定値からの偏差を取得し、デジタルポテンショメータに供給されるPID値を計算して、冷却/加熱電力を調整します。外部の物理的なトグルスイッチは、電力出力がペルチェモジュール(冷却)に向けられているか、ヒーターマット(加熱)に向けられているかを決定します。システムには電子スイッチがないため、加熱モードと冷却モードのコードが区別され、ユーザーはLCDディスプレイのシールドボタンを使用して適切なモードを選択する必要があります。この区別により、計算されたPID値の符号が正しくなります。テスト中に、PID係数の値の範囲を試し、ほとんどの状況でP項だけで設定値から±0.5°C以内にとどまることが観察されたため、最終的にI係数とD係数を削除しました。これはおそらく、サンプルと内部のゲルで満たされたボックスの熱容量が比較的大きく、温度変化が遅くなるためです(通常、最速のレジームでは平均0.02°C /秒)。
パフォーマンス
主電源が供給されている場合、ThermoParcel氏は、21〜23°Cの室温から約1時間以内に始動すると、4°Cまで冷却されます。最初の20分以内に8-10°Cの温度に達します。再び室温から始めて、ヒーターマットを使用して、約10分以内に37℃に達します。すべての温度は±0.5°C以内の設定値に維持されます。
内蔵バッテリーのみで電力を供給している場合、1.5〜2時間で到達できる最低温度は約10°Cです。ヒーターマットを使用すると、37°Cを得ることができますが、40〜60分です。これらの制限は、バッテリーの放電率によるものです。ThermoParcel氏のリチウムイオンバッテリーの定格は3.7Vで最大放電電流が7Aですが、10〜12Vにステップアップ変換すると、放電電流を高くする必要があります。ペルチェモジュールの最大電力を維持するため。バッテリーには、電流過負荷の場合に出力を遮断する自己保護回路が含まれているため、冷却/加熱システムが最大定格よりも大きい電流を引き込もうとすると、システムは機能しません。バッテリーを介して動作する場合、消費電力はソフトウェアによって安全なレベルに制限されます。この制限は、純粋にここで使用されているバッテリーによるものであり、より高い放電率のバッテリーが広く利用可能です。または、直列に3つのセルがあり、公称電圧が11.1Vのリチウムイオン電池を使用すると、問題が解決し、昇圧DCコンバーターも不要になります。
<図>


今後の方向性
現在の開発段階では、主にCPUクーラーのサイズと可動部品、および構造の堅牢性のために、デバイスを出荷できません。ただし、ヒートシンクがパッシブ冷却システムに置き換えられ、95k Paの二次包装が採用されると、ThermoParcel氏は安全な輸送のために適切な剛性のある容器に入れられ、飛行機やすべてでサンプルを輸送するための標準的な宅配便のすべての要件を満たすことができます。他の輸送手段。
達成の中心的な目的で、デバイスの機能を拡張するために他のコンポーネントを追加することができます。輸送中の温度プロファイルは、後で確認するためにローカルメモリに保存するか、GSMArduinoモジュールを使用して定期的にSMS経由でユーザーに直接送信することができます。独立した荷物追跡と配達時のタイムリーな収集のために、GPS受信機を含めることもできます。
コード
- PID_LCD_controller_v03
PID_LCD_controller_v03 Arduino
ThermoParcel氏が使用するモジュールに接続し、PIDコントローラーを実行し、LCDパネルに情報を表示し、ユーザー入力を受け取るArduinoコード。#include// PT100温度センサーライブラリをインポート#include //デジタルポテンショメータライブラリをインポート#include // LCDディスプレイとボタンシールドライブラリをインポート#include // I2Cエクスパンダライブラリをインポート#include //セットアップデジタルポテンショメータMCP41_SimpledigitalPotentiometer; //デジタルポテンショメータobjectconstuint8_t digitalPotentiometer_CS =10を作成します; // PT100温度センサーのセットアップ// PT100温度センサー用のソフトウェアSPIを使用します:CS、DI、DO、CLKAdafruit_MAX31865 PT100amplifier =Adafruit_MAX31865(2、3、4、5); // Rref抵抗の値を設定します。 PT100温度センサーには430.0を使用します。#defineRREF 430.0 //センサーの公称0℃抵抗、PT100には100.0オーム#define RNOMINAL 100.0 //ボタン付きのLCDディスプレイシールドのセットアップAdafruit_RGBLCDShieldLCD_shield =Adafruit_RGBLCDShield(); //# define OFF 0x0 // ONおよびOFF状態を使用して、LCDバックライトをオン/オフにすることができます//#defineON 0x1void setup(){Serial.begin(115200); Serial.println( "Mr ThermoParcel、操作を開始しています..."); PT100amplifier.begin(MAX31865_4WIRE); //必要に応じて2WIREまたは4WIREに設定します。この場合は4線式RTDです。//デジタルポテンショメータを初期化しますdigitalPotentiometer.begin(digitalPotentiometer_CS); //ワイパーを0から255までの任意のポイントに設定しますdigitalPotentiometer.setWiper(200); // LCDディスプレイシールドを初期化します// LCDの列と行の数を設定します:LCD_shield.begin(16、2); //正しい間隔でLCDに設定値と測定されたTテキストを設定しますLCD_shield.print( "Tsetpoint:C"); LCD_shield.setCursor(0、1); LCD_shield.print( "Tsample:C");} // PID定数、温度関連変数、およびシールドボタン値を初期化しますint powerMode =1; // powerMode =1はバッテリー電源、powerMode =-1は主電源;バッテリーの過負荷を防ぐために使用されます。 //冷却の場合はoperationMode =1、加熱の場合はoperationMode =-1; PIDtermsfloatPT100ratioの符号を修正するために使用されます。 // PT100センサーの抵抗比変数を定義しますuint8_tbuttonsPressed =0; float kp =500.0; //; int ki =5; int kd =3.9; float PID_p =0.0; // int PID_i =0; int PID_d =0; float Tmeasured =-1.0; float Tsetpoint =22.0; //室温から始めますfloatPID_error =5; float PID_value =0; // LCD画面に温度設定値を正しく印刷するようにprint_Tsetpoint関数を定義しますstaticchar TsetpointString [3]; void print_Tsetpoint(int T){// Tsetpointを正しく印刷しますLCD_shield.setCursor(10、0);を配置します。 dtostrf(T、3、0、TsetpointString); LCD_shield.print(TsetpointString);} // print_Tmeasured関数を定義して、測定された温度をLCD画面に正しく印刷しますstatic char TmeasuredString [4]; void print_Tmeasured(float T){// Tmeasuredを正しい場所に印刷しますLCD_shield.setCursor(8、 1); dtostrf(T、5、1、TmeasuredString); LCD_shield.print(TmeasuredString);} // print_powerMode関数を定義して、電源モード(B、バッテリー、M、メイン)を正しく印刷しますvoid print_powerMode(){LCD_shield.setCursor(15、0); if(powerMode ==1){LCD_shield.print( "B"); } else if(powerMode ==-1){LCD_shield.print( "M"); }} // print_operationMode関数を定義して、電源モードを正しく印刷します(C、ペルチェクーラー、H、加熱マット)void print_operationMode(){LCD_shield.setCursor(15、1); if(operationMode ==1){LCD_shield.print( "C"); } else if(operationMode ==-1){LCD_shield.print( "H"); }} // ***メインループ*** void loop(){//読み取り温度uint16_t rtd =PT100amplifier.readRTD(); PT100ratio =rtd; PT100ratio / =32768; Tmeasured =PT100amplifier.temperature(RNOMINAL、RREF); Serial.print( "Setpoint Temperature ="); Serial.println(Tsetpoint); Serial.print( "Temperature ="); Serial.println(Tmeasured); //温度値とモードを出力しますprint_Tsetpoint(Tsetpoint); print_Tmeasured(Tmeasured); print_powerMode(); print_operationMode(); //設定値と測定値の間の誤差を計算しますPID_error =Tmeasured-Tsetpoint; // P値を計算しますPID_p =operationMode * kp * PID_error; //合計PID値を計算します。最大値(255)を超える場合は255を維持し、最小値(0)を下回る場合は0を維持します。PID_value=(int)PID_p; // + PID_i + PID_d; Serial.print( "PID_p ="); Serial.println(PID_p); Serial.print( "powerMode ="); Serial.println(powerMode); Serial.print( "operationMode ="); Serial.println(operationMode); Serial.print( "PID_error ="); Serial.println(PID_error); Serial.print( "PID_value ="); Serial.println(PID_value); //バッテリモード(powerMode =1)の場合、バッテリの過負荷を回避するために出力を制限します//メインモード(powerMode =-1)の場合、フルパワー(255)を許可しますif(powerMode ==1){if(PID_value <0){ PID_value =0; } if(PID_value> 120){PID_value =120; }} else if(powerMode ==-1){if(PID_value <0){PID_value =0; } if(PID_value> 255){PID_value =255; }} Serial.print( "Adjusted PID_value ="); Serial.println(PID_value); // PID値からデジタルポテンショメータの抵抗を設定しますdigitalPotentiometer.setWiper(255 --PID_value); //押されたボタンを検出し、必要に応じて設定値を変更し、測定値と設定値を表示しますT // delay()関数呼び出しは、ボタンを押して値が変更されるのを確認するのに十分な時間が与えられるようにしますdelay(1000); buttonPressed =LCD_shield.readButtons(); if(buttonsPressed&BUTTON_SELECT){//カーソルを点滅させて編集モードでそのシステムを強調表示しますLCD_shield.setCursor(14、0); LCD_shield.blink(); delay(1000); buttonPressed =0; // SELECTボタンをもう一度押すまで、編集モードのままにします。上ボタンと下ボタンはTsetpointを変更します。 // LEFTは動作モード(加熱/冷却)を切り替えます。 RIGHTは、電源モード(バッテリー/主電源)を切り替えます。 while(not(buttonsPressed&BUTTON_SELECT)){buttonsPressed =LCD_shield.readButtons(); if(buttonsPressed&BUTTON_UP){Tsetpoint + =1; } if(buttonsPressed&BUTTON_DOWN){Tsetpoint- =1; } if(buttonsPressed&BUTTON_RIGHT){powerMode * =-1; print_powerMode(); } if(buttonsPressed&BUTTON_LEFT){operationMode * =-1; print_operationMode(); } print_Tsetpoint(Tsetpoint); LCD_shield.setCursor(14、0); delay(500); } //編集モードを終了し、カーソルの点滅を停止しますLCD_shield.noBlink(); buttonPressed =0; } Serial.println();}
回路図
温度制御されたコンテナのすべての主要コンポーネントを含む回路図。 


製造プロセス