Badge From Scratch – Problem Driven Development

7b0b1d2d81fe9b4656dfb7e10a96e21a.png

Всем привет! На связи Positive Labs, R&D-подразделение Positive Technologies, занимающееся исследованиями и разработкой hardware и не только. В своих прошлых статьях [этой и этой] мы грузили читателей техническими подробностями наших исследований. Сегодня же мы предлагаем вернутся в 2024 год и послушать историю создания интерактивного бейджа для фестиваля PHDays Fest 2. Устраивайтесь поудобнее и приготовьте ваши фейспалмы: пользоваться ими придется часто :)

О чем вообще речь

Для тех, кто в танке: компания Positive Technologies ежегодно в мае проводит киберфестиваль PHDays, который в прошлом году носил название PHDays Fest 2. Специально для этого мероприятия мы выпустили интерактивный бейдж (собственно, он и представлен на превью). История интерактивных бейджей берет свое начало с хакерской конференции DEF CON. На официальном сайте конференции есть отдельная статья, посвященная созданию и развитию концепции бейджей (DEF CON Hacking Conference — The Badge). В нашем Telegram-канале можно посмотреть, что умеет PHDays Badge. Но если вкратце: он умеет отображать картинки на пиксельном экране. Есть набор стандартных, но можно подключиться к нему по Wi-Fi и нарисовать собственную картинку.

1f260b5036f8c008a4956cbd6dff9a0c.png

Ну что же, раз все в контексте, начнем, пожалуй.

Проблема 0 — Идея

Идея создания бейджа родилась задолго до создания Positive Labs. Можно сказать, что это была мечта одного из сотрудников, на которую не хватало времени и средств. Но вот на дворе начало 2024 года, и нашему подразделению приходит запрос: «А не хотите поучаствовать в фестивале PHDays Fest 2?» Такой шанс выпадает нечасто, и мы поняли, нужно воспользоваться возможностью по максимуму: кроме организации собственной зоны на фестивале мы решили создать простое, но при этом крутое и веселое устройство. Спустя несколько часов за рулем (да-да, концепт бейджа был разработан в лучших традициях IT — во время созвона в пробке) был сформирован список качеств, которыми должен обладать будущий бейдж (спойлер: не все мечты сбываются):

  1. Яркий — бейдж должен быть заметен издалека и цеплять взгляды всех проходящих мимо детей

  2. Громкий — приближение обладателя бейджа должно быть не только видно, но и слышно

  3. Уникальный — бейдж должен быть кастомизируемым, чтобы каждый обладатель имел возможность подчеркнуть свою индивидуальность

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

  5. Автономный — сиять надо как минимум с 9 до 19 (график диктует фестиваль)

  6. Беспроводной — все становится лучше с Wi-Fi

  7. С ИК-портом — ну потому что ретро рулит

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

Да-да, так выглядел бейдж в тот вечер
Да-да, так выглядел бейдж в тот вечер

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

Концепт-арт бейджа на следующий день
Концепт-арт бейджа на следующий день

Итак, мы получили идею, которую можно развивать упрощать. Наш план-график был следующим:

  • две-три недели на разработку схемотехники и трассировку первой версии платы

  • две недели на производство первого макета

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

  • месяц на производство и проверку всей партии

  • пара запасных недель на случай непредвиденных обстоятельств

Итого в худшем случае у нас должно было уйти на все не более трех месяцев, а до начала PHDays Fest 2 на тот момент оставалось четыре. Целый месяц в запасе, звучит как «вроде изян», верно? Что же может пойти не так?

79be0860fd7f9e1e4bd15d9973258e88.png

Проблема 1 — Схемота

На следующий день после презентации нашей идеи (да-да, вот такие вот мы менеджеры) руководителю Алексею (@Benonline), выяснилось две новости:

  • Хорошая: идея топ, надо делать

  • Плохая: все заняты работой, делать некому

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

Рендер платы перед отправкой в производство
Рендер платы перед отправкой в производство

На этом этапе мы еще думали, что все наши хотелки будут реализованы. Однако, получив первую версию бейджа, мы выяснили, что немного ошиблись в выборе пинов на ESP32 для ИК-светодиода: пин использовался ESP как bootstrap, а мы подали на него внешний pullup. Это препятствовало загрузке ESP, и в итоге бейдж даже не включался.

Знакомый с разработкой устройств читатель может спросить: «Почему бы просто не выпустить вторую ревизию перед отправкой на производство, в чем проблема?» А проблема была в том, что при разработке нашего чудесного план-графика мы не учли подобное развитие событий и договорились о старте производства. Завод срочно требовал Gerber-файлы, а иначе «никаких гарантий», что бейджи будут изготовлены в срок. Так мы потеряли нашу первую фичу — ИК-порт.

968ec8d07f57340706ec10d61f435abb.png

Проблема 2 — Экран

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

Конечно же, мы ожидали, что так будет, и немного заранее занялись конструктивным реверс-инжинирингом колонки Divoom Ditoo, экран которой был одним из референсов для нашей идеи.

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

Конечно же, мы ожидали, что так будет, и немного заранее занялись конструктивным реверс-инжинирингом колонки Divoom Ditoo, экран которой был одним из референсов для нашей идеи.

Неповторимый оригинал Жалкая пародия
Неповторимый оригинал Жалкая пародия

На жертвенный алтарь реверс-инжиниринга лег личный экземпляр одного из сотрудников: все во имя науки PHDays Fest 2!

