Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Conteneur de transport d'échantillons à température contrôlée avec capteur PT-100 et Arduino UNO

Composants et fournitures

Outils et machines nécessaires

Applications et services en ligne

À propos du projet

Mr ThermoParcel : Conteneur à température contrôlée pour le transport d'échantillons

L'objectif est de développer un conteneur à température contrôlée permettant de transporter en toute sécurité des échantillons sensibles via un service postal conventionnel. Notre prototype, appelé Mr ThermoParcel, fonctionne dans une plage de 4 à 37 °C et peut être alimenté par un adaptateur secteur, une batterie interne ou toute source 12 V (allume-cigare, chargeur portable).

Genèse du projet

L'idée provient d'un problème réel rencontré dans notre recherche académique : l'échange sécurisé d'échantillons biologiques sensibles à la température avec des collaborateurs. Viola travaille sur le paludisme et doit souvent envoyer ou recevoir des échantillons de sang. Si ceux-ci ne sont pas maintenus à la bonne température, ils se dégradent et deviennent inutilisables, d'autant plus frustrant quand il s'agit de types sanguins rares à réponse particulière au paludisme.

La méthode courante consiste à congeler complètement les échantillons, utiliser un transporteur pour marchandises surgelées, puis les décongeler soigneusement. Outre le coût, ce système est loin d'être idéal : la congélation/décongélation altère toujours les échantillons, et la décongélation suit un protocole strict nécessitant des produits chimiques supplémentaires. De plus, les livraisons arrivent souvent au dépôt du campus universitaire, où des conditions de stockage inadaptées et des retards de notification dégradent fréquemment les échantillons.

Concept de conception

Nous avons intégré un système de régulation thermique dans une boîte en polystyrène conventionnelle (250×250×250 mm, parois 45 mm), réutilisée d'une livraison de produits chimiques. Le système a été optimisé et testé avec des échantillons de sang, mais peut s'appliquer à une vaste gamme de matériaux biologiques (cellules, milieux de culture, produits chimiques sensibles, émulsions, enzymes) ou objets solides.

Le concept est illustré dans la Figure 1. Le refroidissement est assuré par un module Peltier, face froide fixée à une petite boîte à échantillons à l'intérieur du conteneur, face chaude couplée à un dissipateur externe. Le chauffage est effectué par un tapis chauffant placé dans la boîte à échantillons. La température est surveillée en permanence par un capteur au contact des échantillons, et l'intensité chauffage/refroidissement est régulée par un contrôleur Arduino.

Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO

Implémentation

Conception matérielle du conteneur

Le conteneur externe est une boîte en polystyrène aux dimensions standard pour l'envoi postal. Un boîtier plastique (125×70×40 mm) est placé à l'intérieur et contient deux tubes de centrifugation de 50 mL, servant d'emballage secondaire selon la réglementation UN3373 pour substances biologiques de catégorie B. Les échantillons primaires sont six tubes Eppendorf de 2 mL séparés par du tissu absorbant anti-fuite. Mr ThermoParcel peut stocker jusqu'à 50 mL de liquides en remplaçant l'emballage rigide par des poches souples (ex: poches 95 kPa pour trois à quatre tubes de 15 mL). Pour améliorer l'uniformité du chauffage/refroidissement et assurer le contact thermique entre la plaque de cuivre, les échantillons et le capteur, nous avons coulé un gel isolant électriquement et durcissant autour des échantillons. La boîte interne est montrée en Figure 2.

Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO

Système de refroidissement et chauffage

La température interne est surveillée par une sonde PT100 (RTD 100 Ω) au contact des échantillons, et régulée par un système PID utilisant le module Peltier (refroidissement) ou le tapis chauffant (chauffage). Pour évacuer la chaleur du Peltier hors de la boîte, la face chaude est en contact thermique avec une pièce de cuivre externe et un dissipateur (ventirad CPU) via trois caloducs en cuivre. La face froide est fixée à une fine plaque de cuivre traversant la boîte pour refroidir uniformément les échantillons. Les détails du couplage thermique sont en Figure 3.

Le tapis chauffant est placé dans l'enceinte interne au contact du capteur et des échantillons.

Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO
Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO
Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO

Électronique et câblage

Régulation du refroidissement et chauffage

