Container de Transporte com Controle de Temperatura de Precisão: Sensor PT‑100 e Arduino UNO
Componentes e Materiais
- 1x Sensor de temperatura PT100 (RTD)
- 1x Arduino UNO
- 1x Bateria de íon-lítio (10400 mAh)
- 1x Caixa de poliestireno (reutilizada de entregas de amostras/químicos)
- 2x Blocos de cobre (~80x50x10mm, usinados para dissipador e fixação do Peltier, com furos para heat pipes)
- 1x Módulo fonte chaveada ajustável (Boost) ULS
- 1x Cooler com heat pipe
- 1x Potenciômetro digital (MCP41100)
- 1x "Magic Gel" (gel térmico para melhorar transferência de calor entre amostras)
- 1x Conversor DC-DC
- 1x Módulo Peltier (TEC)
- 1x Capacitor 3,3 µF
- 1x Heat pipes
- 1x Fonte de alimentação para rede elétrica
- 1x Divisor DC para fonte de alimentação
- 1x Display LCD Adafruit (RGB com shield de botões)
- 1x Tapete aquecedor (para aquecimento das amostras)
- 1x Bloco de terminais
- 1x Gabinete plástico (interno)
- 1x Conector DC painel
- 1x Chave quatro polos duplo throw (4PDT)
- 1x Chave polo duplo throw (SPDT)
- 1x Gabinete plástico externo (para eletrônica)
- 1x Conector bloco terminal 3 vias
- 1x Conector bloco terminal 5 vias
- 1x Fita DualLock (velcro forte)
- 1x Adafruit Proto-Screwshield (terminais de parafuso para Arduino)
- 1x Carregador USB para bateria Li-ion Adafruit
- 1x Amplificador PT100 Adafruit MAX31865
Ferramentas e Máquinas Necessárias
- Ferro de solda
- Dremel 4000
- Torno de bancada
- Furadeira
- Ferramentas para cabos (alicate, descascador, cortador)
- Fresa manual (para usinagem das peças de cobre)
Aplicativos e Serviços Online
- GitHub (bibliotecas: MCP41100 de sleemanj, bibliotecas Adafruit para módulos utilizados)
- Arduino IDE
Sobre o Projeto
Mr ThermoParcel: Container com Controle de Temperatura para Transporte de Amostras
O objetivo é desenvolver um container com controle de temperatura para transporte seguro de amostras sensíveis via serviço postal convencional. O protótipo, chamado Mr ThermoParcel, opera na faixa de 4°C a 37°C e pode ser alimentado por adaptador de rede, bateria interna ou outras fontes de 12V (isqueiro de carro, carregador de notebook).
A Origem do Projeto
A ideia surgiu de um problema real na pesquisa acadêmica: a troca segura de amostras biológicas sensíveis à temperatura entre colaboradores. A pesquisadora Viola trabalha com malária e frequentemente precisa enviar/receber amostras de sangue. Se não mantidas na temperatura correta durante armazenamento e transporte, as amostras se degradam e tornam-se inúteis — especialmente amostras preciosas de pacientes raros com resposta especial à malária.
O método comum é congelar completamente as amostras antes do envio, usar courier para carga congelada e descongelar cuidadosamente após a entrega. Além de caro, esse sistema está longe do ideal: congelamento/descongelamento sempre altera ou danifica partes das amostras, e o descongelamento requer protocolo específico com químicos adicionais. Além disso, itens muitas vezes são entregues no depósito de encomendas do campus universitário, onde condições inadequadas de armazenamento e atrasos na notificação de entrega causam degradação frequente.
Conceito de Design
Integramos um sistema de controle de temperatura em um container de poliestireno convencional (tamanho de pequena encomenda), reutilizado de uma entrega de químicos. Otimizamos e testamos com amostras de sangue, mas o mesmo sistema serve para vasta gama de materiais biológicos: células, meios de cultura, químicos sensíveis à temperatura, emulsões, enzimas, ou adaptado para itens sólidos.
O conceito do sistema: resfriamento via módulo Peltier, lado frio acoplado a uma pequena caixa de amostras interna, lado quente conectado a dissipador externo. Aquecimento via tapete aquecedor dentro da caixa de amostras. Temperatura monitorada constantemente por sensor em contato com as amostras, e intensidade de aquecimento/resfriamento regulada por controlador Arduino.
Implementação
Hardware do Container
O container externo é uma caixa de poliestireno 250x250x250mm com paredes de 45mm, tipo comum em entregas laboratoriais via correio. Um gabinete plástico (125x70x40mm) é colocado internamente, contendo dois tubos de centrífuga de 50mL. Estes atuam como embalagem secundária conforme regulamentos para Substâncias Biológicas e Infecciosas, Categoria B UN3373. As amostras primárias são seis tubos Eppendorf de 2mL com espécimes, separados por tecido absorvente para evitar vazamentos. O Mr ThermoParcel armazena até 50mL de amostras líquidas substituindo a embalagem rígida por bolsas flexíveis (ex: até três ou quatro tubos de 15mL). Para uniformizar aquecimento/resfriamento e garantir contato térmico entre chapa de cobre, amostras e sensor, vertemos um gel isolante elétrico e de cura sólida ao redor das amostras.
Sistema de Resfriamento e Aquecimento
Temperatura interna monitorada por termômetro de resistência Pt100 (RTD de 100Ω) em contato com as amostras, controlado por sistema PID usando módulo Peltier (resfriamento) ou tapete aquecedor (aquecimento). Para dissipar o calor do Peltier para fora da caixa, o lado quente é acoplado termicamente a uma peça de cobre externa e dissipador (cooler CPU) via três heat pipes de cobre. O lado frio é acoplado a uma chapa fina de cobre que atravessa a caixa, resfriando as amostras uniformemente. O tapete aquecedor fica dentro do gabinete interno em contato com sensor e amostras.
Eletrônica e Fiação
Regulação de Resfriamento e Aquecimento
O módulo Peltier usado é classificado para 3,9A e 7,6V na potência máxima de resfriamento. A potência entregue é gerenciada eletronicamente pelo regulador chaveado ajustável step-down PTN78020W. Este aceita entrada de 7-36V e produz saída de 2,5-12,6V (com limitação: saída não pode exceder entrada menos 2V). A tensão de saída é ajustada definindo resistência entre dois pinos de regulação, conforme tabela do datasheet. O Mr ThermoParcel emprega o potenciômetro digital MCP41100 de 100kΩ, controlado pelo Arduino, para regular electronicamente a tensão de saída baseada na leitura de temperatura. Como toda a faixa de tensão do PTN78020W requer variação de resistência acima de 1MΩ, uma tensão é aplicada ao Peltier mesmo com potenciômetro em 100kΩ, então o Peltier não pode ser "desligado" apenas pelo potenciômetro digital. O mesmo conceito aplica-se ao aquecimento via tapete (resistor que dissipa corrente como calor; regular tensão controla potência entregue).
Fonte de Alimentação
Fonte DC 12V alimenta diretamente o PTN78020W quando próximo a tomada. Permite até 10V saída, suficiente para Peltier na potência máxima e tapete com potência suficiente. Dada a faixa 7-36V do regulador, também pode ser alimentado por fontes de notebook, isqueiro de carro, etc. Quando sem energia externa, usa bateria Li-ion 3,7V 10400mAh. A bateria ainda alimenta o PTN78020W, mas para atingir tensão de entrada necessária ao Peltier (10-12V na entrada do PTN78020W), o conversor step-up XL6019 é conectado na saída da bateria.
Fiação do Arduino
Arduino alimentado diretamente da entrada 12V externa via jack da placa. Se usando bateria interna, tensão similar ajustada na saída do XL6019. Arduino regula potência ao Peltier/tapete controlando resistência do potenciômetro digital. Fiação conforme biblioteca MCP41 de sleemanj (configuração resistor variável). Arduino também conectado ao amplificador MAX31865 Pt100 RTD da Adafruit (leitura do sensor) e ao shield LCD RGB Adafruit (exibição de dados e operação). Ambos conforme documentação Adafruit.
Software
Todos módulos Adafruit operados com suas bibliotecas, potenciômetro digital com biblioteca MCP41 de sleemanj. Funcionalidades centrais do código Arduino: controle de temperatura via PID em malha fechada. Ponto de ajuste (setpoint) definido pelo usuário via botões do shield LCD. Cada leitura de temperatura calcula desvio do setpoint e valor PID alimentado ao potenciômetro digital para regular potência. Chave toggle física determina se saída vai para Peltier (resfriamento) ou tapete (aquecimento). Como não há chaves eletrônicas, distinção no código entre modo aquecimento e resfriamento, usuário seleciona modo apropriado via botões LCD. Isso garante sinal correto do PID. Testes mostraram que termo P sozinho foi suficiente na maioria das situações para manter ±0,5°C do setpoint, então termos I e D foram removidos. Provavelmente devido à grande capacidade térmica das amostras e caixa com gel, que tornam mudanças de temperatura lentas (média 0,02°C/s nos regimes mais rápidos).
Desempenho
Alimentado por rede: resfria a 4°C partindo de 21-23°C em ~1h. 8-10°C atingidos nos primeiros 20 min. Aquecimento a 37°C em ~10 min. Todas temperaturas mantidas no setpoint dentro de ±0,5°C.
Alimentado apenas por bateria: mínimo ~10°C em 1,5-2h. Aquecimento a 37°C em 40-60 min. Limitações devidas à taxa de descarga da bateria: Li-ion classificada para 7A máx. a 3,7V, mas com step-up para 10-12V a corrente de descarga precisaria ser maior para manter potência máxima do Peltier. Bateria tem circuitos de autoproteção que cortam saída em sobrecarga. Software limita consumo a nível seguro na operação por bateria. Limitação puramente da bateria usada; baterias com maior taxa de descarga estão amplamente disponíveis. Alternativamente, bateria Li-ion de 3 células em série (11,1V nominais) resolveria e eliminaria necessidade do step-up.
Direções Futuras
Estágio atual: não pode ser enviado, principalmente por tamanho e partes móveis do cooler CPU e robustez da construção. Substituindo dissipador por sistema de resfriamento passivo e usando embalagem secundária 95kPa, o Mr ThermoParcel poderia ser colocado em container rígido apropriado para transporte seguro, atendendo requisitos de couriers padrão para envio de amostras por avião e outros meios.
Com objetivo principal alcançado, outros componentes poderiam estender funcionalidade: armazenar perfil de temperatura durante transporte em memória local para verificação posterior, ou enviar via SMS em intervalos regulares usando módulo GSM Arduino. Receptor GPS também poderia ser incluído para rastreamento independente e coleta pontual na entrega.
Código (PID_LCD_controller_v03)
#include <Adafruit_MAX31865.h>
#include <MCP41_Simple.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>
#include <Wire.h>
MCP41_Simple digitalPotentiometer;
const uint8_t digitalPotentiometer_CS = 10;
Adafruit_MAX31865 PT100amplifier = Adafruit_MAX31865(2, 3, 4, 5);
#define RREF 430.0
#define RNOMINAL 100.0
Adafruit_RGBLCDShield LCD_shield = Adafruit_RGBLCDShield();
int powerMode = 1; // 1=bateria, -1=rede
int operationMode = 1; // 1=resfriamento, -1=aquecimento
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;
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 setup() {
Serial.begin(115200);
Serial.println("Mr ThermoParcel, iniciando operacao...");
PT100amplifier.begin(MAX31865_4WIRE);
digitalPotentiometer.begin(digitalPotentiometer_CS);
digitalPotentiometer.setWiper(200);
LCD_shield.begin(16, 2);
LCD_shield.print("Tsetpoint: C");
LCD_shield.setCursor(0, 1);
LCD_shield.print("Tsample: C");
}
void loop() {
uint16_t rtd = PT100amplifier.readRTD();
PT100ratio = rtd / 32768.0;
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;
PID_p = operationMode * kp * PID_error;
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);
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);
digitalPotentiometer.setWiper(255 - PID_value);
delay(1000);
buttonsPressed = LCD_shield.readButtons();
if (buttonsPressed & BUTTON_SELECT) {
LCD_shield.setCursor(14, 0);
LCD_shield.blink();
delay(1000);
buttonsPressed = 0;
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);
}
LCD_shield.noBlink();
buttonsPressed = 0;
}
Serial.println();
}
Esquemáticos
Diagrama esquemático do circuito com todos componentes principais. Diagrama de fiação solicitado por outro usuário da comunidade — é o que usamos para montagem, então é "feio" e não destinado à publicação, mas pode ajudar. Fiação do potenciômetro para outros componentes.
Processo de manufatura
- Ventilador Controlado por Temperatura: Sistema DIY com Relé para Resfriamento de Móveis de Mídia
- Controle de Temperatura Caseiro para Homebrew: Monitore e Regule com Arduino
- Medição e Registro Precisos de Termopar para Laboratório e Experimentos Científicos
- Principais Metais Condutores de Calor e Suas Aplicações – Guia Prático
- Como Calcular Precisamente a Dissipação de Calor para VFDs
- Escolhendo Laminados de PCI de Alta Temperatura para Desempenho Confiável
- Guia Completo de Gerenciamento de Temperatura em PCB
- Tratamento Térmico de Precisão para Fundições de Alumínio: Aumentando Resistência e Ductilidade
- Liga 36 (Invar®): Liga de Níquel-Ferro de Baixa Expansão para Precisão
- Otimizando Tratamento Térmico para Componentes Metálicos Usinados CNC