Мои вкусняхи

Сводный список записей блога

--->>>> Сводный список записей блога <<<<---

27 ноября 2024

Часы-метеорегистратор


 

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

В качестве контроллера была взята ATMEGA32, термодатчики – DS18B20. Дисплей….

У меня завалялся дисплей на контроллере ST7920. Мало того, что система команд и протокол обмена дурной, так еще и дисплей прикручен к огромной плате, которую особо и обрезать нельзя. А еще у некоторых экземпляров дисплея нормальный контраст получается только при питании от 5 вольт… 

И лежал этот дисплей у меня достаточно долго, но настал и его черед.

А дальше я вспомнил, что у меня в закромах валяется датчик BME280 еще со времен часов  TouchClock2. И, взяв этот датчик, можно получить не только температуру, а еще влажность и давление. Но BME280 не рассчитан на длинную линию между контроллером и самим датчиком. В результате параллельно родился проект OneWire-интерфейса для датчика BME280.

Прошу прощения за не совсем качественные фото дисплея здесь и далее.

Что устройство умеет:

  • Часы со счетчиком дня недели
  • Автоматическая коррекция хода часов
  • 5 будильников с гибкой настройкой и поддержкой отложенного будильника (snooze)
  • Ежечасный звуковой сигнал (отключаемый)
  • Опрос OneWire-датчиков (встроенного и удаленного) 2 раза в минуту с обесточиванием датчиков между опросами
  • Поддержка DS18B20 и OneWire BME280/BMP280 в качестве внешнего и внутреннего датчиков*
  • Ежечасное сохранение усредненных показаний за последние 96 часов (4 суток)*
  • Диапазон измерения и отображения температуры -40..+85°С, шаг 0,5°С
  • Диапазон измерения и отображения  давления 350..850 мм рт.ст. с шагом 1 мм
  • Диапазон измерения и отображения  влажности 0..100%, шаг 1%
  • Настройка коррекции показаний температуры для внутреннего и внешнего датчиков в пределах  ±5°С
  • Построение графиков температуры, влажности, давления
  • Поддержка работы от литиевого аккумулятора (заряд, отключение дисплея, полное отключение при низком напряжении)
  • Автоматическая регулировка яркости подсветки дисплея
  • Ограничение максимальной яркости дисплея при работе от батареи
  • Автоотключение дисплея по таймауту при работе от батареи
  • Потребление в активном режиме (без учета датчиков) – до 35 мА при напряжении 4 вольта
  • Потребление в спящем режиме – 30 мкА (без учета датчиков)
  • Потребление в выключенном режиме – до 10 мкА.

*Поддерживается подключение одного датчика BME280 и одного DS18B20 или двух датчиков DS18B20. Если подключить 2 датчика BME280 – данные о влажности и давлении от внутреннего датчика будут игнорироваться.

Схема


Схема в PDF.

Подсистема питания

Питание устройства возможно как от 5 вольт от внешнего источника (через U1 - USB Type-C разъем), так и от встроенного аккумулятора, подключаемого к разъему XT1. Питание от USB поступает на схему через диод D1. Транзистор Q1 при питании от аккумулятора, работает как идеальный диод.

Микросхема IC3 обеспечивает заряд  аккумулятора током, определяемым резистором R8. Ток заряда рассчитывается по формуле I(мА) = 1200/R8(кОм).

Примененный дисплей – очень капризный в плане питания. Точнее как, контроллер работает, а вот отображение информации – хромает, ему не хватает контрастности. Соответственно, в устройстве была применена повышайка IC1 – MT3608, которая обеспечивает стабильные 5 вольт независимо от напряжения питания. Повышайка управляется микроконтроллером, в режиме пониженного энергопотребления повышайка отключена. 

Для контроля уровня заряда аккумулятора применен внешний ИОН TL431 (IC5). Точность этого ИОНа гораздо выше, нежели встроенного в МК. Это позволяет обойтись без калибровки АЦП.

Датчики

Внутренний датчик питается непосредственно от микроконтроллера. Внешний датчик подключается к разъему XT2, питание на внешний датчик подается через транзистор Q2, линия питания и линия данных защищены супрессорами D3D4.

Управление

Устройство управляется четырьмя кнопками SW1-SW4. Конструктивно кнопки вынесены на отдельную плату.

