Contenedor de transporte de muestras con control de temperatura preciso, sensor PT‑100 y Arduino UNO
Componentes y suministros
- Sensor de temperatura PT100 × 1
- Arduino UNO × 1
- Batería de iones de litio (10400 mAh) × 1
- Caja de poliestireno (reciclada de envíos de muestras/químicos) × 1
- Bloques de cobre (aprox. 80×50×10 mm, mecanizados para disipador y montaje Peltier, con orificios para heat pipes) × 1
- Módulo de fuente de alimentación boost ajustable ULS × 1
- Disipador con heat pipe × 1
- Potenciómetro digital × 1
- Magic Gel (para mejorar transferencia térmica entre muestras) × 1
- Convertidor DC × 1
- Módulo Peltier × 1
- Condensador 3,3 µF × 1
- Heat pipes × 1
- Fuente de alimentación de red × 1
- Divisor DC para fuente de alimentación × 1
- Pantalla LCD Adafruit × 1
- Alfombrilla calefactora (para calentar muestras) × 1
- Bloque de terminales × 1
- Caja de plástico (interna) × 1
- Conector DC de panel × 1
- Interruptor de cuatro polos y doble tiro × 1
- Interruptor unipolar de doble tiro × 1
- Caja de plástico externa (para electrónica) × 1
- Conector de bloque de terminales, 3 vías × 1
- Conector de bloque de terminales, 5 vías × 1
- Cinta DualLock (velcro) × 1
- Proto-screwshield Adafruit (para conexiones firmes a Arduino) × 1
- Cargador USB de batería Li-ion Adafruit × 1
- Amplificador PT100 Adafruit MAX31865 × 1
Herramientas y máquinas necesarias
- Soldador (genérico)
- Dremel 4000
- Torno de banco
- Taladro
- Herramientas para pelar cables, alicates, cortadores
- Fresadora manual (para mecanizar piezas de cobre)
Aplicaciones y servicios en línea
- GitHub (bibliotecas: MCP41100 de sleemanj, librerías Adafruit para sus módulos)
- Arduino IDE
Sobre el proyecto
Mr ThermoParcel: Contenedor con control de temperatura para transporte de muestras
El objetivo es desarrollar un contenedor con control de temperatura que permita transportar muestras sensibles mediante un servicio postal convencional. Nuestro prototipo, llamado Mr ThermoParcel, opera en el rango de 4‑37 °C y puede alimentarse mediante adaptador de red, batería interna u otras fuentes de 12 V (mechero de coche, cargador de portátil).
Origen del proyecto
La idea surge de un problema real en nuestra investigación académica: el intercambio seguro de muestras biológicas sensibles a la temperatura con colaboradores. Viola trabaja en malaria y a menudo necesita enviar/recibir muestras de sangre. Si no se mantienen a la temperatura correcta durante almacenamiento y transporte, se degradan y se vuelven inútiles, especialmente muestras valiosas de pacientes raros con respuestas especiales a la malaria.
El método habitual es congelar completamente las muestras antes del envío, usar mensajería para mercancías congeladas y descongelarlas cuidadosamente tras la entrega. Además de ser costoso, este sistema está lejos de ser ideal: la congelación/descongelación siempre altera o daña partes de las muestras, y la descongelación requiere un protocolo específico con reactivos adicionales. Además, los paquetes a menudo se entregan en el depósito del campus universitario, donde condiciones de almacenamiento inadecuadas y retrasos en la notificación de entrega causan degradación frecuente.
Concepto de diseño
Integramos un sistema de control de temperatura en un contenedor de poliestireno convencional (tamaño de paquete pequeño, 250×250×250 mm, pared de 45 mm), reutilizado de una entrega de químicos. Lo optimizamos y probamos con muestras de sangre, pero el mismo sistema sirve para una amplia gama de materiales biológicos: células, medios de cultivo, químicos sensibles a temperatura, emulsiones, enzimas, o incluso artículos sólidos.
El concepto se muestra en la Figura 1. El enfriamiento se logra con un módulo Peltier: el lado frío se une a una pequeña caja de muestras dentro del contenedor de poliestireno, y el lado caliente se conecta a un disipador externo. El calentamiento se realiza con una alfombrilla calefactora dentro de la caja de muestras. La temperatura se monitoriza constantemente con un sensor en contacto con las muestras, y la intensidad de calefacción/enfriamiento se regula mediante un controlador Arduino.

