亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

用于样品运输的温控容器

组件和用品

PT 100 温度传感器
× 1
Arduino UNO
× 1
锂离子电池
10400 mAh
× 1
聚苯乙烯盒
从传统的样品/化学品交付中回收
× 1
铜块
大约两个铜块。 80x50x10mm,用于散热片和珀耳帖附件,带有热管孔。
× 1
可调升压电源板模块 ULS
× 1
热管散热器
× 1
数字电位器
× 1
魔法凝胶
为了改善传热,我们可以在样品之间插入金属棒
× 1
直流转换器
× 1
珀耳帖模块
× 1
电容 3.3 uF
× 1
热管
× 1
电源供应
× 1
电源直流分配器
× 1
Adafruit LCD 屏幕 Adafruit
× 1
加热垫
用于加热样品
× 1
接线端子
× 1
塑料外壳
× 1
面板安装直流插头
× 1
四刀双掷开关
× 1
单刀双掷开关
× 1
塑料外壳
用于电子产品的外部塑料盒
× 1
端子块连接器,3 路
× 1
端子块连接器,5 路
× 1
Hook and Loop DualLock 胶带
× 1
Adafruit Proto-screwshield
用于更牢固的螺丝端子线连接到 Arduino
× 1
Adafruit 锂离子 USB 电池充电器
× 1
Adafruit PT100 温度传感器放大器
× 1

必要的工具和机器

烙铁(通用)
Dremel 4000
台钳
钻孔
电缆剥线工具、钳子、剪刀
手动磨
用于加工铜件

应用和在线服务

GitHub
我们将 sleemanj 的库用于 MCP41100 数字电位器(谢谢 sleemanj!)。我们还为我们使用的每个 Adafruit 模块使用了 Adafruit 的库;这些可从产品页面获得。
Arduino IDE

关于这个项目

ThermoParcel先生:用于样品运输的温控容器

目的是开发一种温控容器,可用于通过传统邮件服务安全运输敏感样品。我们的原型设备名为 Mr ThermoParcel,可在 4-37 °C 的温度范围内工作,可由电源适配器、内置电池或其他 12V 电源(如汽车点烟器或笔记本电脑充电器)供电。

我们项目的起源

我们的想法源于我们在学术研究中面临的一个实际问题:与合作者安全交换温度敏感的生物样本。 Viola 治疗疟疾疾病,通常需要发送或接收血液样本。但是,如果样品在储存和运输过程中没有保持在正确的温度下,它们很容易降解并变得无用。当样本中含有对疟疾有特殊反应且来自罕见患者的珍贵血液类型时,这就更令人沮丧了。

此类血样的常见寄送方式是发货前完全冷冻,冷冻货物使用标准快递,发货后仔细解冻。除了仍然昂贵之外,这样的系统还远非理想,因为冷冻/解冻总是会改变或损坏部分样品,而且解冻过程本身遵循需要额外化学品的特定协议。此外,物品经常在校园包裹仓库运送到大学,其中不适当的存储条件和交付通知延迟是样品降解的常见原因。

设计理念

我们将温度控制系统集成在一个小包裹大小的传统聚苯乙烯容器中,从化学品交付中重复使用。我们使用血液样本对其进行了优化和测试,但同一系统可用于多种其他生物材料,例如细胞、培养基、温度敏感化学品、乳液和酶,甚至适用于固体物品。

系统概念如图图1 .冷却是通过 Peltier 模块实现的,冷侧连接到聚苯乙烯容器内的小样品盒,热侧连接到外部散热器。使用放置在样品盒内的加热垫进行加热。使用与样品接触的传感器不断监测温度,加热/冷却强度由 Arduino 控制器调节。

实施

容器硬件 设计

