Контактный цифровой термометр на базе датчика DS18B20 - Своими руками
Своими руками

Контактный цифровой термометр на базе датчика DS18B20

>

Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20В последнее время, в качестве самоделок мы видим много примеров изготовления бесконтактных термометров. Но такие термометры менее точны и не везде применимы.

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

Этот цифровой термометр с очень низким энергопотреблением, работает на одной батарейке CR2032 почти 140 дней.
В термометре реализована забавная функция, для сброса показаний нужно его встряхнуть, как ртутный.
Контактный цифровой термометр на базе датчика DS18B20Инструменты и материалы:-Микроконтроллер ATTINY 85;-Программатор для ATTINY;-Пьезоразъемные диски;-Ардуино Нано;-Нить PETG;-3D-принтер;-Модуль датчика температуры;-OLED-дисплей;-Батарейка 2032;-Держатель батареи CR2032;-Комплект резисторов;
Шаг первый: датчик температуры DS18B20
Начнем с основной части проекта – датчика температуры.
Существуют различные датчики в зависимости от точности, типа и способа передачи данных на микроконтроллер. DS18B20 мастер выбрал потому что, он очень хорошо спроектирован для измерения температуры с объекта, и для считывания данных с этого датчика требуется только один провод. Сам зонд у датчика заключен в металлический корпус. Плюсом является и то, что он поддерживается множеством библиотек Arduino и потребляет только 5 мкА в спящем режиме.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг второй: подключение DS18B20
Для подключения датчика можно использовать любой микроконтроллер, потому что датчик использует протокол, который полностью зависит от программного обеспечения, а не от оборудования. Все, что нужно, – это один вывод GPIO микроконтроллера.

Ради примера мастер использует Nodemcu. Подключение схемы очень просто. Подключите источник питания, т.е. красный провод к + 3,3 В, черный провод к земле и желтый провод данных к D2 на NodeMCU. Между 3,3 В и выводом данных нужно установить резистор 4,7 кОм. В противном случае микроконтроллер не будет считывать данные с датчика.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг третий: тестирование DS18B20
Теперь можно запрограммировать Nodemcu. Открываем Arduino IDE и загружаем библиотеку датчиков температуры Dallas и библиотеку one wire. Дальше переходим к примеру, и открываем простой пример датчика температуры. В коде меняем контакт подключения на свой. В данном случае это контакт D2, который является GPIO 4.
Компилируем и загружаем код.

После загрузки кода открываем монитор последовательного порта. Для измерения температуры нужно, какое то время. Мастер установил в коде 15 секунд. Для более точных показаний, нужно это время увеличить.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг четвертый: OLED-дисплей
Для отображения температуры нужен OLED-дисплей.
Мастер использовал 0,91-дюймовый OLED-дисплей с 4 контактами. Подключение следующее
SCL дисплея к D1
SDA дисплея к D2
для питания дисплея подключат VCC и GND модуля к 3,3 В и GND NodeMCU.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг пятый: тестирование OLED
Чтобы проверить, работает ли OLED-дисплей, переходим в среду разработки Arduino и загружаем библиотеку Adafruit SSD1306 из диспетчера библиотек [Sketch -> include library -> Manage Library -> Adafruit SSD1306]].

Открываем скетч Hardware_test.ino, Компилируем и загружаем код на Nodemcu. Все готово, теперь можно считывать температуру и отображать ее на OLED-дисплее.
Hardware_test.ino
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг шестой: пьезодатчик
По умолчанию термометр считывает значение температуры в непрерывном режиме. Мастер хотел, что можно было значение сбрасывать. Можно реализовать это с помощью простой кнопки, но по замыслу он должен встряхиваться как ртутный термометр.