Implementación
Diseño del hardware del contenedor
El contenedor externo es una caja de poliestireno de 250×250×250 mm con pared de 45 mm, tipo común en envíos de laboratorio por correo estándar. Dentro se coloca una caja de plástico (125×70×40 mm) que contiene dos tubos de centrifugación de 50 mL. Estos tubos actúan como embalaje secundario según regulaciones para Sustancias Biológicas e Infecciosas, Categoría B UN3373 (enlace). Las muestras primarias son seis tubos Eppendorf de 2 mL con especímenes, separados por tejido absorbente para evitar fugas. Mr ThermoParcel puede almacenar hasta 50 mL de muestras líquidas sustituyendo el embalaje secundario rígido por bolsas flexibles que contienen mayor cantidad, p.ej. tres o cuatro tubos de 15 mL (enlace). Para mejorar la uniformidad de calentamiento/enfriamiento dentro de la caja interna y asegurar contacto térmico entre la lámina de cobre, muestras y sensor de temperatura, vertimos un gel aislante eléctricamente y de fraguado sólido alrededor de las muestras. La caja interna con muestras se muestra en la Figura 2.

Sistema de enfriamiento y calentamiento
La temperatura interna se monitoriza con un termómetro de resistencia de platino de 100 Ω (RTD) en contacto con las muestras, y se controla con un sistema PID usando módulo Peltier (enfriamiento) o alfombrilla calefactora (calentamiento). Para disipar fuera de la caja el calor del Peltier, el lado caliente se pone en contacto térmico con una pieza externa de cobre y un disipador (cooler de CPU) mediante tres heat pipes de cobre. El lado frío se une a una lámina delgada de cobre que atraviesa la caja, enfriando las muestras uniformemente. Los detalles del acoplamiento térmico se muestran en la Figura 3.
La alfombrilla calefactora se coloca dentro del recinto interno en contacto con el sensor de temperatura y las muestras.



Electrónica y cableado
Regulación de enfriamiento y calentamiento
El módulo Peltier usado por Mr ThermoParcel está dimensionado para 3,9 A y 7,6 V a máxima potencia de enfriamiento. Para controlar la temperatura eficazmente, la potencia entregada al Peltier se gestiona electrónicamente mediante el regulador conmutador ajustable step-down PTN78020W. Este regulador acepta tensión de entrada de 7‑36 V y produce una salida de 2,5‑12,6 V, con la limitación de que la salida no puede superar la entrada menos 2 V. La tensión de salida se ajusta estableciendo una resistencia entre dos pines de regulación, según la tabla del datasheet. Mr ThermoParcel emplea el potenciómetro digital MCP41100 de 100 kΩ, controlado por Arduino, para regular electrónicamente la tensión de salida según la lectura de temperatura. Dado que todo el rango de tensión de salida del PTN78020W requiere una variación de resistencia superior a 1 MΩ, se aplica tensión al Peltier incluso cuando el potenciómetro digital está a 100 kΩ, por lo que el Peltier no puede «apagarse» solo con el potenciómetro digital. El mismo concepto de regulación se aplica al calentamiento con la alfombrilla: es simplemente una resistencia que disipa corriente como calor, y regular la tensión es una forma directa de controlar la potencia entregada.
Fuente de alimentación
Una fuente DC de 12 V alimenta directamente al PTN78020W cuando Mr ThermoParcel está cerca de un enchufe de red. Esto permite hasta 10 V de salida, suficiente para impulsar el Peltier a máxima potencia y la alfombrilla a potencia suficiente. Dado el rango de entrada 7‑36 V del PTN78020W, Mr ThermoParcel también puede alimentarse con la mayoría de fuentes DC de portátiles y otros dispositivos, así como con mecheros de coche. Cuando no hay alimentación externa, Mr ThermoParcel usa una batería Li‑ion de 3,7 V y 10400 mAh. La batería sigue alimentando al PTN78020W, pero para alcanzar la tensión de entrada requerida para impulsar el Peltier (10‑12 V en la entrada del PTN78020W), primero se conecta el convertidor DC‑DC step-up XL6019 a la salida de la batería.
Cableado del Arduino
La alimentación del Arduino se toma directamente de la entrada externa de 12 V si está disponible, mediante el conector jack de la placa. Si se usa la batería interna, se establece una tensión similar en el jack usando la salida del convertidor XL6019.
Arduino regula la potencia entregada al Peltier/alfombrilla controlando la resistencia del potenciómetro digital. El cableado sigue las instrucciones de la librería MCP41 de sleemanj, con el potenciómetro en configuración de resistencia variable. Arduino también se conecta al amplificador Adafruit MAX31865 para PT100 RTD (lectura del sensor de temperatura) y al shield Adafruit RGB LCD (visualización de datos de temperatura y operación del sistema). Ambos se cablean según la exhaustiva documentación de Adafruit en las páginas de producto.
Software
Todos los módulos Adafruit conectados a Arduino se operan con sus respectivas librerías, y el potenciómetro digital con la librería MCP41 de sleemanj. Las funcionalidades principales del código de Arduino en Mr ThermoParcel se refieren al control de temperatura, implementado con un sistema PID de lazo cerrado. El punto de ajuste (setpoint) lo proporciona el usuario mediante los botones del shield LCD. Cada lectura de temperatura medida se usa para obtener la desviación respecto al setpoint y calcular el valor PID que se envía al potenciómetro digital para regular la potencia de enfriamiento/calentamiento. Un interruptor físico externo determina si la salida de potencia se dirige al módulo Peltier (enfriamiento) o a la alfombrilla calefactora (calentamiento). Como no hay interruptores electrónicos en el sistema, el código distingue entre modo calefacción y modo refrigeración, y el usuario debe seleccionar el modo apropiado mediante los botones del shield LCD. Esta distinción asegura que el valor PID calculado tenga el signo correcto. Durante nuestras pruebas probamos una gama de valores para los factores PID y observamos que el término P solo era suficiente en la mayoría de situaciones para mantenerse dentro de ±0,5 °C del setpoint, por lo que finalmente eliminamos los términos I y D. Esto se debe probablemente a la gran capacidad térmica de las muestras y la caja interna rellena de gel, que hacen que los cambios de temperatura sean lentos (típicamente 0,02 °C/s en los regímenes más rápidos).
Rendimiento
Alimentado por red, Mr ThermoParcel enfría hasta 4 °C partiendo de una temperatura ambiente de 21‑23 °C en aproximadamente 1 hora. Se alcanza 8‑10 °C en los primeros 20 minutos. Partiendo de nuevo de temperatura ambiente y usando la alfombrilla calefactora, se llega a 37 °C en unos 10 minutos. Todas las temperaturas se mantienen en el setpoint dentro de ±0,5 °C.
Alimentado solo por la batería interna, aproximadamente 10 °C es la temperatura mínima alcanzable, en 1,5‑2 horas. Con la alfombrilla calefactora, 37 °C se consigue pero en 40‑60 minutos. Estas limitaciones se deben a la tasa de descarga de la batería: la Li‑ion de Mr ThermoParcel está dimensionada para 7 A máx. a 3,7 V, pero dada la conversión step-up a 10‑12 V, la corriente de descarga debería ser mayor para mantener la potencia máxima del Peltier. Como la batería incluye circuitos de autoprotección que cortan su salida en caso de sobrecorriente, el sistema no funciona si el sistema de enfriamiento/calentamiento intenta consumir una corriente mayor que la nominal. Al operar con batería, el consumo se limita por software a un nivel seguro. Esta limitación es puramente debida a la batería usada; existen baterías con mayor tasa de descarga. Alternativamente, una batería Li‑ion de 3 celdas en serie y tensión nominal 11,1 V resolvería el problema y eliminaría la necesidad del convertidor step-up.