外部容器是一个聚苯乙烯盒子,尺寸为 250x250x250 毫米,四面壁厚为 45 毫米,这是一种常见的盒子类型,用于标准邮件服务的实验室递送。一个塑料外壳 (125x70x40mm) 被放置在里面,并包含两个 50mL 离心管。根据生物和传染性物质 B 类 UN3373(链接: http://www.un3373.com/info/regulations/ )。主要样品是六个装有样品的 2mL Eppendorf 管,由吸水纸隔开以防止任何泄漏。 ThermoParcel 先生能够通过用可容纳更多样本的软袋代替坚硬的二级包装来储存多达 50 毫升的液体样本,例如。最多三或四个 15mL 试管(链接:https://www.alphalabs.co.uk/laboratory-products/consumables/sample-handling/sample-transport/95kpa-pouches)。为了提高内部箱体内的加热/冷却均匀性,并确保铜片、样品和温度传感器之间的热接触,我们在样品周围浇注了电绝缘的固体凝固凝胶。包含样品的内盒显示在图 2 .

冷却和加热系统

内部温度用与样品接触的 100 欧姆铂电阻温度计(或电阻温度检测器,RTD)监测,并通过使用 Peltier 模块(冷却)或加热垫(加热)的 PI​​D 系统进行控制。为了将来自 Peltier 的热量散发到盒子外面,Peltier 模块的热侧通过三个铜热管与外部铜片和散热器(CPU 冷却器)进行热接触。冷侧连接在穿过盒子的薄铜板上,使样品均匀冷却。 图 3 显示了热耦合的详细信息 .

加热垫置于内壳内,与温度传感器和样品接触。

电子与布线

冷却和加热调节

ThermoParcel 先生使用的 Peltier 模块在最大冷却功率下额定为 3.9A 和 7.6V。为了有效地控制温度,使用 PTN78020W 降压可调开关稳压器以电子方式管理输送到 Peltier 模块的功率量。稳压器接受7-36V范围的输入电压,产生2.5-12.6V范围的输出,限制输出不能超过输入负2V。根据器件数据表中的表格,通过在两个调节引脚之间设置一定的电阻值来调节输出电压。 ThermoParcel 先生使用由 Arduino 控制的 MCP41100 100kOhm 数字电位器,根据温度读数以电子方式调节输出电压。由于 PTN78020W 的整个输出电压范围需要超过 1MOhm 的电压变化,因此即使数字电位器设置为 100kOhm 也会向 Peltier 模块施加电压,因此无法使用“关闭”Peltier 模块单独的数字电位器。相同的调节概念适用于使用加热垫进行的加热。垫子只是一个电阻器,以热量的形式耗散电流,调节电压是控制传输功率的直接方法。

电源

当 ThermoParcel 先生靠近电源插座时,使用 12V 直流电源直接为 PTN78020W 供电。这允许高达 10V 的输出,足以以最大功率驱动 Peltier,并以足够的功率驱动加热垫以满足项目的目的。鉴于 PTN78020W 稳压器的 7-36V 输入范围,ThermoParcel 先生还可以使用大多数用于笔记本电脑和其他电子设备的直流电源以及汽车中的点烟器插座驱动。当外部电源不可用时,ThermoParcel 先生由 3.7V、10400mAh 锂离子电池供电。电池仍为 PTN78020W 稳压器供电,但要达到驱动 Peltier 模块所需的输入电压(PTN78020W 输入端为 10-12V),XL6019 升压 DC-DC 转换器首先连接到电池输出端。

Arduino 接线

如果可用,通过板上的插孔直接从 12V 外部输入向 Arduino 供电。如果使用内置电池,则使用XL6019转换器的输出在插座处设置类似的电压。

Arduino 通过控制数字电位器的电阻来调节输送到 Peltier 模块/加热垫的功率。根据 sleemanj 的 MCP41 系列库中的说明进行接线,电位计采用可变电阻配置。 Arduino 还连接到 Adafruit MAX31865 Pt100 RTD 放大器,用于读取温度传感器,以及连接到 Adafruit RGB LCD Shield,用于显示温度数据和系统操作。这些都是根据产品页面上完整的 Adafruit 文档进行连接的。

软件

所有连接到 Arduino 的 Adafruit 模块都使用它们各自的库,以及带有 sleemanj 的 MCP41 系列库的数字电位器。 Mr ThermoParcel 中 Arduino 代码的核心功能与温度控制有关,它是通过 PID 闭环系统实现的。温度设定点由用户通过 LCD 显示屏屏蔽按钮提供。然后使用每个测得的温度读数来获得与设定点的偏差,从而计算馈送到数字电位器以调节冷却/加热功率的 PID 值。外部物理拨动开关确定功率输出是指向 Peltier 模块(冷却)还是加热垫(加热)。由于系统中没有电子开关,因此区分了加热模式和冷却模式之间的代码,用户必须使用 LCD 显示屏屏蔽按钮选择合适的模式。这种区别可确保计算出的 PID 值具有正确的符号。在我们的测试中,我们尝试了 PID 因子的一系列值,并观察到在大多数情况下仅 P 项就足以保持在设定点的 ±0.5°C 范围内,因此我们最终删除了 I 和 D 因子。这可能是由于样品和内部凝胶填充盒的热容量相对较大,使得温度变化缓慢(通常在最快的情况下平均为 0.02°C/s)。

性能

当电源供电时,Mr ThermoParcel 在大约 1 小时内从 21-23°C 的室温开始冷却到 4°C。在前 20 分钟内达到 8-10°C 的温度。再次从室温开始,并使用加热垫,在大约 10 分钟内达到 37°C。所有温度都保持在±0.5°C以内的设定点。

当仅由内部电池供电时,大约 10°C 是可以在 1.5-2 小时内达到的最低温度。使用加热垫,仍可达到 37°C,但需要 40-60 分钟。这些限制是由于电池的放电率造成的:ThermoParcel 中的锂离子电池在 3.7V 时的额定最大放电电流为 7A,但考虑到升压转换为 10-12V,放电电流需要更高以保持 Peltier 模块的最大功率。由于电池包含自我保护电路,在电流过载的情况下会切断其输出,如果冷却/加热系统试图汲取大于最大额定值的电流,系统将无法运行。当通过电池运行时,耗电量由软件限制在安全水平。这种限制纯粹是由于这里使用的电池,并且具有更高放电率的电池广泛可用。或者,使用 3 节电池串联且标称电压为 11.1V 的锂离子电池可以解决问题,并且无需使用升压直流转换器。

未来方向

在目前的开发阶段,我们的设备无法发货,主要是因为 CPU 散热器的尺寸和活动部件以及结构的坚固性。然而,一旦散热器被被动冷却系统取代,并采用 95k Pa 二次包装,ThermoParcel 先生就可以放入合适的刚性容器中以安全运输,满足标准快递公司对飞机运输样品的所有要求以及所有其他交通工具。

在实现核心目标的情况下,可以添加其他组件来扩展设备的功能。运输过程中的温度曲线可以存储在本地存储器中供以后验证,或者使用 GSM Arduino 模块定期通过 SMS 直接发送给用户。还可以包括 GPS 接收器,用于独立的包裹跟踪和在交付时及时收集。

代码

  • PID_LCD_controller_v03
PID_LCD_controller_v03Arduino
Arduino 代码连接到 ThermoParcel 先生使用的模块,运行 PID 控制器,在 LCD 面板上显示信息并接收用户输入。
#include  // 导入 PT100 温度传感器库#include  // 导入数字电位器库#include  // 导入LCD 显示和按钮屏蔽库#include  // 导入I2C 扩展库#include // 设置数字电位器MCP41_简单的数字电位器; // 创建数字电位器 objectconst uint8_t digitalPotentiometer_CS =10;// 设置 PT100 温度传感器// PT100 温度传感器使用软件 SPI:CS, DI, DO, CLKAdafruit_MAX31865 PT100amplifier =Adafruit_MAX31865(2,//3);设置 Rref 电阻的值。 PT100温度传感器使用430.0。#define RREF 430.0//传感器标称0℃电阻,PT100为100.0ohm#define RNOMINAL 100.0//设置LCD显示屏蔽带按钮Adafruit_RGBLCDShield LCD_shield =Adafruit_RGB#LCDShield(); define OFF 0x0 // ON 和 OFF 状态可用于打开/关闭 LCD 背光//#define ON 0x1void setup() { Serial.begin(115200); Serial.println("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 为市电;用于防止电池过载int operationMode =1; // operationMode=1 为制冷, operationMode=-1 为加热;用于修正PID项的符号float PT100ratio; // 为 PT100 sensoruint8_t buttonsPressed =0;float kp =500.0; 定义电阻比变量; //; int ki =5; int kd =3.9;浮动PID_p =0.0; // int PID_i =0; int PID_d =0;float Tmeasured =-1.0;float Tsetpoint =22.0; // 从室温开始float PID_error =5;float PID_value =0;// 定义print_Tsetpoint 函数以在LCD 屏幕上正确打印温度设定点static char 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,Peltier 冷却器;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; PT100比率/=32768; Tmeasured =PT100amplifier.temperature(RNOMINAL, RREF); Serial.print("设定点温度 ="); Serial.println(Tsetpoint); Serial.print("温度 ="); Serial.println(Tmeasured); // 打印温度值和模式 print_Tsetpoint(Tsetpoint); print_Tmeasured(Tmeasured);打印电源模式();打印操作模式(); // 计算设定点和测量值之间的误差 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("操作模式 ="); Serial.println(操作模式); 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("调整后的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();延迟(1000);按钮按下 =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;打印电源模式(); } if (buttonsPressed &BUTTON_LEFT) { operationMode *=-1;打印操作模式(); } print_Tsetpoint(Tsetpoint); LCD_shield.setCursor(14, 0);延迟(500); } // 退出编辑模式并停止闪烁光标 LCD_shield.noBlink();按钮按下 =0; } Serial.println();}

示意图

包含我们温控容器所有主要组件的电路图。 社区其他用户要求的接线图。这是我们用来组装接线的那个,所以它很丑,从来没有打算出版!但也许会有所帮助。 电位器与其他元件的接线。

制造工艺

  1. 温控风扇
  2. DIY:HomeBrew 的温度监控和调节
  3. 实验室和科学项目的温度测量
  4. 导热的最佳金属
  5. 如何计算 VFD 的散热量
  6. 高温PCB层压板
  7. PCB温度指南
  8. 铝铸件热处理
  9. 合金 36 (Invar®) 可控膨胀合金
  10. CNC加工金属零件的热处理工艺
  11. 在 x86 上为 arm 构建容器
  12. 铜及铜合金的热处理