Для этих целей он решил установить пьезоэлемент. Это довольно интересный датчик. Он содержит небольшой кристалл между двумя металлическими пластинами. При приложении давления к этому кристаллу датчик выдает небольшой электрический ток. Итак, можно построить очень простую схему для измерения этого тока и выполнения задачу на основе показаний.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Схема очень проста. Нужно сделать делитель напряжения, используя резистор 5,6 кОм с пьезодатчиком. Затем подключить к контакту A0 NodeMCU. Для кода нужно выполните аналоговое чтение и отобразите его на последовательном мониторе.

Можно видеть изменения значений по мере того, как к датчику прикладывается разное давление. Нужно высчитать порог значения и добавить в код. Когда значение будет соответствовать заданному, значение сбрасывается, и считывание температуры начинается снова.

Это работает в тестовом режиме (смотрим код на предыдущих шагах), но это не та логика, которая будет использоваться с датчиками в окончательной сборке.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг седьмой: поиск альтернативы микроконтроллеру
Задача, чтобы вся схема работала только с одной батарейкой CR2032. Но одна батарейка (3,3 В / 210 мАч) даже не будет достаточно мощной для запуска Arduino UNO / Nano или NodeMCU (ESP8266), а еще нужно питать всю цепь с датчиком температуры, пьезодиск и дисплей.

Значит, нужен альтернативный микроконтроллер, который не требует много энергии, а также может управлять дисплеем, датчиком температуры и пьезоэлементом с помощью этой единственной ячейки. И такой микроконтроллер есть. Это ATTINY 85.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Это 8-битный микроконтроллер с 8 контактами и имеет все функции, которые точно нужны в данной сборке: I2C для управления OLED-дисплеем, входной контакт для считывания показаний температуры, а также аналоговый вход для считывания показаний пьезоэлементов. Что наиболее важно, все это можно сделать при питании от одной ячейки 3,3 В.

Но и у него есть свои недостатки. Его сложнее программировать, память ограничена 8 КБ, а оперативная память составляет всего 512 байт. Также он имеет всего 5 полезных контактов. В любом случае, другой альтернативы пока нет.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг восьмой: программирование ATTINY 85
Как запрограммировать этот attiny 85? Для этого понадобится arduino, который поддерживает ISP, можно использовать как arduino nano, так и uno. Мастер будет использовать nano в качестве примера, чтобы показать, как программировать этот микроконтроллер.

Первый шаг – подготовить ардуино. Просто подключите плату к компьютеру и откройте IDE arduino. Теперь перейдите к примерам и откройте пример Arduino ISP. Просто скомпилируйте и загрузите этот код на arduino nano. Теперь нужно подключить arduino nano и attiny 85. Подключаем питание VCC к 3,3 В и земле. Затем соединяем контакт D13 с контактом 7, контакт D12 с контактом 6, контакт D11 с контактом 5 и, наконец, контакт D10 с контактом 1. Устанавливаем электролитический конденсатор между arduino nano reset и землей.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг девятый: тестирование ATTINY 85
Как только соединение будет установлено, открываем IDE Arduino, переходим к настройкам и вставляем эту ссылку. [https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json] Это позволит IDE Arduino загрузить ядро attiny.

Дальше переходим к менеджеру плат. Дальше нужно найти attiny и установить. Плата – attiny 85, частота – 8 МГц и, наконец, устанавливаем порт, к которому подключен Arduino Nano. Как только эта настройка будет завершена, переходим в инструменты и нажимаем на загрузчик записи.

На этом настройка программирования для ATTINY 85 завершена. Можно проверить его, запустив простой скетч моргания светодиода. Подключаем светодиод к контакту 3 ATTINY 85, затем записываем эскиз мигания. Чтобы управлять этим контактом нужно изменить вход, в данном случае мастер подключил светодиод к GPIO D4, который является контактом 3.
Затем убедитесь, что настройки ATTINTY 85 выбраны в инструментах, и загрузите код.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг десятый: проверка потребляемой мощность цепи
Прежде чем приступить к использованию других компонентов, нужно проверить достаточно ли тока, подаваемого этой единственной ячейкой 3 В, для управления всеми компонентами.

