Как правильно подключить датчик DS18B20

Иван Корнев·29.04.2026·5 мин

Для стабильной работы датчика DS18B20 необходимо подключить его выводы VDD и GND к источнику питания (3.3–5.5 В), а линию данных DQ соединить с цифровым пином микроконтроллера через подтягивающий резистор номиналом 4.7 кОм. Резистор устанавливается между линией DQ и плюсом питания (VDD). Без этого резистора обмен данными по протоколу 1-Wire будет невозможен.

В этом руководстве подробно разобраны две основные схемы подключения (с внешним питанием и паразитным), нюансы выбора компонентов и способы диагностики неисправностей на Arduino и Raspberry Pi.

Принцип работы и распиновка

DS18B20 — это цифровой термометр с интерфейсом 1-Wire, который позволяет передавать данные и питание (в паразитном режиме) по одному проводу. Датчик выпускается в корпусах TO-92 (транзисторный вид) и SO-8, а также в влагозащищенных капсулах.

Стандартная распиновка для корпуса TO-92 (если смотреть на плоскую сторону):

  1. GND — Земля (общий провод).
  2. DQ — Линия данных (однопроводная шина).
  3. VDD — Питание (+3.3В или +5В).

Важно соблюдать полярность! Перепутывание VDD и GND мгновенно выводит датчик из строя. Если вы используете водонепроницаемую версию в кабеле, цвета проводов могут отличаться у разных производителей. Всегда проверяйте распиновку мультиметром в режиме прозвонки или сверяйтесь с даташитом конкретного экземпляра.

Схемы подключения: нормальное и паразитное питание

Существует два способа запитать датчик. Выбор зависит от количества датчиков на линии и длины проводов.

1. Нормальное питание (рекомендуемое)

Это самый надежный способ. Датчик имеет отдельный вывод для питания.

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

  • VDD датчика → к +5V (или +3.3V) микроконтроллера.
  • GND датчика → к GND микроконтроллера.
  • DQ датчика → к цифровому пину (например, D2 на Arduino).
  • Резистор 4.7 кОм → одним концом к линии DQ, другим к VDD (плюсу питания).

Используйте схему с внешним питанием, если:

  • Длина кабеля превышает 5–10 метров.
  • На одной линии висит несколько датчиков.
  • Требуется высокая точность измерений при высоких температурах (выше 100°C).

2. Паразитное питание (Parasite Power)

В этом режиме датчик получает энергию прямо от линии данных DQ. Вывод VDD соединяется с GND.

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

  • VDD датчика → к GND.
  • GND датчика → к GND микроконтроллера.
  • DQ датчика → к цифровому пину.
  • Резистор 4.7 кОм → между DQ и VCC (питанием контроллера).

Особенности:

  • Экономит один провод при подключении.
  • Требует более строгого соблюдения таймингов в коде.
  • При конвертации температуры датчик потребляет до 1.5 мА. Если линия длинная или емкость большая, напряжение на линии может просесть, что приведет к ошибке чтения. Для компенсации иногда используют дополнительный ключ (MOSFET), чтобы «подтянуть» линию к питанию жестко во время измерения.

Подтягивающий резистор: зачем он и какой выбрать

Протокол 1-Wire использует открытый сток (open-drain). Это означает, что устройства могут только притягивать линию к земле (логический «0»), но не могут самостоятельно выдавать высокий уровень («1»).

Функции резистора:

  1. Возвращает линию в состояние логической «1», когда ни одно устройство не передает данные.
  2. Обеспечивает ток заряда паразитной емкости линии и внутреннего конденсатора датчика (в режиме паразитного питания).

Номинал резистора:

  • 4.7 кОм — золотой стандарт для большинства проектов (длина провода до 10–20 м, 1–5 датчиков).
  • 10 кОм — допустимо для очень коротких соединений (на макетной плате), но может снизить скорость обмена.
  • 1.5–2.2 кОм — рекомендуется для длинных линий (более 20 м) или большого количества датчиков на одной шине, чтобы обеспечить более крутые фронты сигнала.