Оповещение

Для будильника и ежечасного сигнала применена пьезопищалка со встроенным генератором SP1.

Отображение

Применен дисплей на контроллере ST7920, питание дисплея производится от МК, управление контрастностью и яркостью подсветки – тоже от МК.

Фотодиод R17 позволяет оценивать уровень внешней освещенности и регулировать яркость подсветки. 

Часы реального времени

Для подсчета времени используются ресурсы самого микроконтроллера. Для этого к нему подключен «часовой» кварц ZQ1. 

Печатная плата

Конструктив.

Кнопки вынесены на отдельную узкую плату, которая размещается над платой дисплея ниже его металлической рамки. Основная плата и плата кнопок соединяются посредством PLS/PBS-коннектора, для которого в плате дисплея вырезается выемка. В том месте у дисплея как раз нет никаких проводников, только земляной полигон. Основная плата, дисплей и плата кнопок собираются в один пакет при помощи нейлонового крепежа.




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



Питается все это удовольствие от аккумулятора типоразмера 18650, как раз для него предусмотрено пространство за дисплеем над платой устройства.

Прошивка и фьюзы.

При прошивке питание должно подаваться или от программатора, или от аккумулятора/USB. Иначе возникнет конфликт по питанию, который может сделать плохо программатору или USB-порту компьютера.

Прошивка

Фьюзы: High: 0xD1, Low: 0xC4

Работа с устройством.

Mode - кнопка переключения режимов отображения, выхода из меню, отмены изменений.
Длинное нажатие - переход в спящий режим и обратно.

Up/Down - кнопки переключения графиков, перемещения по пунктам меню, изменения редактируемых значений.

Ok - кнопка входа в меню, выбора пункта меню, подтверждения изменений.

У устройства два основных режима отображения информации - режим отображения времени и режим отображения графиков. 

В режиме отображения времени на дисплее отображается текущее время, день недели. 
В правом верхнем углу статус и уровень заряда аккумулятора. 

Если время и день недели некорректны (было выключение часов или снятие питания с МК), время и день недели мигают. 

Ниже дней недели отображается актуальна информация от датчиков. Если подключены оба датчика, их показания разделяются вертикальной чертой. Пиктограммы "домик" и "елочка" обозначают внутренний и внешний датчик, соответственно.

При нажатии кнопки Mode (при условии, что к часам подключен хотя бы один датчик и от него получены корректные данные) часы переключаются в режим просмотра графиков за последние 96 часов.

