Вдохновившись некоторое время назад статьей «Умные часы своими руками за 1500р.», я тоже решил попробовать сделать подобный девайс.
Эта статья не позиционируется как руководство к действию или инструкция, скорее как указание на ключевые моменты, с которыми мне пришлось столкнуться. Быть может, кому-то она послужит источником вдохновения и полезной информации.
Подбор компонентов, разводка платы, пайка в суровых условиях, 3D-печатный корпус и JavaScript на часах — под катом. Welcome!
Требования
- Нужно узнавать время без необходимости лезть в карман за телефоном
- Должен быть приём оповещений о входящих звонках, SMS и уведомлениях из мессенджеров
- Срок автономной работы должен быть минимум неделя
- Быть как можно компактнее
Уже исходя из этого небольшого списка требований, можно приступать к выбору компонентов и уточнению технических особенностей реализации. Бюджет проекта по времени и финансам не был особо ограничен, серийное производство не планировалось, поэтому можно было позволить себе разгуляться и не сильно париться над экономией каждой копейки.
Кроме хотелок общего плана были ещё и сугубо технические:
- Создание и запуск на часах пользовательских приложений. Как у Pebble. Вообще, здесь и далее часы всё больше будут напоминать клон Pebble, но почему бы и нет
- Память для приложений и их данных
- Адекватный контроль уровня зарядки, чтобы часы не вырубались внезапно при разряде аккумулятора, а показывали «палочки» и предупреждали заранее
- Акселерометр, гироскоп и магнетометр для полноценного отслеживания движения пользователя. Чтобы была возможность сделать шагомер или смарт-будильник, следящий за фазами сна по наличию движения
Всё это в итоге кристаллизовалось в небольшую диаграмму:
Микроконтроллер объединяет вместе BLE 4.x для связи со смартфоном, шины I?C и SPI для датчиков и дисплея с памятью, управляет вибрацией и реагирует на нажатия кнопок, всё питается от Li-Po аккумулятора.
Теперь можно начать процесс выбора чипов и деталей. По трудоёмкости и потраченному времени это был самый сложный и долгий процесс, нужно было много чего сравнить, искать, и погрузиться с головой туда, где раньше не плавал.
Выбор компонентов
Микроконтроллер
Первым делом необходимо выбрать контроллер, который будет "мозгом" устройства и всё остальное на плате будет служить ему во благо.
Чтобы устройство получилось компактнее, необходимо использовать как можно меньше компонентов и модулей. Здесь на помощь приходят различные системы на кристалле, которые объединяют в себе функционал bluetooth-модуля и микроконтроллера.
Источник: www.argenox.com
- Cypress PSoC BLE ядро ARM Cortex-M0, BLE 4.2, 256kB FLASH, 32kB RAM, куча периферии и встроенный балун, широкий диапазон напряжения питания: 1.9-5 вольт
- Texas Insturments CC2541 — BLE 4.0 и 8051-ядро, 256kB FLASH, 8kB RAM
- Texas Instruments CC2640 — BLE 4.1, Cortex-M3, 128kB FLASH, 20kB RAM
- Dialog DA-14580 — Cortex-M0, BLE 4.1, 16 MHz, 42+8kB RAM, 32kB OTP (однократно программируемая память, но есть возможность запускать код с внешней SPI FLASH), самый крохотный и мало потребляющий чип из перечисленных
- SiLabs EFR32 — Cortex-M4F, 40 MHz, BLE 4.x, Bluetooth 5, до 1MB FLASH, до 256kB RAM
- Nordic nRF52832 — Cortex-M4F, 64MHz, BLE 4.x, Bluetooth 5, 512kB FLASH, 64kB RAM, эмуляция NFC-меток, балун встроен
В куче вкусных и не очень решений выбор пал на nRF52832, этот чип оказался самым производительным и довольно удобным в плане корпуса (6x6mm 48-pin QFN). Также шикарной опцией, сильно упрощающей разводку платы, является возможность программно назначить любую периферию на любой из GPIO-выводов. Это то, чего так не хватает многим микроконтроллерам. Благодаря поддержке NFC можно добавить к часам функционал NFC-эмулятора и зашить в часы все свои карточки-пропуска.
В даташите написано, что есть встроенный RTC (часы реального времени), это удобно. Но впоследствии оказалось, что это не часы, а Real-Time Counter, т.е. это самый обычный таймер, работающий от кварца 32.768kHz в том числе и в спящем режиме. Поэтому в следующей ревизии устройства я буду использовать отдельный чип для RTC, например STMicroelectronics M41T62LC6F. Он имеет встроенный кварц на 32.768kHz и работает по интерфейсу I?C.
Отладочная плата nRF52-DK стоит довольно дёшево, порядка 4тыс. рублей. На Aliexpress можно найти и за ~3тыс.
Так как устройство не предполагает серийного производства и какой-либо рыночной продажи, то рисовать свою плату и строить своё решение на BLE SoC довольно увлекательное занятие без серьёзных последствий. Для тех же, кто хочет поскорее выйти на рынок, рекомендуется использовать готовые пред-сертифицированные модули.
Причин здесь несколько и связаны они с радио: для любого нового электронного устройства на рынке необходимо получать разрешение и проходить сертификацию у таких регуляторов как CE и FCC.
Сопутствующие радости включают в себя особую разводку платы с учётом особенностей распространения сигналов с частотой 2.4ГГц, экранирование, замеры в безэховой камере, согласование импеданса и прочую СВЧ-магию. В готовых модулях вся эта работа уже проделана их разработчиками, пользователю достаточно встроить модуль в своё решение и сертифицировать ничего уже не нужно.
Кварцевые резонаторы
К выбранному чипу nRF52832 подключаются кварцевые резонаторы:
- На 32MHz для тактирования ядра и радио, обязателен
- На 32.768kHz для тактирования часового таймера и тайм-слотов BLE во время спящего режима. Необязателен, но его подключение уменьшает энергопотребление (тайм-слоты можно делать короче) и увеличивает точность хода часового таймера RTC.
Оба вида кварцев заказаны в корпусе для поверхностного монтажа с Aliexpress:
Дисплей
Чтобы часики тикали без подзарядки хотя бы неделю напролёт, необходимо решить проблему того, что матрица дисплея в рабочем режиме потребляет много тока. Насколько я понял, производители часов решают эту проблему двумя способами:
- Включать дисплей и отображать содержимое только тогда, когда происходит взмах руки и экран часов попадает в поле зрения пользователя, либо когда внимание пользователя уже привлечено, например, уведомлением или будильником
- Отображать содержимое постоянно, используя дисплеи, которые практически не потребляют тока на отображение картинки, а потребляют его только на обновление содержимого. За примерами далеко ходить не надо: это e-ink, Memory LCD либо IMOD/mirasol
Для варианта, когда дисплей большую часть времени представляет собою труд Малевича, на рынке есть такие варианты: OLED, TFT, Amoled, телефонные модули LCD (Nokia, Siemens, etc.). Остаётся подыскать дисплей с подходящей диагональю.
Примеры:
- Маленькие OLED-дисплеи, на Ali Express такие стоят копейки.
Минусов куча: маленькая диагональ, монохромный, потребление 10-20mA, громоздкий модуль. Без платы модуля — широченный шлейф и море обвязки, что поглотит значительный кусок площади на плате. - TFT LCD, например ILI9341. Из минусов: потребление, широкий шлейф
Экраны на E-Ink отпали сразу, потому что слишком медленная скорость обновления экрана, монохромность и, скорее всего, трудно найти в открытой продаже достаточно маленький E-Ink дисплей.
Если взглянуть на Pebble, то можно увидеть, что он использует именно "Always on"-дисплей. Pebble Classic использует монохромный SHARP Memory LCD дисплей, Pebble Time использует цветой (64 цвета) дисплей по похожей технологии, но производимый JDI, в открытой продаже он отсутствует.
По поводу IMOD/Mirasol, ничего кроме маркетинговых брошюр и часов Toq от Qualcomm найти не удалось.
Захотелось взять цветной дисплей как у Pebble Time. Наиболее близким аналогом, который находится в открытой продаже, стал SHARP LS013B7DH06 (его даташит).
Характеристики:
- Диагональ 1.33"
- Разрешение: 128х128, 8 цветов (3 бита на пиксель)
- Размеры: 26.82x31.3mm
- Интерфейс: SPI
- Напряжение питания: 5V, но логические уровни SPI от 2.7V
С напряжением питания получилась засада, так как от Li-Po аккумулятора не получить требуемые 5V напряжения без дополнительных повышающих преобразователей. Но ток у дисплея мизерный и получить нужные 5V довольно просто с помощью charge pump типа Linear LTC1754-5:
Ещё одной особенностью стала необходимость хотя бы раз в секунду переключать состояние пина EXTCOMIN (External COM Inversion) с высокого уровня на низкий и наоборот, чтобы на панели экрана не накапливался заряд и картинка в один прекрасный момент не застыла на месте. Для этих целей можно утилизировать встроенный PWM (ШИМ) микроконтроллера, настроенный на скважность 50% (меандр) и на частоту 1Hz или выше, либо любой другой (в том числе и внешний) генератор меандра.
Дисплей соединяется с платой с помощью небольшого шлейфа, очень удобно при этом использовать FPC-коннектор на 10 выводов с шагом 0.5mm, например Hirose FH12-10S-0.5SH:
Модуль дисплея не обладает своей подсветкой и не просвечивается светодиодами насквозь как обычный жидкокристаллический экран, поэтому пока что часы у нас без подсветки и ночью время не посмотреть. Если кто-то знаком с процессом создания модуля подсветки для такого рода экранов, прошу отозваться.
Аккумулятор
Пришлось потратить некоторое время на то, чтобы выбрать подходящий по размерам аккумулятор из стандартной номенклатуры размеров. Искал литий-полимерный аккумулятор с напряжением 3.7V и с ёмкостью примерно 100mAh.
Аккумулятор планировалось размещать под платой, зная размеры платы, можно легко подобрать аккумулятор, который будет подходить и ничего не будет выпирать.
На Aliexpress можно заказать целую уйму аккумуляторов почти на любой размер, главное знать систему кодирования их названий. А она такая: HHWWLL, где HH — толщина (высота) аккумулятора в десятых долях миллиметра, WW — его ширина и LL — его длина в миллиметрах.
Пример: 402025 — аккумулятор толщиной 4mm и размерами 20x25mm
Были выбраны аккумуляторы 302025 (3x20x25mm) ёмкостью 110mAh и заказаны на Aliexpress.
Питание
Так как литий-полимерные аккумуляторы имеет смысл разряжать только до 3 вольт, то было решено питать всю схему от стабилизированных 3V и если напряжение на батарее опустилось ниже 3V, то отрубать главный регулятор питания микросхемой защиты (Maxim MAX809TEUR+T).
Общее напряжение питания в 3V укладывается в диапазоны питания всех элементов схемы, кроме дисплея, которому нужно 5V. Поэтому дисплей питается через повышающий преобразователь Linear LTC1754-5 напрямую от батареи.
Если взглянуть на кривую разряда такого типа аккумуляторов,
то видно, что вся ёмкость аккумулятора приходится на диапазон напряжений от ~4V до 3V, поэтому обычного понижающего преобразователя на 3V будет достаточно, чтобы обеспечивать систему стабильным напряжением и при этом эффективно высосать всю энергию из аккумулятора, не оставив ничего, но и не переразрядив его.
В качестве понижающего преобразователя был выбран Texas Instruments TPS78230DRVT, он обладает маленьким рабочим током в 500nA и максимальным током в 150mA, чего вполне достаточно. Корпус SON-6 компактный и довольно паябельный:
Зарядка аккумулятора
Зарядку аккумулятора было решено производить через стандартный microUSB-порт (Molex 47346-0001), но не достаточно просто подключить аккумулятор прямо к шине 5V от USB и так заряжать, необходимо обеспечить правильный процесс зарядки, разбитый на несколько фаз: preconditioning, constant current, constant voltage.
Популярным решением для зарядки аккумуляторов небольшой ёмкости (до 500mAh) является микросхема Microchip MCP73831. Ток зарядки (зависит от ёмкости аккумулятора) программируется резистором, присутствует tri-state или open-drain выход для уведомления о начале и окончании процесса зарядки.
Мною же была выбрана другая микросхема — Maxim MAX1555EZK-T. Она имеет фиксированный ток зарядки в 100mAh и имеет тот же корпус, что и микросхема от Microchip и при этом требует минимум внешних компонентов и обладает open-drain выходом для оповещения о процессе зарядки:
В следующей ревизии платы всё-таки переключусь на микросхему от Microchip, потому что зарядный ток в 100mA для 110mAh аккумулятора это, возможно, многовато.
Контроллер ёмкости аккумулятора
Существует несколько разных по исполнению и точности итогового результата техник по отслеживанию степени заряженности аккумулятора (в англоязычных источниках это называют State of Charge):
Измерять т.н. open circuit voltage/OCV (напряжение на обкладках) батареи через АЦП и делать вывод о ёмкости аккумулятора. Чаще всего требуется перенести диапазон напряжений в область, которая приемлема для работы АЦП с помощью делителя напряжения. Минусы этого подхода в том, что график зависимости напряжения от ёмкости у литий-полимерных аккумуляторов довольно пологий, а так же сами показания изменяются с каждым циклом и подвержены действию шумов и принципиальной невозможности измерить истинное напряжение на обкладках из-за влияния тока нагрузки
Другой способ это вместо измерения напряжения на обкладках измерять ток, который втекает в аккумулятор и вытекает из него. Это так называемый coulomb counting. Типовое решение это интегрирование значения падения напряжения на шунтирующем резисторе небольшого сопротивления (около 100mOhm). Зная ёмкость аккумулятора, по току, который из него вытек за определённый период времени, можно сделать вывод о том, сколько ещё энергии осталось в аккумуляторе (пренебрегая саморазрядом). Минусы этого подхода в том, что не учитывается саморазряд, а так же то, что истинная ёмкость аккумулятора изменяется с каждым циклом заряда-разряда. Грубо говоря, из аккумулятора вытекает меньше тока, чем втекает в него при зарядке. Из-за этого, со временем, неизбежно будет накапливаться ошибка в показаниях
- Комбинирование первого и второго способов: измерение и напряжения на обкладках и протекающего тока. Грамотное комбинирование двух подходов поможет построить модель, которая будет с хорошей точностью оценивать ёмкость аккумулятора. Для того, чтобы этот подход заработал, необходимо произвести как минимум один цикл заряд-разряд для сбора данных о зависимости напряжения на обкладках от ёмкости. Причём каждый следующий цикл должен будет вносить изменения в модель аккумулятора так, чтобы ошибка не накапливалась. Есть статьи, в которых люди рассказывают, как с помощью фильтра Калмана объединяли данные разных измерений для предсказания оставшегося заряда ([1], [2])
- Maxim MAX17043 — с помощью проприетарного алгоритма по напряжению на обкладках строит внутри себя модель аккумулятора. Обещает точность измерения оставшегося заряда в 3%. Интерфейс I?C. Неплохой и маленький корпус
- OnSemi LC709203F — измеряет OCV, интерфейс I?C, точность в 2.8%, есть температурная компенсация через внешний термистор. Дорого и плохо достаётся в России
- Texas Instruments BQ27621 — измеряет напряжение на обкладках, I?C, точность не указана, стоит дорого, корпус BGA
- Texas Instruments BQ27421 — одновременно измеряет напряжение и протекающий ток. Интерфейс I?C, точность не указана, стоит дорого, корпус BGA
- Linear LTC2941 — измеряет протекающий ток, интерфейс I?C, точность 1%, требует дополнительно внешний шунтирующий резистор (в LTC2941-1 он встроенный), корпус: 2x3mm DFN-6
Из доступных вариантов была выбрана микросхема Linear LTC2941 за самый маленький, но паябельный корпус и внятный алгоритм работы. Заказана на Aliexpress.
Источник: Linear Technology
Микросхема использует технику coulomb counter-а и считает протекающий ток с точностью в 1%, работает по интерфейсу I?C (SMBus) и обладает маленьким, но удобным корпусом: 2x3mm DFN-6:
Через I?C внутри микросхемы можно задать значение предделителя счётчика тока, а так же задать или прочитать значение самого счётчика. Счётчик 16-битный и увеличивается тогда, когда ток течёт в батарею и уменьшается, когда ток из батареи вытекает. Максимальное значение счётчика (0xFFFF) можно принять за полностью заряженную батарею, а минимальное (0x0000) за полностью разряженную. При удачно подобранном предделителе счётчика можно добиться того, что счётчик дойдёт до максимума в процессе зарядки, и дойдёт до нуля при полном разряде аккумулятора. Есть возможность задать границу значения счётчика, ниже которой микросхема будет бить тревогу и выдаст прерывание.
Акселерометр
Среди кучи вариантов на рынке был выбран довольно популярный чип: InvenSense MPU-9250. Это система в корпусе (SiP), совмещающая в себе MEMS-Акселеромер, MEMS-гироскоп и чип магнетометра.
- Напряжение питания от 2.4V до 3.6V
- 16-битный трёхосевой MEMS-акселерометр с диапазонами измерений ±2g, ±4g, ±8g, ±16g
- 16-битный трёхосевой MEMS-гироскоп до 2000°/sec
- 16-битный трёхосевой магнетометр с диапазоном измерений до ±4800?T
- Встроенные цифровые фильтры
- Интерфейсы I?C и SPI
- Программируемые прерывания
- Сопроцессор для обработки показаний DMP (Digital Motion Processor)
Чип отличный, но в итоге показалось, что это оверкилл и для применения в часах достаточно простого акселерометра. Например Analog ADXL362 — по утверждениям производителя, это самый экономичный трёхосевой MEMS-акселерометр.
Флеш-память
Было решено для приложений и данных использовать внешнюю SPI-FLASH память. Из разнообразия вариантов был выбран чип Winbond W25Q256FV в компактном корпусе WSON-8:
Объем флеш-памяти составляет 256 мегабит (или 32 мегабайта), вполне достаточно. Память поделена на страницы по 256 байт, сгруппированные в сектора по 4 килобайта и блоки по 32 килобайта. В активном режиме (чтение или запись) потребляет до 20mA, в ждущем режиме — менее 1?A.
Как и с акселерометром, в последствии начало казаться, что 32 мегабайта это тоже оверкилл и можно было вместо этого использовать встроенную FLASH-память микроконтроллера, в ней аж 512 килобайт. Но место на плате было и желание иметь файловую систему прямо на часах тоже присутствовало.
Кнопки
Я захотел, чтобы управление интерфейсом производилось путём нажатия на кнопки сбоку корпуса (прямо как у Pebble, какое совпадение). Тачскрин на такую маленькую диагональ экрана я в свободной продаже найти не смог. Сильно озадачивать себя выбором кнопок не стал и выбрал первые, которые были под прямым углом к плате и что попались под руку:
Источник: Чип&Дип
Потом оказалось, что пластик в кнопках довольно плохо переносит пайку феном и мытьё платы с ацетоном.
В качестве альтернативы нашёл кнопки от Omron B3U-3000P:
Буду использовать их в следующей ревизии платы.
Вибромоторчик
Чтобы уведомлять о таких событиях, как оповещения или будильник, нужна вибрация.
На Aliexpress была заказана горсть вибромоторов для поверхностного монтажа, работающих от 3V и размерами (HxWxL) 3x3x12mm:
Моторчик хорошо паяется к плате с помощью паяльной пасты, потребляет в пике 100mA и даёт хорошую и ощутимую вибрацию.
Антенна
Из-за ограничений на доступную площадь платы, в качестве антенны была выбрана чип-антенна поверхностного монтажа. Это керамические детали, внутри которых особым образом намотан проводник, выступающий в качестве антенны. Коэффициент усиления у этих антенн мизерный, но для носимого устройства в паре со смартфоном этого хватает. В ходе тестов выяснилось, что две бетонных стены в квартире сигнал тоже вполне пробивает.
Первой попавшейся чип-антенной на 2.4GHz стала Johanson 2450AT18B100:
Вообще, это довольно популярные антенны, а сами Johanson производят ещё и балуны, специально оптимизированные под определённых производителей, в том числе и для Nordic. Специально для nRF52 Johanson сделали фильтр гармоник Johanson 2450FM07A0029, который заменяет рекомендуемый в референс-дизайне LC-фильтр перед антенной.
Антенны были заказаны на Aliexpress лентой на 10шт. за 214р/лента.
Всё остальное
Пассивные компоненты для подтяжек и обвязки в основном представляют собой чипы типоразмеров 0402 и 0603 и заказаны в Элитане. Помимо пассивных компонентов, на плате присутствуют два транзистора и пара диодов. Они участвуют в управлении вибромоторчиком, а так же в схеме питания, развязывая питание от USB и аккумуляторное.
Схема и плата
Вид платы на скриншотах слегка отличается от того, что было заказано и присутствует на фотографиях устройства. На скриншотах платы просто немного более поздняя ревизия с незначительными изменениями.
Решив попробовать что-то новое, схему и плату я рисовал не в привычном DipTrace, а в облачной EDA Upverter: ссылка на дизайн.
Upverter позволяет осуществлять сквозное проектирование платы и схемы одновременно, поэтому часть элементов разводки выполнялась по схеме, а часть схемы проектировалась с учётом особенностей разводки.
Ещё одной киллер-фичей Upverter-а является огромнейшая библиотека компонентов, заботливо сгенерированная ботами и кучей индусов. Оказалось очень удобно взять уже нарисованную деталь и просто проверить, что всё более-менее правильно, вместо того, чтобы полностью рисовать символ и футпринт самостоятельно.
Сперва я решил расположить компоненты, положение которых будет закреплено точно: кнопки, порт microUSB и разъём под экран. Монтажных отверстий делать не стал, в надежде на то, что плата будет зажата корпусом и ничего болтаться не будет.
После расположения фиксированных элементов, последуем «rule of thumb» и будем разводить радио самым первым. Чип-антенна имеет около себя небольшую keepout-область, внутри и под которой на всех слоях не рекомендуется располагать дорожки и полигоны, поэтому правилом хорошего тона будет разместить антенну у края платы, желательно ближе к одному из углов. Собственно, расположение антенны продиктовало и расположение микроконтроллера. Чтобы длина проводника от порта выхода антенны у чипа до самой антенны была как можно меньше (с учётом согласующих компонентов), контроллер располагаем поближе к тому краю, на котором будет находиться антенна.
Все остальные компоненты можно располагать (не забывая про здравый смысл) вполне свободно. Это благодаря тому, что у микроконтроллера nRF52 положение портов для цифровой периферии можно определять программно.
По моему небольшому опыту, удачное взаимное расположение компонентов это 90% успеха и оно диктует качество дальнейшей разводки, поэтому такому процессу надо уделять особое внимание.
Для наглядности раскрасил примерную топологию ключевых участков:
Плата четырёхслойная, разместить выбранные компоненты на плате и развести их соединения было делом нескольких ночей, а затем ушла примерно неделя на тупление в плату, поиск ошибок, неторопливую перепроверку и перечитывание даташитов во избежание внезапных сюрпризов.
Плата рисовалась с учётом технологических норм производителя плат, которым стал американский OSHPark.com:
- Проводник/зазор: 5/5 Mil
- Переходные отверстия: 10/4 Mil отверстие/пад
- Материал: FR408
- Финишное покрытие: иммерсионное золото с подслоем никеля (ENIG)
- Глухие переходы (blind vias) и переходы на внутренних слоях (buried vias) не поддерживаются. А нам и не надо
При этом цена в $10 за кв. дюйм и количество плат в заказе — 3шт. Это очень качественные и недорогие (для прототипов) платы с узнаваемой пурпурной маской, рекомендую всем, кому не критично ждать две недели свои двусторонние или месяц четырёхслойные платы.
В итоге за три платы пришлось заплатить $14 и через месяц забрать их на почте.
Все компоненты размещаются на нижней стороне платы, на верхнюю сторону платы вплотную ложится модуль дисплея, под которым будет плоская катушка NFC, что позволяет сохранить несколько миллиметров высоты и гарантирует ровное и плотное прилегание дисплея.
На верхней стороне платы также размещается куча test-point-ов, тестовых контактных площадок, к которым подведены линии шин I?C, SPI, линии прерываний и некоторые управляющие сигналы. К этим площадкам можно подключать осциллограф или логический анализатор и такая возможность очень сильно упрощает написание драйверов и отладку прошивки. Также на верхнюю сторону платы выведен отладочный интерфейс JTAG (SWD) для прошивки и отладки через Segger JLink, идущий в комплекте nRF52-DK, и контактные площадки для припаивания катушки NFC-антенны.
Сборка и пайка
Если полностью следовать всему процессу поверхностного монтажа, то необходимо заказать smd-трафарет (smd stencil) и паяльную пасту, нанести паяльную пасту через трафарет, расставить компоненты и отправить их в печь (reflow oven).
Но печи у меня не было, как и трафарета. И желания возиться с ним и паяльной пастой тоже. Хотелось поскорее собрать прототип и начать тестировать и писать софт. Поэтому я запаял вручную все компоненты, самые маленькие из которых это чипы типоразмера 0402, нанося пасту иглой, размещая компоненты вакуумным пинцетом и припаивая их феном.
Результат можно наблюдать на фотографии:
Кнопки не запаяны, а вместо нескольких трёхногих чипов — перемычки.
Прошу прощения за низкокачественные фотографии, снимал на кирпич.
Видно слегка повёрнутые компоненты и местами переизбыток припоя. Это неизбежно при ручном монтаже и нанесении пасты.
Как только плата была собрана, я схватил в руки тестер и начал прозванивать всё, до чего мог дотянуться, на предмет коротких замыканий. После того, как убедился, что ничего вроде как не коротит, подключил USB-шнур. Дыма нет, чипы не греются, напряжение на USB-порту — 5 вольт, на выходе зарядки — 4.2V, напряжение после LDO — ровно три вольта. Вроде работает.
Даже будучи полностью запитанным, устройство, разумеется, не подавало абсолютно никаких признаков жизни. Теперь в него нужно вдохнуть душу — прошивку (или «операционную систему», как у некоторых производителей часов: WatchOS, PebbleOS, etc.).
Следующим этапом проверки стало подключение отладчика JLink, встроенного в nRF52-DK по интерфейсу SWD. Подключаем проводки, запускаем JLinkExe и видим наш чип! Можно приступать к написанию прошивки и тестированию остальных блоков железа программно.
«Операционная система» для часов
Для низкоуровневой работы с периферией, Nordic предлагает свой nRF5-SDK, который подходит для nRF51 и nRF52 серий.
SDK написан на чистом Си и содержит целую уйму примеров для работы с периферией, радио, NFC и другими возможностями. Каждый проект примера имеет Makefile для компиляции через arm-none-eabi-gcc
. Стиль кода библиотек и его качество вполне приемлемые, индусским кодом вроде как нигде не пахло.
В каждой папке с примером есть скомпилированные .hex-файлы, которые можно сразу залить на nRF52-DK и посмотреть в работе. При подключении nRF52-DK к компьютеру, определяется Mass Storage Device (накопитель), прямо в который можно бросить .hex файл и он тут же будет зашит в чип.
Так же поддерживается прошивка через JLinkExe
и его GDB-сервер и через утилиту nrfjprog
.
В ходе написания драйверов обнаружились непропаи у некоторых чипов, успешно устранённые паяльником. А так же микросхема контроля ёмкости аккумулятора была либо бракованной, либо умерла в процессе запаивания, ибо тыканье паяльником в контактные площадки и полное снятие чипа и запаивание назад феном ситуации не помогли, а вторая такая же микросхема из посылки заработала сразу же после того, как была впаяна на место предыдущей.
После написания драйверов для железа, я приступил к написанию графической библиотеки и библиотеки пользовательского интерфейса и его элементов.
Главное меню, статус-бар, показывающий время, состояние блютуза и заряд батареи.
Для отладки графики был написан симулятор, чтобы не заливать прошивку в часы каждый раз, когда надо поправить что-то на один пиксель. Он пробрасывает низкоуровневые вызовы графического API в вызовы оконного менеджера X-Lib и позволяет рисовать в окошке как если бы это был дисплей часов. Затем достаточно тот же самый код скомпилировать под часы и залить в них, чтобы увидеть точно такой же результат и там.
Меню в симуляторе:
После того, как основной каркас API был закончен, начал адаптировать движок JavaScript (ES 5), чтобы была возможность писать свои приложения и циферблаты и запускать их в скомпилированном виде прямо на часах. Как по мне, это круто.
В качестве движка выбрал JerryScript, он специально нацелен на встраиваемые системы с ограниченными ресурсами, API оказался хорошо документирован и вполне адекватен, потребовалось не так много времени, чтобы со всем разобраться. Движок довольно модульный, по желанию можно выкидывать составные части как языка, так и окружения: стандартные классы типа Date и т.п., JSON-парсер, парсер и компилятор в байткод и т.д.
Простейший циферблат на JS выглядит так:
В дальнейшем API будет расширяться всё большим числом методов для работы с GUI, а так же оповещениями, Bluetooth, акселерометром и т.д.
Объем занимаемой памяти скомпилированного бинарника безо всяких оптимизаций (флаг -O0
):
106kB FLASH, 12.8kB RAM. Из них 8kB RAM — куча (heap) для объектов JavaScript движка. Объем кучи я пока подбираю и в будущем он будет больше. Напомню, что объем FLASH у nRF52832 составляет 512kB, а общий объем RAM — 64kB.
Часть FLASH (120kB) и некоторый динамически определяемый объем RAM так же занимает BLE-стек SoftDevice.
Корпус
Это было самое сложное — нарисовать 3D-модель корпуса. Корпус рисовался в TinkerCad и печатался на 3D-принтере. Получился вот такой Франкенштейн:
Если кто-то готов протянуть руку помощи с моделированием корпуса и его 3D-печатью, то я буду очень рад увидеть такого человека в ЛС!
Заключение
Изобретать велосипед и проходить примерно тот же путь, что проходили разработчики других умных часов оказалось очень увлекательно. По пути встаёт куча проблем и задач, которые надо решать, это неизбежно генерирует уйму фана, новых мыслей и в сухом остатке откладывается в виде опыта. Даже если, объективно говоря, смысла во всём этом с точки зрения личной материальной выгоды и нет, то по крайней мере это весело.
В данный момент думаю над корпусом и следующей ревизией платы, ещё нужно пробросить много API-вызовов в JS-движок, поработать над графической библиотекой и подумать над удобным способом установки JS-приложений, начать писать приложение-компаньон под Android. Я намеренно не раскрывал все детали и не углублялся в дебри, чтобы не перегружать этот пост. Если тема окажется интересной, то в следующих частях расскажу подробнее про схемотехнику, прошивку, Android-приложение и оптимизацию энергопотребления.
Ссылка на схему с платой: https://upverter.com/EP/cdbd8b9abc72b7cd/nRF52-smart-watch/
Когда доведу до ума и приемлемой степени читаемости код прошивки, обязательно размещу ссылку на Github.
Как и автор предыдущей статьи, надеюсь, что этот материал подтолкнёт или вдохновит кого-то погрузиться в мир электроники и сделать тот девайс, о котором он уже давно мечтает.
С нетерпением жду ваших комментариев и вопросов!
P.S.: добавил опрос.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (205)
dmitry_ch
23.06.2017 07:15Кажется, если вы сообразите, как сделать стальной корпус, приличный ремешок и нормальное стекло, да выйдите с этим на Кикстартер, у вас есть вполне реальный шанс насобирать довольно приличные суммы… Не думали?
eup
23.06.2017 07:18+4Доброе утро. Нет, не думал, не того уровня серьёзности и оригинальности проект. Да и на краудфандинг-площадках, увы, было очень много похожих, но мошеннических проектов, выросших как грибы после грандиозного успеха Pebble. Поэтому доверие у бэкеров к таким проектам мизерное и шансов выстрелить у него мало.
GoldJee
23.06.2017 10:41+1Если будете подкреплять проект такими замечательными постами, как этот, доверие будет.
Снимаю шляпу.
Cenzo
24.06.2017 05:53+1У этих часов есть очень важное превосходство над прочими пебблами — открытый софт (при выходе на кикстартер железо конечно же открывать не стоит, тк китайские производители сделают свои часы быстрее ваших). Я бы точно такие купил в нормальном корпусе, если у них будет вменяемое вермя жизни от батарейки и конечная цена.
keydon2
02.07.2017 00:00Железо открывать НАДО, а то вдруг АНБ уже забали автора и вместо него клепают статьи!
Ардуинка ж живет и процветает несмотря на китайские аналоги
zedroid
23.06.2017 08:42Почему все таки выбрали LDO для понижения напряжения? КПД в таком случае должен сильно упасть, или я ошибаюсь?
agafonishe
23.06.2017 08:54+3LDO вполне подходит для такой задачи. 0,5мкА ток потребления — ничтожная утечка. Зато гарантированно нет пульсаций от переключения.
eup
23.06.2017 10:48LDO показался лучше ввиду большой вероятности того, что сильной разницы между регулируемым напряжением и входным не будет (разница не больше 1.2V, когда надо 4.2V при зарядке в режиме Constant Voltage понизить до 3V), а так же из-за того, что LDO дешевле и занимает меньше места на плате (к нему не нужен индуктор, как у buck). Кроме того, ток потребления у системы тоже маленький, самый пиковый ток (одновременная передача по радио + работающее ядро + запись во флеш) будет около 40mA.
Когда встал вопрос, какой регулятор выбрать, buck или линейный, глянул эту статью.
olartamonov
23.06.2017 11:02+2Бывают DC/DC со встроенной катушкой индуктивности и в габаритах в пределах 3x3 мм. Из внешней обвязки у них только по конденсатору на входе и выходе.
И да, минус DC/DC в таких схемах — чуть шаг в сторону от правильной разводки «земли», и куча мусора с DC/DC прилетела в радио. Я видел примеры, как люди чувствительность радиотракта убивали на 20 дБ таким макаром.Alexeyslav
23.06.2017 13:28На таких токах у импульсных КПД ниже плинтуса. А линейные ещё не каждый подойдут — надо брать такой чтобы имел собственное потребление меньше микроампера, но у них есть неприятная особенность — плохая устойчивость и очень легко накосячить с разводкой так что дойдёт до автоколебательного режима и длительных переходных процессов. Это как раз та ситуация когда слишком большая ёмкость на выходе пойдёт во вред.
olartamonov
23.06.2017 13:40+2На таких токах у импульсных КПД ниже плинтуса
http://www.ti.com/lit/ds/symlink/tps82740a.pdf
КПД 90 % на нагрузке 10 мкА подойдёт?
А в схеме с LDO в никуда уйдёт половина батарейки.
zedroid
23.06.2017 12:26Если вопрос о длительности работы устройства не стоит, то в принципе Вы правы.
AlexPublic
23.06.2017 10:01+12Редкий случай, когда встречается профессиональное качество разработки одним человеком сразу на почти всех уровнях (общая архитектура, схемотехника, прошивка, прикладное ПО, ну кроме разве что разработки корпуса). Да ещё при этом видим качественно описание проекта в статье — так сказать вишенка на торте. И всё это в рамках хобби проекта, а не какого-то бизнеса (хотя очень многие описанные на этом сайте бизнес-проекты сделаны явно с меньшим профессиональным уровнем). Давно не видел материалов такого уровня на этом сайте — очень хорошо!
P.S. Кстати, а почему на Гиктаймс, а не на Хабре? По идее данная статья лучше подходит к основному ресурсу…eup
23.06.2017 10:09+2Спасибо за лестные слова! Мне показалось, что Гиктаймс ничем не хуже, а кроме того, имеет в наличии хабы специально для "железной" тематики.
ClusterM
23.06.2017 21:53+1Удивительно, что в той же Pebble при этом так долго решали какие-то банальные задачи, имея при этом целый штат сотрудников.
nafikovr
24.06.2017 00:11+1Pebble был все таки несколькими годами ранее. те же memLCD дисплеи относительно недавно стали доступны. ну и все таки серийный проект. требуется больше материальных затрат на проектирование с целью снижения себестоимости и сильно больше временных затрат уже на подготовку производства. так что ничего удивительного
ClusterM
24.06.2017 00:58+2Я говорю про ПО, а не про железо. Я писал им багрепорты раз десять, не меньше. В конце концов они мне даже подарили часы Pebble Round. Надо отдать должное, что баги они обычно исправляли в конце концов. Но для массового коммерческого продукта их софт был (да и сейчас есть) слишком сырой. А многие весьма банальные функции у них долго откладывались, а то и вообще так и не реализовались. Ну как в 2015 году можно косячить с кодировкой и обрезать текст по байтам, а не по символам, например? Как можно сделать часы, основная функция которых — уведомления, но реализовать эту функцию только после того, как энтузиасты успели наклепать десятки программ, реализующих этот функционал через костыли, ибо API нормального нет до сих пор? Как можно позиционировать свои часы как лучшие/первые в мире, но при этом в течении долгого времени в техподдержке давать ссылки на сторонние прошивки, где энтузиастами реализована поддержка чего-либо кроме латиницы? Как можно выпустить часы с микрофоном, но так долго тянуть с API для работы с микрофоном?
При всём этом ребята там были очень отзывчивые, и явно ответственно относились к своей работе. Впечатление, будто у них просто не было в штате профессиональных сотрудников.
TeXnoPizza
23.06.2017 10:06Очень понравился проект, да и работа проделана отлично. Готов помочь с корпусом, когда-то тоже думал о самодельных часах правда не таких сложных… В общем если, что принтер есть и опыт моделирования корпусов тоже :)
Saint-Sky
23.06.2017 10:06+2Читал взахлёб и ждал того места, когда вы закажете пайку на профессиональном оборудовании и волосы встали дыбом, когда прочитал, что Вы спаяли ЭТО вручную без единого косяка — вот это золотые руки!
Браво!Fox_exe
23.06.2017 11:41Ну косяки так-то были (Пара элементов не пропаяны оказались, чип на зарядку батареи вообще мертвый, либо сдох в процессе пайки).
И да, паять подобное не так уж и сложно. Просто оборудование нужно соотвествующее (Фен, паяльник с жалом «иглой», лупа/микроскоп… Ну и прямые, не дрожащие, руки)eup
23.06.2017 11:45Да, именно так. Ничего сложного, без проблем не обошлось, никакой магии не применялось.
Muzzy0
28.06.2017 11:40Я бы таки попробовал заказать трафарет для пасты. Намазать через него, раскидать детали, паять феном.
Раскидывать всё сразу и обдувать всю плату. Как вариант — в духовке :)
Что до 0402… Когда я только связался с SMD, то по неопытности заказал ряд компонентов на али в этом типоразмере. Слегка офигел от размеров, заказал 0805, пару раз потренировался, опять офигел от размеров. Слишком просто и слишком громоздко. И перешёл на 0603. Как в одном анекдоте, 0402 для меня, как грецкий орех и 0805 — как кокосовый :) 0603 самое то. Возможно, 0402 пошёл бы легче на платах фабричного производства (а не ЛУТ) и более аккуратной организации рабочего места.
Что до сути проекта — не вполне понимаю назначение таких часов. Дремучий в этом вопросе.
PS у самого в планах развести свой преобразователь из USB в RS-232/485, с блэкджеком :)eup
28.06.2017 12:14В следующей версии трафарет обязательно будет! Ничего сложного нет, главное очень ровно по высоте расположить трафарет над такой маленькой платой, чтобы по краям не гнулся и не приподнимался нигде в момент нанесения. И паста нужна хорошая, густая. У меня какая-то жидкая была, когда пытался экспериментировать, в итоге плюнул и запаял вручную.
olartamonov
29.06.2017 18:231) при нанесении совсем вручную, без станка, выкладываются несколько плат с одной толщиной текстолита встык, паста наносится только на центральную.
2) пасты бывают для дозатора и для трафарета, отличаются вязкостью; из доступного в рознице для трафаретов — Multicore Cr36 норм, он есть в маленьких баночках.
Ну, ещё бывают китайские, отличаются говнистостью.
Movimento5Litri
28.06.2017 11:00Ну и прямые, не дрожащие, руки)
Ну вот у меня таких не имеется напримерdaggert
28.06.2017 11:15Это дело наживное. Серьезно. Я начал паять с SMD сразу, так как лень сверлить отверстия всегда было (если не считать пайку для страйкбола, но там паяльник на 100w) и первое время руки дрожали дичайше просто. Через некоторое время освоил успешно процесс с деталями с выводами 1.27. Теперь уже паяю дорожки 0.5 и детали 0603, вполне нормально. Главное тренировка.
Помню после покупки станции тренировался банально — брал сдохшую деталь от компа (обычно плату от ЖД), выпаивал все компоненты, чистил и ставил все назад. Первое время все уезжало и горело, но постепенно...
Muzzy0
28.06.2017 11:45когда я попробовал сделать свою плату, я быстро оценил достоинства SMD :)) К чёрту все эти дырки. На коленке их надо ещё постараться просверлить ровно и задача вставить корпус больше DIP8 становится весьма увлекательной.
При первоначальных навыках пайки (и использовании пасты :) ) 0603 никакой специальной подготовки, практически, не требует. Даже корпус SSOP28 на самостоятельно сделанную плату я впаял с первой попытки. Ну, на 2-3 SOP16 перед этим потренировался :)daggert
28.06.2017 13:22+2Ну 0603 тоже требует навыка, я вам скажу. В смысле чтоб сделать ровно и красиво (:
Muzzy0
28.06.2017 15:02Чтоб ровно и красиво — это очень зависит от качества изготовления платы. Сложно бороться с поверхностным натяжением…
olartamonov
29.06.2017 18:27+1От качества флюса и припоя, в основном. Asahi и EFD FluxPlus наше всё, а ПОС-63 и ЛТИ-120 сами пейте.
При этом ручную пайку от трафаретной (даже ручной трафаретной) отличить всё равно легко, независимо от навыков монтажника. Поэтому если надо, чтобы выглядело действительно хорошо — только трафарет, тем более, что на 0603 он легко режется в домашних условиях плоттером из пластиковой плёнки.
dernuss
23.06.2017 10:22Очень большой чип памяти для такой платы (по физическому размеру).
Мне кажется больше подошёл бы корпус USON(3x2 мм) вместо WSON-8 (8x6 мм)
Reegool
23.06.2017 10:22+4Спасибо!
Вынес очень много полезного для себя.
Могу помочь с распечаткой нескольких экземпляров корпуса часов.
— FDM
— ABS Черный (другого пока нет)
— Слой 0,1
— Сопло 0,32
От вас STL модель(и) корпуса.
Отправлю почтой. Для ВАС всё бесплатно )))).
С моделированием стильного :) корпуса тоже могу подсобить но мне потребуются 3D модель внутреннего бутерброда, либо модели компонентов по отдельности, чтобы сделать из них сборку. Полагаю, найдутся желающие, которые смогут это сделать лучше меня.
Max_Drevo
23.06.2017 10:22+2Доброго дня. Могу и с корпусом помочь и есть опыт литья в силикон, самое сложное будет с кнопками, но есть контакты ребят кто ими профессионально занимается. Черчу в Солиде, принтер тоже есть. Сам тоже часики делаю, но с oled дисплейчиком, но так писать ПО я точно не умею, вообще мне это сложно дается, как и все что сложнее уровня arduino.
goodwind
23.06.2017 10:43по подсветке:
попробуйте посмотреть в сторону подсветки для Gameboy Color, возможно удастся подрезать комплект подсветки от него или соорудить что-то подобное самостоятельно.
olartamonov
23.06.2017 11:04+2По чипам — у TI есть CC2650 в корпусе PQFN 4x4 мм, он вообще крохотный, при этом очень навороченный и экономичный.
Правда, с программной поддержкой там немного боль — хотя на ваш проект родная TI-RTOS должна подойти.
Fox_exe
23.06.2017 11:47+1Вопрос по прошивке: А в какой объём уложился весь код, включая JS-движок (Флеш / оперативка)?
Да и вообще — интересно почитать об этом подробнее (Про реализацию отдельных компонентов ОС: Обработка нажатий на кнопки, планировщик, работа с перефирией и т.д.)eup
23.06.2017 12:40+1Добавил в статью следующие абзацы:
Fox_exe
23.06.2017 14:52Круть. А я то думал, что js двиг поболе занимать будет. Да и графика для дисплея тож не маленькая.
Использовались какието алгоритмы сжатия? (Компрессия в духе jpeg?)eup
23.06.2017 19:32Маленькие иконки пока хранятся в виде простых монохроных bitmap-ов (1 бит на пиксель), получается довольно экономно. Для простой графики можно использовать векторную графику наподобие Pebble Draw Command (PDC), в который есть конвертер из .svg. При простой графике и удачном выборе примитивов для рисования, командный файл получается по объёму меньше bitmap с таким же рисунком и выигрывает в скорости отрисовки.
BurlakovSG
23.06.2017 11:51Супер!!! На руках есть часы SMA-Q, который вроде тоже построены на nRF51 и у них тоже такой же дисплей. Дисплей мне такой очень нравится — на солнце всё видно просто отлично, в темноте приятная мягкая подсветка. Взял их в надежде на то, что китайцы допилят софт, но они собаки забили на часы и выпустили новые, софт которых не совместим с первыми часами. Так и лежат они сейчас в ящике. Вот думаю может их разобрать и также попробовать написать свою прошивку.
А nRF можно шить и дебажить только JLink-ом или можно также использовать дешёвый китайский ST-Link?rstepanov
23.06.2017 12:17ST-Link можно перешить в JLink (только те, которые на F103, есть еще на F100, там флэша маловато), но лучше сразу купить полный JLink…
holomen
23.06.2017 22:18На F100 стлинков никогда не было, они сразу были на 103.
rstepanov
23.06.2017 22:23F101, извините:
holomen
23.06.2017 23:31Да это уже китайская народная самодеятельность. Давно известно что 101 и 103 — один и тот же чип в пузе, просто или отбраковка или просто маркетинг для покрытия линеек.
eup
23.06.2017 23:55nRF5x вполне можно прошивать и отлаживать ST-Link-ом по интерфейсу SWD через OpenOCD, например.
gears
23.06.2017 12:06+1Отличный проект! Пожалуй лучший из того что приходилось видеть.
Попробовал выгрузить 3D модель для отрисовки корпуса, но видимо что-то пошло не так, в сохраняемом файле STEP присутствуют гиганские выводные резисторы, многие элементы поверхностного монтажа находятся внутри платы.
Так же вопрос, на фото в посте версия платы 1.3, по ссылке на проект 1.4, какие сделаны изменения и они опробованы?eup
23.06.2017 12:09Изменения минорные, переместил схему управления вибромоторчиком к краю, добавил тест-поинтов с другой стороны платы. Вывод 3D-модели до жути кривой в Upverter и нужен был, видимо, чтобы впечатлить их инвесторов. 3D модель если и выводить, то с отдельного проекта, где с платы удалены все глючные компоненты.
rstepanov
23.06.2017 12:14+2Очень круто! Мне пока расти и расти… А я то этим гордился:
BurlakovSG
23.06.2017 12:21Я так понял MicroUSB разъём только для зарядки используется? Может добавить беспроводную зарядку вместо MicroUSB? Только непонятно как на это отреагирует NFC. Кстати, а можно эту же антенну использовать в качестве приёмника для беспроводной зарядки?
eup
23.06.2017 12:38Думал над этим. Решил как-то попробовать интегрировать Qi-зарядку. В теории, NFC-катушка отреагирует наплевательски, более того, одну и ту же катушку не получится использовать как для NFC, так и для Qi-зарядки. У них принципиально разная добротность и резонансная частота.
Придумал такой вариант: NFC-катушка располагается под дисплеем, а Qi-катушка (она более толстая и с большим числом витков) — под аккумулятором (вплотную к нижней крышке корпуса). Вроде как в плате 2.0 ревизии хватает места для чипсета Qi-зарядки вместо USB, но пока серьёзно такой вариант не рассматривал в виду полного отсутствия опыта работы с Qi. Надо закупится чипами и сделать тестовые платы для оценки технологии, беспроводная зарядка мне в принципе нравится больше, чем USB-шнур.
BurlakovSG
23.06.2017 12:52Ух ты, так получается BQ51051B также заменяет и контроллер зарядки. В результате на плате освобождается место и от контроллера зарядки.
eup
23.06.2017 12:56Да, жутко удобно. Но чип сам по себе большой и ещё требует горсть внешних компонентов.
Alexeyslav
23.06.2017 15:47Так близко расположенные катушки будут иметь трансформаторную связь, чтобы NFC не мешала катушка Qi их надо пространственно разнести, иначе феррит будет работать на обе катушки изменяя их индуктивность. В телефоне это реализовать можно, катушка там порядка 2x2 сантиметра, а вот в часах… или одна технология или другая… или делать беспроводную зарядку не по стандарту Qi а просто как трансформатор о двух половинок, Ш-образный даже можно и соответственно более точное позиционирование девайса в зарядном кредле.
eup
23.06.2017 23:45А четырёхслойная плата с кучей компонентов на ней и сплошным медным полигоном земли на одном слое не будет служить хорошим изолятором между катушками?
Alexeyslav
24.06.2017 09:21нет. магнитное поле пройдет через бутерброд и не заметит, это для электрического будет препятствие…
SvSh123
23.06.2017 15:36А стоит? Зарядников с штекером microUSB хоть пруд пруди, беспроводные зарядки встречаются куда реже. Если только из интереса.
BurlakovSG
23.06.2017 15:50С MicroUSB будут проблемы с влагостойкостью, а точнее её не будет вообще.
SvSh123
23.06.2017 16:19+1В Sony эту проблему как-то решили… :)
Насколько я знаю, там герметичен сам разъем, да еще заглушка резиновая. Раздобыть такой же, наверное, сложно…
Но если с этими часами не нырять, то резинки достаточно. Напечатать из флекса на том же самом принтере — и все дела.sam_green
30.06.2017 13:57Разбирал часы Sony. Там обычный microUSB, только залитый чем-то типо эпоксидки.
mm7
23.06.2017 21:48Не надо штекер.
Есть магнитный разьём МикроУСБ. Его наконечник залить в корпус, а провод к нему примагничивать.
saboteur_kiev
23.06.2017 12:47+1Вопрос не совсем по теме статьи, но любопытно.
Как часто, после подобных статей на Хабр, автора находят инвестора и предлагают создать компанию/стартап/гараж/завод по разработке подобных устройств для массового пользователя?
Ведь по-сути рынок — есть, удешевить устройство можно, пригласить отдельных людей, которые будут заниматься корпусом, дизайном, маркетингом и так далее — тоже можно.
Основной риск — можно ли в принципе создать устройство и примерно оценить стоимость разработки — как я понимаю уже позади, и при оптовых заказах комплектующих цена должна только уменьшаться?
Так почему же нет на рынке СНГ дешевых умных розеток и дешевых умных часов?
tyderh
23.06.2017 13:26+1Божественно, просто божественно.
Умоляю вас не останавливаться и попробовать сделать это доступным для простых смертных хотя бы в виде комплекта для сборки "закажи у китайцев компоненты, плату и собери"
zedroid
23.06.2017 13:52+1Так скорее всего не взлетит. Автор ОЧЕНЬ пряморук, раз смог все это спаять. В реальности это не просто для обывателя.
tyderh
23.06.2017 14:03+1Китайцы же и не такое паяют.
DarkTiger
24.06.2017 01:38Да, но с трафаретом за 300$. Ручками это все ОЧЕНЬ сложно спаять, говорю как человек, паявший вручную 0201 :)
Снимаю шляпу!semen-pro
29.06.2017 07:33А если трафарет самому вырезать с помощью лазерного станочка из DVD приводов?
DarkTiger
29.06.2017 09:17Если Вы в состоянии сделать такой станок — не думаю, что 300$ — та сумма, за которую Вы станете возиться неделю :) в изготовлении такого станочка время займет софт в основном, позиционирование и все такое, а хорошие спецы в данной области очень недешево стоят
DarkTiger
29.06.2017 09:28И, кстати, лазер, который может прожечь толстую металлическую фольгу, Вам банально не продадут — какой там лазер из dvd приводов...
semen-pro
29.06.2017 10:49Я думал, трафарет делают из какой-то толстой пленки и потом убирают, после нанесения пасты и размещения деталей.
olartamonov
29.06.2017 18:30Все промышленные трафареты — стальные.
В домашних условиях можно резать трафареты из пластиковой плёнки на плоттерах Silhouette, но пассивка 0402 там получается так себе, а всякие QFN с шагом 0,4-0,5 мм — никак не получаются.
aivs
23.06.2017 15:57+2Сам делаю проект и там подсветка очень важна, разобрал подсветку от iphone, там около 7 слоев, заказал с Ali кнопки с подсветкой, чтобы посмотреть как это работает, везде принцип один:
1) Нижний слой белый отражающий
2) Средний слой оргстекло, на гранях отражается свет. Светодиод светит прям в оргстекло
3) Верхний слой белая рассеивающая пленка, для равномерного распределения света по поверхности
VT100
24.06.2017 00:12+22) Средний слой оргстекло, на гранях отражается свет. Светодиод светит прям в оргстекло
Присмотритесь к нему внимательнее. Вангую, что на нём есть множество мелких матовых точечек, которые и обеспечивают равномерное рассеяние на манер рис. 33 этого документа от Broadcomm (Avago, Hewlett Packard)aivs
24.06.2017 00:26+1Присмотрелся, само оргстекло полностью прозрачное, боковые грани заклеены фольгой, а вот нижний слой именно белый в мелких точках.
Спасибо за документ, искал подобный долго!
Mulin
23.06.2017 16:06+3«Как только плата была собрана, я схватил в руки тестер и начал прозванивать всё, до чего мог дотянуться, на предмет коротких замыканий.»
Я делаю следующим образом:
1 Впаиваю первый каскад питания (разъемы, предохранители, конденсаторы)
2 Включаю в сеть измеряю питание. если все ок, перехожу к следующему этапу.
3 Впаиваю второй каскад питания (dc-dc преобразователи, гальваника).
4 Включаю в сеть измеряю питание. если все ок, перехожу к следующему этапу.
5 Поочередно впаиваю всю остальную логику с тестированием на работоспособность.
PS Очень круто у вас вышло!DarkTiger
24.06.2017 01:48При такой плотности монтажа возможно КЗ там, где его не ждешь — «остальная логика» тоже имеет ноги питания, расположенные близко к сигнальным, так что закоротить можно, совершенно не заметив. Так что автор «все правильно сделал». Я обычно и под микроскопом еще смотрю несколько раз после окончания пайки.
То, что Вы пишете — совершенно правильные и необходимые действия, но гарантию они дают только для относительно небольшой плотности монтажа.Alexeyslav
24.06.2017 21:12У меня был случай недотрава да такого что слой меди был прозрачный, только когда определил где именно происходит КЗ внимателно под микроскопом просмотрел окресности дорожек и только тогда обнаружил замыкание.
madf
23.06.2017 16:10Не, типоразмеры 0402 и 0603 не для пайки дома (и куэфэны корпусв). При всём желании сэкономить на простоте обвеса чипов, всё равно получилась довольно сложная плата.
В датащите на дисплей нет никакой информации о потреблении, видимо проще снять готовые показания… кстати в статье нет информации о неком промежуточном результате, только осваивание периферии.
Вообще очень много избыточных деталей/блоков, ненужны: RTC, оценка состояния батареи. Всё это можно сразу сделать при помощи МК, хотя понятно, что геморроится с "вечным календарём" — то ещё удовольствие.
Вообще я тоже давно вынашиваю идею своих часов, пока остановился на Е-ink дисплее, хотя понятно, с динамикой там будут большие проблемы или как обычно уходить на обычные LCD от Нокий. :)
instalator
23.06.2017 22:42+1Все это паяется паяльником с небольшим жалом. Я жалом "микроволной" паяю такие корпуса. Qfn если с подложкой то феном.
Muzzy0
28.06.2017 11:51+10603 паяются на коленке обычным феном. И, практически, без спецподготовки. Достаточно нормальных навыков с обычным паяльником.
madf
28.06.2017 12:16Писькой тут трясти ненужно, раз сказал, что не паяется 0603 в отличии от 0805 паяльником — значит не паяется, глаза ломать только. Если приспичит и "блоху подкуём", но в обычном режиме — это извращение.
eup
28.06.2017 12:18Согласен. Больше одного такого устройства в год лучше не паять руками. Глаза и нервы ещё пригодятся.
Muzzy0
28.06.2017 15:19Не, типоразмеры 0402 и 0603 не для пайки дома
Не увидел тут ничего про паяльник. Паяльником SMD, вообще, очень неудобно паять.
Я паял, 0603 без каких либо затруднений. Для 0402, в первую очередь, пальцы слишком толстые и мастерство при изготовлении платы требуется.
Egorkkk
28.06.2017 15:20+1Китайской станцией паяю 0603 — второй год полет нормальный в обычном режиме, даже лупой не всегда пользуюсь. Глаза в порядке, брат жив
olartamonov
29.06.2017 18:33Вот я сейчас это читаю, а в другом углу комнаты наш монтажник, получивший задание «вот эти две штучки по-быстрому вручную» по ходу дела учит стажёра-программиста паять 0603.
Но спасибо за ваше ценное мнение.
P.S. Паять 0603 паяльником вручную можно сколько угодно, просто это тупо неэффективно на любом объёме больше 1-2 простеньких плат — трафарет, паста и ручная расстановка дают результат быстрее и качественнее.
Zangasta
23.06.2017 19:35Столкнувшись с умными часами, в первую очередь замечаешь нехватку софта.
Приложений мало, а те, что есть — зачастую плохо работают на крохотном экране. Отсюда вопрос — а можно ли эмулировать на часах PalmOS — это сразу решило бы вопрос с приложениями — их, во время рассвета оси было написано огромное количество, на все случаи жизни — и все они оптимизированы для работы с крохотным экраном и слабым процессором.nafikovr
24.06.2017 00:23можно все. но всегда есть НО. я не знаю архитектуру Palm, но рискну предположить что в те времена программы были на нативном коде. а это уже потребует эмуляции не только api операционки, но и системы команд процессора со всеми вытекающими.
MaximSuvorov
30.06.2017 13:57+1На хабре была отличная статья о эмуляции и написание софта вкупе со сборкой софта под палм.
Если кратко то софт там в большинстве случаев — на Си написан.
prostosergik
24.06.2017 00:43Эх, кто бы хотя бы для умных часов на Андроид написал что-то стоящее помещающееся на мелком дисплее и выполняющее удобно обычные функции… Но нет. Есть пару кривоватых лончеров, 1-2 китайских будильников, и это все. Остальное безбожно неудобное...
Пилил-пилил я свой календарик, но так и не допилил. =(
AlexPublic
24.06.2017 19:55Ну вот например я уже не первый год пользуюсь удобными и качественными часами на Андроиде. Причём эти часы работают не в дополнение со смартфоном, а вместо него. Так что всё есть в наличие, если не ограничиваться рамками распиаренной ерунды.
prostosergik
24.06.2017 21:04У меня на скругленный экран 320х320 помещаются не теряя функциональности всего пару приложений, не считая те, что были для него специально написаны и адаптированы. Поэтому если поделитесь опытом и вашим списком приложений — буду очень благодарен.
HenryPootle
23.06.2017 19:35Вам, дорогой мой, прямой путь на краудфандинговую платформу.
1) как набор для DIY с разными вариантами корпусов
2) Полноценные часы.
Только обязательно надо сделать конструктор циферблатов.
nafikovr
24.06.2017 00:25+1идея сделать «умные часы» для себя это хорошо и наверно каждый третий эмбеддер ею переболел. но для выхода на рынок нужны фичи, а их тут я не вижу
MyFearGear
24.06.2017 03:20+1На этом рынке слишком много игроков — pebble (был), weloop…
tyderh
24.06.2017 13:14+1И кто занял нишу пеббла? Сабжевые часы, насколько я понимаю (ну, если даже интерфейс почти 1-в-1), как раз по мотивам pebble и создавались
nafikovr
26.06.2017 10:35нет ниши пеббла. гиковской девайс выстреливший только благодаря популяризации и цене.
MyFearGear
27.06.2017 03:52Да есть ниша! Просто рекламы у них было откровенно мало.
«Народная молва» часто распинается про анекдотические смартчасы, которые работают один день и поэтому неюзабельны, но при этом умалчивают про адекватные смартчасы, которые работают 10-30 дней…
Имхоnafikovr
27.06.2017 07:41-1я не устану заявлять что средний сегмент устройств не продается. в данном направлении продается дешман в виде браслетов и брелков вибрирующих при уведомлениях, возможно с простеньким экраном. и продаются монстры которые в итоге живут пол дня, но красивые. середнячок никому не нужен ибо это уже не красивый красочный дисплей, но цена уже не как у нотификатора (тот же miband, например). в общем должны быть или понты, или низкая цена
Kik_ch
23.06.2017 19:35+1Это просто супер круто. Редко такие посты бывают. открывал с предчувствием что «а, все как обычно, гляну и закрою»… не угадал. читается взахлеб. Спасибо! За информацию, и пополненный багаж знаний. Много для себя нового почерпнул. Жду продолжения, буду следить.
zeblong
23.06.2017 19:35+1Шикарнейшая работа!!! Статья тоже захватывающая. Вы большой молодец. Но вот корпус — корпус это важно — все что вы сделали — очень круто — теперь надо облачить в корпус «который хочется облизнуть» и да — я тоже считаю что этот проект нельзя пустить «в стол» или в один экземпляр на Вашей руке — пускайте в серию.
eugenk
23.06.2017 19:36+2Просто не нахожу слов чтобы выразить своё восхищение. Сказать что снимаю шляпу, значит ничего не сказать… Хочу спросить во-первых во сколько проект обошелся по деньгам и времени (полученные положительные эмоции разумеется тут просто не поддаются исчислению !)? И ещё вопрос не только к автору но и ко всем. Какая практическая польза от подобного гаджета? Положим у Вас есть такой. Полностью самодельный, с самописным софтом, в котором Вы как у себя дома и т.п. Что бы туда можно было запихнуть интересного и полезного? Давно уже задаюсь подобным вопросом по отношению к гаджетам, размером от небольшого телефона и мельче.
eup
23.06.2017 19:50+1По бюджету — где-то 8тыс. (отладочные платы дорогие!) и год-полтора неторопливой работы, но можно было, в принципе, всё сделать гораздо быстрее.
По поводу полезных применений можно посмотреть на применения уже имеющихся часов. Например на список приложений Pebble: будильники (в том числе и смарт-), органайзеры, фитнес, карты, вызов такси и даже игры.
ngl4ngl
23.06.2017 19:36+2Отличная статья и отличная разработка! Тут, да и в других местах, такой уровень очень редко встречается.
Для будущих модификаций могу вам посоветовать только одно — изменить схему питания. С точки зрения экономии энергии, будет разумно перейти на питание всей (кроме индикатора) системы на минимально возможное для нордика значение.
Если не секрет, как называются и у кого вы купили вибромоторы?eup
23.06.2017 19:39Питание однозначно будет переделываться на более эффективное (DC/DC, более пониженное напряжение), благо есть люди, с которыми можно по этому поводу проконсультироваться.
Вибромоторы — ноунейм, на Aliexpress просто вбил "vibration motor" и нашёл подходящие и подешевле.
ngl4ngl
23.06.2017 20:15+1Понятно, спасибо. Я спрашивал, потому что сам занимался проектом микромощного девайса с вибромотором и пару лет назад такого симпатичного мотора не нашел.
Кстати, если соберетесь проект на кикстартере раскручивать, могу рассказать как делали мы. Не могу сказать, что мы все сделали правильно, но деньги собрали и сейчас рассылаем девайсы, хотя сроки и сорвали…
Наш проект, если интересно, называется gestor.Movimento5Litri
29.06.2017 15:39А как ваш гестор купить-то?
ngl4ngl
29.06.2017 16:08Когда закончим рассылку бэйкерам, откроем онлайн магазин на сайте gestordevices.
А пока, если интересно, можете ко мне обратиться, какое-то количество есть в Москве.
TPertenava
23.06.2017 22:54+1Не могу не написать очередной комментарий о своем восхищении Вашей работой, а главное — подходу к написанию статьи. Уверен, что столь же интересным будет продолжение про создание корпуса и финального прототипа. Пожалуйста, пишите еще!
VT100
24.06.2017 00:23+1потому что зарядный ток в 100mA для 110mAh аккумулятора это, возможно, многовато.
Скорее всего — да. Подготавливая базу для одной разовой поделки — сличал документацию от нескольких производителей (примерно дюжина отдельных моделей аккумуляторов). Номинальные токи зарядки сошлись на C/4 (25 мА в случае 100 мА*ч аккумулятора).
100 мА для 110 мА*ч получается уже форсированный режим, как у RC моделек. Так тоже можно, но надо контролировать температуру аккумулятора что-бы не было пыха. И ресурс снижается.
seri0shka
25.06.2017 03:16+2Присоединюсь к восхваляющим, наверно первая статья, где очень основательно разработанный проект сочетается с подробнейшей и тщательно проработанной статьёй. Обычно одно из двух в лучшем случае. И не менее восторжен качеством изготовления, даже не представлял, что так можно вручную. Сам уже никогда не смогу достичь, опыт прибавляется, а зрение и пряморукость падают.
zartarn
25.06.2017 12:52+1Наверно идеально можно вписать в размеры Ipod nano 6g, и исопльзовать их ремешки.
green_worm
26.06.2017 10:25+1Очень круто!
Пора стартап запускать!
Можно было бы в конце забубенить опрос, за сколько люди готовы покупать такое.nafikovr
26.06.2017 10:39и как вы себе представляете выбор цены для готового устройства?
green_worm
27.06.2017 09:49Стандартный опрос: «Сколько Вы готовы заплатить за умные часы с таким-то функционалом?»
И типа голосовалки (на сколько я помню, тут движок позволяет её сделать):
1.) Х руб.
2.) У руб.
3.) Z руб. (долго лень было переключаться на английский, но после подбора нескольких букв, понял, что Z тут будет лучше выглядеть) ^_^nafikovr
27.06.2017 09:51то есть вы считаете что если есть устройство, которое стоит Y. то его кто то будет продавать по Х или кто то будет покупать по Й?
green_worm
27.06.2017 12:01Не совсем понял вопрос.
Я предложил провести мини-исследование (опрос), что бы понять, готовы ли люди покупать подобные часы и какую цену они считают справедливой. То есть, за сколько будут продавать это вопрос некорректный — можно поставить и за 100500 тысяч. Но будут ли покупать. Опять же, если прилизать дизайн интерфейса и изготовить корпус из хирургической стали, из драгметаллов, то и за 100500 можно выставить в единичном экземпляре (на всякий случай).
Себестоимость (по материалам — интеллектуальную часть пока не берем в расчет) в 1 500 р. (пускай 2 000 р. с учетом печати корпуса) весьма неплоха.
Тоже немного кривовато написал — прошу прощенья. Но надеюсь понятно. =)nafikovr
27.06.2017 14:19+1в рознице один лишь дисплей стоит как раз таки 1500, если что. правильнее ставить вопрос будут ли покупать за сумму X
green_worm
27.06.2017 15:13Прошу прощенья, цифра отложилась в памяти так как автор вдохновился статьей часы за 1500 р.
Полностью с Вами согласен. Но для того, чтоб выбрать эту сумму Х и предложить несколько вариантов. Но так тоже норм =)
DeepOrca
27.06.2017 11:15+1Поразительно.
Вот из таких работ, как мне кажется, и вырастают «open source» устройства в духе Ergodox.
Спасибо!
green_worm
27.06.2017 13:08+2Порадовало, кстати, про «усиление антенны мизерное, но две бетонные стены пробивает» )))
argz
27.06.2017 13:13+2Отличная работа!
Небольшой совет: вместо Winbond W25Q256FV лучше использовать Micron N25Q256A11EF840E. Всё совместимо, только купить проще.eup
27.06.2017 14:18И действительно. Спасибо, добавил в статью.
eup
27.06.2017 14:23+1UPD: В статью не добавил. Согласно Digi-Key, этот чип устарел (End of Life) и его выпуск прекращён, так что в магазинах сейчас распродают его остатки. В новых проектах лучше не использовать.
olartamonov
29.06.2017 19:06+1У них есть новая линейка на замену, по совместимости её с Винбондом — ХЗ, скорее всего такая же.
jee
28.06.2017 14:09+1Отлично! У меня такой вопрос — а как запаять такие крохотные детали феном? Я пробовал паять SMD, но всё сдувало, поэтому в итоге я просто нанёс пасту и тыкнул паяльником с двух сторон каждого элемента, запаялись. А вот феном совсем не вышло
SvSh123
28.06.2017 14:48+1Подбирать температуру и расход воздуха. Но обычно феном их и не паяют, тут нужна ИК-станция или печка.
daggert
28.06.2017 14:50У меня так-же было в начале — а потом я нашел нормальный гель для пайки smd, выставил фен на минималку но с хорошей температурой.
jee
28.06.2017 14:52Какой гель порекомендуете? Я купил пасту в Чип и Дипе, довольно дорогую. Название не могу сейчас написать
daggert
28.06.2017 23:46Keller flux-gel TT 20ml, стоимостью в 60 рублей (: До этого были чуть дороже, дешевле, с алишки. Все было хуже.
olartamonov
29.06.2017 19:05Есть мнение, и не единственное, что однажды вас с ним ждёт ряд удивительных открытий.
eup
28.06.2017 15:15Просто втыкал компонент в пасту и дул феном с минимальной скоростью воздуха, ничего не сдувало. Хотя паста у меня была плохая и довольно жидкая. Хорошая паста липкая как клей, компонент не сдует даже при хорошем потоке воздуха.
jee
28.06.2017 15:19У меня паста по консистенции как зубная паста. Нанёс на площадки пасту, вдавил скажем резистор. Грел-грел всё уехало паста не запаялась. Сделал то же самое но грел уже паяльником, всё ОК. Фен у меня на турбинке, может обязательно компрессорный нужен?
eup
28.06.2017 15:33У меня вентиляторный фен, вряд ли большая разница будет, ведь поток воздуха должен быть минимальный. Попробуйте сделать воздух по минимуму и греть сверху перпендикулярно компоненту. Если не поможет и всё равно будет сдувать, то тогда попробуйте прижать компонент сверху пинцетом и греть так, пока не расплавится паста.
gears
28.06.2017 16:06+1Главный нюанс при пайке с использованием паяльной пасты и фена это правильная последовательность действий, и не принципиально какая паста густая или жидкая, паять приходится разной но результат всегда один — все нормально пропаяно и нет шариков припоя.
Не маловажным конечно является и скорость потока воздуха, при большом потоке даже дроссели размером 10х10мм сдувает. Но тоже не критично, сталкивался с паяльными фенами у которых скорость потока не регулируется.
И так пожалуй самая главная ошибка которую совершают это начинают греть компоненты и плату так чтобы паста сразу стала плавиться. При этом флюс который содержится в пасте становится очень жидким и не способен удержать компоненты, да еще и иногда начинает закипать от чего образуются шарики припоя где попало. Многие при этом грешат на то что мол паста фиговая, старая и т.д. Хотя все дело в соблюдении технологии.
Перед пайкойплата естественно должна быть расположена не термостойкой подложке и находиться строго горизонтально.
Правильная последовательность достаточно простая:
— С большого расстояния прогревается плата, при этом температура воздуха возле компонентов не должна быть большой. Задача этого этапа расплавление флюса и его активация для обеспечения качественного паяного соединения. Выглядит как паста становится жидкой е немного раслекается по контактным площадкам.
— Расстояние немного сокращают и выдерживают прогрев некоторое время чтобы флюс высох. Расстояние так же довольно большое, температура при этом поднимается не значительно. Если не обеспечить высыхание флюса то при плавлении шариков припоя он вскипит и разбрызгает припой, отсюда и шарики которые потом надо nofntkmyj отмывать чтобы не коротили и недостаток припоя на площадках.
— Расстояние плавно сокращают до момента плавления припоя
— Плавно отводят фен и продолжают обдувать с большого расстояния некоторое время, как на первом этапе. Нужно для плавного охлаждения и предотвращения резких температурных перепадов.
По личному опыту даже 0402 легко паяется и феном и паяльником. Феном конечно гораздо быстрее. Ну и без микроскопа бывает не очень удобно. Благо братья китайци предлагают весьма хорошие цифровые микроскопы за разумные деньги.TedBeer
28.06.2017 20:19+1Присоединюсь к общему хору восторгов и сожаления, что сам электроникой слишком поздно заинтересовался.
Голосовать за материал поздно, поэтому проголосовал в карму.
Не так давно, когда искал смартчасы, наткнулся на старый опенсорсный проект — F*WATCH.
Может вам будет интересно посмотреть на какие-то решения:
Sensors
- GPS
- Pressure sensor
- 3D-accelerometer
- Compass
- Ambient light sensor
I/O
- 128x128 pixels LCD with backlight
- Micro-USB connector, 4 Buttons
- Buzzer, vibrating motor
- MicroSD memory slot
Various
- 500 mAh Lithium-ion battery, fuel gauge
- 4-layer PCB
Mechanics
- 3D-printed watch case and buttons
- Developed with open FreeCAD design tool
Software
- FreeRTOS operating system
- Bootloader, drivers, applications
- Interface to USB host (e.g. download track data, upload firmware)
- Developed with open gcc compiler
Вообще на рынке по моим ощущениям альтернативы Пеблу так и не появилось. Как жаль, что они взялись за неподъемную задачу и не вынесли тяжести бытия. Причем основная проблема всех существующих решений лежит не в аппаратной плоскости, а в программно/организационной. Нужен хороший движок(достаточный, отлаженный, вылизанный и хорошо документированный API) и сообщество. Пебл фактически много достиг именно за счет открытия платформы и организации такого сообщества. Все же другие компании держут фигу в кармане и кормят юзеров вотчфейсами.
Те же китайцы начали наводнять часами торговые площадки, а софт — глюкало на глюкале, API нет, сделано всё на коленке, поэтому открывать нечего.
SMA-Q, SMA-Q2 — приятные аппаратные возможности, но софт портит всё.
Кстати похожая ситуация с умными пультами ДУ. Там и ценник зашкаливает и/или софт гавно. Вот тоже хотелось бы приложить ручки, но наверно это тема уже отмирает.
Про JS движок.
Почему выбор сделан в пользу JerryScript? Не скажу про него ничего плохого, я с ним мало знаком. Но в свое время следил за Espruino. Запускал у себя, тестировал и репортил баги. Там реально создатель замарачивался на экономию энергии, а не только уложиться в память.
По поводу рисования корпуса.
Раз вам комфортно с JS, то можете обратить внимание на openjscad.org (я для него немного девелопил) Это как бы опенскад, но используется JS(и даже может рендерить какие-то вещи из OpenScad напрямую). Но тут конечно доступна вся мощь программирования на JS(в отличие от недоязыка openscad)eup
29.06.2017 02:28Спасибо за такой развёрнутый комментарий.
Подглядел у F*WATCH реализацию подсветки, вроде адекватно. У них светодиоды питаются от GPIO и светят снизу на рассеивающую подложку от PLEXIGLAS. Проблема в том, что экран имеет прозрачность (transmissivity) около 0.15%, это очень мало для обычных светодиодов.
В 2.0 версии я использую два белых светодиода, стоящих под прямым углом:
ИзображениеTedBeer
29.06.2017 09:39Так приземленный вопрос — простая JS задача на таймере/setInterval(...) сколько будет съедать энергии? Какова разница в потреблении когда есть watchface работающий по таймеру и когда его нет?
eup
29.06.2017 10:28+1Пока даже на такой простой вопрос ответ дать не могу.
Амперметр в разрыв питания в момент обновления вотчфейса показывает прыжок по потреблению с 100мкА (это слишком много, надо будет понижать) до чего-то вроде 5мА (просыпается ядро и колбасит скрипт и обновляет экран), а потом всё засыпает и потребление возвращается назад к 100мкА.
Для 2.0 версии платы, которая приедет где-то через месяц, я сделал test-jig с pogo-пинами на ней и микроконтроллером (STM32F103, у меня их куча), который будет следить за потреблением платы через шунт и слать данные через USB-CDC (виртуальный COM-порт) на компьютер. Таким образом, у меня будет удобный профайлер энергопотребления и тогда я буду проводить самые хитрые бенчмарки и оптимизировать уже не в слепую.
Вообще, когда я в первый раз подключил плату к амперметру, я просто рвал волосы на голове — 15мА потребления. Я спрашивал себя, «Откуда?!». Оказалось, что есть много случаев (они описаны в ERRATA, [1], [2]), которые сильно увеличивают потребление чипа в спящем режиме или не дают ему уснуть вообще. Ну и ещё акселерометр на плате (MPU-9250) по-умолчанию работает в режиме, который ест 5мА. Чип флеш-памяти тоже почему-то съедал несколько миллиампер, пока я его не перепаял и он не перестал. По оптимизации энергопотребления и граблям конкретно у nRF52 можно писать ещё одну целую статью.
eup
29.06.2017 10:48К слову, тестовых поинтов для pogo-пинов получилось много:
Зато удобно и не надо ничего припаивать для отладки.
dion
29.06.2017 16:17+1Правильно я понимаю, что есть 'ответная' плата со штырями в этих местах?
TedBeer
29.06.2017 11:05+1Значит еще предстоит длительная оптимизация. Espruino PICO в режиме Stop (реал тайм тикает, есть возможность проснуться по сигналу или таймеру) потребляет 20мкА. Когда будете готовы, то почитайте на сайте Espruino, полистайте исходники(спасибо опенсорс), чтоб понять где можно соптимизировать — Espruino Power Consumption.
olartamonov
29.06.2017 19:00+1Там какая-то поверхностная чушь написана.
На микроконтроллере низкое потребление делается по стандартным шагам:
1) если есть периферия, способная тактироваться в STOP (LPUART и т.п.) — задать в явном виде требуемое её состояние
2) если есть требования по переводу встроенных LDO или DC/DC в определённое состояние — выполнить его
3) висящие в воздухе GPIO нельзя оставлять в состоянии цифрового входа без подтяжки. Они должны быть сконфигурированы как вход с подтяжкой, аналоговый вход или цифровой выход.
4) GPIO, идущие на цифровые входы периферии, не имеющие собственной подтяжки, нельзя ставить в состояние входа без подтяжки или выхода с High-Z. Они должны быть сконфигурированы как выход или вход с подтяжкой, направление которой соответствует минимальному потреблению периферии (т.е., например, UART TX и SPI CS подтягиваются в 1)
Обычно потребление в STOP масштаба 20-200 мкА есть следствие несоблюдения пунктов 3 и 4.
Vovvka
28.06.2017 23:21+1Это просто замечательно! Пожалуйста, не бросайте разработку (нужна водонепроницаемость и подсветка).
И надо пробовать Кикстартер, т.к. лучше попробовать (в параллель разработке для себя) и не собрать сумму, чем потом сожалеть, что не попробовали.
Сам бы купил такие часики всей семье. По Pebble очень скучаю, а тут opensource ;-)
SilverR
03.07.2017 10:58+1Круто, так держать. Почитал на одном дыхании, уйма полезных микросхем поведана! Спасибо!
roma_turkin
Это потрясающе. Снимаю шляпу!
Как долго вы делали этот проект?
eup
Спасибо за отзыв! Делалось и обдумывалось полтора года точно, очень неторопясь. Сам проект ещё в процессе, тут в основном показаны более-менее видимые промежуточные результаты.