Подключение цифрового термодатчика DS18B20
Для подключения датчика температуры DS18B20 необходимо соединить три контакта: питание (VDD), землю (GND) и сигнальный вывод (DQ). Критически важным элементом схемы является подтягивающий резистор номиналом 4.7 кОм, который устанавливается между линиями питания и данных. Без этого резистора обмен данными по протоколу 1-Wire будет нестабильным или невозможным. Датчик поддерживает напряжение от 3.0 до 5.5 В, что делает его совместимым с большинством популярных микроконтроллеров.
Принцип работы и особенности интерфейса 1-Wire
DS18B20 — это цифровой датчик, передающий данные в виде последовательного сигнала по одному проводу (протокол 1-Wire). Это позволяет объединять несколько датчиков на одной шине, так как каждое устройство имеет уникальный 64-битный серийный номер, зашитый на заводе.
Ключевые характеристики:
- Диапазон измерений: от -55°C до +125°C.
- Точность: ±0.5°C в диапазоне от -10°C до +85°C.
- Разрешение: настраивается от 9 до 12 бит (влияет на скорость измерения).
- Питание: возможно паразитное питание (через сигнал), но рекомендуется внешнее питание для стабильности.
Паразитное питание: Датчик может работать только по двум проводам (сигнал и земля), беря энергию из сигнальной линии во время пауз. Однако такой режим менее надежен при длинных проводах или наличии нескольких датчиков. Для серьезных проектов используйте трехпроводную схему.
Распиновка контактов DS18B20
Стандартный датчик в корпусе TO-92 (похож на транзистор) имеет три вывода. Если смотреть на плоскую сторону корпуса с маркировкой вверх, нумерация идет слева направо:
| № пина | Название | Функция | Цвет провода (стандартный модуль) |
|---|---|---|---|
| 1 | GND | Земля (Общий минус) | Черный |
| 2 | DQ | Данные (Signal) | Желтый / Белый |
| 3 | VDD | Питание (+3.3В...+5В) | Красный |
Внимание к корпусам: У водонепроницаемых датчиков в металлическом цилиндре провода часто имеют другую цветовую маркировку (например, красный — питание, черный — земля, желтый — данные). Всегда проверяйте документацию производителя или прозванивайте мультиметром перед пайкой.
Необходимые компоненты
Для сборки рабочей схемы вам понадобятся:
- Датчик DS18B20 (голый чип или готовый модуль).
- Резистор номиналом 4.7 кОм (допустим диапазон 3.3–10 кОм).
- Микроконтроллер (Arduino, ESP8266, ESP32) или одноплатный компьютер (Raspberry Pi).
- Соединительные провода и макетная плата.
Если вы используете готовый модуль DS18B20 на плате, проверьте наличие встроенного резистора. Часто он уже распаян рядом с датчиком (маркировка "472"). В этом случае дополнительный резистор ставить не нужно.
Схемы подключения к популярным платформам
Основное правило для всех схем: резистор 4.7 кОм подключается между линией VDD и линией DQ.
Подключение к Arduino Uno / Nano
Arduino работает с логикой 5В. Датчик также можно питать от 5В.
- VDD датчика → пин 5V на Arduino.
- GND датчика → пин GND на Arduino.
- DQ датчика → любой цифровой пин (например, D2).
- Резистор 4.7 кОм → одним концом на 5V, другим на D2 (параллельно сигнальному проводу).
Подключение к ESP32 и ESP8266
Эти платы работают с логикой 3.3В. Хотя многие датчики DS18B20 толерантны к 5В, сигнальные линии лучше согласовывать с напряжением питания контроллера.
- VDD датчика → пин 3.3V (или VIN/5V, если модуль имеет стабилизатор).
- GND датчика → пин GND.
- DQ датчика → любой GPIO (например, GPIO 4).
- Резистор 4.7 кОм → между 3.3V и GPIO 4.
При использовании длинных проводов (более 1 метра) добавьте керамический конденсатор 100 мкФ между VDD и GND непосредственно у датчика. Это сгладит просадки напряжения при начале измерения.
Подключение к Raspberry Pi
Raspberry Pi требует включения программного модуля 1-Wire в системе.
- Аппаратная часть:
- VDD → пин 1 (3.3V).
- GND → пин 6 (GND).
- DQ → пин 7 (GPIO 4).
- Резистор 4.7 кОм → между пином 1 и пином 7.
- Программная настройка:
Откройте терминал и отредактируйте файл конфигурации:
sudo nano /boot/config.txt. Добавьте строку:dtoverlay=w1-gpio. Перезагрузите плату:sudo reboot.
После загрузки датчик появится в файловой системе по пути /sys/bus/w1/devices/, где имя папки будет соответствовать серийному номеру датчика.
Программная реализация
Пример кода для Arduino (IDE)
Используйте библиотеки 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();
}
void loop(void) {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
if(tempC != -127.00) {
Serial.print("Температура: ");
Serial.println(tempC);
} else {
Serial.println("Ошибка чтения датчика");
}
delay(1000);
}
Чтение данных на Raspberry Pi (Python)
Самый простой способ — чтение из системного файла.
import os
import glob
import time
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
with open(device_file, 'r') as f:
lines = f.readlines()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
return temp_c
print(f"Температура: {read_temp()} °C")
Частые ошибки при подключении
- Отсутствие подтягивающего резистора. Самая распространенная ошибка. Линия данных "висит в воздухе", контроллер не видит стартовый импульс. Решение: установить резистор 4.7 кОм между VDD и DQ.
- Неверная распиновка. Путаница между контактами 1, 2 и 3, особенно у датчиков в металлических капсулах. Решение: свериться с даташитом конкретного производителя.
- Конфликт напряжений. Попытка подключить датчик, питающийся от 5В, к сигнальному пину ESP32 (3.3В) без учета уровней логики может привести к нестабильной работе, хотя часто работает благодаря защитным диодам. Лучше питать всю цепь от 3.3В.
- Длинные провода без экранирования. При расстоянии более 5–10 метров сигнал искажается. Решение: использовать витую пару и уменьшить номинал подтягивающего резистора до 1–2 кОм.
FAQ
Можно ли подключить несколько датчиков на один пин? Да, это главное преимущество протокола 1-Wire. Все датчики подключаются параллельно (VDD к VDD, GND к GND, все DQ вместе). Один резистор 4.7 кОм ставится на всю шину. В коде вы обращаетесь к каждому датчику по его уникальному адресу.
Почему датчик показывает -127°C или 85°C? Значение 85.00°C — это значение по умолчанию сразу после включения питания, пока не прошло первое преобразование. Значение -127.00°C обычно означает ошибку связи (обрыв провода, отсутствие резистора или неверный адрес).
Какой максимальной длины может быть шина? Теоретически до нескольких сотен метров при использовании качественного экранированного кабеля (витая пара) и правильно подобранном резисторе. Для обычных проводов на макетной плате надежная работа гарантируется на расстояниях до 1–2 метров.