Цифровой датчик температуры DS18B20

Цифровой датчик температуры используется в медицинских системах, системах контроля климата, энергосбережения.

Принцип работы

Датчик построен на основе температурного сенсора с цифровым выходом DS18B20. Датчик включает в себя сам сенсор и микросхему, которая переводит полученную информацию в цифровой вид.

К возможностям датчика можно отнести способность хранить значения измерений, сигнализировать о выходе температуры за установленные границы (сами границы можно устанавливать и менять), менять точность измерений, изменять способ взаимодействия с контроллером и так далее. 

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

Технические характеристики модуля

Диапазон измерений: -55...+125
Питание: 3...5.5В
Защита от неправильной полярности питания: Есть
Размер платы: 22x29мм

Подключение

Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения: 

VCC - питание (+5V)
CH2 - подключается к цифровому входу контроллера
CH1 - не используется (NC)
GND - земля (общий)

Работа с модулем выполняется по протоколу 1WIRE.

Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру по схеме ниже. Для быстрого и надежного подключения используйте QuatroPort A050.

Программа

После сборки схемы необходимо загрузить в микроконтроллер программу, предварительно установив библиотеку OneWire.h, скачать её можно отсюда: https://github.com/PaulStoffregen/OneWire.

#include "OneWire.h"
OneWire ds(9); // Объект OneWire
int temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20
long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок

void setup() {
  Serial.begin(9600);
}

void loop() {
  detectTemperature(); // Определяем температуру от датчика DS18b20
  Serial.println(temperature); // Выводим полученное значение температуры
  // Т.к. переменная temperature имеет тип int, дробная часть будет просто отбрасываться
}

int detectTemperature() {

  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);

  if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
  {
    lastUpdateTime = millis();
    ds.reset();
    ds.write(0xCC);
    ds.write(0xBE);
    data[0] = ds.read();
    data[1] = ds.read();

    // Формируем значение
    temperature = (data[1] << 8) + data[0]; temperature = temperature >> 4;
  }
}

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