Часы на Bluetooth LE модуле

Сергей и Леонид Безруковы
При создании этих часов преследовались две главные цели: работа без смены батарейки в течении нескольких лет и разработка предельно простого интерфейса с пользователем для установки и коррекции времени. Для реализации первой цели в качестве дисплея был выбран ЖКИ, а вторая цель достигнута путём использования технологии Bluetooth и разработки специального приложения для смарт-устройства на базе ОС Android. В результате получилась следующая конструкция.


Применённый ЖКИ подразумевает мультиплексное управление. Генерирование сигналов для ЖКИ производится специальным драйвером, встроенным в Bluetooth модуль, на который также возложена реализация всей логики работы устройства. Модуль выполнен на основе PSoC фирмы Cypress (теперь Infinion) и включает микроконтроллер архитектуры ARM CM0, в который помимо стека Bluetooth LE может быть загружена программа пользователя.


Компоненты Q1 и B1 на схеме предназначены для реализации функции будильника и других звуковых эффектов, и в предлагаемой версии устройства не задействованы. В нашем случае при использовании часов в подвальном помещении дома будильник не нужен. Программирование модуля производится через разъём SV1, в качестве программатора использован MiniProg3. Однако, возможно использование программатора KitProg, имеющегося на любой демо-плате фирмы, которые доступны по ценам, начиная с 5 USD.


Питание часов производится от одной батареи типоразмера AAA через микромощный преобразователь IC2, повышающий её напряжение до 3.3В, что необходимо для нормальной работы ЖКИ. Стабилизация напряжения питания схемы преобразователем гарантирует постоянный контраст ЖКИ при разряде батареи. Преобразователь работоспособен при снижении напряжения на входе до 0.7В, что позволяет практически полностью использовать всю энергию батареи. Программа модуля разработана в среде PSoC Creator 4.3 (исходный код проекта прилагается) и задействует следующие компоненты:


Собственно хранение времени производится в компоненте RTC модуля, которая легко настраивается графическим конфигуратором в составе IDE, включая переходы на летнее время. Если эта опция не требуется, следует снять галку DST. Следует помнить, что RTC – это программная компонента, которая автоматически вызывается каждую секунду по прерыванию таймера WDT0 для модификации счётчика времени, и имеет встроенную функцию будильника. Обновление времени на дисплее раз в минуту также реализовано программно, поскольку функция будильника RTC зарезервирована для возможного расширения функционала часов в будующем. Источником тактирования RTC служит генератор, стабилизированный часовым кристаллом, входящим в состав модуля.


Компонента драйвера ЖКИ также настраивается за несколько кликов. При работе в режиме Low speed она тактируется от часового генератора, что благоприятно сказывается на токопотреблении устройства. Период генерации сигналов ЖКИ и уровень контраста следует подобрать экспериментально в зависимости от экземпляра дисплея и условий эксплуатации часов, именно от угла считывания времени с дисплея, соответствующему его максимальному контрасту. Это звучит страшно, но на практике контраст ЖКИ с приведёнными в проекте настройками получается вполне приемлимым при варьировании угла считывания в достаточно широких пределах.


Очень удобно, что выводы сигналов COM1 – COM3 для ЖКИ, а также для всех его 12 сегментов, можно направить на любой вывод модуля. Это существенно упрощает разводку модуля на плате, файл платы часов для Eagle прилагается. На плате вывод сигнала будильника направлен на пин P1.4 модуля. Там-же на ней имеются контактные площадки для установки транзистора Q1 в корпусе SOT323. Для генерации звуковых эффектов в PSoC имеется достаточно незадействованных ресурсов, таких как таймеры и блок PWM. Также имеются свободные выводы и I2C компонента для подключения внешних датчиков.


Bluetooth компонента модуля реализует версию 4.2 протокола BLE и сконфигурирована на роль сервера, включающий, помимо всего прочего, стандартный сервис Bluetooth SIG – Current Time. Из всех характеристик этого сервиса оставлена лишь одна, которая также называется Current Time, хранящая текущее время и дату. Использование стандартного сервиса позволяет просто реализовать чтение и установку времени и даты любым Bluetooth приложением, поддерживающим этот сервис. Мы, однако, разработали своё приложение для синхронизации с внешним смарт-устройством, подробнее об этом ниже.

В режиме показа времени BLE компонента модуля выключена и находится в режиме глубокого сна. Перед началом синхронизации времени с внешним смарт-устройством следует нажать на кнопку K1. При этом BLE компонента пробуждается и начинает посылать в эфир оповещения (advertisement) в течении 30 секунд, что конфигурируется настройками модуля. Этого времени более чем достаточно для установки соединения с часами. Если соединение не было произведено в течении этого промежутка времени, BLE компонента выключается до следующего нажатия на кнопку. Работа часов в режиме соединения индицируется мигающими точками после первой и третьей цифры (точка, разделяющая часы и минуты на дисплее показывается постоянно). Передатчик модуля сконфигурирован на минимальную мощность -18dBm (≈0.015мВт), но этого вполне достаточно для его обнаружения смарт-устройством пользователя в радиусе до 2м. Указанными мерами достигается достаточная для практических целей защищённость устройства от несанкционированной переустановки времени удалёнными злоумышленниками, хотя в следующей версии часов следует подумать о конфигурировании SM (Security Manager) модуля для организации контролируемого спаривания с внешними смарт-устройствами и соединения только с таковыми.

Как отмечалось выше, одной из главных целей при разработке устройства было обеспечение минимального токопотребления. На графике ниже показано потребение по цепи 3.3В в режиме показа времени и неактивной BLE компонентой. График получен с помошью инструмента Energy Profiler входящего в состав Simplicity Studio IDE фирмы Silicon Labs и аппаратного обеспечения на демо-плате WSTK BRD4001A фирмы.


Таким образом, среднее токопотребление в этом режиме получилось около 5.7мкА. Периодические всплески потребления с периодом 1 сек обусловлены работой программной компоненты RTC, которая использует процессор для пересчёта времени и даты. Однако, влияние этой компоненты на общее токопотребление пренебрежимо мало. К сожалению, указанные инструменты не позоляют без существенных изменений на демо-плате измерить токопотребление непосредственно от батареи ААА. Однако, поскольку в рассматриваемом режиме оно практически статическое, можно воспользоваться обычным микроамперметром. Измерения показали токопотребление в районе 22 – 23 мкА. Это хорошо согласуется с графиком КПД DC-DC конвертера, который при малых токах нагрузки в несколько мкА падает до 55 – 60%. Поскольку ёмкость ААА батареи среднего качества примерно равна 1000мАч, при потреблении тока 35мкА (с учётом саморазряда), её энергии должно хватить на питание часов в таком режиме в течении 3.2 года. На следующем графике показано потребление часов в режиме передачи оповещений с периодом 1 сек.


Передача оповещений начинается после первого широкого импульса на графике, соответствующего выводу BLE компоненты из сна по нажатию кнопки. Высокие пики соответсвуют моментам передачи оповещений, а низкие, как мы уже знаем — работе компоненты RTC. Средний по высоте импульс соответствует моменту выдачи нового времени на дисплей по истечении минуты, что требует несколько большей работы процессора. Среднее токопотребление в этом режиме примерно равно 43мкА. Наконец, последний график показывает токопотребление в режиме связи с внешним смарт-устройством.


Периодические пики соответствуют сеансам связи между смарт-устройством клиента и часами. Этот период программно сконфигурирован на 100мс, а мощность передатчика на время соединения повышается до 0 dBm (1мВт). Среднее токопотребление в таком режиме, согласно графику, составляет около 170мкА. При типичной точности часового кристалла в районе 20 ppm, рассогласование показаний часов с точным временем не превышает 1 минуты в месяц без подстройки. Этого вполне достаточно для многих практических случаев. Таким образом, подстройка времени требуется не чаще, чем для обычных бытовых электронных часов, и токопотребление наших часов определяется таковым при выключенной Bluetooth компоненте модуля, как показано на первом графике выше.

Приложение для смарт-устройства, обеспечивающее интерфейс пользователя с часами, имеет несколько более широкий функционал, чем требуется только для синхронизации времени, что сделано специально с прицелом на будущую адаптацию. Оно разработано в среде Android Studio 3.6.3 и пока рассматривается как экспериментальное. Это наш первый опыт по разработке мобильных приложений. Приложение имеет 2 основных режима работы.


При нажатии кнопки SCAN производится сканирование видимых Bluetooth устройств в течении 10 секунд. При этом слева от этой кнопки показывается вращающийся кружок, а на экране отображаются имена обнаруженных устройств (если они передаются) и их MAC адреса. По истечении 10 секунд сканирование можно вобновить нажатием на красную кнопку SCAN.


При кликании на устройство производится чтение всех поддерживаемых им сервисов и их характеристик, как показано ниже на примере характеристики Current Time. В этом режиме возможно производить манипуляции с характеристиками сервера в соответствии с их свойствами (Read, Write, и т.д.) или разорвать соедниение. Таким образом, при этом наше приложение работает как любой Bluetooth сканер и может быть использовано, например, для ручной установки времени и даты.


Собственно для синхронизации времени предназначен второй режим приложения, активизируемый нажатием кнопки Sync Clock в окне основного меню. При этом также начинается сканирования и на экране показываются имена всех обнаруженных Bluetooth устройств, поддерживающих стандартный Bluetooth SIG сервис Current Time, имена которых начинаются с Clock. Это сделано с целью ограничения числа показываемых устройств и облегчения выбора одного из них для синхронизации времени. При бурном развитии технологии IoT сегодня телефону пользователя может быть видно до нескольких десятков соседних Bluetooth устройств.


Синхронизация начинается по нажатии на имя сответствующего устройства и занимает пару секунд. По завершении синхронизации установленное время читается из часов и отображается для контроля в окне устройства, как показано выше. После этого связь с синхронизируемым устройством автоматически разрывается в целях экономии энергии батареи. APK файл мобильного приложения доступен в прикреплённом к статье архиве. Работа его проверена на версиях ОС Android 9 и 10. В архиве также содержится исходный код проекта для Bluetooth модуля. Скриншоты экрана телефона сделаны с помошью приложения ApowerMirror.
Ser60
  • ?
  • 30 июля 2020, 06:57
  • Ser60
  • 1
Файлы в топике: Clock.zip

Комментарии (5)

RSS свернуть / развернуть
А где обещанный «прикрепленный архив»?
0
  • avatar
  • Vga
  • 30 июля 2020, 07:08
Что-то, наверное, пошло не так с прикреплением. Разберусь утром (по местному).
0
Обещанный файл прикреплён. Извиняюсь за недоразумение.
0
Отличная статья, впрочем, у Вас все статьи отличные!
0
Спасибо на добром слове. Если Вас интересует Bluetooth тематика, приглашаю прочитать вчера опубликованную другую мою статью на эту тему.
+1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.