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

e829a679f79d4812dee414b75077ddb0.jpeg

Вступление

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

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

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

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

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

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

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

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

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

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

Грант

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

Разработка

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

35536634c262f153efee08ab02728e7e.jpeg

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

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

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

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

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

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

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

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

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

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

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

c5c83d153e8c5b00c8b243cde105fc0e.png

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

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

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

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

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

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

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

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

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

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

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

1.3» OLED дисплей

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

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

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

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

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

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

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

ab57140038fbe794a7baafcdebdf1490.png

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

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

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

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

786b4c64ab0e75b41c4dbd4639788124.png

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

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

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

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

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

767b14105a3c45c321b3c3878793a2f0.png

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

265d79f06e7edd08954ae0fba3935582.png

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

3e5418c0b8e379fb5fa2f9532051c982.png

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

e2aa33946ab8216b871a87d39062e3db.png00f190ef5d9090846188f4131c0191b4.png8259d0c467712e9605903fcde97be1a1.png

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

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

87c65e3a95937953e99e995b905ab41f.png

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

f8fb790f8e45cbb534d86b79ab751da4.png

Изначально мы пытались работать с исходным кодом в 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 разных версий корпусов, причём с разной расцветкой — оранжевые, белые и чёрные.

346b6e292f18ac72dbf9c55e582b01f1.jpeg

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

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

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

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

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

31f6e3ecdb6b65da78fc7d9ed0511171.png

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

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

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

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

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

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

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

d67b50da3bd957fd150938db2c6f2165.png

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

ac057411eda278fc61e3da9d08ada23a.png

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

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

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

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

Заключение

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

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

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

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

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

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

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

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

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

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

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

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

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

© Habrahabr.ru