Условия использованияРекомендуемый резисторПримечание
Макетная плата, короткие провода4.7 кОм - 10 кОмСтандартный вариант
Длина кабеля 5–15 м4.7 кОмОптимальный баланс
Длина кабеля > 20 м или много датчиков1.5 кОм - 2.2 кОмУлучшает стабильность фронтов
Паразитное питание, высокая нагрузка1.5 кОм - 2.2 кОмКомпенсирует просадки тока

Проверка работоспособности

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

Аппаратная проверка (мультиметр)

  1. Подайте питание на схему.
  2. Измерьте напряжение между ножками VDD и GND датчика. Оно должно соответствовать напряжению питания (3.3В или 5В).
  3. Измерьте напряжение на линии DQ относительно GND. В состоянии покоя (без передачи данных) там должна быть логическая «1» (напряжение близко к VCC). Если там 0В — проверьте, нет ли короткого замыкания на землю или неправильно ли впаян резистор.

Программная проверка на Arduino

Для работы потребуется библиотеки OneWire и DallasTemperature.

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

// Пин подключения данных
#define ONE_WIRE_BUS 2

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

void setup(void) {
  Serial.begin(9600);
  sensors.begin();
  
  // Поиск устройств на шине
  int deviceCount = sensors.getDeviceCount();
  Serial.print("Найдено устройств: ");
  Serial.println(deviceCount);
  
  if (deviceCount == 0) {
    Serial.println("Ошибка: Датчики не найдены. Проверьте подключение и резистор!");
  }
}

void loop(void) {
  sensors.requestTemperatures(); 
  float tempC = sensors.getTempCByIndex(0);
  
  if (tempC != DEVICE_DISCONNECTED_C) {
    Serial.print("Температура: ");
    Serial.print(tempC);
    Serial.println(" °C");
  } else {
    Serial.println("Ошибка чтения датчика");
  }
  delay(1000);
}

Проверка на Raspberry Pi

  1. Включите интерфейс 1-Wire через raspi-config (Interface Options -> 1-Wire).
  2. Добавьте в /boot/config.txt: dtoverlay=w1-gpio,gpiopin=4 (если используете GPIO4).
  3. Перезагрузитесь.
  4. Проверьте наличие устройства:
    ls /sys/bus/w1/devices/
    ```
    Вы должны увидеть папку с именем вида `28-xxxxxxxxxxxx`.
5.  Считайте температуру:
    
```bash
    cat /sys/bus/w1/devices/28-xxxxxxxxxxxx/w1_slave
    ```
    Ищите строку `t=25125`, что означает 25.125 °C.

## Частые ошибки при подключении

1.  **Отсутствие подтягивающего резистора.** Самая распространенная причина, почему код «не видит» датчик. Линия данных «болтается» в воздухе.
2.  **Использование длинных проводов без экранирования.** Интерфейс 1-Wire чувствителен к помехам. Для расстояний более 5 метров используйте витую пару.
3.  **Питание 3.3В против 5В.** Датчик работает в диапазоне 3.0–5.5В. Однако, если вы подключаете его к 3.3В логике (например, ESP32 или Raspberry Pi), убедитесь, что подтягивающий резистор тоже подключен к 3.3В, а не к 5В, иначе можно повредить вход контроллера.
4.  **Конфликт адресов.** Если вы подключаете несколько датчиков, каждый из них имеет уникальный 64-битный адрес. Убедитесь, что в коде вы обращаетесь к правильному адресу, если используете адресацию, а не индекс `getTempCByIndex(0)`.

## FAQ

**Можно ли подключить несколько DS18B20 к одному пину?**
Да, это главное преимущество 1-Wire. Все датчики подключаются параллельно к одной линии данных. Один общий подтягивающий резистор 4.7 кОм обслуживает всю шину.

**Почему датчик показывает 85°C?**
Значение 85°C — это начальное значение регистра температуры после включения питания. Если вы видите только 85°C, значит, не прошло достаточно времени для первого измерения (нужно ждать минимум 750 мс для разрешения 12 бит) или связь с датчиком отсутствует.

**Как увеличить длину кабеля?**
Для длинных линий (до 100 м и более) используйте экранированный кабель (витая пара), снизьте номинал подтягивающего резистора до 1.5–2 кОм и обязательно используйте внешнее питание (не паразитное).