Привет, друзья!

Уже год мы с командой делаем сервис заботы о себе. В нём можно отслеживать психологическое состояние каждый день, фиксировать мысли и просить советы у случайных пользователей. Однажды мы подумали — было бы классно сделать заботу о себе осязаемой, сделать для этого девайс. Он бы стоял на тумбочке, задавал вопросы, напоминал следить за собой...

И вот мы решили за 2 недели собрать такой девайс. Напечатали ему корпус на 3D-принтере. Настроили связь по Wi-Fi, добавили аккумулятор, дисплей и пару кнопок. Научили его выводить на экран данные о настроении на дисплей и передавать любую информацию по протоколу HTTPS. А потом поняли, что вывести можно всё, что угодно...

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

Часть 1. Разработка девайса (рассказывает Влад)

Мы начинали с сырого концепта, одной мысли и не более. Параллельно думали про техническую реализацию и упрощали PoC как могли, дошли до состояния "давайте научимся хотя бы выводить цифру с сервера по GET запросу". Но аппетит приходит во время еду, и каждый день мы добавляли к ТЗ что-то новое: то часы, то индикатор заряда, то показ смайликов... А ожидания были, что закончим за 2 недели.

Запуск за 2 недели

Железо

Почему даже без корпуса?

Мы принципиально хотели добиться автономности устройства (автономность = заряжать раз в два месяца). Отсюда и пошла архитектура: базовая станция в розетке, устройство с аккумулятором на столе, между ними радиоканал.

Технические детали: базовая станция на ESP8266, сама ходит в интернет и достает данные GET запросом по токену. Между базовой станцией и устройством - радио 433мГц. Устройство сразу с экраном, который эти данные отображает. Почему ESP именно в базовой станции? ESP жрет много тока, не менее 20мА среднего потребления в режиме подключения и больше 80 в режиме передачи. (Жесткое издевательство над железом немного исправило ситуацию, но об этом дальше).

Канал передачи "БС<->устройство" было решено сделать максимально просто и понятно. В качестве радио интерфейса были выбраны модули UART моста HC12. 

Мозги девайса — ATMEGA328. И тут, внимание, фича! На плате распаян USB-UART мост на CH340 и выведен на USB. Что делает устройство полностью Arduino совместимым. Просто втыкаешь провод и шьёшь одной кнопкой. Btw, при разработке следующих версий платы были учтены все защиты от дурака. Теперь нельзя, например, спалить порт назначив его выходом. Даже все входные порты развязали резисторами. 

Организация питания в виде DC-DC на MT3608. Здесь же первые шаги к оптимизации потребления в виде даунвольтинга до 4.2В, на которых дисплей и МК все еще неплохо себя чувствуют, но потребляют меньше. Ну и модуль зарядки на TC4056.

Нет, не с первого раза заработало, плат было сделано много, примерно одна в день (на фото только часть плат).

Базовая станция была собрана самой первой и это была ошибка.

Туда мы поставили ESP11 и HC12. В дальнейшем собрали также Arduino-совместимую версию с CH340 на борту.

Итого: БС-бутерброд в корпусе от WiFi адаптера. 

Софт

Весь софт написан в среде Arduino IDE. Заливается он предельно просто как в любую чистокровную ардуину. Сразу на ESP реализована схема подсмотренная у Node MCU, так что нажимать ничего не надо для перехода в бутлоадер, автоматика все сделает сама.

Настройка имени точки доступа и пароля происходит по переключателю на базе, который переводит ее в режим конфигурации. База поднимает свою AP с DNS сервером. Так что при подключении любые попытки устройства обратится в сеть переадресуются и мы видим “Необходима авторизация”, что переводит нас на страницу конфига.

В версии с базовой станцией мы используем радио. Так первоначально у нас идет прозрачная передача строки. Авторизация и подбор частот конечно нужна, но не сейчас. Мысли перейти на более заточенное радио, например на NRF или BLE, были, но подразумевали отказ от того что используется сейчас, поэтому мы их отбрасывали)

