РадиоКот :: Часы-будильник-термометр с радиодатчиком и радиозвонком
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Теги статьи: Добавить тег

Часы-будильник-термометр с радиодатчиком и радиозвонком

Автор: B@roda
Опубликовано 19.09.2011
Создано при помощи КотоРед.
2011

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

 

Все началось года три назад с изучения ASM’a и структуры PIC’ов, мигания светодиодами в Протеусе посредством PICBasic Pro и дошло до банального термометра PIC16F630 + 3LED с датчиком DS18S20, висевшим за окном. Его жизненный цикл закончился через три зимне-весенних месяца, после того как в очередной раз на DSку попала вода (хотя датчик находился под тремя!!! слоями разнокалиберной термоусадки) и отвалилась одна из ног, я решился на разработку безпроводного герметичного датчика.

Система состояла из основного блока PIC16F630 + DS18S20 + 3LED + RCR-433-MPR и радиодатчика PIC12F629 + DS18S20 + RCT-433-AS. Корпусом для последнего послужило «яйцо» от больничных бахил. Данная конструкция проработала безотказно больше года при температуре          -25… +35 *С (никаких следов окисления обнаружено не было). Батарейка датчика CR2032 (компьютерная) немного подсела с 3,3 до 3,2 вольт при посылке температуры раз в 10 минут.

Все было хорошо, жизнь продолжалась, температура менялась, но тут неожиданно сдохли старые, собранные моим батей, часы на КР145ИК1901. Вывод напросился сам собой. Надо было только заменить PIC16F630 на что-то помощнее, ну и индикатор. Выбор пал на PIC16LF628. Через месяц трудов и еще одного месяца отладки и реализации новых функций родились они, Часы-термометр с радиодатчиком. Давайте пробежимся по возможностям данного девайса

PIC16LF628 + DS18S20 + 4LED_OA + RCR-433-MPR:

 

1.  Часы/день недели.

2.  Температура дома.

3.  Температура с радиодатчика.

4.  Будильник.

5.  Радиозвонок

6.  Коррекция хода.

7.  Кольцевое  отображение данных.

8.  Резервное питание.

 

Дополнительные функции:

- уменьшение яркости индикатора ночью.

- при обрыве датчика температура_1 не отображается.

- если сигнала с радиодатчика нет 25 минут – загорается точка при отображении температуры_2, если нет 50 минут, то температура_2 не отображается.

- выход будильника настраивается (длинный 0, короткий 0, секундные 0, генератор с настраиваемым тоном). Сигнал «каждый час» , ночью отключается.

- коррекция хода +/-96мс…12сек в сутки или +/-180мс…24 сек/сутки.

- отображение данных: Часы->День->Температура_1-> Температура _2.

- время отображения данных настраивается: 1-20сек часы, 0-10сек день и температура.

- резервное питание: CR2032, ток потребления 0,7 мА, будильник работает.

 

Схема.

В часах применен индикатор CA56-12GWA (14.2мм 4х7 зеленый ОА, 10.5мКд), в его анодах стоят эмиттерные повторители КТ3102. В каналах сегментов резисторы 100-240 Ом. Пищалка взята от компьютера с последовательно включенным резистором 20 Ом. Питание часов осуществляется от телефонной зарядки. Потребляемый ток примерно 50-70мА.

 

 

 

Индикатор в дежурном режиме:

- отображение по кольцу.

- любой пункт можно убрать, кроме часов.

- время отображения любого пункта можно настроить.

 

Пункты меню настройки:

-   вход/выход осуществляется по длинному нажатию на кнопку «МЕНЮ».

-   отображение меню по кольцу по короткому нажатию на кнопку «МЕНЮ».

-   регулировка параметров кнопками «МИНУС» и «ПЛЮС».

-   кнопки регулировки работают по такому принципу: нажал - параметр изменился, держим дальше; после некоторой задержки (0,5сек) включается автоповтор нажатия (8Гц).

-   кнопка «МИНУС» (слева) прибавляет параметр в 2х старших разрядах индикатора, уменьшает одиночный параметр или отключает будильник в дежурном меню.

-   кнопка «ПЛЮС» (справа) прибавляет параметр в 2х младших разрядах индикатора, увеличивает одиночный параметр, сбрасывает секунды в ноль или включает будильник в дежурном меню.

-   при включенном будильнике горит точка в младшем разряде индикатора.

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

 

           В ходе работы и появившихся вопросов по поддержке датчиков DS18B20, расширения диапазонов коррекции хода и замены кварца на 4.000 МГц был добавлен пункт меню SET

Он выглядит так: "S X Y Z"

Значения переменных:

X=0 - коррекция двойная

X=1 - коррекция одинарная

Y=0 - датчик температуры DS18B20

Y=1 - датчик температуры DS18S20

Z=0 - кварц 4.000 МГц

Z=1 - кварц 4.096 МГц

Значение переменных корректируется кнопками + и - по двоичному закону.

Значения переменных меню "SET" и "Коррекция хода" заносятся в EEPROM.

            В дальнейшем мой друг @SUS предложил добавить к часам радиозвонок, что и было сделано. Был добавлен еще один пункт меню ALAR.

В нем выбирается серийный номер звонка (0..7), в звонке этот номер выбирается тремя джамперами.

Значения переменных меню "ALAR", "SET" и "Коррекция хода" заносятся в EEPROM.

 

Ну тут вроде все понятно, теперь перейдем к софту.

Программа написана на PIC Basic Proton, занимает в памяти контроллера 99%, последнюю память потратил на звонок, который я добавил по просьбе друга @SUSа буквально вчера. В программе часов задействованы все 3 таймера, организован программный протокол 1Wire из библиотеки Basic’а.

