Сейчас ваша корзина пуста!

Работа с датчиком температуры DS18B20 в Arduino
Общая информация
DS18B20 — это цифровой датчик температуры, который может измерять температуру в диапазоне от -55°C до +125°C с точностью ±0.5°C. Датчик использует однопроводный интерфейс (1-Wire), что делает его удобным для подключения к Arduino.
Подключение датчика
Схема подключения:
- VCC → 5V
- GND → GND
- DATA → любой цифровой пин (рекомендуется пин 2)
- Резистор 4.7кОм между VCC и DATA
Необходимые библиотеки
Для работы с датчиком требуется библиотека OneWire и DallasTemperature.
Пример
В этом коде не просто подключаем датчик к Arduino, но и выводим температуру на LCD2004.
Схема подключения:

Скетч:
// Подключаем необходимые библиотеки для работы с датчиком температуры и LCD дисплеем
#include <OneWire.h> // Библиотека для работы с шиной OneWire
#include <DallasTemperature.h> // Библиотека для работы с датчиками температуры DS18B20
#include <LiquidCrystal_I2C.h> // Библиотека для работы с LCD дисплеем по I2C
// Создаем объект для работы с LCD дисплеем
LiquidCrystal_I2C lcd(0x27, 20, 4) // Инициализируем дисплей (адрес I2C = 0x27, 20 столбцов, 4 строки)
// Определяем пин для подключения датчика температуры
#define ONE_WIRE_BUS 5 // Пин 5 используется для подключения шины OneWire
// Создаем объекты для работы с датчиком
OneWire oneWire(ONE_WIRE_BUS) // Объект для работы с шиной OneWire
DallasTemperature sensor(&oneWire) // Объект для работы с датчиком температуры
void setup() {
Serial.begin(9600) // Инициализируем последовательный порт для отладки
sensor.begin() // Инициализируем датчик температуры
sensor.setResolution(12) // Устанавливаем разрешение датчика в 12 бит
lcd.init() // Инициализируем LCD дисплей
lcd.backlight() // Включаем подсветку дисплея
lcd.setCursor(0, 0) // Устанавливаем курсор в начало первой строки
lcd.print("LCD2004 / DS18B20") // Выводим информацию о системе (не обязательно)
lcd.setCursor(0, 1) // Переходим ко второй строке
lcd.print("TSH Electronic shop") // Выводим любой статичный текст (не обязательно)
lcd.setCursor(0, 2) // Переходим к третьей строке
lcd.print("SKU 2477558783") // Выводим любой статичный текст (не обязательно)
}
void loop() {
float temperature // Переменная для хранения температуры
sensor.requestTemperatures() // Отправляем запрос на измерение температуры
temperature = sensor.getTempCByIndex(0) // Получаем температуру в градусах Цельсия
lcd.setCursor(0, 3) // Переходим к четвертой строке
lcd.print("Temp: ") // Выводим заголовок
lcd.setCursor(6, 3) // Перемещаем курсор для вывода значения
lcd.print(temperature) // Выводим текущее значение температуры
delay(1000) // Ждем 1 секунду перед следующим измерением
// Очистка строки перед следующим выводом (можно пропустить)
lcd.setCursor(0, 3)
lcd.print(" ") // Очищаем строку пробелами
}
Особенности работы
- Датчик может работать в параллельном режиме с несколькими устройствами на одной шине
- Поддерживает программируемую точность измерения (9, 10, 11 или 12 бит)
- Имеет уникальный серийный номер для каждого устройства
Адресная система
Адресная система DS18B20 основана на уникальном 64-битном коде каждого датчика, что позволяет подключать несколько устройств к одной шине данных.
Принцип работы:
- Каждый датчик имеет индивидуальный серийный номер
- Arduino может адресно обращаться к конкретному датчику
- Возможно подключение неограниченного количества датчиков (на практике — до 127 устройств)
Особенности адресации:
- Для работы с несколькими датчиками необходимо сначала считать их адреса
- Адресация происходит автоматически при инициализации
- Система позволяет точно определять данные от конкретного датчика
Практическое применение:
При подключении нескольких датчиков нужно:
- Подключить все датчики к одной линии данных
- Считать адрес каждого датчика по отдельности
- Сохранить адреса в программе
- Использовать их для обращения к конкретному датчику
Поиск датчиков
Чтобы узнать адрес датчика DS18B20, нужно выполнить следующие действия:
- Подключить датчик к Arduino по схеме:
- Данные (D) к пину Arduino
- Питание (VCC) к 5V
- Земля (GND) к GND
- Добавить подтягивающий резистор 4.7 кОм между линией данных и VCC
- Использовать специальную библиотеку OneWire и DallasTemperature
- Пример кода для считывания адреса:
#include <OneWire.h>
#include <DallasTemperature.h>
// Пин подключения датчика
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
// Считываем все адреса датчиков
byte presence;
byte data[12];
byte addr[8];
Serial.println("Поиск датчиков...");
while(oneWire.search(addr)) {
Serial.print("Найден датчик с адресом: ");
for(byte i = 0; i < 8; i++) {
Serial.print(addr[i], HEX);
if (i < 7) Serial.print(" ");
}
Serial.println();
}
oneWire.reset_search();
}
void loop() {
// Ничего не делаем
}
Практические рекомендации
- Используйте качественный резистор подтяжки
- При подключении нескольких датчиков убедитесь в правильности распиновки
- Для стабильной работы рекомендуется использовать экранированный кабель
- При длинных линиях связи (более 1 метра) используйте кабель с меньшим сопротивлением
Возможные проблемы
- Нестабильные показания — проверьте качество подключения и наличие резистора
- Ошибки чтения — проверьте правильность адреса датчика
- Задержки в измерениях — учитывайте время преобразования температуры
Применение
Датчик DS18B20 широко используется в:
- Системах климат-контроля
- Умном доме
- Метеостанциях
- Промышленном мониторинге
- Лабораторных измерениях

Добавить комментарий