Futuras direcciones
En su etapa actual, el dispositivo no puede enviarse, principalmente por el tamaño y partes móviles del cooler de CPU, y la robustez de la construcción. Sin embargo, una vez que el disipador se reemplace por un sistema de enfriamiento pasivo y se emplee un embalaje secundario de 95 kPa, Mr ThermoParcel podría colocarse en un contenedor rígido apropiado para transporte seguro, cumpliendo todos los requisitos de mensajeros estándar para envío de muestras por avión y otros medios.
Con el objetivo principal logrado, otros componentes podrían añadirse para ampliar la funcionalidad. El perfil de temperatura durante el transporte podría almacenarse en memoria local para verificación posterior, o enviarse directamente al usuario vía SMS a intervalos regulares usando un módulo GSM Arduino. También podría incluirse un receptor GPS para seguimiento independiente del paquete y recogida puntual en la entrega.
Código
#include <Adafruit_MAX31865.h> // librería sensor PT100
#include <MCP41_Simple.h> // librería potenciómetro digital
#include <Adafruit_RGBLCDShield.h> // librería shield LCD y botones
#include <utility/Adafruit_MCP23017.h> // librería expansor I2C
#include <Wire.h>
// Configuración potenciómetro digital
MCP41_Simple digitalPotentiometer;
const uint8_t digitalPotentiometer_CS = 10;
// Configuración sensor PT100
// SPI software: CS, DI, DO, CLK
Adafruit_MAX31865 PT100amplifier = Adafruit_MAX31865(2, 3, 4, 5);
#define RREF 430.0 // Valor resistencia Rref para PT100
#define RNOMINAL 100.0 // Resistencia nominal a 0 °C para PT100
// Configuración shield LCD con botones
Adafruit_RGBLCDShield LCD_shield = Adafruit_RGBLCDShield();
void setup() {
Serial.begin(115200);
Serial.println("Mr ThermoParcel, iniciando operación...");
PT100amplifier.begin(MAX31865_4WIRE); // 2WIRE o 4WIRE, en este caso 4-wire RTD
digitalPotentiometer.begin(digitalPotentiometer_CS);
digitalPotentiometer.setWiper(200); // punto arbitrario entre 0 y 255
LCD_shield.begin(16, 2);
LCD_shield.print("Tsetpoint: C");
LCD_shield.setCursor(0, 1);
LCD_shield.print("Tsample: C");
}
// Inicialización constantes PID, variables temperatura y valor botones shield
int powerMode = 1; // 1 = batería, -1 = red; evita sobrecarga batería
int operationMode = 1; // 1 = enfriamiento, -1 = calefacción; corrige signo PID
float PT100ratio;
uint8_t buttonsPressed = 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; // inicio alrededor temperatura ambiente
float PID_error = 5;
float PID_value = 0;
static char TsetpointString[3];
void print_Tsetpoint(int T) {
LCD_shield.setCursor(10, 0);
dtostrf(T, 3, 0, TsetpointString);
LCD_shield.print(TsetpointString);
}
static char TmeasuredString[4];
void print_Tmeasured(float T) {
LCD_shield.setCursor(8, 1);
dtostrf(T, 5, 1, TmeasuredString);
LCD_shield.print(TmeasuredString);
}
void print_powerMode() {
LCD_shield.setCursor(15, 0);
if (powerMode == 1) LCD_shield.print("B");
else if (powerMode == -1) LCD_shield.print("M");
}
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() {
// Lectura temperatura
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);
// Imprimir valores y modos
print_Tsetpoint(Tsetpoint);
print_Tmeasured(Tmeasured);
print_powerMode();
print_operationMode();
// Calcular error entre setpoint y valor medido
PID_error = Tmeasured - Tsetpoint;
// Calcular valor P
PID_p = operationMode * kp * PID_error;
// Valor PID total (solo P), limitado entre 0 y 255
PID_value = (int) PID_p;
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);
// Limitar salida según modo alimentación
if (powerMode == 1) { // batería
if (PID_value < 0) PID_value = 0;
if (PID_value > 120) PID_value = 120;
} else if (powerMode == -1) { // red
if (PID_value < 0) PID_value = 0;
if (PID_value > 255) PID_value = 255;
}
Serial.print("Adjusted PID_value = "); Serial.println(PID_value);
// Ajustar potenciómetro digital desde valor PID
digitalPotentiometer.setWiper(255 - PID_value);
// Detectar botones pulsados, cambiar setpoint si necesario
delay(1000);
buttonsPressed = LCD_shield.readButtons();
if (buttonsPressed & BUTTON_SELECT) {
// Resaltar modo edición parpadeando cursor
LCD_shield.setCursor(14, 0);
LCD_shield.blink();
delay(1000);
buttonsPressed = 0;
// Permanecer en modo edición hasta pulsar SELECT de nuevo.
// ARRIBA/ABAJO cambian Tsetpoint. IZQUIERDA cambia modo operación (calefacción/enfriamiento).
// DERECHA cambia modo alimentación (batería/red).
while (!(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);
}
// Salir modo edición y parar parpadeo
LCD_shield.noBlink();
buttonsPressed = 0;
}
Serial.println();
}
Esquemáticos
Diagrama esquemático del circuito con todos los componentes principales de nuestro contenedor con control de temperatura.

Esquemático de cableado solicitado por otro usuario de la comunidad. Es el que usamos para montar el cableado, así que es feo y nunca se pensó para publicación ¡pero quizá ayude!

Cableado del potenciómetro con otros componentes.

Proceso de manufactura
- Ventilador controlado por temperatura: sistema DIY con relé para refrigeración de muebles multimedia
- Control de temperatura casero para cerveza: monitorizar y regular con Arduino
- Medición y registro preciso con termopar para laboratorio y experimentos científicos
- Optimización del Tratamiento Térmico para Componentes Metálicos Mecanizados por CNC
- Cómo Calcular con Precisión la Disipación de Calor para VFD
- Elección de Laminados PCB de Alta Temperatura para Rendimiento Confiable
- Guía completa para la gestión de temperatura en PCB
- Tratamiento térmico de precisión para fundiciones de aluminio: Mejora de resistencia y ductilidad
- Construcción eficiente de contenedores ARM en sistemas x86
- Principales metales conductores de calor y sus aplicaciones – Guía práctica
- Aleación 36 (Invar®): Aleación níquel-hierro de precisión con expansión térmica ultra baja