По переполнению таймера_0 (4мсек) происходит аппаратное прерывание, в котором полностью рассчитываются значения часов, минут, секунд и дня недели, корректируется ход. Я достаточно долго подбирал алгоритм коррекции хода часов, но более менее оптимальный оказался как всегда на самом виду. В начале каждого часа (0 минут, 0 секунд), когда четырех миллисекундный счетчик достигнет значения 125, к нему прибавляется/отнимается константа 0…124. Получился достаточно широкий диапазон корректировки (+/-96мс…12сек в сутки).

Так же с помощью этого прерывания организована динамическая индикация и сканирование кнопок. Когда кнопки отпущены – счетчик антидребезга равен 0, во время нажатия, значение кнопки сохраняется как старое, а счетчик начинает прибавляться при совпадении старого и нового значения кнопок. При достижении счетчика 4х, кнопка считается нажатой. Далее счетчик тикает до 30, сбрасывается в ноль и доходит до 4х – автоповтор. Но второй счетчик (я его назвал автоповтор) не даст сделать 1,2…7 автоповторы. То есть первая реакция на кнопку произойдет через 20мс, а вторая реакция - только через 840мс и далее с частотой примерно 8 Гц.

Протокол радиопередачи слизан с IR SONY с немного измененными временными интервалами (хорошая синхронизация, проще декодировать по сравнению с RC5). Данные радиодатчика температуры содержат следующие байты:

-   Серийный номер (00000000).

-   Значение знака температуры

-   Значение температуры

-   Байт CRC8.

Данные с радиозвонка:

-   Серийный номер (00000001).

-   Значение номера звонка

-   Нулевой байт

-   Байт CRC8.

 

Единица передается импульсом 1200 мкс с паузой 600 мкс, 0 – 600/600, между байтами пауза 1800мкс. Перед посылкой байтов отправляется преамбула из 8-ми нулей и опознавательный сигнал длительностью 10мс. Общее время передачи составляет приблизительно 75 мсек. На пульты от автомобильных сигнализаций декодер приемника не реагирует. Во время приема (после опознавания «своего сигнала» по импульсу 10мс) индикатор гаснет на 50 мс. Это конечно минус, но использовать еще одно прерывание и декодировать сигнал в нем мне показалось довольно таки сложным и запутанным занятием.

 

Теперь по радиодатчику температуры (PIC12F629 + DS18S20 + RCT-433-AS + CR2032).

PIC12F629 работает от внутреннего генератора 4МГц (+/-2%). Кстати на качество декодирования это не сказывается, т.к. в декодере приемника допустим разброс временных интервалов +/-15%. Модуль питается от литиевого элемента 3В CR2032 (уже больше года). Корпусом служит «яйцо» от больничных бахил. Передатчик отправляет данные о температуре (DS18S20), серийный номер и CRC8 либо каждую секунду, либо троекратно через 5 минут, для переключения в схеме предусмотрен джампер (есть еще одна свободная нога). Остальное время контроллер спит и потребляет ток порядка 0,02 мА (насколько позволил измерить мой китайский мультиметр).

Звонок в реальных условиях еще не тестировался. Построен на PIC16F629, питается от одного элемента CR2032. В звонке с помощью джамперов можно выбрать серийный номер и соответственно в часах такая настройка тоже имеется. При нажатии кнопки звонка, три раза подряд в радиоэфир передается последовательность байтов, которую примут часы и включат звук. Если кнопка все еще нажата, то эта последовательность повторяестя. При отпускании кнопки контроллер засыпает.

Платы для этих устройств на начальном этапе не разрабатывались. Все было выполнено на односторонних монтажках посредством провода МГТФ. И, как я убедился, работает на ура и без глюков! В последствии эти часы собрал мой друг @SUS, и помог выловить несколько багов. Благодаря его идеям в часы добавилось множество функций.

 



 

 

 



Первый пробный вариант:










В дальнейшем этот проект усовершенствовался.

 

Добавлено:

- нормальный звук будильника (аппаратный ШИМ вместо программного)

- большие индикаторы до 90 мА на сегмент

- статическая индикация

- автоповтор будильника через 5 минут

- дополнительный выход (логический 0 при звонящем будильнике)

 

Убрано:

- выбор режима выхода будильника

 

Схема.

В часах применимы любые ОА LED индикаторы с током сегментов до 90 мА. В разрыв проводников идущих к точкам индикаторов возможно придется поставить резисторы 100-200 Ом, чтобы выровнить яркость.



 

Пункты меню настройки:

-   вход/выход осуществляется по длинному нажатию на кнопку «МЕНЮ».

-   отображение меню по кольцу по короткому нажатию на кнопку «МЕНЮ».

-   регулировка параметров кнопками «МИНУС» и «ПЛЮС».

-   кнопки регулировки работают по такому принципу: нажал - параметр изменился, держим дальше; после некоторой задержки (0,5сек) включается автоповтор нажатия (8Гц).

-   кнопка «МИНУС» (слева) прибавляет параметр в 2х старших разрядах индикатора, уменьшает одиночный параметр или отключает звук будильника в дежурном меню (длинное нажатие выключает будильник полностью, иначе будет звучать автоповтор через каждые 5 минут).

-   кнопка «ПЛЮС» (справа) прибавляет параметр в 2х младших разрядах индикатора, увеличивает одиночный параметр, сбрасывает секунды в ноль или включает будильник в дежурном меню.

-   при включенном будильнике горит точка в младшем разряде индикатора.

-   при настройке тона будильника звучит сигнал. Отображается частота Х.ХХ кГц.





 

 

Удачи Вам! Быстрых контроллеров, побольше Flash, компактных программ!

P.S. Главным вдохновителем всего этого была моя любимая девушка Валюшка! 


Файлы:
Прошивки, исходники, схемы, платы


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

27 0 1
8 0 0