Найти тему
Электроника и жизнь

Датчик температуры DS18B20. Распиновка, тестирование, подключение к Ардуино.

Здравствуйте, уважаемые читатели! В этой статье поговорим об очень распространенном датчике температуры DS18B20 и о том, как его подключить к Ардуино.

Речь пойдет о датчике DS18B20 в герметичном металлическом корпусе, который позволяет не только измерять температуру воздуха, но и полностью погружать его в жидкости и измерять их температуру.

Распиновка датчика DS18B20 выглядит следующим образом:

-2

Пин GND подключается к земле, пин Vdd – к питанию 5 В или 3,3 В. Напряжение питания датчика может быть от 3 до 5,5 В. Пин DQ подключается к цифровому пину микроконтроллера.

Заявленная точность датчика около 0,5 градуса Цельсия. Диапазон измеряемой температуры – от -55°C до +125°C.

Датчик бывает и в других корпусах. Но характеристики и назначение пинов одинаковые.

-3

Подключается датчик по следующей схеме:

-4

Соберем схему на макетной плате. У меня датчик уже с припаянной гребенкой контактов для удобства подключения к макетной плате.

-5

Подключаю его к макетной плате. Землю датчика, которая представлена черным проводом, подключаю к минусу макетной платы, красный провод соответственно соединяю с плюсом. Желтый провод, по которому мы будем передавать цифровой сигнал, подключаю ко 2 пину Arduino UNO.

К минусу и плюсу макетной платы подключаю, соответственно, пины GND и Ардуино. И еще нужно связать цифровой пин датчика подтягивающим резистором с питанием 5 вольт. Рекомендуется резистор на 4,7 кОм. Но если такого резистора нет, то можно подобрать близкий по номиналу, например 5 кОм. На точность измерения это не влияет.

-6

Перейдем к программной части. Для работы с Ардуино вначале нужно скачать библиотеку OneWire (https://github.com/PaulStoffregen/OneWire).

-7

Скачиваем библиотеку на компьютер и добавляем в Arduino IDE.

-8

Чтобы проверить работу датчика есть стандартный для данной библиотеки пример. Идем в ФайлПримеры – Библиотека OneWire и выбираем первый пример DS18x20_Temperature.

-9

Пример сделан сразу для нескольких типов датчиков, так что если Вы не знаете какая именно у Вас модель датчика, то можно это выяснить с помощью данного примера.

Единственное, что изменим в примере, это пин, к которому у нас подключен датчик, с 10-го на 2-й. Т.к. 10-й пин мы позже задействуем для подключения светодиодного индикатора.

-10

В функции loop(), после объявления переменных, мы ищем, есть ли у нас подключенные датчики и если находим, записываем их адрес в массив addr.

Далее выводим служебную информацию, контрольную сумму и определяем модель нашего датчика температуры.

Выбираем датчик и отправляем датчику команду на измерение температуры. Это происходит примерно в течение 1 мс, так что перед выполнением следующих команд устанавливаем соответствующую задержку.

И после паузы в 1 мс, отправляем команду на получение измеренной температуры.

В конце производим преобразование считанного значения в градусы Цельсия и Фаренгейта и выводим результат в монитор порта.

Загружаем скетч в Ардуино, открываем Монитор порта и видим как выводится много служебной информации и температура по Цельсию и Фаренгейту.

Кроме того показывается модель чипа датчика температуры. В данном случае, речь идет о DS18B20.

-11

Значения, передаваемые датчиком, достаточно точные, т.к. я его сравниваю с вот таким цифровым термометром:

-12

А его в свою очередь сравнивал с цифровым термометром, для измерения температуры тела.

-13

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

Если опустить оба датчика в стакан с ледяной водой, то значения они показывают очень близкие.

-14

А вот при опускании в горячую воду, с температурой около 60 градусов Цельсия значения уже отличаются почти на 3 градуса.

-15

Но скорее тут меньше доверия к покупному цифровому термометру. Т.к. на сайте продавца, хоть и указано, что температура измерений от -55°C до +110°C. Но рабочая температура от 0 до 50 °C. При погрешности измерений в 1 °C. Т.е., скорее всего, вне этого предела, погрешность покупного цифрового термометра сильно увеличивается.

-16

И стоит обратить внимание, что скетч занимает в памяти Arduino UNO - 5504 байт.

-17

Если же убрать из кода скетча, всё, что касается работы с Монитором порта (Serial.begin(), Serial.print()), и скомпилировать скетч для ATtiny13, то он занимает целых 1206 байт. И следовательно, в память ATtiny13 он в таком виде не помещается.

-18

В следующей статье займемся оптимизацией кода скетча и выводом температуры на светодиодный индикатора. В том числе поговорим о преобразовании числа получаемой температуры в цифры для вывода в секции светодиодного индикатора.

Видео, по материалам статьи:

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!