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

Многопозиционная система датчиков температуры для интеграции в умный дом

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

DS18B20 × 8 шт.
Саморезы × 1 комплект
Arduino Nano R3 × 1 шт.
Экспериментальная печатная плата × 1 шт.
Резистор 4.7 кОм × 1 шт.
Двухконтактный винтовой клеммник × 1 шт.
SparkFun RS232 Shifter (SMD) × 1 шт.
3D-печатный корпус × 1 шт.
Провода × 1 комплект

Необходимые инструменты и оборудование

Программное обеспечение и онлайн-сервисы

О проекте

Мне требовалось считывать показания температуры в нескольких точках. Данные должны были передаваться в систему домашней автоматизации (Crestron/AMX). Решение должно было быть недорогим, поэтому был выбран датчик DS18B20 — он широко доступен, недорог и использует шину 1-Wire, что позволяет подключать множество датчиков по двум проводам.

Датчики подключены к Arduino Nano. Последовательный вывод Arduino (TTL) преобразуется в RS232 для совместимости с системой автоматизации.

Для эстетичного вида был спроектирован и напечатан корпус на 3D-принтере Zortrax M200.

Многопозиционная система датчиков температуры для интеграции в умный дом
Многопозиционная система датчиков температуры для интеграции в умный дом
Многопозиционная система датчиков температуры для интеграции в умный дом

Есть вопросы? Обращайтесь!

Программный код

MultiTempSensor v1.0.0 (Arduino)

/* MultiTempSensor code by WT040
   Основан на примерах Rik Kretzinger и других фрагментах кода
   История:
   v0.1.1 27/11/2016
   v0.1.5 04/12/2016 pre-release
   v1.0.0 04/12/2017 release
*/
// Библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>

// Константы
#define SENSOR_PIN 12
#define READ_TIMER 10000 // 10 секунд

OneWire oneWire(SENSOR_PIN);
DallasTemperature sensors(&oneWire);

// Адреса датчиков (уникальны для каждого)
DeviceAddress Sensor1 = { 0x28, 0xFF, 0x89, 0x0F, 0x61, 0x16, 0x03, 0x40 };
DeviceAddress Sensor2 = { 0x28, 0xFF, 0xE2, 0x0F, 0x61, 0x16, 0x03, 0x21 };
DeviceAddress Sensor3 = { 0x28, 0xFF, 0x38, 0xB3, 0x60, 0x16, 0x03, 0xEA };
DeviceAddress Sensor4 = { 0x28, 0xFF, 0xA4, 0xBE, 0x60, 0x16, 0x03, 0xE1 };
DeviceAddress Sensor5 = { 0x28, 0xFF, 0xFE, 0x13, 0x61, 0x16, 0x03, 0x56 };
DeviceAddress Sensor6 = { 0x28, 0xFF, 0x89, 0xBA, 0x60, 0x16, 0x03, 0xFB };
DeviceAddress Sensor7 = { 0x28, 0xFF, 0xFA, 0xBC, 0x60, 0x16, 0x03, 0xD1 };
DeviceAddress Sensor8 = { 0x28, 0xFF, 0x57, 0xB1, 0x60, 0x16, 0x03, 0x93 };

int amountOfSensors = 8;
int counterCheckBus = 0;

void setup() {
  Serial.begin(9600);
  printProgramName();
  Serial.print("Initializing Temperature Control Library Version ");
  Serial.println(DALLASTEMPLIBVERSION);
  Serial.print("Searching for ");
  Serial.print(amountOfSensors);
  Serial.println(" sensors...");

  sensors.begin();
  // Установка разрешения 10 бит (9-12 бит, меньше — быстрее)
  for (int i = 1; i <= 8; i++) {
    DeviceAddress* sensor = getSensorByIndex(i);
    if (sensor) sensors.setResolution(*sensor, 10);
  }

  getSensorsOnBus();
  Serial.println("System initialized");
}

void loop() {
  counterCheckBus++;
  delay(READ_TIMER);
  Serial.println();

  if (counterCheckBus == 360) { // Проверка шины каждый час (360 × 10 сек)
    getSensorsOnBus();
    counterCheckBus = 0;
  }

  sensors.requestTemperatures();
  
  for (int i = 1; i <= 8; i++) {
    DeviceAddress* sensor = getSensorByIndex(i);
    if (sensor) {
      Serial.print("Sensor ");
      Serial.print(i);
      Serial.print(": ");
      printTemperature(*sensor);
      Serial.println();
    }
  }
}

void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    Serial.print("Sensor error!");
  } else {
    Serial.print("C: ");
    Serial.print(tempC);
  }
}

void printProgramName() {
  String path = __FILE__;
  int slash = path.lastIndexOf('\\');
  String programName = path.substring(slash + 1);
  int dot = programName.lastIndexOf('.');
  programName = programName.substring(0, dot);
  Serial.print("\nProgram version: ");
  Serial.println(programName);
}

void getSensorsOnBus() {
  Serial.print("Number of sensors found on bus: ");
  Serial.println(sensors.getDeviceCount());
}

DeviceAddress* getSensorByIndex(int index) {
  switch (index) {
    case 1: return &Sensor1;
    case 2: return &Sensor2;
    case 3: return &Sensor3;
    case 4: return &Sensor4;
    case 5: return &Sensor5;
    case 6: return &Sensor6;
    case 7: return &Sensor7;
    case 8: return &Sensor8;
    default: return nullptr;
  }
}

3D-модели корпуса

Схема подключения

Базовая схема без RS232-модуля:

Многопозиционная система датчиков температуры для интеграции в умный дом

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

  1. Датчик температуры DS18B20 — точный цифровой термометр с интерфейсом 1-Wire для промышленности и быта
  2. Сборка логгера температуры на Raspberry Pi с $5 I2C датчиком
  3. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  4. Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
  5. Создайте домашний монитор температуры на Raspberry Pi с MCP9808, InfluxDB и Grafana
  6. Умная теплица DasFilisera: система мониторинга роста растений на Arduino MKR1000
  7. MotionSense: умная система обнаружения проникновения на Arduino и ESP8266
  8. Пожарная безопасность 3D-принтера: умная система обнаружения дыма
  9. CoroFence: термический детектор на GridEye + PIR с IoT
  10. Точный датчик температуры подшипников: обнаружение и мониторинг