Работа с датчиком температуры 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, нужно выполнить следующие действия:

  1. Подключить датчик к Arduino по схеме:
  • Данные (D) к пину Arduino
  • Питание (VCC) к 5V
  • Земля (GND) к GND
  • Добавить подтягивающий резистор 4.7 кОм между линией данных и VCC
  1. Использовать специальную библиотеку OneWire и DallasTemperature
  2. Пример кода для считывания адреса:
#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 широко используется в:

  • Системах климат-контроля
  • Умном доме
  • Метеостанциях
  • Промышленном мониторинге
  • Лабораторных измерениях

Категория

Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *