Каталог товаров
Клиенту
Тема сайта:
+38 (066) 305-77-25
Наш адрес
Харьков, времено - только доставка Новой Почтой, УкрПочтой, МистЕкспрес, ROZETKA Delivery
Телефоны:
Время работы
  • Пн-Пт: с 9 до 18
  • Сб.: с 10 до 17
  • Вс: с 11 до 16
E-mail
Мы в соцсетях
Перейти в контакты
0 0
Каталог
Главная
Закладки
0
Сравнить
0
Контакты

Подключение датчика температуры DS18B20 к Arduino

Чи була корисною ця стаття?
Подключение датчика температуры DS18B20 к Arduino

Подключение DS18B20 к Arduino: подробное руководство

"В мире электроники датчик температуры DS18B20 — это как швейцарский нож в кармане туриста: надежный, многофункциональный и незаменимый во многих ситуациях."
Датчик температуры DS18B20

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

Введение: почему DS18B20 стал "народным" датчиком

Всем привет, уважаемые любители электроники и Arduino! Сегодня мы подробно разберем один из самых популярных датчиков температуры на планете — DS18B20. Если вы только начали свой путь в мире микроконтроллеров или уже имеете за плечами десяток проектов, этот "малыш" рано или поздно окажется в вашем арсенале.

Почему DS18B20 заслужил звание "народного" датчика температуры? Потому что это, пожалуй, единственный датчик, который можно найти в проектах как новичка, только что открывшего коробку с первой Arduino, так и в промышленных системах контроля температуры. Этот датчик имеет историю, насчитывающую не один десяток лет, и до сих пор остается актуальным — согласитесь, такую "долговечность" в мире электроники заслуживают только действительно достойные компоненты!

Что такое DS18B20 и почему он круче обычного термометра?

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

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

  • Диапазон измерения: от -55°C до +125°C
  • Точность: ±0.5°C в диапазоне от -10°C до +85°C
  • Разрешение: Программируемое от 9 до 12 бит (от 0.5°C до 0.0625°C)
  • Интерфейс: Однопроводной (1-Wire) — нужен лишь один пин микроконтроллера!
  • Напряжение питания: 3.0V - 5.5V
  • Уникальная особенность: Каждый датчик имеет собственный 64-битный серийный номер, что позволяет подключать до 127 датчиков к одному пину!
  • Варианты корпуса:
    • TO-92 (похож на маленький транзистор) — для измерения температуры воздуха
    • Водонепроницаемый с кабелем — для измерения температуры жидкостей

Шутка для разрядки: DS18B20 настолько точен, что может определить, когда ваша жена/муж изменил настройки термостата всего на один градус, пока вас не было дома! 😄

Необходимые компоненты для подключения

Прежде чем начать, давайте соберем все необходимое для нашего проекта. Это как рецепт — сначала подготовим ингредиенты:

  • Arduino (Uno, Nano, Mega — подойдет любая)
  • Датчик DS18B20 (в корпусе TO-92 для начала самый удобный)
  • Резистор 4.7 кОм (это наш "подтягивающий" резистор — без него ничего не заработает!)
  • Макетная плата для удобства соединений
  • Соединительные провода
  • USB-кабель для подключения Arduino к компьютеру

ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ: Избегайте распространенной ошибки!

🚨 ВНИМАНИЕ! 🚨

Прежде чем мы приступим к схеме подключения, я должен поделиться с вами КРИТИЧЕСКИ важной информацией, которая может спасти ваш проект от неточных измерений.

Существует интересная особенность в работе DS18B20, о которой мало кто знает: никогда не подключайте датчик непосредственно к пинам Arduino без соединительных проводов длиной не менее 10 см!

Если вы вставите датчик непосредственно в пины платы или используете слишком короткие провода (менее 10 см), датчик начнет показывать температуру значительно выше реальной. Это происходит из-за саморазогрева датчика или передачи тепла от самой платы Arduino, которая во время работы может нагреваться.

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

Итак, правило простое: провода для подключения DS18B20 должны быть длиной не менее 10 см. Это не прихоть, а экспериментально доказанный факт!

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

Теперь, когда мы знаем о важности длины проводов, приступим к подключению. DS18B20 имеет три вывода, и важно их правильно идентифицировать:

Если смотреть на плоскую сторону датчика (там, где написано DS18B20), то:

  • Левая ножка — GND (земля)
  • Средняя ножка — DQ (сигнальная линия данных)
  • Правая ножка — VCC (питание)
Распиновка DS18B20

Распиновка DS18B20

graph TD A[DS18B20] --> B[Левая ножка: GND] A --> C[Средняя ножка: DQ] A --> D[Правая ножка: VCC] B --> E[GND на Arduino] C --> F[Цифровой пин D2 на Arduino] D --> G[5V на Arduino] H[Резистор 4.7 кОм] --> C H --> D

Пошаговый процесс подключения:

  1. Шаг 1: Установите Arduino и датчик DS18B20 на макетную плату.
  2. Шаг 2: Подключите GND (левую ножку) датчика к пину GND на Arduino.
  3. Шаг 3: Подключите VCC (правую ножку) датчика к пину 5V на Arduino.
  4. Шаг 4: Подключите DQ (среднюю ножку) датчика к цифровому пину D2 на Arduino.
  5. Шаг 5: Подключите резистор 4.7 кОм между линией данных (DQ) и линией питания (VCC). Этот резистор называется "подтягивающим" (pull-up) и необходим для стабильной работы протокола 1-Wire.

Совет с юмором: Забыли, какая ножка где? Не паникуйте! Если вы случайно подключите его неправильно, вы просто откроете новый закон физики, в котором температурные датчики могут производить тепло вместо его измерения... но лучше все же подключите правильно! 😉

graph LR DS18B20-->Подключение Подключение-->Обычный["Обычный режим
(3 провода)"] Подключение-->Паразитный["Паразитное питание
(2 провода)"]

Режимы питания DS18B20

DS18B20 может работать в двух режимах питания:

  1. Обычный режим (три провода: VCC, GND, DQ) — именно его мы используем в нашей схеме.
  2. Режим "паразитного питания" (два провода: GND, DQ) — датчик получает энергию из линии данных! Это удобно, когда у вас ограниченное количество проводов. Однако имейте в виду, что при таком подключении проблема с длиной проводов все равно остается актуальной.

Сравнение режимов питания DS18B20

Обычный режим (3 провода)

Подключение:
  • GND (левая ножка) → GND на Arduino
  • DQ (средняя ножка) → D2 на Arduino
  • VCC (правая ножка) → 5V на Arduino
  • Резистор 4.7 кОм между DQ и VCC
Преимущества:
  • Более стабильная работа
  • Высокая точность измерения
  • Меньше саморазогрева датчика
  • Быстрее преобразование данных
  • Гарантированная работа в диапазоне -55°C до +125°C
Недостатки:
  • Требуется три провода
  • Сложнее прокладка кабелей на большие расстояния

Режим паразитного питания (2 провода)

Подключение:
  • GND (левая ножка) → GND на Arduino
  • DQ (средняя ножка) → D2 на Arduino
  • VCC (правая ножка) → не подключается
  • Резистор 4.7 кОм между DQ и 5V на Arduino
Преимущества:
  • Требуется только два провода
  • Экономия пинов и кабелей
  • Проще прокладка на большие расстояния
  • Удобно для сложных проектов с ограниченным местом
Недостатки:
  • Чуть ниже надежность
  • Ограничения в низкотемпературном режиме
  • Медленнее преобразование данных
  • Больше саморазогрева датчика

⚠️ Важное замечание:

В обоих режимах провода должны быть длиной не менее 10 см, чтобы избежать нагрева датчика от платы Arduino. Это критически важно для точности измерений!

Принцип работы паразитного питания:

В режиме паразитного питания датчик DS18B20 получает энергию непосредственно из линии данных (DQ). Эта энергия накапливается во внутреннем конденсаторе датчика во время паузы в передаче данных.

Внутренний конденсатор заряжается через подтягивающий резистор и обеспечивает питание датчика в моменты, когда на линии данных низкий уровень сигнала. Именно поэтому важно правильно подключить резистор 4.7 кОм между DQ и питанием 5V.

Сравнение обычного режима и режима паразитного питания

Программное обеспечение: как заставить датчик заговорить

Для работы с DS18B20 нам понадобятся две библиотеки:

  • OneWire.h — библиотека для работы с протоколом 1-Wire
  • DallasTemperature.h — специализированная библиотека для работы с датчиками DS18B20 (работает поверх OneWire)

Установка библиотек:

  1. Откройте Arduino IDE
  2. Перейдите в Sketch -> Include Library -> Manage Libraries...
  3. В поиске найдите и установите библиотеки "OneWire" и "DallasTemperature"

Базовый скетч для одного датчика:

// Подключаем необходимые библиотеки
  #include <OneWire.h>
  #include <DallasTemperature.h>

  // Определяем пин, к которому подключен датчик
  #define ONE_WIRE_BUS 2

  // Настраиваем экземпляр oneWire для коммуникации с устройствами 1-Wire
  OneWire oneWire(ONE_WIRE_BUS);

  // Передаем ссылку на oneWire библиотеке DallasTemperature
  DallasTemperature sensors(&oneWire);

  void setup(void)
  {
    // Начинаем последовательную коммуникацию
    Serial.begin(9600);
    Serial.println("Добро пожаловать в мастерскую измерения температуры!");
    
    // Начинаем работу с датчиком
    sensors.begin();
  }

  void loop(void)
  { 
    // Отправляем команду на получение температуры
    Serial.println("Запрашиваем данные от датчика...");
    sensors.requestTemperatures(); 
    
    // Получаем температуру от первого найденного датчика
    float tempC = sensors.getTempCByIndex(0);
    
    // Проверяем, успешно ли измерение
    if(tempC != DEVICE_DISCONNECTED_C) 
    {
      Serial.print("Температура: ");
      Serial.print(tempC);
      Serial.println(" градусов Цельсия");
    } 
    else
    {
      Serial.println("Ошибка получения температуры от датчика!");
    }
    
    // Ждем 1 секунду перед следующим измерением
    delay(1000);
  }

Расширенный скетч для нескольких датчиков:

Настоящая магия DS18B20 раскрывается, когда вы подключаете несколько датчиков к одной линии. Вот скетч, который позволяет работать с несколькими датчиками одновременно:

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

  // Определяем пин, к которому подключены датчики
  #define ONE_WIRE_BUS 2

  // Настраиваем экземпляр oneWire для коммуникации с устройствами 1-Wire
  OneWire oneWire(ONE_WIRE_BUS);

  // Передаем ссылку на oneWire библиотеке DallasTemperature
  DallasTemperature sensors(&oneWire);

  // Переменные для хранения адресов устройств
  DeviceAddress thermometer1, thermometer2;

  void setup(void)
  {
    // Начинаем последовательную коммуникацию
    Serial.begin(9600);
    Serial.println("Демонстрация работы с несколькими датчиками DS18B20");
    
    // Начинаем работу с датчиками
    sensors.begin();
    
    // Определяем количество датчиков на шине
    Serial.print("Найдено датчиков: ");
    Serial.println(sensors.getDeviceCount());
    
    // Проверяем наличие датчиков
    if (!sensors.getAddress(thermometer1, 0)) 
      Serial.println("Не найден первый датчик!");
    
    if (!sensors.getAddress(thermometer2, 1)) 
      Serial.println("Не найден второй датчик!");
    
    // Устанавливаем разрешение 9 бит (может быть 9, 10, 11, 12)
    sensors.setResolution(thermometer1, 12);
    sensors.setResolution(thermometer2, 12);
  }

  void loop(void)
  { 
    // Отправляем команду на получение температуры
    sensors.requestTemperatures();
    
    // Выводим данные с первого датчика
    Serial.print("Датчик 1: ");
    printTemperature(thermometer1);
    
    // Выводим данные со второго датчика
    Serial.print("Датчик 2: ");
    printTemperature(thermometer2);
    
    Serial.println("----------------------------------------");
    
    // Ждем 1 секунду перед следующим измерением
    delay(1000);
  }

  // Функция для вывода температуры с определенного датчика
  void printTemperature(DeviceAddress deviceAddress)
  {
    float tempC = sensors.getTempC(deviceAddress);
    Serial.print(tempC);
    Serial.println(" °C");
  }

Особенности протокола 1-Wire и почему это круто

Протокол 1-Wire, разработанный той же компанией Dallas Semiconductor, — это уникальная технология, которая позволяет коммуницировать с множеством устройств через один сигнальный провод. Это отличная новость для проектов с ограниченным количеством пинов!

Преимущества 1-Wire:

  1. Экономия пинов — подключите хоть 127 датчиков к одному пину Arduino!
  2. Уникальный идентификатор — каждый датчик имеет свою "прописку" в виде 64-битного кода, поэтому Arduino точно знает, с каким именно датчиком общается в данный момент.
  3. Дальность действия — благодаря цифровой передаче данных, устройства 1-Wire могут работать на значительно больших расстояниях, чем аналоговые датчики.
graph TD A[Протокол 1-Wire] --> B[Экономия пинов] A --> C[Уникальная адресация] A --> D[Высокая дальность] C --> E[64-битный серийный номер] B --> F[До 127 датчиков на 1 пин]

Практическое использование DS18B20

Этот датчик — универсальный солдат электроники и может быть использован во множестве различных проектов:

  • Погодная станция — измерение температуры снаружи и внутри помещения
  • Аквариумный термометр — контроль температуры воды для рыбок
  • Термостат для системы отопления — автоматическое поддержание комфортной температуры
  • Контроль температуры в холодильнике/морозильной камере
  • Пивоварение — контроль температуры на разных этапах варки пива
  • Умные теплицы — для обеспечения оптимальных условий роста растений
  • Мониторинг серверных помещений — для предотвращения перегрева оборудования

Шуточный проект: Датчик DS18B20, подключенный к Arduino с GSM-модулем, который отправляет вам SMS, когда ваша пицца в духовке достигла идеальной температуры. Кто сказал, что технологии не могут служить настоящим потребностям человечества? 😄

Практическое использование DS18B20

Примеры практического использования DS18B20

Дополнительные функции и возможности DS18B20

Программируемое разрешение

DS18B20 позволяет программно устанавливать разрешение измерения:

  • 9 бит — шаг 0.5°C, время преобразования ~94 мс
  • 10 бит — шаг 0.25°C, время преобразования ~188 мс
  • 11 бит — шаг 0.125°C, время преобразования ~375 мс
  • 12 бит — шаг 0.0625°C, время преобразования ~750 мс

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

graph LR A[Разрешение] --> B[9 бит: 0.5°C, 94мс] A --> C[10 бит: 0.25°C, 188мс] A --> D[11 бит: 0.125°C, 375мс] A --> E[12 бит: 0.0625°C, 750мс]

Функция термостата

DS18B20 имеет встроенную функцию сигнализации (alarm). Можно запрограммировать верхний (TH) и нижний (TL) пороги температуры, а затем с помощью специальной команды быстро узнать, вышла ли температура за эти пределы, не считывая само значение температуры. Это особенно полезно для систем автоматического контроля, где нужно мгновенно реагировать на определенные пороговые значения.

// Пример установки порогов сигнализации
  sensors.setHighAlarmTemp(thermometer1, 30); // Верхний порог 30°C
  sensors.setLowAlarmTemp(thermometer1, 20);  // Нижний порог 20°C

  // Проверка, сработала ли сигнализация
  if (sensors.hasAlarm(thermometer1)) {
    Serial.println("Тревога! Температура за пределами установленного диапазона!");
  }

Подключение DS18B20 к другим микроконтроллерам

Хотя мы рассматривали подключение к Arduino, DS18B20 успешно работает с множеством других платформ:

ESP8266/ESP32:

Подключение к ESP8266 аналогично, но помните о уровнях напряжения — ESP работает на 3.3V, а не на 5V, как некоторые Arduino. Однако DS18B20 отлично работает при напряжении 3.3V.

// Для ESP8266
  #define ONE_WIRE_BUS D2  // GPIO4 на NodeMCU
Подключение DS18B20 к ESP8266

Схема подключения DS18B20 к плате ESP8266

ATmega и другие AVR микроконтроллеры:

Подключение к ATmega8 или другим AVR также вполне возможно. При использовании среды разработки Flowcode следует помнить, что компонент "One Wire" ожидает подключения к нулевому биту (пину 0) одного из портов микроконтроллера (например, PB0, PC0, PD0 для ATmega8).

Решение типичных проблем

Типичные проблемы и их решения

Показывает -127°C

  • Проверить подключение проводов
  • Проверить подтягивающий резистор
  • Проверить исправность датчика

Некорректная температура

  • Проверить качество соединений
  • Длина проводов > 10 см
  • Убрать от источников тепла

Arduino не распознает датчик

  • Проверить установленные библиотеки
  • Проверить адрес устройства
  • Правильное подключение резистора

Медленные измерения

  • Снизить разрешение
  • Проверить количество датчиков на шине
  • Оптимизировать код для скорости
Большинство проблем с DS18B20 можно решить правильным подключением и соответствующими настройками в коде

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

Это классический признак проблемы с подключением. Проверьте:

  • Правильно ли подключены провода (особенно линия данных)
  • Исправен ли подтягивающий резистор
  • Не поврежден ли сам датчик

Температура показывается некорректно или изменяется скачками

  • Проверьте качество соединений
  • Убедитесь, что длина соединительных проводов не менее 10 см
  • Убедитесь, что датчик не находится рядом с источниками тепла (включая саму плату Arduino)

Arduino не распознает датчик

  • Проверьте, правильно ли установлены библиотеки
  • Проверьте адрес устройства — иногда необходимо явно указать адрес датчика в коде
  • Убедитесь, что подтягивающий резистор подключен именно между линией данных и VCC, а не GND

Измерения очень медленные

  • Попробуйте снизить разрешение (с 12 бит до 9 бит)
  • Проверьте, не слишком ли большое количество датчиков на одной шине (более 10-15 могут замедлять работу)
Диагностика проблем с DS18B20

Диагностика и решение проблем с DS18B20

Заключение: Почему DS18B20 остается фаворитом

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

Однако, как мы выяснили, даже у такого совершенного устройства есть свои особенности, о которых стоит знать. В частности, критическая длина соединительных проводов в 10 см — это тот маленький, но важный нюанс, который может серьезно повлиять на точность измерений.

Надеюсь, что эта информация поможет вам в ваших проектах с Arduino и DS18B20. Как сказал бы какой-нибудь философ от электроники: "Хорошо измеренная температура — половина успеха любого проекта!"

А теперь берите свою паяльную станцию, Arduino, датчик DS18B20 и начинайте творить чудеса электроники! И не забудьте о проводах длиной не менее 10 см — ведь мелочи решают все! 😉

P.S. Если у вас возникнут интересные идеи относительно причин феномена с длиной проводов и DS18B20, не стесняйтесь делиться ими в комментариях — мы все здесь, чтобы учиться и развиваться вместе!

© 2025 Мій Проект. Автор: Jazzzman. Использование материалов разрешено только с ссылкой на источник.

Рекомендуемые товары
Похожие статьи
Arduino – что это, и зачем!?
Arduino – что это, и зачем!?
Блог, Интересное и Полезное
28 мая 2024
Калькулятор резисторов и цветовая маркировка резисторов
Калькулятор резисторов и цветовая маркировка резисторов
Блог, Онлайн Калькуляторы и Расчёты
19 июня 2024
Подключение биполярного светодиода к ESP32 WROOM
Подключение биполярного светодиода к ESP32 WROOM
Блог, Инструкции Подключения и Обзоры
04 октября 2024