Датчик температуры на базе DS18B20.

Система TinyOneWireNet

В статье представляю следующее сетевое устройство – датчик температуры с использованием сенсора DS18B20.

Предыдущая статья     Навигация по рубрике     Следующая статья

Общее описание.

В устройстве в качестве измерителя используется популярный датчик температуры DS18B20.

Датчик DS18B20

Это термодатчик с цифровым последовательным интерфейсом 1-Wire. Обладает достаточно высокими техническими параметрами. Для нас важно:

  • Высокая точностью измерения, погрешность не превышает 0,5 °C. Датчик откалиброван при изготовлении, дополнительной калибровки не требует.
  • Разрешающая способность достигает 0,0625 °C при максимальном разрешении 12 бит.
  • Широкий диапазон измерения температуры -55 … + 125 °C.
  • Датчик осуществляет преобразование температуры в цифровой код, т.е. дополнительного АЦП не требуется.
  • Низкое энергопотребление. Ток покоя не более 1 мкА, рабочий ток до 1,5 мА.
  • Время измерения при максимальном разрешении не превышает 750 мс.

Электрическая схема устройства.

К традиционному узлу, обеспечивающему обмен по сети TinyOneWireNet, подключен сенсор DS18B20.Схема датчика на базе DS18B20

Когда встал вопрос о разработке печатной платы для термодатчика DS18B20, невозможно было не заметить, что его схема большей частью повторяет схемы большой группы датчиков. Значительное количество устройств представляют собой какой-нибудь сенсор, подключенный через один сигнал к стандартному блоку формирования интерфейса TinyOneWireNet.

Например, вместо DS18B20 можно подключить датчик “сухого контакта”, или фоторезистор, или использовать вход RA4 PIC-контроллера для измерения аналогового сигнала…

Таким образом, появилась идея создать универсальную плату для большого числа разных устройств.

Схема универсального датчика

Собранное устройство выглядит так.

Внешний вид универсального датчика

По сути это 2 входа/выхода микроконтроллера с различными делителями и подтягивающими резисторами.

Планируется реализовать на этой плате следующие типы устройств:

  • датчик DS18B20;
  • датчик DHT22;
  • датчик света (фоторезистор);
  • дискретный датчик (сухой контакт);
  • управляющее устройство диммеров;
  • управляющее устройство модулей дискретных выходов;
  • управляющее устройство любых модулей ввода/вывода (дискретных, аналоговых, кодовых);
  • аналоговый вход;
  • измеритель сопротивления;
  • ШИМ-выход;
  • приемник/передатчик I2Cустройств;
  • приемник/передатчик UARTустройств.

Параметры компонентов R1-R4 и C2 выбираются для конкретных типов устройств. Для DS18B20 запаивается только резистор R1 и замыкается R3.

Плата может быть установлена в подобный корпус.

Корпус датчика

Корпус датчика

Работа с термодатчиком DS18B20 в системе Ардуино.

Подключил датчик по схеме.

Схема подключения датчика к Ардуино

Задал адрес с помощью монитора.

Экран с типом датчика

Датчик DS18B20 одно из самых простых устройств с точки зрения программного управления. Есть 3 функции библиотеки TinyOneWireNet.h:

uint8_t startMeasurement_DS18B20(uint8_t adr); // запуск измерения температуры

uint8_t readCode_DS18B20(uint8_t adr, uint16_t * code); // чтение результата измерений температуры (код)

uint8_t readTemperature_DS18B20(uint8_t adr, float * tmp); // чтение результата измерений температуры (C)

Где используются следующие аргументы:

  • adr – адрес сетевого устройства;
  • code – указатель на результат измерений в виде кода;
  • tmp – значение измеренной температуры в °C.

Работа с датчиком заключается в следующих операциях:

  • Первой функцией запустить преобразование.
  • Выдержать паузу на время преобразования (не менее 800 мс).
  • Второй или третей функцией считать код или значение температуры.

Вот скетч, выполняющий чтение температуры в цикле.

// измерение температуры (DS18B20)
#include <TinyOneWireNet.h>

#define NET_PIN 2 // вывод данных сети

#define BETWEEN_COM_TIME 2 // пауза между командами (мс)

TinyOneWireNet sens(NET_PIN);
float tmp;

void setup() {
  Serial.begin(9600);
  sens.onLine(10);
}

void loop() {
  if( sens.startMeasurement_DS18B20(10) == 0 ) {
    delay(1000);
    if( sens.readTemperature_DS18B20(10, & tmp) == 0 ) {
      Serial.print("T= ");
      Serial.print(tmp);
      Serial.println(" C");
    }
    else Serial.println("Error");
  }
  else {
    Serial.println("Error");
    delay(1000);
  }
  delay(BETWEEN_COM_TIME);
}

Показания температуры

Калибровать датчик DS18B20 не надо. Его калибровка производится заводом-изготовителем.

В следующей статье расскажу о датчике освещенности с фоторезистором в качестве сенсора.

Предыдущая статья     Навигация по рубрике     Следующая статья

0

Автор публикации

не в сети 4 дня

Эдуард

285
Комментарии: 1946Публикации: 200Регистрация: 13-12-2015

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".