Le module Peltier utilisé est dimensionné pour 3,9 A et 7,6 V à puissance maximale. La puissance délivrée est gérée électroniquement via le régulateur à découpage ajustable PTN78020W (entrée 7–36 V, sortie 2,5–12,6 V, avec limitation sortie ≤ entrée – 2 V). La tension de sortie est ajustée par une résistance entre deux broches de régulation, selon le tableau du datasheet. Mr ThermoParcel utilise le potentiomètre numérique MCP41100 100 kΩ, piloté par l'Arduino, pour régler électroniquement la tension de sortie selon la lecture de température. Comme la plage de tension complète du PTN78020W nécessite une variation de résistance > 1 MΩ, une tension résiduelle reste appliquée au Peltier même à 100 kΩ ; le Peltier ne peut donc pas être « éteint » par le potentiomètre seul. Le même principe s'applique au tapis chauffant, simple résistance dissipant du courant.

Alimentation

Une alimentation 12 V CC alimente directement le PTN78020W sur secteur, permettant jusqu'à 10 V de sortie (suffisant pour Peltier à pleine puissance et tapis chauffant). Grâce à la plage 7–36 V du régulateur, Mr ThermoParcel peut aussi fonctionner sur la plupart des alimentations portables (chargeurs PC, allume-cigare 12 V). Sans source externe, une batterie Li-ion 3,7 V 10400 mAh alimente le système ; pour atteindre les 10–12 V requis au PTN78020W, un convertisseur DC-DC step-up XL6019 est intercalé à la sortie de la batterie.

Câblage Arduino

L'Arduino est alimenté directement par l'entrée 12 V externe via sa prise jack, ou par la sortie du XL6019 sur batterie. L'Arduino régule la puissance Peltier/tapis en contrôlant la résistance du potentiomètre numérique (câblage selon la bibliothèque MCP41 de sleemanj, configuration résistance variable). Il est aussi connecté à l'amplificateur PT100 Adafruit MAX31865 (lecture capteur) et au shield LCD RGB Adafruit (affichage température et état), tous deux câblés selon la documentation Adafruit.

Logiciel

Tous les modules Adafruit utilisent leurs bibliothèques respectives, le potentiomètre numérique utilise la bibliothèque MCP41 de sleemanj. Le cœur du code Arduino est la régulation de température par boucle fermée PID. Le point de consigne est saisi par l'utilisateur via les boutons du shield LCD. Chaque mesure calcule l'écart au point de consigne, puis la valeur PID pilotant le potentiomètre pour réguler la puissance. Un interrupteur physique externe dirige la puissance vers le Peltier (refroidissement) ou le tapis (chauffage). Faute de commutateurs électroniques, le code distingue mode chauffage et mode refroidissement, l'utilisateur sélectionnant le mode approprié via les boutons LCD. Cette distinction assure le bon signe de la valeur PID. Lors des tests, le terme P seul suffisait à maintenir ±0,5 °C autour du point de consigne, les termes I et D ont donc été supprimés. Cela s'explique par la grande capacité thermique de la boîte gelifiée (variation ~0,02 °C/s en régime rapide).

Performances

Sur secteur, Mr ThermoParcel refroidit à 4 °C depuis 21–23 °C ambiant en ~1 h (8–10 °C en 20 min). En chauffage, 37 °C sont atteints en ~10 min. Toutes les températures sont maintenues à ±0,5 °C du point de consigne.

Sur batterie seule, le minimum est ~10 °C en 1,5–2 h. Le chauffage à 37 °C prend 40–60 min. Ces limites viennent du taux de décharge de la batterie (7 A max à 3,7 V, mais le step-up vers 10–12 V exigerait un courant plus élevé pour la pleine puissance du Peltier ; les circuits de protection coupent en surintensité). Le logiciel limite la consommation à un niveau sûr sur batterie. Cette limitation est due à cette batterie spécifique ; des batteries à décharge plus élevée existent. Une batterie Li-ion 3 cellules en série (11,1 V nominal) résoudrait le problème et supprimerait le convertisseur step-up.

Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO
Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO

Évolutions futures

À l'état actuel, l'appareil ne peut être expédié, principalement à cause de la taille et pièces mobiles du ventirad CPU, et de la robustesse de la construction. Une fois le dissipateur remplacé par un refroidissement passif et un emballage secondaire 95 kPa utilisé, Mr ThermoParcel pourrait être placé dans un conteneur rigide approprié pour un transport sûr, respectant toutes les exigences des transporteurs standards pour l'envoi d'échantillons par avion et tout autre moyen.

Une fois le cœur du projet atteint, d'autres composants pourraient étendre les fonctionnalités : enregistrement du profil de température en mémoire locale pour vérification ultérieure, ou envoi par SMS à intervalles réguliers via module GSM Arduino. Un récepteur GPS pourrait aussi être ajouté pour suivi indépendant et collecte à la livraison.

Code

PID_LCD_controller_v03 (Arduino)

#include <Adafruit_MAX31865.h> // bibliothèque capteur PT100
#include <MCP41_Simple.h> // bibliothèque potentiomètre numérique
#include <Adafruit_RGBLCDShield.h> // bibliothèque shield LCD + boutons
#include <utility/Adafruit_MCP23017.h> // bibliothèque expander I2C
#include <Wire.h>

// Configuration potentiomètre numérique
MCP41_Simple digitalPotentiometer;
const uint8_t digitalPotentiometer_CS = 10;

// Configuration capteur PT100 (SPI logiciel : CS, DI, DO, CLK)
Adafruit_MAX31865 PT100amplifier = Adafruit_MAX31865(2, 3, 4, 5);
#define RREF 430.0       // Résistance de référence pour PT100
#define RNOMINAL 100.0   // Résistance nominale à 0 °C pour PT100

// Configuration shield LCD
Adafruit_RGBLCDShield LCD_shield = Adafruit_RGBLCDShield();

void setup() {
  Serial.begin(115200);
  Serial.println("Mr ThermoParcel, demarrage...");
  PT100amplifier.begin(MAX31865_4WIRE); // 2WIRE ou 4WIRE selon câblage (4 fils ici)
  digitalPotentiometer.begin(digitalPotentiometer_CS);
  digitalPotentiometer.setWiper(200); // Position initiale arbitraire 0-255
  LCD_shield.begin(16, 2);
  LCD_shield.print("Tsetpoint: C");
  LCD_shield.setCursor(0, 1);
  LCD_shield.print("Tsample: C");
}

// Constantes PID, variables température, valeur boutons
int powerMode = 1;      // 1 = batterie, -1 = secteur (évite surcharge batterie)
int operationMode = 1;  // 1 = refroidissement, -1 = chauffage (corrige signe 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; // Point de consigne initial ~température ambiante
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() {
  // Lecture température
  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);

  // Affichage valeurs et modes
  print_Tsetpoint(Tsetpoint);
  print_Tmeasured(Tmeasured);
  print_powerMode();
  print_operationMode();

  // Calcul erreur et terme P
  PID_error = Tmeasured - Tsetpoint;
  PID_p = operationMode * kp * PID_error;
  PID_value = (int)PID_p; // + PID_i + PID_d (désactivés)

  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);

  // Limitation selon mode alimentation
  if (powerMode == 1) { // Batterie
    if (PID_value < 0) PID_value = 0;
    if (PID_value > 120) PID_value = 120;
  } else if (powerMode == -1) { // Secteur
    if (PID_value < 0) PID_value = 0;
    if (PID_value > 255) PID_value = 255;
  }
  Serial.print("Adjusted PID_value = "); Serial.println(PID_value);

  // Appliquer au potentiomètre numérique (inversé : 255 - valeur)
  digitalPotentiometer.setWiper(255 - PID_value);

  // Gestion boutons pour modifier consigne
  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();
}

Schémas

Schéma de circuit avec tous les composants principaux du conteneur à température contrôlée.

Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO

Schéma de câblage demandé par un utilisateur de la communauté. C'est celui utilisé pour l'assemblage, donc peu esthétique et pas destiné à la publication ! Mais peut être utile.

Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO

Câblage du potentiomètre vers les autres composants.

Conteneur de transport d échantillons à température contrôlée avec capteur PT-100 et Arduino UNO

Processus de fabrication

  1. Ventilateur à contrôle de température : système relais DIY pour refroidissement meuble multimédia
  2. Contrôle de température brassage maison DIY : Surveiller et réguler avec Arduino
  3. Mesure et journalisation précises de thermocouple pour laboratoires et expériences scientifiques
  4. Métaux les plus conducteurs thermiquement et leurs applications — Guide pratique
  5. Comment Calculer Précisément la Dissipation Thermique des VFD
  6. Choisir des Stratifiés PCB Haute Température pour Performance Fiable
  7. Guide complet de la gestion thermique des PCB
  8. Traitement thermique de précision pour moulages en aluminium : améliorer résistance et ductilité
  9. Alliage 36 (Invar®) : Alliage nickel-fer à dilatation contrôlée pour applications de précision