Здравствуйте, уважаемые читатели! В одной из прошлых статей я рассказывал о датчике температуры DS18B20 в герметичном металлическом корпусе. Речь шла о его распиновке и подключении к Arduino UNO.
В этой статье мы будем выводить показания датчика DS18B20, т.е. температуру в градусах Цельсия, на 4-х символьный светодиодный индикатор.
Для этого объединим код из прошлой статьи, с кодом из статьи, где я подключал 4-х символьный светодиодный индикатор к Arduino UNO.
Но вначале, соберем схему на макетной плате.
Размещаем индикатор на макетной плате и подключаем его ко сдвиговому регистру 74HC595 согласно таблице, ссылка на которую будет в описании.
Добавляем на макетную плату датчик температуры и соединяем его цифровой выход со 2 пином Ардуино. Не забываем про подтягивающий резистор 4,7 кОм или близкого номинала. У меня это 5 кОм.
Переходим к скетчу. Ссылка на весь код скетча будет в конце статьи, а далее будут картинку участков кода, которые буду комментировать.
Вначале, так же подключаем библиотеку OneWire.
В массиве битовых представлений цифр, помимо 10 цифр добавляются два элемента, один, который соответствует минусу, а второй будет выключать абсолютно все сегменты светодиодного индикатора. Своеобразный знак пробела.
После паузы добавляем массив tempDigi[], состоящий из 4-х элементов, по числу секций светодиодного индикатора, куда будем записывать, какое число или символ в какую секцию будем выводить.
И добавляется переменная timer, т.к. от функции delay() с задержкой в 1000 мс придется отказаться, иначе у нас светодиодной индикатор будет моргать раз в секунду.
В функции loop() заменяем функцию delay() на таймер с использованием функции millis(). Т.е. к датчику мы обращаемся раз в секунду. И команды на измерение датчиком температуры и получение измеренной температуры от датчика. А далее блок кода, который преобразует получаемую с датчика температуру, умноженную на 10, в массив символов, для вывода на светодиодный индикатор.
Т.е. вначале мы проверяем, если температура меньше нуля, то третьему элементу массива и соответственно 4-й, если считать справа секции светодиодного индикатора присваиваем знак минус. При положительной температуре, все сегменты секции гаснут. Т.е. мы присваиваем символ пробела.
После этого в зависимости от величины числа температуры (т.е. температуры, умноженной на 10), определяем какие секции мы задействуем и какую цифру или символ выведем на каждую из секций.
В самой функции showDigital () учтем, что если речь идет о втором символе светодиодного индикатора, то нужно включить у него точку. Т.е. мы добавляем 1 бит к битовому представлению цифры, который как раз и ответственен за включение сегмента точки.
После загрузки скетча в Ардуино, видим, как на светодиодный индикатор выводится комнатная температура 22,3 градуса.
Опустим датчик в баночку со льдом и посмотрим как будет меняться температура. Инерция у датчика достаточно большая, так что охлаждается, как впрочем и нагревается он не мгновенно. Но где-то спустя минуту получаем отрицательную температуру.
Теперь наоборот поместим датчик в горячую воду. Сразу наблюдается резкий рост температуры. Всё прекрасно работает и показывает температуру около 70 градусов Цельсия.
В одной из будущих статей, уже в новом году, расcкажу как можно вместо Arduino UNO использовать ATtiny13. Вот только скетч придется немного сократить, т.к. в нынешнем виде он занимает 1118 байт, что почти на 100 байт больше, чем flash памяти у ATtiny13. Т.е. скетч совершенно спокойно поместится в память более старших моделей ATtiny25/45/85. А вот для ATtiny13 придется немного ужать код скетча, или сократить код подключаемой библиотеки OneWire, удалив не использованный нами функционал. В общем самому очень интересно, что получится. Расскажу вам о своих успехах в новых статьях.
Ссылка на скетч - https://disk.yandex.ru/d/OYxuTvDcSQNdMw
Видео, по материалам статьи:
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!