DS18B20: подробное руководство по подключению к Arduino, несколько датчиков, тесты, Nokia 5110

Цифровой термометр DS18B20

DS18B20 — цифровой датчик температуры с протоколом 1-Wire, позволяющий подключить до 127 штук к одному пину Arduino. Диапазон измерений от -55 °C до +125 °C, высокая точность ±0,5 °C в диапазоне -10…+85 °C, разрешение 9–12 бит. Каждый датчик имеет уникальный 64-битный заводской адрес, что упрощает работу с несколькими экземплярами. Поддерживает паразитное питание (VCC = GND), но в этом режиме максимальная температура +100 °C. Длина линии до 100–300 м на витой паре с хорошим экранированием. Идеален для метеостанций, теплиц, аквариумов, систем отопления, холодильников, мониторинга температуры жидкостей и воздуха.

DS18B20 в корпусе TO-92 — самый популярный вариант

Корпуса DS18B20

Производитель выпускает датчик в разных исполнениях: классический пластиковый TO-92 (похож на транзистор), водонепроницаемый в металлической гильзе (для погружения в воду, чайники, аквариумы), SMD-вариант для поверхностного монтажа.

Все популярные корпуса DS18B20: TO-92, водонепроницаемый, SMD

Распиновка и базовое подключение

TO-92 (плоская сторона к себе): слева — GND, центр — DATA, справа — VCC (+5 В). Подтягивающий резистор 4,7 кОм от DATA к +5 В обязателен для стабильной работы шины.

Распиновка DS18B20 TO-92 — вид с плоской стороны Полная схема подключения DS18B20 к Arduino Uno

Разрешение и время измерения

Таблица разрешения, точности и времени преобразования DS18B20

12 бит — максимальная точность (0,0625 °C), но 750 мс на измерение. 9 бит — самое быстрое (93 мс), точность 0,5 °C.

Базовый скетч — один датчик

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 12
#define ERROR_TEMP -127.0  // Специальное значение, сигнализирующее о проблеме с датчиком

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

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

void loop() {
  sensors.requestTemperatures();  // Запрос температуры
  float temp = sensors.getTempCByIndex(0);  // Получаем температуру первого датчика

  if (temp == ERROR_TEMP) {
    Serial.println("Ошибка: датчик не найден или не отвечает");
  } else {
    Serial.print("Температура: ");
    Serial.print(temp, 2);
    Serial.println(" °C");
  }

  delay(1500);
}

Вывод на дисплей Nokia 5110

Температура DS18B20 в реальном времени на дисплее Nokia 5110

Интегрируйте с библиотекой Adafruit_PCD8544: после получения температуры выводите display.print(temp, 1); display.println(» °C»);. Обновляйте экран каждые 5–10 секунд.

Тесты в экстремальных условиях

Датчик мгновенно реагирует на кипяток — за 2–4 секунды показывает 95–99 °C. В чашке чая после заливки кипятка — реальные 75–82 °C. Охлаждение до -15 °C в морозилке занимает 10–15 минут. Выдерживает длительную работу без деградации.

Заключение

DS18B20 — эталон для проектов Arduino. Простота, надёжность, 1-Wire, длинные линии, множество датчиков, высокая точность и паразитное питание делают его незаменимым. Освойте поиск адресов, настройку разрешения, вывод на дисплей — и создавайте сложные системы мониторинга.

FAQ

Сколько датчиков реально подключить?

Теоретически 127. Практически 20–50 без проблем при качественном кабеле.

Нужен ли резистор 4,7 кОм?

Да, обязательно. Без него связь нестабильна или отсутствует.

Почему показывает -127 °C?

Обрыв провода, плохой контакт, нет резистора или датчик не инициализирован.

Какое разрешение выбрать?

12 бит — для точности. 9–10 бит — для высокой скорости опроса.

Работает ли на 300 метрах кабеля?

Да, на витой паре с экранированием и резистором 2–3 кОм.

Как ускорить измерение?

Установите sensors.setResolution(9); — время сократится до 93 мс.

Как быстро нагревается в кипятке?

За 2–5 секунд достигает 95–100 °C при хорошем тепловом контакте.