Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO

Onderdelen en benodigdheden

  • PT100 Temperatuursensor (1×)
  • Arduino UNO (1×)
  • Li-ion accu 10.400 mAh (1×)
  • Polystyreen doos (gerecycled, 250×250×250 mm, wanddikte 45 mm) (1×)
  • Koperen blokken (2×, ca. 80×50×10 mm, voor warmteuitwisselaar en Peltier-bevestiging, met gaten voor heatpipes) (1×)
  • Instelbare Boost Power Supply Module ULS (1×)
  • Heatpipe cooler (CPU cooler) (1×)
  • Digitale potentiometer MCP41100 (1×)
  • Magic Gel (thermisch geleidend, elektrisch isolerend gel) (1×)
  • DC-DC converter (XL6019 step-up) (1×)
  • Peltier module (3,9 A, 7,6 V max) (1×)
  • Condensator 3,3 µF (1×)
  • Heatpipes (3×) (1×)
  • Netvoeding 12 V DC (1×)
  • DC splitter voor voeding (1×)
  • Adafruit RGB LCD Shield (16×2) (1×)
  • Verwarmingsmat (voor opwarmen monsters) (1×)
  • Klemblokken (verschillende: 3-polig, 5-polig) (1× elk)
  • Plastic behuizing intern (125×70×40 mm) (1×)
  • Panel-mount DC stekker (1×)
  • 4-polige DPDT schakelaar (1×)
  • 1-polige SPDT schakelaar (1×)
  • Plastic behuizing extern voor elektronica (1×)
  • Hook & Loop DualLock tape (1×)
  • Adafruit Proto-Screwshield (voor vaste schroefklem-aansluitingen) (1×)
  • Adafruit Li-ion USB acculader (1×)
  • Adafruit MAX31865 PT100 RTD-versterker (1×)

Benodigde tools en machines

  • Soldeerbout
  • Dremel 4000
  • Schroefbank
  • Boormachine
  • Kabeltools (stripper, tang, kniptang)
  • Handfrezen (voor koperen onderdelen)