Если у нас доступен один показатель, то сразу рисуется график этого показателя. 
Если доступно два показателя (например, две температуры с двух DS-ок или давление и температура от единственной BMP280 - то рисуются два графика, один под другим.
Если же у нас три или четыре показателя - то рисуются сразу четыре графика.


В режиме одновременного отображения нескольких графиков кнопки Up/Down циклически отображают отдельно график каждого показателя.



Нажатие кнопки Mode возвращает часы в режим отображения времени. Если в режиме просмотра графиков не нажимать никаких кнопок, часы переключатся в режим отображения времени через 10 минут.

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

Вход в меню из основных режимов - кнопка Ok.


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

Включение устройства - длительным нажатием кнопки Mode.

Будильники.

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


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

Нажатие кнопки Mode отключает будильник. Нажатие любой другой кнопки - откладывает сигнал будильника на 10 минут. Над кнопками выводится соответствующая подсказка.

Ежечасный звуковой сигнал.

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


Установка времени и дня недели.

Тут все просто, сначала выставляется день недели, подтверждается кнопкой Ok, далее устанавливаются часы, далее минуты. Сохранение времени и дня недели происходит только при заключительном нажатии Ok, после установки минут. При этом счетчик секунд сбросится в 0 только если при изменении минут нажимались кнопки Up и/или Down. Т.е. можно нажать Up, потом Down - значение минут не изменится, но при нажатии Ok секунды обнулятся. 
Так же, в случае обнуления секунд, сработает может сработать настройка коррекции точности хода.

Автоматическая коррекция точности хода.

Максимально возможная коррекция точности хода ±160 секунд в сутки.

При установке времени, если был факт смены минут и после предыдущей установки времени прошло не менее 12 часов и не более 45 суток, рассчитается разница времени и на ее основании рассчитается и сохранится внутренний корректирующий коэффициент точности хода часов.

Расчет корректирующего коэффициента будет выполнен только при обнулении секунд, т.е. когда нажимались кнопки Up и/или Down при устаовке минут. В случае, если часы "уходят" вперед, то для обнуления секунд необходимо нажать Up, потом Down - значение минут не изменится, но при нажатии Ok секунды обнулятся и сработает расчет коэффициента.

Следует учесть, что если после последней установки времени прошло менее 45 суток и возникла необходимость перевести часы на час вперед или назад (сезонное или основное время), то при смене часов попытка изменить минуты может привести к перерасчету алгоритма коррекции хода с учетом этого часа, т.е. часы начнут достаточно ощутимо торопиться или отставать. Что бы такого не произошло, при переводе часов вперед или назад на час лучше минуты не менять.

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

Настройки.


В данном пункте меню можно настроить контрастность дисплея, максимальную яркость подсветки при работе от аккумулятора и время перехода часов в режим пониженного энергопотребления при работе от аккумулятора. Это время - от 0 до 250 минут. Если выставить 0 - часы не будут при работе от аккумулятора уходить в режим пониженного энергопотребления. 

При разряде аккумулятора ниже допустимого уровня часы отключатся полностью вне зависимости от данной настройки.

Так же здесь моно настроить коррекцию показаний температуры для внутреннего и внешнего датчиков в пределах  ±5°С с шагом в 0.5°.

8 комментариев:

  1. Андрей, приветствую.
    Наконец появилось устройство в вашем стиле!Сразу захотелось поработать над ним.
    Первое, что смутило-это примененный дисплей.В Кухонном таймере и БП с функцией записи, этот дисплей приемлем, сдесь, почти техническое назначение.В Часах хочется что то более красивое.Те же Часы2 , с цветным дисплеем , очень приятно смотрятся.Нет ли задумок доработать(в Тестере аккумов вы доработали, от атавизма Нокиа5110 -до олед-дисплея)?

    ОтветитьУдалить
    Ответы
    1. У меня этот дисплей лежал несколько лет. И наконец то я его пристроил к делу.

      Удалить
    2. У меня лежало, с пяток Нокиа 5110.Выбросил их в "переплавку".Геморные дисплеи, с плохой читаемостью.Впредь устаревшее хранить не буду, чего жалеть прошлый век.

      Удалить
    3. У меня еще один 5110 лежит, который нормальный, со шлейфом. Пока пусть лежит. На самом деле для экономичных применений альтернативы черно-белым дисплеям практически нет. Само стекло потребляет доли миллиампера, читается без подсветки... OLED-ы и TFT-шки этим похвастаться не могут. Из альтернатив - разве что E-ink-и. Но они дорогие и тормозные.

      Удалить
    4. Я застал период, когда черно-белые телевизоры делали "цветными", за счет трехполосной цветной пленки(небо-земл-трава).Поэтому противник экономии .Емкости аккумов сейчас на всё хватит.

      Удалить
    5. У каждого свое мнение и пристрастия. У меня была задача сделать термометр и утилизировать дисплей. Задача выполнена.

      Удалить
  2. Посмотрел герберы.Плата подходит для домашнего изготовления(особенно если разделить ее на две функциональные части).Главное, в габарите моей УФ матрицы.
    Опять смутил дисплей!Почему то он , даже на Али стоит дорого, дороже цветных дисплеев, что я в последнее время покупаю.
    Начал период осмысления.

    ОтветитьУдалить
  3. Передо мной,на столе, работающие Часы2.В них все это есть.У меня два беспроводных датчика, один дома,один на улице(при -30 отлично работает).Цветной дисплей.Радио.
    Нужно подумать о потребности этого устройства.Дачи сейчас нет.

    ОтветитьУдалить

======= !!! ВНИМАНИЕ !!! ======================================================================
Гугл умный и боится спама. Поэтому иногда ваши комментарии Гугл отправляет мне на премодерацию. Отправлять или нет - решаю не я, а алгоритмы Гугла. Если ваш комментарий не появился сразу, значит я получу уведомление и опубликую ваш комментарий через некоторое время. Я стараюсь это делать достаточно оперативно.