Ячейка CR2032 имеет емкость 210 мАч и максимальный ток потребления 30 мА.
Attiny 85 для питания нужно менее 4 мА, датчик температуры DS18B20 потребляет 1,5 мА в активном режиме и наконец, дисплею нужно 20 мА при отображении всех пикселей на экране. В совокупности это все равно меньше потребляемого пикового тока 30 мА.
Контактный цифровой термометр на базе датчика DS18B20Шаг одиннадцатый: макет
Для проверки работы устройства мастер собирает схему на макетной плате. Полная принципиальная схема и код доступны на Github.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20При кодировании он добавил несколько несколько экранов-заставок.
OzOled.clearDisplay();
OzOled.printString(" ATTINY 85 ",0,0);
OzOled.printString(" Thermometer!",0,2);
delay(5000);
OzOled.clearDisplay();
OzOled.printString(" Measuring in",0,0);
OzOled.printString(" 3 second ",0,2);
delay(3000);
OzOled.clearDisplay();
OzOled.printString("Measuring…",0,2);
lastMeausreTime = millis();
После включения устройство заработало в нормальном режиме. После тестирования цепи мультимером выяснилось, что устройство потребляет в среднем 6,5 мА до и во время измерения температуры и достигает пика до 11 мА в течение нескольких секунд при отображении данных о температуре. В этом режиме схема потребляет 60 мкА.

При текущей настройке можно включать его почти 134 дня, 100 раз в день. От заставки до окончания измерения температуры устройству требуется 25 секунд. Если убрать ненужные задержки и уменьшить частоту до 1 МГц, можно увеличить срок еще 4-5 дней с одной батарейкой.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг двенадцатый: сборка схемы на плате
Дальше мастер вырезает перфорированную плату как на фото ниже. Собирает на плате схему. Вместо использования DIP-микросхемы он монтирует SMD-версию. Это уменьшит размер устройства при тех же параметрах.

Все остальные детали, такие же как и на макетной плате.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Чтобы загрузить код, нужно временно припаять перемычки к контактам [1,4,5,6,7,8] ATTINY 85 (SMD) и подключить эти контакты к Arduino Nano так же, как на шаге 10. Затем нужно изменить тактовую частоту на 1Mhz вArduino IDE и загрузите код.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20После снижения частоты до 1 МГц, в отличие от 8 МГц при тестировании с макетной схемой, энергопотребление снизилось вдвое. В среднем схема потребляет менее 3 мА во время работы и 58 мкА во время сна.

Правда снижение скорости до 1 МГц приводит к более медленному обновлению экрана, но это не является большой проблемой.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг тринадцатый: 3D-печать
Мастер спроектировал модель в fusion 360.
Загрузить файлы можно в репозитории Github. При печати мастер использует следующие настройки: нить PETG с высотой слоя 0,2 мм, температура сопла 245 °C, температура нагреваемого слоя 70 °C и скорость 40 мм / с.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Шаг четырнадцатый: сборка
Сборка очень проста и интуитивно понятна. Перед сборкой нужно нанести немного лака на места пайки. Это нужно, чтобы пъезодиск не замыкал схему.
Затем устанавливаем все в корпус, соединяем две половинки и фиксируем кольцом.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Все готово. По результатам у мастера есть несколько замечаний.
Нужно понимать, что это ни в коем случае не подходящая замена коммерческому термометру. Это просто забавный небольшой проект, из которого вы узнаете немного об электронике.

Есть несколько дополнений, которые можно сделать, чтобы улучшить проект.
Во-первых, дизайн корпуса неплохой, но он не очень прочный.
Во-вторых, более длительное время измерения. Я сократил время только ради видео, чтобы получить более точный результат. Попробуйте изменить настройки до 45 секунд + в коде.

И, наконец, можно сделать печатную плату на заказ, со всеми качественно скомпонованными компонентами.
Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Контактный цифровой термометр на базе датчика DS18B20Весь процесс сборки и тестирования устройства можно посмотреть на видео.

SitesReady

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.