Начало проекта: рождение идеи
Как-то раз, перелистывая страницы техно-блогов в поисках идей для творчества я натолкнулся на идею, которая потрясла меня своим потенциалом, и заронила в душу ту самую искорку, которую я жаждал. Речь шла об устройстве под названием Nerd Watch. В переводе это будет что-то типа "часы для ботаника" или "...для зануды". Есть и еще выражения - "техно-гик" или "компьютерный гений" и т.п. Кому как угодно! В школе я бы жутко обиделся на любое подобное прозвище. Сейчас от детской ранимости не осталось и следа, наоборот - горжусь тем, что отличаюсь от избалованного потреблением масс-коммюнити! Эти обычно пишут в комментариях, что проще в Китае заказать... Придатки желудков, блин!
Итак, вы только посмотрите, какой экстерьер у этих ботанских часиков!
Да и сама идея - часы на ATtiny13 мне очень зашла! Те, кто знаком с моим проектом микро FM-радио на ATtiny13, поймут насколько близки мне темы из разряда "впихнуть невпихуемое". И все же, несмотря на то, что open-часики замечательная поделка для повторения, мне не понравилось, что уж очень все снаружи! Да и точность, судя по отсутствию кварца, будет соответствующая. Заметьте, я даже не упоминаю о сложности считывания показателей по двум светодиодам! Это ж какой креатив и брутальность!
В общем, "блеснуть" такими часами в определенных техно-кругах можно, но, в моих инженерных глазах, проект явно требует развития. И вот с возрастающей жаждой развития хорошей первичной идеи я начал ковырять интернет дальше. Кто ищет, тот всегда найдет, как поется в замечательной песне моего детства! Вскоре, мои труды были вознаграждены еще одной находкой.
Tiny Time Watch - так назвал свой проект автор.
Тоже открытый дизайн. Не киберпанк конечно... Ну пусть будет techno-style! Чуть симпатичнее! Немудрено, ведь плата, похоже, промышленного изготовления, хотя конфигурацию дорожек я бы чуть отредактировал, так сказать, для гармоничности восприятия. Светодиодов уже побольше, аж 12 штук - более традиционное решение! Значит исключительного шевеления мозгами для определения времени не понадобится. Чип помощнее (ATtiny85), хотя непонятно - зачем.
Недостатки тоже очевидны и субъективны. Все еще открытый дизайн. Часы и минуты отображаются одними и теми-же светодиодами. Кварца все еще нет.
Хочется чего-то более законченного и совершенного. Значит стартуем новый проект!
Техническое задание
Написал и подумал - ну какое задание у хоббийщика! Так, пожелания, идеи и полет фантазии! Что же мне бы хотелось? Дайте-ка сформулировать.
Прежде всего дизайн. Открытый формат - слишком хардкорно. Пусть будет более-менее приличный корпус, скрывающий любительские технические решения! Благо, три-дэ-принтер под рукой, да и ABS-пластик в достатке. Правда что-то надо будет придумать со стеклом... Придумаем по ходу дела!
Удобство и точность считывания показателей. Не хочется смешивать часы с минутами. Пусть будут разные, легко читаемые (возможно разного цвета) светодиоды для часов и минут. Для часов нужно 12 светодиодов, а вот для минут понадобится 60! Не пойдет! Много. Пусть будет тоже 12! А оставшиеся минуты... В них в общем-то не всегда есть необходимость, но как-то показать их надо. Придумаем. А вот время хочется измерять точно. Значит нужен кварц и возможность точной настройки.
Питание. Нужен аккумулятор. Не люблю менять батарейки! А к аккумулятору нужна функция зарядки через USB!
Функции. Почему бы не заложить возможность потенциального расширения функционала. Уж на GPS замахиваться пока не будем, но, скажем, акселерометр добавить нам вполне по силам, чтобы сделать некий аналог финес браслета.
Bluetooth? WiFi? Понеслось... Закрываем пока наши хотелки!
Таким образом, вырисовывается некое устройство с возможностью добавления функций, умеющее в базе показывать время, имеющее достаточно изящный дизайн, высокую точность хода и при этом умещающееся в формате наручного хронометра.
Выбор элементной базы
Честно - я очень хотел сделать устройство на ATtiny13. Вот бы мозги вскипели! Но, от этой идеи пришлось отказаться! Объясню почему.
Во-первых, подключение к тиньке кварцевого генератора (просто кварц к ней подключить нельзя) сразу съедает целую ногу контроллера. Остается не очень много для управления 24-мя светодиодами! Нужен дополнительный обвес, например, регистры сдвига. А еще, нужны выводы для элементов управления (кнопок, гироскопа, в будущем). Я попробовал проработать такую модель, но делать не стал потому что...
Во-вторых, с расширением функций будет проблема! Уж очень тяжело втискивать алгоритмы обработки данных в 1 килобайт памяти программ и 64 бита оперативки! Это конечно отдельный спорт, но иногда хочется свободы творчества без ограничений железа!
В-третьих,... Ну не знаю! Вроде бы и первых двух пунктов хватает для того, чтобы поискать более производительный чип для реализации всего задуманного!
У меня есть опыт работы с двумя мощными контроллерами. Прежде всего, это ESP32, на котором я, например, делал игровой контроллер - беспроводный руль для компьютерных автогонок. Кроме того, есть опыт работы с контроллерами STM32, на основе которых я тоже много чего делал. Например, щуп-осциллограф для компьютерного мастера. В итоге победил STM32. Основной аргумент - цена и доступность. У ESP, конечно больше возможностей, но он дороже и более редкий, тогда как у STM много дешевых аналогов из Китая, которые делают его младшие чипы по цене чуть более дорогим чем те-же ATtiny13. На Али можно легко найти доступные контроллеры из серий STM32F103C6T6 или даже STM32F103C8T6 с ценой как у ATtiny13!!!
Эти мощные чипы на 32-битном ядре Cortex M3 хорошо подходят для решения сложных вычислительных задач (например, обработки массивов данных с гироскопа для реализации фитнес-функционала). Кроме того, они имеют много портов ввода-вывода, что избавляет нас от необходимости применения различных регистров сдвига. Еще один плюс - развитые средства отладки программ, облегчающие написание сложного софта. Ну и паять паяльником их относительно легко (с хорошим флюсом, конечно), поскольку запакованы они в обычный LQFP-корпус, а не в BGA, как сейчас стало модным.
В общем, я остановился на STM, а поскольку у меня в наличии было несколько STM32F103C8T6, то вопрос был закрыт.
Электронная начинка
Разработку я начал, как это ни странно, с печатной платы, прикидывая, каким образом расположить компоненты (сам чип, светодиоды и токоограничивающие резисторы) наиболее компактным образом. А уж какой светодиод, к какой ножке подключать - не так важно. Тем не менее, далее я пойду традиционным путем. Начну со схемы которая легла в основу первой версии часов. Именно первой версии, поскольку сразу браться за реализацию всех хотелок мне не очень хотелось.
Итак, в начале принципиальная схема. Вот как она выглядит в онлайн-редакторе EasyEDA.
В конце статьи я, как обычно размещу ссылку на архив, в котором будет вся необходимая документация для изготовления изделия: схема, печатная плата, исходник программы.
Включение микроконтроллера типовое, с фиксированной конфигурацией сброса. Тактирование самого микроконтроллера осуществляется от внутреннего тактового генератора. Частота тактирования - около 1 МГц (устанавливается программно при помощи конфигурации предделителей). Такая низкая частота значительно снижает потребляемый часами ток.
Для часового таймера использован отдельный внешний кварцевый резонатор. Сначала я пытался использовать для этих целей обычный часовой кварц. У меня есть в запасе несколько штук, купленных в Китае. Вот таких.
Но генератор от него напрочь отказывался запускаться! В ходе изучения документации и форумов выяснилось, что обычные кварцы имеют высокую внутреннюю емкость и не подходят для запуска внутреннего генератора. Емкость кварца не должна превышать 20 пФ. Пришлось найти подходящий, причем в формате SMD. Примерно такой.
У этого емкость оказалась равной 12 пФ и генератор запустился даже без конденсаторов обвеса!
Печатная плата разрабатывалась в SprintLayout 6.0.
Все детали - SMD, формата 0805. Внешний круг светодиодов - указатель минут, внутренний - часов.
На плате есть несколько перемычек, чтобы не делать плату двухсторонней. Их можно сделать тонким обмоточным проводом, толщиной примерно 0,3...0,4 мм (чтобы сильно не увеличивать толщину платы). Можно использовать полоски медной фольги. Точки пайки перемычек должны быть как можно более плоскими, чтобы не препятствовать установке микроконтроллера (они расположены прямо под корпусом).
Печатная плата изготавливалась, как обычно на фрезерном станочке CNC1610.
Плата выполнена из одностороннего стеклотекстолита толщиной 1 мм. Фрезерование дорожек и снятие фольги осуществлялось фрезой 0,1 мм. Вот так выглядит готовая плата.
В ходе финишной обработки плата покрывалась сплавом Розе для защиты медных дорожек от окисления.
Монтаж осуществлялся паяльником с жалом, диаметром 2 мм при использовании флюса RMA-218. Это хороший, текучий флюс, замечательно предупреждающий дорожки от слипания при пайке выводов с мелким шагом.
Смонтированная плата выглядит так.
Выводы для подключения кнопок, источника питания и программатора сделаны эмалированным обмоточным проводом 0,35. На фотографии они находятся под платой.
Внешний круг светодиодов - минуты (аналог длинной стрелки). Для него использованы диоды белого свечения. Пусть вас не смущает их желтый цвет на фото! Светятся они белым! Внутренний круг - часы. Я использовал светодиоды синего свечения (они выглядят прозрачными).
Токоограничивающие резисторы я установил 220 Ом (на схеме 300). Показалось, что ярче будет лучше. Получилось очень ярко!
На фото видно, что кварц установлен криво. Это потому, что плата спроектирована под цилиндрический кварц, с которым не запустилась. С установленным кварцем конденсаторы, как я говорил ранее, не нужны. Внутренний генератор прекрасно запускается и без них!
Корпус
Корпус я решил напечатать на 3D-принтере. Моделирование производилось в давно забытом онлайн-редакторе TinkerCad. Не в Компасе, потому что решил приобщить к 3D своего сына. Показывал ему на примере основные приемы разработки. Программка эта очень простая и для начинающих - самое то!
Модель состоит из корпуса и ремешка. Ремешок тоже смоделирован! Это вам не тряпочка какая-то!
Корпус состоит из 3-х деталей: Основы, нижней крышки и верхней (стеклянной). Все детали за исключением стекла выполнены из ABS-пластика черного цвета. В основе предусмотрено место для установки двух кнопок. Кнопки стандартные 6x6. Стекло напечатано прозрачным SBS-пластиком. Благодаря тому, что слои печатаются перекрестно это в последующем привело к интересному визуальному эффекту!
Еще одна деталь - соединитель ремешка.
Нужна для замыкания двух частей ремешка в кольцо.
В толщину корпус получился около 14 миллиметров. Толстоватенько, но не слишком. К тому же в будущем толщину можно будет и пересмотреть в сторону сокращения. Не забываем, что в корпусе еще надо предусмотреть место для аккумулятора и схемы питания. Об этом дальше. Диаметр корпуса равен 43 миллиметрам.
Финишная сборка
Плата устанавливается в корпус и удерживается в нем за счет плотного сцепления со стенками. Я специально так подбирал размер, чтобы не требовалось дополнительного крепления. В крайнем случае, ее можно закрепить 2-сторонним скотчем.
Сзади видны тонкие проводки, пропущенные через отверстие в перегородке корпуса.
Теперь самое интересное! Я еще ничего не сказал про питание устройства, кроме того, что оно должно быть аккумуляторным, с возможностью зарядки. Раз так, нам потребуются два стандартных модуля: модуль зарядки и модуль стабилизации питания. первый позволит заряжать аккумулятор часов через обычное зарядное устройство, второй обеспечит необходимое напряжение питания вне зависимости от емкости батареи.
В качестве модуля заряда я использовал стандартный TP4056. Они сейчас есть с различными вариантами разъемов. У меня оставались с микро-USB. Его и установил.
В качестве стабилизатора был использован DC-DC преобразователь, позволяющий поддерживать стабильные 3,3 Вольта при изменении входного напряжения от 3 до 15 Вольт.
Преобразователи жестко соединяются между собой проводом от выводов резистора и приклеиваются к обратной стороне основания корпуса на 2-сторонний скотч.
На фото видно, что кнопки установлены в соответствующие пазы корпуса и подпаяны к соответствующим выводам основной платы. На синий провод не обращайте внимания. Это служебный вывод земли, который использовался для измерений и программирования. Потом я его отпаял.
Два проводка с синей изолентой - это выводы интерфейса программирования микроконтроллера: SWDCLK и SWDIO. Третий проводок (ушел вниз) - это провод питания 3,3 Вольта основной платы.
Далее, устанавливаем аккумулятор.
Все, что удалось разместить в корпусе - аккумулятор на 150 мАч размером 20x25x4 мм. Подпаиваем аккумулятор к контроллеру заряда, а провода питания припаиваем к стабилизатору. Аккуратно укладываем их внутри.
Размещаем сам аккумулятор внутри корпуса.
Теперь при помощи двух саморезов закручиваем заднюю крышку.
Устанавливаем сверху матовую крышку из SBS, надеваем ремешок. А часики-то уже тикают!
Если отстегнуть ремешок от корпуса с одной стороны, то можно обнаружить разъем для зарядки аккумулятора.
А вот так часы смотрятся на руке.
На мой взгляд неплохо! Мне понравилось! Световые отметки в виде звездочек. Сквозь стекло проглядывает ТЕХНОЛОГИЯ. Вот только светодиоды все же светят слишком ярко. Резисторы бы увеличить в 2 раза или ШИМ софтовый сделать... Кстати, поворачивая стекло можно добиться разного угла поворота у звездочек светодиодов! Об этом я говорил, когда упоминал печать перекрестными слоями. Очень интересная визуализация!
Софт и функции
При разработке программного обеспечения были использованы:
- Среда STM32CubeMX для формирования общей конфигурации микроконтроллера на основе обертки высокого уровня - HAL.
- IDE System Workbench for STM32 для написания кода на C++ и его последующей отладки.
Для компиляции кода, который размещен в архиве, достаточно только 2-й среды.
Для программирования микроконтроллера использован недорогой программатор STLink.
В ходе отладки я пришел к следующему решению по отображению времени. Светодиод стрелки часов горит постоянно синим цветом. Светодиод минутной стрелки горит постоянно только тогда, когда минуты кратны 5 (5, 10, 15,...). Если минуты не кратны 5, то светодиод мигает. Количество миганий зависит от остатка деления: (минуты)/(ближайшее наименьшее кратное 5 время). То есть, если, например время равно 3 часа 27 минут, то часовой светодиод светит в позиции 3 часа, а минутный светодиод мигает 2 раза в позиции 25 минут (27/25 = 2). С непривычки трудновато, но можно не заморачиваться, если точность в 5 минут устраивает.
Из сервисных функций я реализовал 2 самых необходимых.
Функция 1 - коррекция времени. Переход в режим коррекции часов осуществляется длинным (более 3 секунд) нажатием на нижнюю кнопку. В режиме коррекции часовой индикатор начинает мигать. Нажимая верхнюю кнопку можно выставить требуемый час. Последующее краткое нажатие на нижнюю кнопку заставляет часовой индикатор мигать быстрее - включается режим коррекции минут. Верхней кнопкой корректируем минуты. Очередное нажатие нижней кнопки - выход из режима коррекции.
Функция 2 - экономия аккумулятора. Длительное нажатие на верхнюю кнопку переводит часы в режим потушенного экрана. Светодиоды не горят. Чтобы посмотреть время нужно кратко нажать на верхнюю кнопку. Режим отображения включится на 5 секунд.
Заключение
Отечественная и китайская промышленность выпускает широкий ассортимент часов, будильников и фитнес-браслетов. Часы есть в компьютерах и сотовых телефонах. В конце-концов, маргиналы могут посмотреть на солнце! Естественный вопрос, который возникает в этих условиях - зачем...
Хорошо, что вопрос этот могут задать лишь люди контуры духовного мира которых полностью совпадают с очертаниями мира материального. Эта статья не для них. Скорее всего, они сейчас не читают эти строки, а пишут соответствующие комментарии. Пусть пишут!
Мне понравились часы! Я даже не ожидал, что они понравятся до такой степени. Что-то в них есть. Необычное что-ли. Не как у всех. Моим домашним тоже понравились, как и всем, кому я их показывал. Да, немного страшненький, угловатенький дизайн. Да, не все реализовал, что хотел, но очередная порция эндорфинов выброшена, а инженерная железа получила мощную разрядку!..
Что нужно отметить. Основная проблема - питание. Во включенном режиме часы работают около 1,5 суток. В выключенном - около 5 дней. Основную энергию потребляет контроллер. Тут есть над чем поработать. Во-первых, можно отключить все узлы контроллера, которые не используются (лишние таймеры, АЦП, интерфейсы). Во-вторых, можно использовать прерывания и спящий режим. В третьих, можно вообще установить контроллер с индексом "L" - с пониженным энергопотреблением. Думаю, реально увеличить время работы на порядок! Мой нынешний код оптимальным считать нельзя. Я задачу оптимизации и не ставил. Хотелось быстрей запустить!
Можно также поработать над снижением толщины устройства, если использовать не готовые модули, а отдельные компоненты разместив их на 2-сторонней печатной плате.
Вполне реален и расширенный функционал: секундомер, таймер, фитнес-трекинг на основе гироскопа, bluetooth и т.п. Платформа все это позволяет и где-то в глубоких закоулках моей души начинают зреть идеи для более совершенной версии "ботанических" часов...
Архив для скачивания файлов, необходимых для повторения конструкции находится здесь.
Спасибо, что читаете-смотрите Terrabyte! Подписывайтесь, если вам интересна радиолюбительская тематика, направления мини-ПК, необычных компьютерных решений и инновационных разработок! Спасибо всем, кто нас смотрит и поддерживает своими комментариями и лайками!
Наша группа ВК: https://vk.com/terrabyte
Наш канал на YouTube: https://www.youtube.com/@TERRABYTE
Вам будет интересно:
Вызов для программиста: микро FM-радио на RDA5807M и ATtiny13A своими руками
Прибор компьютерного мастера: осциллограф, частотомер, спектроанализатор
Корпус-конструктор для мини-ПК: от идеи до изделия