Apps en online services

  • GitHub (bibliotheken: sleemanj's MCP41100 Digital Potentiometer library, Adafruit bibliotheken voor MAX31865, RGBLCDShield, etc.)
  • Arduino IDE

Over dit project: Mr ThermoParcel

Doel

De ontwikkeling van een temperatuurgecontroleerde container voor het veilig vervoeren van temperature-gevoelige biologische monsters (bloed, cellen, enzymen, etc.) via gewone postdiensten. De prototype, genaamd Mr ThermoParcel, werkt in het bereik 4–37 °C en kan worden gevoed via netspanning, interne accu of elke 12 V bron (auto-aanschuif, laptop-lader).

Oorsprong

Het project ontspruit een praktisch probleem in academisch onderzoek: het veilig uitwisselen van temperature-gevoelige bloedmonsters voor malaria-onderzoek. Bevriezen/ontdooien schaadt monsters en is duur; levering op kampussen leidt vaak tot ongewilde vertraging en ongeschikte opslag.

Ontwerpconcept

Een temperatuurregelsysteem geïntegreerd in een standaard polystyreen-doos. Koeling via een Peltier-element (koude kant aan intern koperen plaat door de doos, warme kant naar externe warmteuitwisselaar met heatpipes). Verwarming via een verwarmingsmat in de interne monsterbox. Temperatuurmonitoring met PT100-sensor in contact met monsters, geregeeld door Arduino met PID-regelaar. Zie Figuur 1 voor conceptueel schema.

Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO

Implementatie

Container hardware

De externe polystyreen-doos bevat een plastic interne behuizing met twee 50 mL centrifugerbuizen (secundaire verpakking volgens UN3373 cat. B). Primaire monsters: zes 2 mL Eppendorf-buizen, gescheiden door absorberend papier. Voor betere thermische contacten wordt elektrisch isolerend, uithardend gel (Magic Gel) om de monsters gegoten. Zie Figuur 2.

Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO

Koel- en verwarmingssysteem

Temperatuurmonitoring met PT100 RTD (100 Ω bij 0 °C) in contact met monsters, bestuurd door PID-regelaar via Peltier (koelen) of verwarmingsmat (verwarmen). Warmte van Peltier warmte-kant wordt via drie koperen heatpipes afgevoerd naar extern koperen blok en CPU-cooler. Koude kant op dun koperen plaat door de doos. Verwarmingsmat ligt in interne behuizing tegen sensor en monsters. Details in Figuur 3.

Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO
Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO
Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO

Elektronica & bedrading

Koel-/verwarmingsregeling

Peltier module (max 3,9 A, 7,6 V) wordt aangedreven via PTN78020W instelbare step-down schakelregelaar (in 7–36 V, uit 2,5–12,6 V). Uitingangspanning wordt ingesteld via weerstand tussen twee regelaarpinnen. Arduino stuurt MCP41100 100 kΩ digitale potentiometer om deze weerstand elektronisch in te stellen. Omdat het bereik >1 MΩ vereist, kan de Peltier niet volledig uitgeschakeld worden via alleen de digipot; een extra schakelschakeling zou nodig zijn. Hetzelfde principe geldt voor de verwarmingsmat (simpele weerstand).

Voeding

  • Netvoeding: 12 V DC direct op PTN78020W → tot 10 V uitgang, voldoende voor max Peltier-vermogen.
  • Accu: 3,7 V 10.400 mAh Li-ion. XL6019 step-up converter verhoogt naar 10–12 V voor PTN78020W-invoer. Beperking: accu max 7 A ontlading → software beperkt vermogen op accu-modus.

Arduino bedrading

  • Arduino gevoed via 12 V DC-jack (net) of via XL6019-uitgang (accu).
  • Arduino stuurt digipot (variabele weerstand config) volgens sleemanj's MCP41-bibliotheek.
  • MAX31865 PT100-versterker (software SPI: CS=2, DI=3, DO=4, CLK=5).
  • RGB LCD Shield via I2C (Adafruit bibliotheek).

Software

Alle Adafruit-modules via hun bibliotheken, digipot via sleemanj's MCP41-bibliotheek. Kern: PID-gesloten lus temperatuurregeling. Setpoint instelbaar via LCD-schildknoppen. Gemeten temperatuur → afwijking → PID-waarde → digipot-wiper. Fysieke toggleswitch kiest tussen koel- (Peltier) en verwarmingsmodus (mat); software corrigeert teken van PID. Tijdens tests bleek P-term voldoende (±0,5 °C nauwkeurigheid) door grote warmtecapaciteit (typisch 0,02 °C/s). I- en D-termen weggelaten.

Prestaties

  • Netvoeding: 21–23 °C → 4 °C in ~1 uur (8–10 °C in 20 min). 37 °C in ~10 min. Stabiliteit ±0,5 °C.
  • Alleen accu: Min ~10 °C in 1,5–2 uur. 37 °C in 40–60 min. Beperkt door accu-ontladingsstroom (7 A max). Hogere ontladingsaccu's of 3S Li-ion (11,1 V) lossen dit op.
Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO
Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO

Toekomstige richtingen

  • Vervang CPU-cooler door passief koelsysteem voor robuustheid tijdens verzending.
  • 95 kPa secundaire verpakking voor voldoening aan courier-eisen (vliegtuigtransport).
  • Temperatuurlogging lokaal of via GSM/SMS.
  • GPS-ontvanger voor tracking en tijdige afhaal.

Code

Hoofdsketch: PID_LCD_controller_v03 (Arduino). Volledige code:

#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 = accu, -1 = net
int operationMode = 1;  // 1 = koelen, -1 = verwarmen
float PT100ratio;
uint8_t buttonsPressed = 0;
float kp = 500.0;
int ki = 5;
int kd = 3.9;
float PID_p = 0.0;
float Tmeasured = -1.0;
float Tsetpoint = 22.0;
float PID_error = 5;
float PID_value = 0;

static char TsetpointString[3];
static char TmeasuredString[4];

void print_Tsetpoint(int T) {
  LCD_shield.setCursor(10, 0);
  dtostrf(T, 3, 0, TsetpointString);
  LCD_shield.print(TsetpointString);
}
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);
  LCD_shield.print(powerMode == 1 ? "B" : "M");
}
void print_operationMode() {
  LCD_shield.setCursor(15, 1);
  LCD_shield.print(operationMode == 1 ? "C" : "H");
}

void setup() {
  Serial.begin(115200);
  Serial.println("Mr ThermoParcel, starting operation...");
  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 (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();
}

Schema's

Hoofdschema met alle componenten:

Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO

Bedradingsschema (ruw, voor interne gebruik):

Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO

Potentiometer-aansluiting:

Precisie temperatuurgecontroleerde transportcontainer met PT-100 sensor en Arduino UNO

Productieproces

  1. Temperatuur-gecontroleerde Ventilator: DIY Relais Systeem Voor Media Kast Koeling
  2. DIY thuisbrouw temperatuurcontrole: Monitoren & regelen met Arduino
  3. Precieze thermocouple-metingen en logging voor lab- en wetenschappelijke experimenten
  4. Warmtebehandeling optimaliseren voor CNC-bewerkte metalen componenten
  5. Hoe Warmteafgifte voor VFDs Nauwkeurig te Berekenen
  6. Hoog-temperatuur PCB-laminaat Kiezen voor Betrouwbare Prestaties
  7. Uitgebreide gids voor PCB-temperatuurbeheer
  8. Precisie Warmtebehandeling voor Aluminiumgietstukken: Sterkte en Duktiliteit Verbeteren
  9. Efficiënte ARM-containerbuilds op x86-systemen
  10. Top warmteleidende metalen & hun toepassingen – een praktische gids
  11. Alliage 36 (Invar®): Precisie Nikkel-IJzerlegering met Lage Uitdijing