Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Точный термостатируемый контейнер для перевозки образцов с датчиком PT-100 и Arduino UNO

Компоненты и материалы

Инструменты

Программное обеспечение и библиотеки

О проекте: Mr ThermoParcel

Цель: создание контейнера для безопасной перевозки температурно-чувствительных биологических образцов (крови, клеток, ферментов) обычной почтовой службой. Рабочий диапазон: 4–37 °C. Питание: сеть 12 В, встроенный аккумулятор или автомобильная зарядка (сигаретная зажигалка).

История проекта

Проблема: доставка редких образцов крови для исследования малярии. Заморозка повреждает образцы, курьерские службы дороги и ненадежны (задержки на складе). Решение — автономный термостатируемый контейнер.

Концепция

Полистироловый короб с внутренним пластиковым блоком (два фалькона 50 мл как вторичная упаковка). Охлаждение — Пелтье-элемент: холодная сторона контактирует с медной пластиной внутри камеры, горячая — через тепловые трубы с внешним радиатором (CPU cooler). Нагрев — нагревательный коврик внутри камеры. Температура контролируется PT100-датчиком в контакте с образцами. PID-регулятор на Arduino управляет мощностью Пелтье/нагрева через цифровой потенциометр, задающий опорное напряжение на PTN78020W.

Реализация

Конструкция контейнера

Внутренний корпус 125×70×40 мм вмещает два фалькона 50 мл с пробирками Эппендорфа 2 мл. Образцы разделены впитывающим материалом. Для улучшения термоконтакта и равномерности температуры пространство заполнено твердеющим диэлектрическим гелем.

Система охлаждения и нагрева

PT100 в 4-проводной схеме подключен к MAX31865. Пелтье управляется через PTN78020W: выходное напряжение (2,5–12,6 В) задается сопротивлением между пинами регулирования. MCP41100 (SPI) меняет это сопротивление по команде Arduino. Нагревательный коврик — просто резистивная нагрузка, питание которой регулируется тем же способом. Переключение режима охлаждение/нагрев — механическим тумблером.

Электроника и питание

Программное обеспечение

PID-регулятор с только P-составляющей (kp=500). I и D исключены из-за большой теплоемкости системы (скорость изменения ~0,02 °C/с). Уставка задается кнопками LCD Shield. Режим питания (батарея/сеть) и режим работы (охлаждение/нагрев) переключаются кнопками LEFT/RIGHT в меню редактирования (SELECT). В батарейном режиме PID ограничен 120 из 255 для защиты аккумулятора от перетока.

Результаты

Перспективы

Замена активного радиатора на пассивный, 95 кПа упаковка для авиаперевозок, логирование температуры (SD/GSM), GPS-трекинг.

Код (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=батарея, -1=сеть
int operationMode = 1; // 1=охлаждение, -1=нагрев
float PT100ratio;
uint8_t buttonsPressed = 0;
float kp = 500.0;
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 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 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 loop() {
  uint16_t rtd = PT100amplifier.readRTD();
  PT100ratio = rtd / 32768.0;
  Tmeasured = PT100amplifier.temperature(RNOMINAL, RREF);
  PID_error = Tmeasured - Tsetpoint;
  PID_p = operationMode * kp * PID_error;
  PID_value = (int)PID_p;

  if (powerMode == 1) {
    PID_value = constrain(PID_value, 0, 120);
  } else {
    PID_value = constrain(PID_value, 0, 255);
  }
  digitalPotentiometer.setWiper(255 - (int)PID_value);

  print_Tsetpoint((int)Tsetpoint);
  print_Tmeasured(Tmeasured);
  print_powerMode();
  print_operationMode();

  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((int)Tsetpoint);
      LCD_shield.setCursor(14, 0);
      delay(500);
    }
    LCD_shield.noBlink();
    buttonsPressed = 0;
  }
  Serial.println();
}

Схемы

Основная принципиальная схема и разводка проводов (две фотографии) доступны в разделе Schematics оригинала. Вторая схема — «рабочая» разводка, может быть полезна для понимания реальных соединений.

Производственный процесс

  1. Температурно-управляемый вентилятор: DIY релейная система охлаждения мебели для медиа
  2. Самодельная система термостатирования для домашнего пивоварения: мониторинг и регулирование на Arduino
  3. Точное измерение и логирование термопар для лабораторных и научных экспериментов
  4. Топ теплопроводящих металлов и их применения — практическое руководство
  5. Как точно рассчитать тепловыделение для ЧРП (VFD)
  6. Выбор высокотемпературных ламинатов PCB для надежной производительности
  7. Подробное руководство по управлению температурой печатных плат
  8. Точная термическая обработка алюминиевых литьев: повышение прочности и пластичности
  9. Сплав 36 (Invar®): никельно-железный сплав с почти нулевым тепловым расширением
  10. Оптимизация термической обработки для CNC-обработанных металлических компонентов