Логика работы устройства с экраном:

  1. Спать 90% времени. Проснувшись - подать питание на радиомодуль, подождать его инициализации 80мс, и отправить запрос на сервер. 

  2. Приняв ответ на запрос, спарсить JSON, расшифровывать его и отправить по радио строкой с четкой резервацией знакомест.

  3. Далее дождаться данных по порту, положить их посимвольно в буфер до символа терминатора. Буфер разложить на части и оставить в переменных. Далее обновить дисплей и снова лечь спать.

Итого получилось добится автономности в 2 месяца от 4х HG2. Ухууу!

Машина времени: как мы оптимизировались ещё за 2 недели

В рамках спринта мы получили две версии девайса: с базовой станцией и без неё. Следующий шаг был уже вызовом самим себе: сможем ли мы догнать по энергопотреблению версию версию без БС, если wi-fi будет работать на устройстве?

Тут я вспомнил физику. Я больше электронщик чем программист. И когда все 200 страниц сдк от Espressif были изучены и никаких программных методов снижения потребления не было найдено в дело пошло железо. 

Даунвольтинг наше всё. Было экспериментально обнаружено что модуль все еще стабильно работает при напряжении питания 2.2В. Естественно были использованы высокоэффективные DC-DC. Никакой линейной стабилизации. Так удалось снизить потребление до средних 12-15мА в режиме поддержания соединения по DTIM. И до 56мА в режиме передачи данных. (Это не только ESP, это потребление девайса в общем. Включая 2мА на дисплей и подсветку и примерно 1-2мА на потери на DC-DC.)

Зачем это все нужно было? Потому что мы в самом начале захотели а) автономность устройства до двух месяцев при небольшом аккумуляторе (до 10k MAh) при частоте обновления дисплея раз в 4 секунды. Так как подключение к роутеру и серверу в среднем занимало у устройства 2-4 секунды, единственный способ выдержать требования было держать соединение Wi-Fi живым всегда (эх, глубокий сон - не вариант).

Дизайн

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

Часть 2. Разработка концепции (рассказывает Наташа)

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

Но сначала о респондентах. Всего в опросе участвовали 16 человек: мужчины и женщины от 21 до 47 лет. Все русские, один живет в ЮАР,  один в Берлине, ещё один в Беларуси, четверо из Питера, пятеро из Москвы, остальные из регионов. Со всеми обсуждали потребности в трекинге психологического состояния и эмоций, а также отношение к умным девайсам. 

И вот: топ-10 фичей, которые можно было бы добавить к нашему прототипу:

N

Описание фичей

1

Отметка своего настроения с девайса и синхронизация данных с сервером

2

Отображение сегодняшнего настроения и комментария после отметки

3

Визуализация статистики настроения за неделю / месяц / год

4

Будильник и звуковые напоминания ("привет, время отметить настроение, расскажи мне про сегодняшний день" / “не забудь принять таблетки / выпить витамины” / “пора ложиться спать” / “сегодня ты договорился встретиться с друзьями”)

В общем, “не забудь Х, где Х возможно настроить или хотя бы выбрать из предложенных”

5

Диктофон и воспроизведение аудиозаписей (записать голосовое сообщение, вернуться и прослушать)

6

Вывод других метрик и статистик (особенно интересуют физические: активность / сон / вес)

7

Воспроизведение медитаций, аудио, контента с телефона (aka умная колонка)

8

Кастомная фотография на экране

9

Голосовой помощник ("привет, мне хреново" / "братюня, загугли мне что-то" / позвони маме)

10

Распознавание голоса, чтобы было комфортно не только надиктовывать мысли, но и перечитать заметки

Аппетит приходит во время еды. Допустим, отображение метрик выглядит достаточно базовым, можно сделать ещё за 2 недели, но вот распознавание голоса — уже немного космолёт… У нас экспертизы нет)

Дальнейшие планы

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

А хотели бы вы такой девайс себе на рабочее место? А какой функционал добавили бы? Если есть идеи или вдохновение — пишите в комментариях, мы постараемся отправить вам прототип и дать доступ к API, чтобы и вы могли вывести что-то своё на его экран.

Спасибо и вдохновения вам!

P.S. на сладкое: фото второго прототипа total white. White is new black.