Электронный термометр с беспроводным датчиком

Термометр с беспроводным датчиком
Решил я сделать двухканальный термометр, только не обычный, а с беспроводным датчиком для улицы. Идея конечно не новая, на рынке уже имеются подобные термометры промышленного производства. Так как у меня были наработки по подключению радиомодулей к микроконтроллеру, я начал разрабатывать свой вариант беспроводного термометра.

Для измерения температуры я использовал распространенные датчики DS18B20, для отображения показаний применил не менее популярный ЖК дисплей Nokia 5110. Радиомодули и алгоритм передачи данных я рассматривал ранее в статье про передатчик и приемник на 433 МГц

Ниже представлена схема беспроводного датчика на микроконтроллере PIC12F675.
Беспроводной датчик
После подачи питания микроконтроллер считывает значение температуры с датчика BK1 и отправляет эти данные на радиопередатчик A1, после чего происходит переход в спящий режим. Пробуждение микроконтроллера происходит по прерыванию, которое генерируется изменением уровня на линии GP0. К этой линии подключена RC цепочка на элементах R2 и C4, которая выполняют функцию таймера. При выходе из спящего режима на линии GP0 устанавливается низкий логический уровень, тем самым конденсатор C4 разряжается. Перед уходом в “сон” линия настраивается на вход, конденсатор начинает заряжаться через резистор R4, при достижении порогового напряжения (около 1,2В) происходит прерывание и пробуждение микроконтроллера. При указанных на схеме номиналах R2, C4 период пробуждения составляет примерно 5 минут. Установив перемычку JP1, можно сократить период до 5,5 секунд. Путем подбора конденсатора и резистора можно настраивать желаемое время периода, но при этом надо учитывать ток заряда конденсатора, в плане энергопотребления.

Значение температуры по радиоканалу передается в виде пакета из 3-х байт, последний байт представляет собой контрольную сумму первых 2-х байт. Алгоритм передачи данных, который я использую, в принципе позволяет обходиться без контрольной суммы, вероятность приема неправильных данных низкая. Скорость передачи составляет 3,3 Кбит/сек. Каждый раз после измерения температуры отсылается 3 пакета байтов, пауза между пакетами составляет 10 мс, такой вариант передачи я применил для увеличения надежности получения данных приемником. Это связано с тем, что приемная сторона прерывает прием сигнала на 4-5 мс, во время измерения температуры с внутреннего (домашнего) датчика.

В качестве питания используется батарея 6F22 на 9В (“Крона”), модуль радиопередатчика A1 питается напрямую от батареи. Для питания микроконтроллера используется микромощный стабилизатор напряжения DA1 (MCP1702) на 5В, собственный ток потребления стабилизатора составляет всего 1-2 мкА, максимальный ток нагрузки до 250 мА. Стабилизатор MCP1702 можно заменить на LP2950, ток потребления которого выше и составляет 75 мкА. Обычные стабилизаторы напряжения типа L78хх имеют большой ток потребления в несколько миллиампер, поэтому не годятся для аппаратуры с батарейным питанием. Ток потребления устройства в спящем режиме меняется с течением времени по мере заряда конденсатора С4, первые 2,5 минуты потребление составляет 10 мкА, последующие 2,5 минуты ток плавно увеличивается, до момента выхода из спящего режима. Данное явление возникает из-за наличия токов переключения входного буфера микроконтроллера.

Хочу отметить, что при низких температурах емкость батареек уменьшается быстрее, не все типы батареек можно использовать в таких условиях. Лучшими показателями при отрицательных температурах обладают литиевые батарейки, далее следуют Ni-Mh аккумуляторы, щелочные батарейки занимают третью позицию, солевые элементы не пригодны для таких условий.

Ниже представлена схема термометра на микроконтроллере PIC16F628A.
Термометр, схема
Дисплей HG1, датчик BK1 и микроконтроллер питаются напряжением 3,3В от стабилизатора DA2. Такое значение было выбрано в связи с характеристиками дисплея, максимальное напряжение питания которого составляет 3,3В, кроме этого отпадает необходимость в согласовании уровней напряжения между линиями ввода/вывода дисплея и микроконтроллера. Модуль приемника A1 питается от стабилизатора DA1, с выходным напряжением 5В. Резисторы R6, R7 установлены для согласования уровней напряжения.

Микроконтроллер DD1 считывает значение температуры с датчика BK1 каждые 2 секунды, параллельно принимает сигнал с приемника, при получении пакета байтов от передатчика вспыхивает светодиод HL1. В верхней части дисплея отображается надпись “Дом”, под которой выводится значение температуры с внутреннего (домашнего) датчика, ниже отображается надпись “Улица” и температура, полученная от беспроводного датчика. После приема данных по радиоканалу, микроконтроллер запускает таймер, который ведет отсчет времени для контроля получения данных. Если данные не были получены за период отсчета таймера, вместо показаний температуры, на дисплее высвечивается символы тире “- — — — -”. Время отсчета можно задать в пределах 1-15 минут с шагом в одну минуту. Для этого, перед программированием микроконтроллера, необходимо записать число от 1 до 15 в ячейку EEPROM с адресом 0x00. По умолчанию устанавливается период в 7 минут. При неисправности датчиков BK1, для обоих устройств, вместо значения соответствующей температуры, выводится надпись “ERROR”. Кнопка SB1 управляет подсветкой дисплея, по умолчанию подсветка включена. Кнопка SB2 предназначена для регулировки контрастности дисплея, так как у разных экземпляров она может отличаться.

Для питания устройства подойдет нестабилизированный источник питания с выходным напряжением 8-12В. Оба устройства размещены в пластиковых корпусах. Антенна для радиомодулей выполнена в виде отрезка одножильного провода длиной 17 см (четверть длины волны несущей частоты).

Плата передатчикаБеспроводной датчикПлата термометраТермометр в корпусеТермометр с беспроводным датчиком

Прошивка термометра
Печатные платы в формате Sprint Layout 6

Обновленная версия прошивки, добавлено автоматическое выключение подсветки дисплея через 6-8 секунд, а также сохранение значения контрастности дисплея в EEPROM память, чтобы не настраивать заново контрастность при выключении питания.
Обновленная прошивка термометра

Последние записи:

Комментариев 39 на “Электронный термометр с беспроводным датчиком

  1. Молодец сделал всё отлично, а у меня всё руки не дошли 🙂 Чем интересно дальше займёшься.

  2. Очень бы хотелось подробно въехать в работу DS18B20 с примерами на ассемблере.
    Что то нигде путного не нашел.

  3. Вполне достаточно будет вывод на
    регистр отрицательной температуры
    регистр десятков градусов
    регистр едениц градусов
    регистр долей градусов
    Дисплей каждый пропишет себе сам.

  4. Очень нужная, полезная конструкция, таких вообще мало в литературе и интернете, только вот хорошо было бы на 2-3 датчика чтобы было рассчитано, мне вот нужно в 2-х теплицах измерять

  5. Из за малого радиуса приема заменил радио модули на wl101-341, сигнал пропал вовсе. Возможно модули разные и не взаимозаменяемые?

    • Здравствуйте, радиомодули wl101-341 в этом термометре не подойдут, для них нужен немного другой протокол передачи данных с более низкой скоростью.

      Для увеличения стабильности приема попробуйте увеличить емкость конденсатора С2 после 5-ти вольтового стабилизатора DA1, поставьте 100 мк х 16В или 220 мк х 16В. Проверьте печатную плату, действительно ли этот конденсатор подключен на выход стабилизатора напряжения, так как у меня была ошибка в плате, ошибку эту я устранил более полугода назад, но возможно вы скачивали плату ранее, когда эта ошибка еще присутствовала.

      Попробуйте поставить другой экземпляр приемника XY-MK-5V, у них тоже бывает разброс по частоте.

  6. Добрый вечер, не думал, что так быстро ответите. Сейчас попробую увеличить конденсатор до 220 мк. к сожалению приемник XY-MK-5V, только один, а вот wl101-341 два, полтора месяца ждал когда приедут из Китая.

    • Можно термометр переделать под модули wl101, но тогда передатчик будет на другом микроконтроллере PIC12F683 и схема немного другая, придется поставить микромощный стабилизатор на 3,3В, так как макс. напряжения питания передатчика wl101 составляет 3,6В. Приемник останется таким же, только программу надо скорректировать.

      В микроконтроллере PIC12F675 не хватит выводов для подключения передатчика wl101, так как надо дополнительно управлять выводом Enable передатчика.

  7. В передатчик модуль я поставил, запитав его от такого же стабилизатора только на 3.3 в. Вывод Enable, в модуле перемычкой закорочен на плюс. Ток при этом порядка 4-5 ма. Приемник XY-MK-5V работает с обеими модулями передатчика, проверял экспериментально. Просто приемник XY-MK-5V попался какой-то, больше 1.5 метра сигнал не принимает. В инете люди пишут, что использовали модуль передатчика от XY-MK-5V, а приемник wl101 и получается неплохой результат. Я даже осциллографом смотрел на форму сигнала с контакта D0 обеих приемников. В XY-MK-5V при передаче посылки появляется логическая единица в которой просматривается сигнал. В wl101 какая-то помеха амплитудой где-то 2 вольта, а в момент передачи, логический 0, может его просто инвертировать?
    Конденсатор увеличил до 220 мкф. Результат тот же.
    Наверное завтра закажу два XY-MK-5V на алиэкспресс ждать только 1.5 месяца.

    • В этом термометре скорость передачи данных составляет 3.3 Кбит/сек, а приемник wl101 не работает на такой частоте, поэтому у вас ничего и не получилось. У меня есть статья с описанием модулей wl101, там я писал что модули работают только на частоте не выше 1 Кбит/сек.

      Кстати об этом я не подумал, что передатчик можно использовать от XY-MK-5V, тогда я подредактирую прошивки для снижения скорости до 833 Бит/сек, и вы сможете протестировать с передатчиком XY-MK-5V и приемником wl101.

  8. Подскажите как мне опознать преамбулу?
    То есть,что она приходит на приемник.
    Хотя бы первые несколько импульсов.

  9. Спасибо!
    Модуль заказать не успел, застрял на работе. Жаль программатор на работе, то попробывал бы прямо сейчас. Завтра днем попробую, вечером отпишусь.

  10. Испытания прошли успешно, дальность отличная, правда проверял в пределах квартиры.
    Огромное спасибо за помощь!
    Да еще вопрос, возможно заменить дисплей Nokia 5110 на Nokia 3310 без изменений в прошивке?

  11. Когда подключал зажглись почему-то все сегменты, наверное напутал с проводами, или контрастность накручена, конденсатор на 2.2 мкф на дисплей подключил.

    • Оригинальный дисплей Nokia 3310 как правило должен нормально заработать (например который извлечен из телефона), бывают еще китайские версии, у них есть небольшие отличия, но они также должны показывать.

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

  12. Отличное устройство! Спасибо огромное за схему и прошивки!!!
    Скажите, как сделать чтобы по умолчанию, подсветка была выключена? Либо чтобы она сама гасла через секунд 5 например… Часто ночью свет отключают и потом при включении будет светить и спать мешать…

    • Приветствую! Рад что вам понравилось)
      Для этого надо подкорректировать прошивку, в ближайшее время я выложу новую версию.

  13. День добрый! Сегодня завел таки вторую часть Вашего термометра, то есть передатчик. До это просто собрал приемник, на перспективу. Очень удивился и расстроился, когда понял что работает это устройство, когда антенны приемника и передатчика находятся в пределах нескольких сантиметров. Не более 10 см. Я понял, что что то здесь не так, т.к. проверял модули известным способом «кнопки и светодиода» и работали они метров на 15 без проблем. Тогда я скачал и поставил прошивки для других модулей, с пониженной частотой — и… вот он момент истины! Работает метров на 20 без проблем. Дальше не проверял, скорее всего будет и больше. Но вот одно «но», прошивка приемника с пониженной частотой — с постоянной подсветкой… Если есть возможность, подкорректируйте пож-та прошивку с пониженной частотой приема так-же, чтобы выключалась она автоматически. Может есть смысл снизить частоту -приема-передачи до разумного минимума? Скорость тут не нужна, а помехоустойчивость и след-но дальность возрастет. Не знаю, почему так… возможно китайцы что то напартачили с этими модулями. Там еще 2 версии их есть, на 433 и 315 мГц. в описании скорость указана на 315 мГц, на 433 ничего не указано. Может в этом дело… У меня на 433. На 315 может и работало бы…

    • Дело в том что уже куплены, приехали несколько комплектов и их нужно же как то заюзать))) Да и дело видимо не только в модулях, а еще и ПО контроллера. Без преувеличения: с прошивкой где скорость 3,3 кбит/с расстояние когда хоть что то принималось было не более 10 см. Ну бред в общем. С прошивкой где скорость 833Бит/с — расстояние 20метров (больше не проверял, ибо не нужно) с антеннами 2 куска монтажного провода по 7!!! см. Просто припаял что на столе валялось) Так что модули имеют право на жизнь. Можно было бы попробовать еще поиграться скоростью передачи, возможно удастся из них выжать вполне приемлемые параметры. Ну а так то да, те что вы указали лучше, спору нет…

  14. Сегодня намотал спиральные антенны на модули. Дальность с этой прошивкой отличная! Со спиральными антеннами при скорости обмена 833 Бит/сек на 35 метров работает стабильно. При этом датчик на улице а приемник в доме. Не могу себе представить условия, чтобы этого было недостаточно))

  15. Все собрал в корпуса, все работает. Но бывает с индикатора пропадают все данные и помогает только перезагрузка. Скорее всего пропадает контакт внутри дисплея. Тем не менее вот что вычитал:
    «Внутри дисплея ЖК индикатор подключен к плате с контроллером PCD8544 посредством проводящей резиновой полосы. Это иногда вызывает проблемы в контактах. В результате мы видим черный экран. Для восстановления соединения достаточно немного прижать стекло к корпусу дисплея. Восстановление работы при нарушении контактов не произойдет до перезагрузки. Есть смысл предусмотреть в программе повторяющуюся инициализацию через каждые 5 секунд.»
    То есть это можно решить программно. Если есть такая возможность — очень прошу, сделайте) Прошивка которая с автовыключением подсветки и скоростью 833 бит/с

    • Дисплеи из Китая часто приходят не зафиксированными, то есть металлическая рамка не припаяна к плате, поэтому она может отходить, из-за чего теряется контакт. Лучше попробуйте для начала прижать рамку и припаять ее к плате, там в 4-х местах она припаивается. Возможно придется поиграться с усилием прижатия, чтобы появилось стабильное изображение без артефактов.

  16. Да все припаяно и перепаяно мной. Проверял конечно. Может и день и два отработать нормально, а может на один несколько раз глюкануть. Дисплей глючит это понятно. Он у меня еще на макетке глючил, но я грешил на плохой контакт в макетке. Я про другое. Инициализировать его каждые 5 секунд это рекомендации из pdf файла к самому дисплею. Типа правила хорошего тона при разработке ПО и работе с этим дисплеем. Я то заказал еще один, но если это не очень сложно реализовать, может есть смысл это сделать… Эти модули через один будут такие если об этом пишут в спецификации.

    • Я пока занят, как освобожусь, я рассмотрю вариант с циклической инициализацией.

  17. День добрый. Думаю с инициализацией не актуально. Проблема была в другом, как оказалось. Проблема в висящем в воздухе MCLR контроллера, что не есть хорошо. 10 Ком к питанию и 0,1 Мкф на землю, решило проблему. Кнопка подсветки была с металлическим основанием. Иногда, при включении подсветки, от статики проскакивал разряд и контроллер то сбрасывался, то зависал, то видимо переходил в режим программирования))

    • Приветствую, вход MCLR отключен в прошивке (то есть он подтянут к высокому логическому уровню внутри микроконтроллера), возможно при программировании вы могли включить вход MCLR принудительно, посмотрите настройки в программе с помощью которой шьете МК. Лично я у себя не наблюдал проблем с дисплеем.

      • Интересно, как? В PicKit3 я могу галочкой MCLR только падать питание на эту ногу и удерживать проц в ресете. В прошивку же я не лез… тем более без исходников, что там делать?) Где то читал, что в этом контроллере, как и в некоторых других PIC-ах, при программном отключении MCLR, сброс все равно остается в неявном виде. И нужно как минимум ставить емкость 0,1 мкф на землю. Уверен, если вы попробуете неизолированным пинцетом дотронуться до 4-й ноги проц перезагрузится. Поставите емкость — нет.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *