Как стать автором
Обновить

ATWatch: Долгий путь разработки умных часов на Arduino

Время на прочтение12 мин
Количество просмотров16K

Вступление

Привет, меня зовут Артем. Не так давно я спросил Артёма (да, да, слишком много Артёмов на квадратный сантиметр, поэтому различить нас можно по букве е или ё, у меня соответственно е) о том, почему бы нам не рассказать о своём проекте, думаю многие смогут подчеркнуть в нашей истории, что-то своё.

Проект ещё начинался, когда я был в 9 классе школы. В университете к разработке присоединился мой друг Артём. Сейчас я закончил университет и темой моей работы стал данный проект.

Как всё начиналось

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

Ведь, действительно, если подумать, то проект был замечательной платформой с обширным набором различных датчиков и модулей, с которыми поиграть не составит сложности даже школьнику!

Первую апробацию эксперимент на детях мы провели на базе летней школы инженерных проектов в г. Новосибирске – Инжевика. Нам досталось группа из 6 целеустремлённых школьников готовых постигать новые неизведанные технологии. Мы с Артёмом разделили ребят на пары, в которых им предстояло вместе работать на протяжении нескольких дней.

Первые два дня концентрировались на получении новых знаний. Чередуя лекции и практики, мы смогли пройтись по всем датчикам и основам Ардуино. Третий день был самым тяжелым. В начале дня мы накидали идею приложений, которые должны быть в крутых смарт часах (таймер, секундомер, плеер, flappy bird, отпугиватель собак?!). Каждый взял, что ему было интересно, работа кипела, мы бегали и весь день помогали исправлять ошибки в коде. Последние два дня на наше удивление поезд был поставлен на рельсы, и школьники справились сами с небольшой помощью.

Самым веселым было потом объединять код в одно целое, речь о системе контроля версий не шла, мы и так загрузили их по максимуму, казалось ещё чуть-чуть и полка со знаниями обвалится. 

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

И вот час X, наш проект начинают обсуждать, и на наше удивление, нас хвалят (глубокое погружение школьников в тему проекта, много проделано работы, командная работа — это замечательно и т. д.). Как закончилась смена, мы ужасно уставшие и не выспавшиеся, но довольные поехали домой.

Грант

Мы решили подаваться на грант УМНИК от кружкового движения и даже смогли его получить. Защита была дистанционно в скайпе и нас даже просили идти сразу на СТАРТ, ведь проект уже почти готов, но мы решили начать с чего-то поменьше (и попроще). Грант мы получили на руки только через год и сразу же ускорили работу над проектом, решив сделать пробную партию из 10 штук.

Разработка

Работа велась в лучших традициях - на коленке в общежитии под пристальным надзором тараканчиков, которые там обитают.

Выбор микроконтроллера 

Изначально первые платы работали на Atmega328p, но в ходе тестов сразу стало понятно, что он не подходит нам из-за маленького количества FLASH и RAM памяти. Ставить камень как у Arduino Mega на миниатюрную плату желания никакого не было и пришлось искать что-то среднее и мы его нашли Atmega1284p 128 Кб FLAH, 16 Кб RAM, корпус TQFP-44 просто конфетка!

Вопрос энергопотребления стоял очень остро, и мы перепробовали различные напряжения питания и всё же пришли к 3.3в, на таком напряжении нам удалось выдавить у мк целых 12 МГц!

Выбор модулей и датчиков

Перед тем как проектировать плату мы поставили вполне конкретные требования к нашим модулям:

  1. Низкое энергопотребление или возможность перейти в режим сна.

  2. Маленький размер.

  3. Наличие библиотеки Arduino.

  4. Максимально широкой функционал. 

На этих пунктах сгорели такие интересные модули как Lora, ESP8266.

Остановились мы на следующей конфигурации:

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

Мы перепробовали много различных модулей часов, но нам больше всего понравились именно эти, в них есть всё, что нужно: кушает мало и обладает высокой точностью благодаря внешнему кварцу. Были варианты и точнее, но и кушали они значительно.

CP2102 –USB -UART конвертер

Под рукой у меня лежал китайский USB-UART преобразователь, поэтому, недолго думая, мы поселили его на нашу печатную плату. Как оказалось, выбор был одним из самых доступных по цене. Были варианты и меньше по размеру, но по непонятным причинам их цена резко увеличивалась, поэтому остановились на нём. 

BMP280 – датчик температуры и давления

Замечательный датчик для создания носимой погодной станции. Очень забавно с ним было спускаться в метро или измерять высоту потолка в комнате. Хорошей альтернативой был BME280. Он дополнительно может измерять влажность воздуха, но он не как не хотел влезать в компоновку платы, поэтому, к сожалению, нам пришлось отказаться он него.

LIS3DH – 3х осевой акселерометр

Как оказалось акселерометров и гироскопов на рынке оказалось очень много, но мы выбрали именно этот (маленький размер нас подкупил), однако, с ним были проблемы. Резистор, который должен был менять адрес I2C, неистово грелся по непонятным причинам, решение было крайне простым - хирургическое удаление проблемного компонента.

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

NRF24L01+ – радио модуль

Изюминка проекта. Мы долго выбирали между NRF24L01+ и Bluetooth, но всё же NRF победила. Во-первых, можно подключать не одно устройство, а сразу несколько (до 6 каналов на чтение одновременно), при желании можно увеличить это число с помощью библиотек, некоторые умельцы даже могли передавать данные на телефон и обратно с его помощью (чем вам не синий зуб). Чип капризный к питанию, поэтому ему был выделен собственный стабилизатор напряжения, который позволил работать с ним без проблем. Мы сделали игру Pong на двоих, которая работала по радиоканалу без задержек, для нас это был большой шаг вперёд. 

1.3’’ OLED дисплей

OLED дисплей на наш взгляд один из лучших дисплеев для ардуино, для его работы нужно не так много ресурсов, по сравнению с цветными дисплеями. Изначально дисплей работал по шине I2C, но после того, как мы попробовали SPI - назад пути не было, скорость работы повысилась в десятки раз, казалось, даже мк смог раскрыть себя на 100%.

MAX17043 – (микросхема отслеживания уровня заряда аккумулятора)

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

MCP73832 – заряд аккумулятора

Ничего необычного, маленькая микросхема, которая заряжает аккумулятор нужным для нас током и оповещает микроконтроллер о текущем состоянии. Большего от неё и не требуется.

MAX30102 – Пульсоксиметр

Достаточно сложна в работе микросхема даже с учётом того, что для неё написана библиотека, капризная к движениям и месту расположения. Лучшие показатели мы наблюдали на кончике пальца (и ногах), нужно приноровиться настроить её, и можно использовать практически везде. Так же в режиме плоттера можно было наблюдать красивую пульсограмму, которая очень напоминает ЭКГ. Применений датчику масса, от попыток отследить аритмию до других аномалий, получался некий аналог холтера. Для работы этого датчика мы выделили собственное питание 1.8В, которое по умолчанию было отключено, а для работы с датчиком нужно было его включить подтянув ножку к питанию. Это позволило понизить энергопотребление.

Остальные компоненты 

Из интересного остались кнопки, мы перебрали больше 10 видов подобных кнопок и выбрали лучшие на наше субъективное мнение. Пьезоэлемент мы выбирали самый маленький из доступных нам, и на удивление он оказался громким (а это вы ещё не слышали 8-битную мелодию из Пиратов Карибского моря). Также нашлось место и для миниатюрного вибромоторчика. 

Аккумулятор был выбран формата 402535 на 350 мАч.

Энергопотребление в спящем режиме около 56.1 мкА (как показывает мой Китайский друг), а в режиме работы 20-40 мА в зависимости от используемых модулей.

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

Платы проектировались в Sprint Layout, сейчас я понимаю, что это звучит как безумие, делать подобный проект без автотрассировщика. Две основные платы соединены через гибкую плату, которая оказалась очень удобной в использовании. По этому шлейфу передавались контакты расширения и управления микроконтроллером. Через набор точек на задней крышке планировалось сделать различные модули расширения, которые могли бы взаимодействовать с основной платой без проблем. Интересным ходом мы добавили переключатель аккумулятора. В ходе разработки прошивки не всегда первым делом создается режим низкого энергопотребления, что очень быстро разряжает аккумулятор, поэтому решение оказалось очень простым, поработал – выключи питание. Если быть точнее, питание можно было включать для автономности платформы, при подключении USB, плата запитывалась от 5V. 

Плата на крышке
Плата на крышке
Основная плата
Основная плата
Соединительная гибкая плата
Соединительная гибкая плата

Изготовление плат

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

После этого мы вспомнили про PCBWAY, где мы оформили печатные платы вместе со сборкой. В целом весь процесс оказался на удивление простым, достаточно отправить Gerber файлы и перечень компонентов с посадочными местами (на всякий случай мы отправили ещё исходники).

После двух месяцев ожидания, посылка ждала меня на таможне, где мне пришлось заплатить налог.

Качество результата, было выше всяких похвал.

Программная часть

В начале разработки Bootloader мы загружали через вот такой TQFP-44 - DIP адаптер.

В дальнейшем SPI разъём был вынесен на заднюю крышку через шлейф, который мы использовали для загрузки bootloader. В качестве ядра был выбран MightyCore с конфигурацией на 12 МГц внешнего тактирования, скоростью UART 57600 бод и выключенным BOD.

Изначально мы пытались работать с исходным кодом в Arduino IDE, но это стало полным кошмаром с ростом исходного кода. На помощь пришел PlatformIO, как оказалось настроить его крайне просто. В рамках дипломной работы я решил попробовать подключить к этому безобразию FreeRTOS и на удивление это отлично работало!

Корпус

Из под полимерных холмов от стружки выползает замученный второй Артём… Отряхивается и начинает свой рассказ о великих походах за невиданными корпусами.

Варианты изготовления корпуса

Иной раз, у нас и правда возникала мысль, что сделать корпус для часов - это задача сродни волшебной. Изначально мы рассматривали несколько вариантов для разных этапов развития проекта:

  1. Прототипы на 3D принтере.

  2. Мелкая партия на силиконовых формах.

  3. Большая партия на металлической форме.

До 2 и 3 пункта мы так и не дошли, так как либо это было очень дорого для начальных этапов, либо были невыполнимые требования к характеристикам самой детали (например, минимальная толщина). Поэтому все наши корпуса до сего момента были напечатаны на 3D принтере.

Изготовление 3D модели

Первым делом мы сконструировали 3D модель деталей корпуса, которых было 3:

Корпус
Корпус
Крышка
Крышка
Кнопки
Кнопки

Для моделирования использовался Solid Works. Но, только по началу, в какой-то момент он сильно надоел своей неудобностью, и мы перешли на Autodesk Fusion 360, который в дальнейшем помог еще и с интеграцией электроники и корпуса.

Печать корпуса на 3D принтере

И тут началось веселье.

Мы выбрали для печати корпусов SLS (Selective Laser Sintering) подход. Он был оптимальный по соотношению цены, качества, долговечности и точности.

Поискав разные фирмы, мы остановились на одной, которая предоставляла и удобный сервис (на первый взгляд), и хорошие предложения для печати, которые нас удовлетворяли. Сумма для изготовления одного корпуса составила 500 рублей.

Первый корпус

Настал момент получения и распаковки корпуса. Было радостно держать в руках уже что-то настоящее, что в скором станет цельным девайсам, соединившись с электроникой.

Но, придя домой и соверша более тщательный осмотр, оказалось, что большинство размеров у деталей не совпадают с оригинальной 3D моделью. Разница была буквально в долях миллиметра, но, так как это касалось всех частей, то ничего никуда не вставлялось, куда должно было.

Попытка покрасить корпус красителем для полиамида
Попытка покрасить корпус красителем для полиамида

Чтобы исправить все “косяки”, пришлось потратить несколько часов с пилкой и канцелярским ножом в руках. И только тогда детальки встали все на свои места. Потом, конечно, еще были подгоны под электронику, под кнопки (чтобы они нажимались приятно). Были правки и самой 3D модели с учетом погрешности на 3D печать, так как не хотелось заниматься столярным мастерством каждый раз.

Второй корпус

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

N-ый корпус

Цикл пиления корпуса, правки 3D модели, заказа нового корпуса, разочарования и т.д., повторился много раз. Что сейчас я уже даже и не вспомню, сколько в итоге у нас было прототипов - возможно 6 или 7.

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

Фотополимерный корпус

Для проверки “А кто косячит?” мы решили напечатать корпус используя другую технологию - MSLA (Masked Stereolithography). Она должна была быть на порядок точнее и быть менее подвержена каким либо деформациям материала во время печати.

Стоимость была в районе 2500 рублей за тот же самый корпус. Но благодаря нему мы проверили, были ли ошибки в самой 3D модели (во что очень не верилось), или всё же качество печати SLS именно у этой фирмы было очень нестабильным.

Ответом оказался второй вариант. Тогда мы и решили отказаться от заказов печати у этой фирмы.

Корпус от другой фирмы

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

И нашему удивлению не было предела, когда мы получили корпус, который без каких либо исправлений спокойно вставал на места так, как надо.

Но с оговоркой - детали имели малейший люфт и были видны щели. Хоть мы и поправили 3D модель обратно, но всё равно оставили немного запаса под особенности 3D печати. Но модель была напечатана практически идеально по размерам. Поэтому пришлось править 3D модель, но уже в обратную сторону.

Первая партия

Для сборки первой маленькой партии прототипов часов мы решили заказать у новой фирмы 10 разных версий корпусов, причём с разной расцветкой - оранжевые, белые и чёрные.

Все корпуса были получены, проверены. А мы были в успокоении, что наконец-то хотя бы для прототипов мы нашли нормальную фирму, которая хорошо делает свою работу.

Орешки в корпусе

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

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

Желательно, чтобы орешек впресовывался в отверстие. Другие варианты могли попортить саму резьбу - вплавление или вклеивание (или это нужно было бы делать очень аккуратно).

Изготовление защитного стекла

Казалось бы, что может быть сложного в изготовление оргстекла с печатью чёрного квадрата с прозрачным контуром внутри. Как оказалось, для производителей это крайне сложная задача. Мы попробовали около 4 сервисов и ни один не смог изготовить нам то, что бы хотели. Один заказ побил все рекорды (копирую текст из письма).

  1. Толщина не 1мм, а 1.2мм.

  2. Слой печати очень маленький, просвечивает.

  3. Очень много дырок в печати.

  4. Сколы у всех стекол с одной и той же стороны.

Если четвертый пункт я понять могу, фрезеровка могла оставить свои следы, то всё остальное объяснить мне тяжело.

Краудфандинг

Хочется сказать отдельное спасибо Фаблаб Политех за неоценимую и безвозмездную помощь в подготовке материала. 

Мы решили готовить краудфандинговую кампанию, записали видео и оформили страницу на бумстартере и следующий шаг, нажатие заветной кнопки и… 0 продаж, мы были разочарованы, вы, наверное, подумали, а как же маркетинг? О проекте должны были узнать люди! Мы это понимали и у нас было не так много каналов через которые мы могли заявить о себе и, к сожалению, самые крупные нас просто проигнорировали, оставив одних.

А как закрыть?

После всего этого, мы решили не получать вторую часть гранта и остановится на первой. Информации по процессу закрытия в сети было мало, поэтому мы пошли спрашивать тех кого знали, но нам никто не отвечал! Так прошло больше полугода, теоретически мы должны были уже закрыть первую часть и получать вторую, но никакой информации не было. Поэтому было решено пробираться своими силами, обзвон всех телефонов с сайта гранта не дал результатов, нам просто не отвечали и один прекрасный момент мне ответили! Разговор был короткий по результатам которого, мне сказали нажать кнопку на сайте, но самое забавное, что этой кнопки не было! В результате большого количества звонков (буквально каждый день по раз 6) с n-ой попытки мне удалось достучаться до куратора, который пообещал решить вопрос в течение недели, но как можно догадаться, никто мне не ответил, ситуация становилась абсурдной, я продолжал звонить каждый день и меня кормили завтраками! В результате после 5-6 успешных дозвонов до куратора, мне добавили в личный кабинет заветную форму, которую я заполнил тем же днём и спокойно выдохнул.

Заключение

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

Топ-5 пыжек, которые мы прожарили в своей голове за время труда над часами:

  1. Грант - это хорошо, но только, когда он вовремя получен и закрыт.

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

  3. Первый Корпус комом, а второй… кхм.
    Всегда есть альтернативные решения. Главное не сдаваться и искать! А также уметь находить пути проверки “А что же на самом деле происходит не так?“.

  4. Поешь стекла.
    Иногда приходится смириться с тем, что определённая штука не будет нормально работать в проекте, или её даже не получится сделать в приемлемом виде. Но, не горевать - смотрим вокруг и планируем, что и как с этим делать, как преподносить.

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

Топ-5 шишек, которые мы набили при работе с проектами:

  1. Не связывайтесь с грантами если это возможно.

  2. Командная работа The Best, выстроенные процессы The Rest.

  3. Достижимые цели склеены четким пониманием идеи.

  4. Энергетиком выступает рост популярности проекта.

  5. Это уже бизнес - не обходите всё, связанное с ним, стороной.

GitHub репозиторий с исходниками.

Теги:
Хабы:
+89
Комментарии31

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн