Датчик температуры

Материал из MIK32 микроконтроллер

DS18B20 – это полноценный цифровой термометр, способный измерять температуру в диапазоне от -55оС до +125оС с программируемой точностью 9-12 бит. При изготовлении на производстве, каждому датчику присваивается свой уникальной 64-битный адрес, а обмен информацией с ведущим устройством (микроконтроллером или платой Arduino) осуществляется по шине 1-wire. Такой подход позволяет подключать к одной линии целую группу датчиков, вплоть до 264.

Внешний вид и распиновка корпусов

Технически, датчики DS18B20 выпускаются в 3-х корпусах: ТО-92, SO, uSOP.


Технические характеристики DS18B20

  • Напряжение питания: 3V-5.5V;
  • Протокол обмена данными: 1-Wire;
  • Способ подключения: прямой / по одной линии с паразитным питанием;
  • Разрешение преобразования температуры: 9 бит – 12 бит;
  • Диапазон измерения температуры: от -55 до +125 оС;
  • Период измерения температуры при максимальной точности 12 бит: 750 мС;
  • Тип индексации на линии 1-Wire: уникальный 64-битный адрес;
  • Есть возможность программирования диапазона тревожного сигнала.



Подключение к плате

Прямое подключения одиночного датчика:

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

На рисунке справа показана схема прямого подключения одиночного датчика к Arduino Nano.

Здесь всё довольно просто. Запитываем DS18B20 от самой платы Arduino, подавая 5V на вывод Vdd датчика. Аналогичным образом соединяем между собой выводы GND. Средний вывод термодатчика подключим, например, к выводу D2 нашей Arduino Nano. Подключать вывод данных (DQ) можно практически на любой вход Arduino, предварительно прописав его номер в скетче. Единственный и самый важный момент, на который следует обратить внимание – это наличие резистора номиналом 4,7k между плюсом питания и линией данных термодатчика. Этот резистор служит для подтяжки линии данных к логической единице и его отсутствие вызовет сбой в работе алгоритма обмена информацией. Значение 4,7k не сильно критично и в некоторых пределах его можно изменять, главное не увлекаться.

Прямое подключение группы датчиков

Прямое подключения группы датчиков:

С прямым подключением одного датчика всё понятно, теперь рассмотрим прямое подключение группы датчиков к одному выводу Arduino. На рисунке слева показан пример подключения 5-ти датчиков DS18B20. Это количество может быть любым и ограничивается только рамками временем на опрос каждого из них (750мС).

Как видно из вышеприведенного рисунка, абсолютно все датчики на шине подключены параллельно и на всю группу идёт один подтягивающий резистор. Хоть изменения в схеме логичны и минимальны, но работа с несколькими термодатчиками немного сложнее в плане составления программы. В этом случае необходимо обращаться к каждому в отдельности, используя уникальные адреса.





Пример кода

Для работы с датчиком нам понадобится библиотека DallasTemperature.h Данная библиотека немного упрощает процесс программирования за счёт более понятных для восприятия функций. После установки, вы получите доступ к 14 примерам хорошо документированного кода на все случаи жизни. Давайте рассмотрим пример работы одним датчиком.

 // Подключаем необходимые библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>

// Шину данных подключаем к выводу №2 Arduino
#define ONE_WIRE_BUS 2

// Создаём экземпляр класса для нашей шины и ссылку на него
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// ФУНКЦИЯ ПРЕДУСТАНОВОК
void setup(void)
{
  Serial.begin(9600); // Инициализация серийного порта
  sensors.begin(); // Инициализация шины
}

// ОСНОВНОЙ ЦИКЛ
void loop(void)
{
	Serial.print("Reading Temperature...");
	// Подаём команду на чтение
	sensors.requestTemperatures();
	Serial.println("Read");
	Serial.print("Sensor Temperature 1: ");
	// Отображаем значение температуры
	Serial.print(sensors.getTempCByIndex(0));
}