Здравствуйте, уважаемые читатели! В этой статье поговорим об очень распространенном датчике температуры DS18B20 и о том, как его подключить к Ардуино.
Речь пойдет о датчике DS18B20 в герметичном металлическом корпусе, который позволяет не только измерять температуру воздуха, но и полностью погружать его в жидкости и измерять их температуру.
Распиновка датчика DS18B20 выглядит следующим образом:
Пин GND подключается к земле, пин Vdd – к питанию 5 В или 3,3 В. Напряжение питания датчика может быть от 3 до 5,5 В. Пин DQ подключается к цифровому пину микроконтроллера.
Заявленная точность датчика около 0,5 градуса Цельсия. Диапазон измеряемой температуры – от -55°C до +125°C.
Датчик бывает и в других корпусах. Но характеристики и назначение пинов одинаковые.
Подключается датчик по следующей схеме:
Соберем схему на макетной плате. У меня датчик уже с припаянной гребенкой контактов для удобства подключения к макетной плате.
Подключаю его к макетной плате. Землю датчика, которая представлена черным проводом, подключаю к минусу макетной платы, красный провод соответственно соединяю с плюсом. Желтый провод, по которому мы будем передавать цифровой сигнал, подключаю ко 2 пину Arduino UNO.
К минусу и плюсу макетной платы подключаю, соответственно, пины GND и 5В Ардуино. И еще нужно связать цифровой пин датчика подтягивающим резистором с питанием 5 вольт. Рекомендуется резистор на 4,7 кОм. Но если такого резистора нет, то можно подобрать близкий по номиналу, например 5 кОм. На точность измерения это не влияет.
Перейдем к программной части. Для работы с Ардуино вначале нужно скачать библиотеку OneWire (https://github.com/PaulStoffregen/OneWire).
Скачиваем библиотеку на компьютер и добавляем в Arduino IDE.
Чтобы проверить работу датчика есть стандартный для данной библиотеки пример. Идем в Файл– Примеры – Библиотека OneWire и выбираем первый пример DS18x20_Temperature.
Пример сделан сразу для нескольких типов датчиков, так что если Вы не знаете какая именно у Вас модель датчика, то можно это выяснить с помощью данного примера.
Единственное, что изменим в примере, это пин, к которому у нас подключен датчик, с 10-го на 2-й. Т.к. 10-й пин мы позже задействуем для подключения светодиодного индикатора.
В функции loop(), после объявления переменных, мы ищем, есть ли у нас подключенные датчики и если находим, записываем их адрес в массив addr.
Далее выводим служебную информацию, контрольную сумму и определяем модель нашего датчика температуры.
Выбираем датчик и отправляем датчику команду на измерение температуры. Это происходит примерно в течение 1 мс, так что перед выполнением следующих команд устанавливаем соответствующую задержку.
И после паузы в 1 мс, отправляем команду на получение измеренной температуры.
В конце производим преобразование считанного значения в градусы Цельсия и Фаренгейта и выводим результат в монитор порта.
Загружаем скетч в Ардуино, открываем Монитор порта и видим как выводится много служебной информации и температура по Цельсию и Фаренгейту.
Кроме того показывается модель чипа датчика температуры. В данном случае, речь идет о DS18B20.
Значения, передаваемые датчиком, достаточно точные, т.к. я его сравниваю с вот таким цифровым термометром:
А его в свою очередь сравнивал с цифровым термометром, для измерения температуры тела.
Вообще это один из лучших способов узнать точность измерения температуры, сравнив с температурой тела, которая у здорового человека более менее постоянна и известно чему равна.
Если опустить оба датчика в стакан с ледяной водой, то значения они показывают очень близкие.
А вот при опускании в горячую воду, с температурой около 60 градусов Цельсия значения уже отличаются почти на 3 градуса.
Но скорее тут меньше доверия к покупному цифровому термометру. Т.к. на сайте продавца, хоть и указано, что температура измерений от -55°C до +110°C. Но рабочая температура от 0 до 50 °C. При погрешности измерений в 1 °C. Т.е., скорее всего, вне этого предела, погрешность покупного цифрового термометра сильно увеличивается.
И стоит обратить внимание, что скетч занимает в памяти Arduino UNO - 5504 байт.
Если же убрать из кода скетча, всё, что касается работы с Монитором порта (Serial.begin(), Serial.print()), и скомпилировать скетч для ATtiny13, то он занимает целых 1206 байт. И следовательно, в память ATtiny13 он в таком виде не помещается.
В следующей статье займемся оптимизацией кода скетча и выводом температуры на светодиодный индикатора. В том числе поговорим о преобразовании числа получаемой температуры в цифры для вывода в секции светодиодного индикатора.
Видео, по материалам статьи:
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!