Разобрав колонку, мы поняли, чего нам не хватало:

  • Световоды — изолируют светодиоды друг от друга и не позволяют цветам соседних «пикселей» смешиваться

  • Рассеивающая свет пленка — в сочетании со световодами она придает «пикселям» квадратную форму

  • Затемняющий экран — позволяет получить насыщенный черный цвет и повышает контрастность итогового изображения

После недели поиска подходящих материалов и активного тестирования их на макете мы смогли подобрать сочетание, которое бы выглядело максимально «пиксельно».

5213efad1c2348c9423eb8af42ed2e4f.gif

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

Проблема 3 — Производство

Примерно в этот момент к команде разработки бейджа присоединяется широко известный в узких кругах любитель 3D-печати Николай (nlef · GitHub) (вы вполне могли пользоваться его Telegram-ботом для Klipper). Вообще, немного забегая вперед, можно смело утверждать, что именно благодаря Коле бейдж получился таким, какой он есть.

Итак, наш спец по 3D-печати поспешил нас разочаровать: задуманный нами световод изготовить методом FDM-печати будет сложно. На то было несколько причин:

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

  2. Геометрия стенок световода не учитывала возможности технологии, из-за чего они были слишком тонкими и хрупкими

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

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

e4c04773612147a290444680a694cb98.png

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

Минутка математики.

Дано:

● для производства одного бейджа нужно 100 светодиодов

● всего нужно произвести 1000 бейджей

● у поставщика А на складе есть 50 000 светодиодов

● у поставщика Б на складе есть 50 000 светодиодов

Вопрос: хватит ли светодиодов на складах, чтобы произвести нужное количество бейджей?

Ответ: нет, потому что у разных поставщиков один и тот же склад.

ba0b0937e4bf69861d30826f1bbf20bc.png

Как вы поняли, первоначальные расчеты нас подвели. Скажем коротко: спасибо ребятам с производства, что смогли быстро привезти из Поднебесной недостающие компоненты.

Оставалось только нарезать световую пленку, «затемнитель» и корпус — и купить 8000 винтиков. Но даже тут мы не смогли учесть все детали. ПЭТ-пленка, которую мы использовали для корпуса устройства, поставляется в рулоне. Резка идет с помощью лазерного станка. Если развернуть пленку в плоскость станка, она не принимает форму плоскости. Вместо этого по всей поверхности пленки расходятся «волны», что приводит к геометрическим искажениям корпуса и большому проценту брака.

Довольный Коля после подгонки всех компонентов
Довольный Коля после подгонки всех компонентов

Проблема 4 — Firmware

Время шло, бейдж уже отправился в релизное производство, а воз код был и ныне там: экран мог загораться для проверки, но не более того. До гордого названия «интерактивный» нам не хватало интерактивности… Тут второй раз всплывает имя Николая. Вспомнив, что, помимо хобби, Коля является квалифицированным highload-разработчиком, и решив, что писать под embedded — это то же самое, мы поставили перед ним задачу вдохнуть в бейджик жизнь.

Тут стоит еще упомянуть, что на дворе конец апреля и до PHDays Fest 2 уже меньше месяца. Сделав все возможное и невозможное, Коля смог реализовать:

  1. Веб-интерфейс, чтобы пользователи могли рисовать свои картинки

  2. Супермегаоригинальный способ подключения к бейджу через Wi-Fi, который он сам же и раздает

  3. Ну и все необходимое, чтобы это вообще работало :)

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

4c7f1563d969c047f9c677cc07be7a0b.png

Пока Коля оживлял интерактивность бейджа, контент-директор Positive Labs Егор приступил к наполнению галереи. Запал закончился ко второму десятку: оказалось, что качественная адаптация картинок под разрешение 10 на 10 пикселей требует значительного количества времени, которого не было, и нас опять пришлось выручать знакомой-дизайнеру.

7fd09866b580dd0562f510f4ec4a14ec.png

Проблема 6 — Burn, baby, burn!

Когда пришло время отдавать релизную прошивку на завод для установки, мы поняли, что не успеваем. Поэтому вся партия в 1000 бейджей вышла с производства с тестовой прошивкой. В результате нам пришлось самим «шить» свое же устройство.

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

В итоге для прошивки всех бейджей понадобилось 8 рабочих рук и каких-то 6 часов ручной работы, совмещенной с просмотром классики отечественного кинематографа.

Всем причастным посвящается
Всем причастным посвящается

Вместо заключения

Бейдж стал результатом работы большого числа людей, без которых все наши задумки остались бы нереализованными. За бейдж разразилась нешуточная борьба на конкурсах в шатре Positive Labs на PHDays Fest 2. И хотя это просто игрушка, мы искренне надеемся, что кого-то она смогла вдохновить на создание чего-то своего.

Кроме того, по многочисленным просьбам мы публикуем в open source исходные файлы PHDays Badge 2024.

P.S. Конечно, на грядущем PHDays Fest 2025, который пройдет 22–24 мая в Лужниках, будет представлена вторая версия бейджа, которая получит масштабное обновление, включающее новые функций, переработанный дизайн и расширенные возможности по кастомизации. Следите за новостями в канале Positive Labs — вас ждет много интересного!

c4afff07161a5eb860d6cd141078bbcd.png
7acdea7ddfb4499087390832814d86be.pngPositive Labs

© Habrahabr.ru