Термометр на микроконтроллере PIC16F628A и DS18B20(DS18S20) – статья с подробным описанием схемы запоминающего термометра и, вдобавок, - логическое продолжение ранее опубликованной мною статьи на яндекс сайте pichobbi.narod.ru. Этот термометр довольно неплохо себя зарекомендовал, и было принято решение немного его модернизировать. В этой статье расскажу, какие изменения внесены в схему и рабочую программу, опишу новые функции. Статья будет полезна новичкам. Позже переделал текущую версию термометра в термометр с коррекцией.
Термометр на микроконтроллере PIC16F628A и DS18B20(DS18S20) умеет:
- измерять и отображать температуру в диапазоне:
-55...-10 и +100...+125 с точностью 1 градус(ds18b20 и ds18s20)
-в диапазоне -9,9...+99,9 с точностью 0,1 градус(ds18b20)
-в диапазоне -9,5...+99,5 с точностью 0,5 градус(ds18s20); - Автоматически определять датчик DS18B20 или DS18S20;
- Автоматически проверять датчик на аварию;
- Запоминать максимальную и минимальную измеренные температуры.
Также в термометре предусмотрена легкая замена 7 сегментного индикатора с ОК на индикатор с ОА. Организована щадящая процедура записи в EEPROM память микроконтроллера. Вольтметр, который неплохо себя зарекомендовал, описан в этой статье - Вольтметр на PIC16F676.
Принципиальная схема цифрового термометра на микроконтроллере разрабатывалась для надежного и длительного использования. Все детали, применяющиеся в схеме, не дефицитные. Схема проста в повторении, отлично подойдет для начинающих.
Принципиальная схема термометра показана на рисунке 1
Рисунок 1 - Принципиальная схема термометра на PIC16F628A + ds18b20/ds18s20
Описывать всю принципиальную схему термометра не стану, так как она довольно проста, остановлюсь только на особенностях.
В качестве микроконтроллера применяется PIC16F628A фирмы Microchip. Это недорогой контроллер и к тому же не дефицитный.
Для измерения температуры используются цифровые датчики DS18B20 или DS18S20 фирмы Maxim. Эти датчики не дорогие, малые по размеру и информация о измеренной температуре передается в цифровом виде. Такое решение позволяет, не тревожиться о сечении проводов, о их длине и прочем. Датчики DS18B20, DS18S20 способны работать в диапазоне температур от -55… +125 °С.
Температура выводится на 7-ми сегментный 3-х разрядный LED индикатор с общим катодом (ОК) или с (ОА).
Для вывода на индикатор максимальной и минимальной измеренных температур нужна кнопка SB1. Для сброса памяти так же нужна кнопка SB1
Кнопкой SA1 можно оперативно переключать датчики(улица, дом).
Jamper необходим для переключения общего провода для LED индикатора. ВАЖНО! Если индикатор с ОК – то ставим jamper на нижнее по схеме положение, а транзисторы VT1-VT3 впаиваем p-n-p проводимости. Если LED индикатор с ОА, то jamper переводим в верхнее по схеме положение, а транзисторы VT1-VT3 впаиваем n-p-n проводимости.
В таблице 1 можно ознакомиться со всем перечнем деталей и возможной их заменой на аналог.
Позиционное обозначение | Наименование | Аналог/замена |
С1, С2 | Конденсатор керамический - 0,1мкФх50В | - |
С3 | Конденсатор электролитический - 220мкФх10В | |
DD1 | Микроконтроллер PIC16F628A | PIC16F648A |
DD2,DD3 | Датчик температуры DS18B20 или DS18S20 | |
GB1 | Три пальчиковых батарейки 1,5В | |
HG1 | 7-ми сегментный LED индикатор KEM-5631-ASR (OK) | Любой другой маломощный для динамической индикации и подходящий по подключению. |
R1,R3,R14,R15 | Резистор 0,125Вт 5,1 Ом | SMD типоразмер 0805 |
R2,R16 | Резистор 0,125Вт 5,1 кОм | SMD типоразмер 0805 |
R4,R13 | Резистор 0,125Вт 4,7 кОм | SMD типоразмер 0805 |
R17-R19 | Резистор 0,125Вт 4,3 кОм | SMD типоразмер 0805 |
R5-R12 | Резистор 0,125Вт 330 Ом | SMD типоразмер 0805 |
SA1 | Любой подходящий переключатель | |
SB1 | Кнопка тактовая | |
VT1-VT3 | Транзистор BC556B для индикатора с ОК/ транзистор BC546B для индикатора с ОА | KT3107/КТ3102 |
XT1 | Клеммник на 3 контакта. |
Для первоначальной отладки работы цифрового термометра применялась виртуальная модель, построенная в протеусе. На рисунке 2 можно увидеть упрощенную модель в протеусе
Рисунок 2 – Модель термометра на микроконтроллере PIC16F628A в Proteus’e
На рисунке 3-4 показана печатная плата цифрового термометра
Рисунок 3 – Печатная плата термометра на микроконтроллере PIC16F628A(низ) не в масштабе.
Рисунок 4 – Печатная плата термометра на микроконтроллере PIC16F628A(верх) не в масштабе.
Термометр, собранный рабочих деталей начинает работать сразу и в отладке не нуждается.
Результат работы рисунки 5-7.
Рисунок 5 - Внешний вид термометра
Рисунок 6 - Внешний вид термометра
Рисунок 7 - Внешний вид термометра
ВАЖНО! В прошивку термометра не вшита реклама можно пользоваться в свое удовольствие.
Поправки, внесенные в рабочую программу:
1 автоматическое определение датчика DS18B20 или DS18S20;
2. снижено время перезаписи в EEPROM(если выполнилось условие для перезаписи) с 5 минут, до 1 минуты.
3. увеличена частота мерцания точки;
Более подробное описание работы термометра можно посмотреть в документе, который можно скачать в конце этой статьи. Если скачивать нет желания, то на сайте www.pichobbi.narod.ru также отлично расписана работа устройства.
Готовая плата отлично поместилась в китайский будильник (рисунки 8, 9).
Рисунок 8 – Вся начинка в китайском будильнике
Рисунок 9 - Вся начинка в китайском будильнике
Видео - Работа термометра на PIC16F628A
Файлы к статье:
Термометр на PIC16F628A(статья)
Архив с проектом(обновлён 18.12.17. - добавил прошивки без мерцания точки)
Комментарии
Планирую повторить устройство, но предполагаю сделать оба датчика выносными. Вопрос: какую функцию в схеме выполняют резисторы R14 и R15? Если датчик DD3 сделать выносным, его подключать так же, через резисторы с номиналами как у R14 и Р15?
Спасибо.
Датчики можете оба сделать выносными. Резисторы R14,R15 устанавливаются для подавления помех, которые могут наводиться на провод. Он ведь как антенна. В моем случае термометр работает на выносном датчике с проводом для интернета(витая пара) и резисторами R14,R15. Сбоев не наблюдал ни разу!
И, если Вас не затруднит, у меня ещё такой вопрос: через резистор R16 плюс питания подается на 3 вывод МК. Мне, человеку не сильно разбирающемуся в электронике, так и хочется спросить, а ко второму и первому выводам МК не требуется также подключить резисторы? Или наоборот - R16 вообще не ставить? На фотографии собранной платы этого резистора и резистора R13 не видно.
Извините что отвлекаю Вас такими вопросами, я опыта не имею, если получится это будет моя первая конструкция на МК.
Спасибо!
Программатор собрал сам, Extra PIC по схеме из интернета, а вот МК что то задерживаются, наверное из за праздников. В моем городе магазинов для радиолюбителей нет, всё приходится покупать в интернет магазинах, и выпаивать из плат неисправных устройств.
Ещё раз огромное Вам спасибо за всё!
Спаял схему, запрограммировал МК но к сожалению результат плачевный, на индикаторе Er2. Монтаж проверил, ошибку найти не могу, замыкания минусового провода линии связи с информационным нет, но R15 и температурный датчик почему то сильно греются. Напряжение между выводом Gnd и Vdd дптчика сильно просажено 0,8V/ Отпаивал датчик и подключал к компьютеру (у меня собрана схема для COM порта) там определяется и работает. Проблема в МК?
Спасибо за помощь.
Кто собирается повторить желаю успеха.
Автору СПАСИБО за материалы и помощь.
я извиняюсь, а без резисторов разве были сбои ??? производитель датчиков не приводит таких рекомендаций
Просто у меня задача чуть другая: просто надо измерять температуру от -50 до +20 градусов по Цельсию.
1. гасятся ли незначащие нули?
2. как будет изображаться температура -10,5 (к примеру) градусов? или остаются только целые числа?
Ответы на Ваши вопросы:
1. Нули незначащие гасятся;
2. В диапазоне температур от + 100...+125 и от -10...-55 температура выводиться без учета десятых.
Не совсем понял вопрос. Вы за какое округление говорите?
У меня появилась острая необходимость в термометре
пожалуйста напишите мне на почту Я Вам раскажу свою проблему очень жду только Вы мне можете помоч !!!
lx.uzyandex.ru
кстати почти Я Вас заинтересую сутью проблемы !!!!
Доброго времени, Валерий. Думаю в вашем случае без ключей в сегментах не обойтись. Могу посоветовать применить микросхемы ULN2803 или ULN2003. Код для Вас поправлю.
Рад был помочь!
Доброго времени. Производитель датчиков дает гарантию, что погрешность в диапазоне -10 ... +85 градусов не превысит +-0,5 градуса. В остальном диапазоне погрешность может достигать 2 градусов. Смотрите даташит. А еще погрешность в 0,3...0,5 градуса вносится из-за саморазогрева датчика. Из Вашей ситуации два выхода: 1. Заменить датчик, 2. Увеличить время через которое опрашивается датчик.
Завышает показания так же на один
градус, как увеличить время опроса? не могли бы вы выложить прошивку, с такой характеристикой?
https://yadi.sk/d/S_aDlv6xVxCx3 - для ОА задержка опроса датчика 10сек. Пробуйте.
Спасибо за то что откликнулись, и так быстро! Прошил, попробывал, саморазогрев где то в пределах 0.4 градуса с этой прошивкой.
Антон, а можно ли как нибуть получить исходники Вашей прошивки, или проект у вас закрытый? Хотелось бы поковырять ее на предмет подключения к МК сразу двух датчиков, и что бы температура дом\улица показывалась на дисплее с какой то переодичностью, ну и сохранить возможность запоминания мин\мах температуры.
Здраствуйте Alex90. Опишите подробнее, что конкретно нужно сделать. Желательно на почту. Смотрите обратную связь. Попытаюсь Вам помочь.
Спаял данный девайс на макетной плате. Работает два правых разряда, а первый не горит, на RA4 0 вольт. Нагрузку с порта убирал, напряжения не появилось. Менял PIC16F628A на новый результат тот же. Думаю, может программная часть.
Заранее благодарен.
Микросхему применил, PIC16F628A-I/SO. Ещё идет засветка сегментов индикатора, цифру трудно разобрать. Применил транзисторы BC 548B. Буду думать дальше.
А какой период опроса датчиков в выложенной Вами прошивке? И нельзя ли его увеличить в общедоступной прошивке, если существующая величина периода опроса приводит к заметному саморазогреву датчиков?
Исходя из
" # Алексей 05.07.2014 10:45
https://yadi.sk/d/S_aDlv6xVxCx3 - для ОА задержка опроса датчика 10сек. Пробуйте.
Спасибо за то что откликнулись, и так быстро! Прошил, попробывал, саморазогрев где то в пределах 0.4 градуса с этой прошивкой..."
Точность измерения должна повыситься. Тем более, что Вы позиционируете данную конструкцию как бытовую, для измерения температуры воздуха в помещении и на улице. Ну а для "специальных" приложений, где быстродействие термометра должно быть максимальным как раз, ИМХО, подойдет существующая прошивка. Заранее спасибо.
Alex90 писал: Цитирую Alex90:
Примерно такая же просьба, вывод в двоичном коде. Имеются старинные газоразрядные индикаторы ИН18, хотелось бы их использовать.
Заранее спасибо.
-55...-10 и +100...+125 с точностью 1 градус(ds18b20 и ds18s20)
-в диапазоне -9,9...+99,9 с точностью 0,1 градус(ds18b20)
-в диапазоне -9,5...+99,5 с точностью 0,5 градус(ds18s20); извините немного не понял диапазон измерений!(0) (-1) будет измерять, и можно ли данный девайс применить в автомобиле доработав систему питания стабилизатором 78L05 ? Спасибо!
Видео посмотрел, очень понравилась коррекция показаний.
Антон а где можно посмотреть схему с коррекцией?
Заранее спасибо за ответ!
http://pixs.ru/showimage/0122161332_8539231_20357865.jpg
Типа так, ссылка на файлообменник.
Спасибо большое, начинаю заниматься вашим проектом
Jamper необходим для переключения общего провода для LED индикатора. ВАЖНО! Если индикатор с ОК – то ставим jamper на нижнее по схеме положение, а транзисторы VT1-VT3 впаиваем p-n-p проводимости. Если LED индикатор с ОА, то jamper переводим в верхнее по схеме положение, а транзисторы VT1-VT3 впаиваем n-p-n проводимости.
Мощность резисторов в сторону увеличения можно менять. Главное чтобы поместились!