DS18B20 датчик температуры Dallas

Узнайте всё о датчике температуры DS18B20 Dallas: технические характеристики, распиновка, схемы подключения, datasheet и примеры кода для ESP32, Arduino, Raspberry

Окружающая среда 1-Wire

Обзор

DS18B20 — это высокоточный цифровой датчик температуры от Dallas Semiconductor (Maxim Integrated). Он использует протокол 1-Wire для связи, требуя только одну линию данных. Датчик широко применяется в промышленных системах, метеостанциях и IoT-проектах благодаря широкому диапазону температур и настраиваемому разрешению.

DS18B20 — цифровой датчик температуры с интерфейсом 1-Wire. Обеспечивает высокую точность ±0.5°C и широкий диапазон измерений от -55°C до +125°C. Доступен в корпусе TO-92 и водонепроницаемых исполнениях.

Датчик DS18B20
Быстрая навигация
Основные разделы статьи
Примеры кода
Популярные платформы

О датчике DS18B20

DS18B20 — это высокоточный цифровой датчик температуры от Dallas Semiconductor (Maxim Integrated). Он использует проприетарный протокол 1-Wire для связи с микроконтроллером, требуя только одну линию данных (плюс землю). Это делает его идеальным выбором для проектов, где нужно минимизировать количество проводов.

Ключевые особенности

  • Высокая точность — ±0.5°C в диапазоне от -10°C до +85°C.
  • Широкий диапазон — измеряет от -55°C до +125°C.
  • Протокол 1-Wire —只需要 одну линию данных для связи.
  • Настраиваемое разрешение — от 9 до 12 бит (0.5°C до 0.0625°C).
  • Уникальный адрес — 64-битный ROM позволяет подключить несколько датчиков на одну шину.
  • Режим паразитного питания — датчик может питаться от линии данных.
Где купить

Приобретите DS18B20

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

Характеристики DS18B20

Полные технические характеристики датчика температуры DS18B20.

Интерфейс
1-Wire
Точность
±0.5°C (-10°C…+85°C)
Диапазон
-55°C…+125°C
Питание
3.0–5.5В
Разрешение
9–12 бит
Потребление
1мА актив., <1мкА покой
Скачать полный даташит
Конфигурация пинов

Распиновка DS18B20

Датчик DS18B20 имеет три вывода: землю (GND), линию данных (DQ) и питание (VDD). Также поддерживает режим паразитного питания.

Визуальная диаграмма распиновки
Основное
Распиновка DS18B20
Всего выводов
3
Типы
Питание + 1-Wire
Быстрые советы
  • Диапазон: -55°C до +125°C
  • Точность: ±0.5°C от -10°C до +85°C
  • Подтяжка: резистор 4.7кОм к VCC
  • Адрес: 64-битный уникальный ROM
Описание выводов
Название Тип Описание Примечания
1 GND Земля Подключение земли Общая земля
2 DQ Данные 1-Wire Линия данных Требует подтяжку 4.7кОм
3 VDD Питание Питание 3.0–5.5В Или GND для паразитного питания
Руководство по подключению

Подключение DS18B20 к ESP32

Подключите DS18B20 к ESP32 через протокол 1-Wire. Требуется подтягивающий резистор 4.7кОм между линией данных DQ и VCC (3.3В или 5В).

Схема подключения
Рекомендуемая (1-Wire)
Подключение DS18B20 к ESP32
Подключений
3
Статус
Все обязательны
Протокол
1-Wire
Подключения пинов
Вывод DS18B20 Подключение Вывод ESP32 Описание
GND обязательно GND Общая земля
VDD обязательно 3.3V или 5V Питание
DQ обязательно GPIO4 Линия данных 1-Wire (с подтяжкой 4.7кОм)
📍 Протокол: 1-Wire 🔧 Резистор подтяжки: 4.7кОм ⚡ Питание: 3.3В или 5В 🌡️ Диапазон: -55°C…+125°C 📈 Точность: ±0.5°C 🔢 64-битный адрес
Помощь и поддержка

Устранение неполадок DS18B20

Распространённые проблемы и решения для запуска датчика.

Датчик показывает +85°C
Значение по умолчанию при включении

Проблема: датчик возвращает 85°C — значение по умолчанию, которое означает что преобразование ещё не завершено.

Решение: вызовите sensors.requestTemperatures() для запуска измерения, подождите 750мс (для 12-битного разрешения), затем считайте температуру через getTempCByIndex(0).

Датчик показывает -127°C
Датчик не обнаружен

Причины: датчик не обнаружен, проблемы с подключением, отсутствует резистор подтяжки 4.7кОм.

Решение: проверьте подключение, убедитесь что резистор 4.7кОм установлен между DQ и VCC, проверьте питание (3.0-5.5В). Используйте сканер OneWire для поиска устройств.

Показания скачут или неточные
Нестабильные показания

Причины: длинные провода без экранирования, помехи, неправильное значение подтяжки.

Решение: используйте экранированный кабель для длинных линий, убедитесь в наличии резистора 4.7кОм, добавьте конденсатор 100нФ между VCC и GND рядом с датчиком.

CRC Error при чтении
Ошибка контрольной суммы

Причина: нарушение временных диаграмм 1-Wire из-за длинных проводов или помех.

Решение: сократите длину линии, добавьте конденсатор 100нФ между VCC и GND, используйте более толстые провода, увеличьте время между запросами.

Советы по отладке

Serial монитор
Проверка логов и ошибок
Используйте Serial Monitor для вывода отладочной информации. Библиотека DallasTemperature умеет выводить адреса найденных датчиков и коды ошибок. Добавьте отладочную печать для отслеживания состояния датчика.
Проверка напряжения
Мультиметр и целостность цепи
Используйте мультиметр для проверки напряжения на контактах VCC относительно GND. Убедитесь, что оно находится в диапазоне 3.0–5.5В. Проверьте целостность соединений и отсутствие обрывов. Проверьте напряжение на линии DQ.

Дополнительные ресурсы

Примеры кода

Примеры программирования DS18B20

Готовые к использованию примеры кода для различных платформ и фреймворков.

Пример для Arduino

Совместим с Arduino IDE и платами ESP32

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

#define ONE_WIRE_BUS 4

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

void setup() {
    Serial.begin(115200);
    Serial.println("DS18B20 Test");
    sensors.begin();
}

void loop() {
    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);
}

Необходимые библиотеки: OneWire и DallasTemperature. Установите через Arduino Library Manager.

Пример для ESP-IDF

Официальный фреймворк Espressif

C++
#include "ds18b20.h"
#include "onewire_bus.h"

#define ONE_WIRE_GPIO 4

void app_main() {
    onewire_bus_handle_t bus;
    onewire_bus_config_t config = { .bus_gpio_num = ONE_WIRE_GPIO };
    onewire_bus_rmt_config_t rmt_config = {};
    onewire_new_bus_rmt(&config, &rmt_config, &bus);

    ds18b20_device_handle_t ds18b20;
    ds18b20_config_t ds_cfg = {};
    
    // Поиск и инициализация датчика
    // ... (полный код в оригинальной статье)
}

Требуемые компоненты: espressif/onewire_bus и espressif/ds18b20 через idf.py add-dependency.

Пример для ESPHome

Конфигурация для Home Assistant

YAML
sensor:
  - platform: dallas_temp
    address: 0x1234567812345678
    name: "Температура DS18B20"
    update_interval: 60s

Примечание: Укажите уникальный адрес датчика (64-битный ROM). Можно использовать autodiscovery: для автоматического определения.

Пример для PlatformIO

Профессиональная среда разработки

C++
[env:esp32]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
    paulstoffregen/OneWire@^2.3.7
    milesburton/DallasTemperature@^3.11.0
// main.cpp - код аналогичен примеру для Arduino
#include <OneWire.h>
#include <DallasTemperature.h>
// ... тот же код

Пример для MicroPython

Python для микроконтроллеров

Python
import machine
import onewire
import ds18x20
import time

ds_pin = machine.Pin(4)
ow = onewire.OneWire(ds_pin)
ds = ds18x20.DS18X20(ow)

roms = ds.scan()
print("Found devices:", roms)

while True:
    ds.convert_temp()
    time.sleep_ms(750)
    for rom in roms:
        temp = ds.read_temp(rom)
        print("Temperature:", temp, "°C")
    time.sleep(2)

В заключение о DS18B20

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

Рекомендации

Для стабильной работы всегда используйте подтягивающий резистор 4.7кОм. При длинных проводах добавьте конденсатор 100нФ между VCC и GND.

Безопасность

Проверяйте напряжение питания (3.0-5.5В) перед подключением. Не превышайте максимальное напряжение для избежания повреждения датчика.

Похожие варианты