Найти в Дзене

Вывод температуры с датчика DS18B20 на 4-х разрядный светодиодный индикатор с помощью Ардуино

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

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

Для этого объединим код из прошлой статьи, с кодом из статьи, где я подключал 4-х символьный светодиодный индикатор к Arduino UNO.

Но вначале, соберем схему на макетной плате.

-2

Размещаем индикатор на макетной плате и подключаем его ко сдвиговому регистру 74HC595 согласно таблице, ссылка на которую будет в описании.

-3

Добавляем на макетную плату датчик температуры и соединяем его цифровой выход со 2 пином Ардуино. Не забываем про подтягивающий резистор 4,7 кОм или близкого номинала. У меня это 5 кОм.

Переходим к скетчу. Ссылка на весь код скетча будет в конце статьи, а далее будут картинку участков кода, которые буду комментировать.

Вначале, так же подключаем библиотеку OneWire.

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

-4

После паузы добавляем массив tempDigi[], состоящий из 4-х элементов, по числу секций светодиодного индикатора, куда будем записывать, какое число или символ в какую секцию будем выводить.

И добавляется переменная timer, т.к. от функции delay() с задержкой в 1000 мс придется отказаться, иначе у нас светодиодной индикатор будет моргать раз в секунду.

В функции loop() заменяем функцию delay() на таймер с использованием функции millis(). Т.е. к датчику мы обращаемся раз в секунду. И команды на измерение датчиком температуры и получение измеренной температуры от датчика. А далее блок кода, который преобразует получаемую с датчика температуру, умноженную на 10, в массив символов, для вывода на светодиодный индикатор.

-5

Т.е. вначале мы проверяем, если температура меньше нуля, то третьему элементу массива и соответственно 4-й, если считать справа секции светодиодного индикатора присваиваем знак минус. При положительной температуре, все сегменты секции гаснут. Т.е. мы присваиваем символ пробела.

После этого в зависимости от величины числа температуры (т.е. температуры, умноженной на 10), определяем какие секции мы задействуем и какую цифру или символ выведем на каждую из секций.

-6

В самой функции showDigital () учтем, что если речь идет о втором символе светодиодного индикатора, то нужно включить у него точку. Т.е. мы добавляем 1 бит к битовому представлению цифры, который как раз и ответственен за включение сегмента точки.

-7

После загрузки скетча в Ардуино, видим, как на светодиодный индикатор выводится комнатная температура 22,3 градуса.

-8

Опустим датчик в баночку со льдом и посмотрим как будет меняться температура. Инерция у датчика достаточно большая, так что охлаждается, как впрочем и нагревается он не мгновенно. Но где-то спустя минуту получаем отрицательную температуру.

-9

Теперь наоборот поместим датчик в горячую воду. Сразу наблюдается резкий рост температуры. Всё прекрасно работает и показывает температуру около 70 градусов Цельсия.

-10

В одной из будущих статей, уже в новом году, расcкажу как можно вместо Arduino UNO использовать ATtiny13. Вот только скетч придется немного сократить, т.к. в нынешнем виде он занимает 1118 байт, что почти на 100 байт больше, чем flash памяти у ATtiny13. Т.е. скетч совершенно спокойно поместится в память более старших моделей ATtiny25/45/85. А вот для ATtiny13 придется немного ужать код скетча, или сократить код подключаемой библиотеки OneWire, удалив не использованный нами функционал. В общем самому очень интересно, что получится. Расскажу вам о своих успехах в новых статьях.

Ссылка на скетч - https://disk.yandex.ru/d/OYxuTvDcSQNdMw

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

_________________________________________________________

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

Другие публикации по теме: