Периодически проверяю раздел «события» на местном айтишном портале, и вот недавно нашел там то, что давно искал — очередной хакатон. Да не простой хакатон, а сложный правильный: без стартаперства, без HRов, без навязывания и ограничения тем, без обедов. В общем, стал я собирать чемоданы…
О том, что из этого получилось — читайте в статье.
Что? Опять?!
Возможно, кто-то из вас знает/помнит, что мне не нравится делать вещи наподобие очередной «социальной сети для {placeholder}». И это мое нежелание, как оказалось, полностью совпадает с целью организаторов предстоящего хакатона. В общем, и в этот раз я решил сделать что-нибудь необычное, попробовать что-то новое. И выбор мой пал на Arduino.
Ту самую ардуину, которую мы командой проекта подарили на день рождения одному из коллег, и которую мне удалось взять напрокат на выходные («отжать», как выразился ее владелец). Оставалось придумать, что с ней делать.
Бубен программерский, стандартный, одна штука
Все знают предание об админском бубне? Том, что оживляет железо и поднимает сети из мертвых? Если нет — тут расписано что и как. Так вот, оказывается, бубны эти не только админам помогают, но и программерские проблемы решают как на духу. Побубнел минутку и все — баги исправляются, проект компилится и работает. И бубен такой у меня есть, программерский, заряженный правильной энергией:
Но не у всех есть такие девайсы. А даже если и есть, то не всегда работают. А мой-то — проверенный, не первый год служит верой и правдой. В общем, решил я дать возможность воспользоваться живительной силой моего бубна всем тем, у кого есть проблемы. Не только программерам, естественно — бубна на всех хватит. Так родилась идея проекта «bubna.net» — сайта с прямой трансляцией бубна, в который можно побубнить, просто нажав на кнопку на странице. Нажал, побубнил, решил свои проблемы, уступил место очередному страждущему. Решено было остановиться на этой идее.
И такая макетная плата:
И провода к ней, и всякая мелочевка. К слову, с ардуиной я впервые познакомился только благодаря реализации этой моей идеи. Поэтому почти все необходимое пришлось покупать в рамках подготовки к хакатону.
Погнали!!!
Вечер начала хакатона. Мультиметр, паяльник, необходимые железки — все взял с собой на всякий пожарный. Кто-то, как я, пришел со своей идеей. Кто-то, как и я, пришел без команды. Остальные — без того и другого. Моей дурной идеей, как мне показалось, увлеклись еще двое участников — бизнес-аналитик Виктория и программист мобильных приложений Андрей. Задачи распределили просто: я занимаюсь железом, а ребята всем остальным. Остальное — сайт с кнопкой и прямой трансляцией бубна, презентация, чай-кофе-печеньки, анекдоты. Моя задача — собрать воедино все компоненты бубнилки и заставить ее работать.
Хакатон проходил с вечера пятницы до вечера воскресенья. В первый день решил разобраться с ардуиной, питанием, макетной платой, проводами и сервами. Проблем с подключением серв и ардуины не возникло, если не считать заминок с питанием (БП от тонометра имел нестандартный штекер) и выбором цвета проводов для макетной платы. Первая серва начала выполнять мои команды уже через час.
Было решено сделать два «молоточка» (по одному на сервопривод) — так можно было бы чередовать и комбинировать удары, варьировать задержки. «Молоточек» — стержень от шариковой ручки с надетым на его конец кусочком ластика, художественно обтертым об стол до шарообразной формы. Крепим его полиэтиленовыми стяжками к качелям сервопривода и получаем неплохой такой «ударный инструмент»:
Благополучно переночевав дома, нужно было приниматься за изготовление корпуса нашего музыкального инструмента. Для основания автоматизированного бубна я решил использовать обрезки шпонированного ДСП, оставшиеся от недавно закончившегося приостановленного ремонта. Для скрепления всего этого воедино понадобились более длинные стяжки и проволока. Стяжки вообще очень полезная штука. Получилось очень даже неплохо, учитывая, что это все делалось с порезанным и забинтованным пальцем руки (не спрашивайте, что случилось):
бубен + молоточки + основание = eBuben:
А что внутри?
Вернувшись на место проведения хакатона, нужно было научить это устройство звучать. Причем, звучать достаточно мелодично, чтобы призываемые духи все же исправляли проблемы, а не усугубляли их.
Прошивки для Arduino нужно писать на С++, моем втором родном языке. Но это не спасло меня от долбания головой об стену по поводу и без. Импирическим путем удалось подобрать минимальные и максимальные позиции серв, из которых удары происходили четко и были хорошо слышны; тайминги, необходимые для ударения сервой по бубну (в максимальную позицию) и разударения обратно (в минимальную); и т.д. Был «изобретен» конечный автомат переходов серв из состояний покоя в ударение, разударение и обратно в покой. Добавлен механизм асинхронного управления N-сервами одновременно (в нашем случае их было две), логирование, типы сэмплов (тишина, удар i-й сервой или всеми одновременно), проигрывание и остановка треков, зацикливание трека, проигрывание в течение X-секунд и т.д. По сути, был разработан небольшой секвенсор для бубна. Правда, без возможности записи музыки, а только ее хардкода прямо в прошивку.
Управлялось все это через последовательный порт. Конечно, можно было бы сделать возможность загрузки пользовательского трека в «ардуину» прямо с компа, но на это не хватало времени — тут бы стабильной работы добиться и не ударить в грязь бубном лицом на презентации.
Дырявые джинсы, баян и план Б
В ночь с субботы на воскресенье нужно было сделать прослойку между бубнилкой и будущей веб-страницей с прямой трансляцией. Решением стал консольный сервер на Python, который слушал нужный url и посылал в нужный порт нужный байт. Все просто. Но какой же большой ошибкой было поставить Python 3.x вместо Python 2.x! Кто знает, тот поймет…
Ночь началась с совместного просмотра нескольких фильмов самыми стойкими участниками, а продолжилась на кресле-мешке рядом с теплым ламповым масляным обогревателем. Всю ночь мне снились сны, что я насквозь прожег джинсы. Я прямо чувствовал это. Просыпался, проверял их, не находил дырок и спал дальше. Утром стал мешать баян, который тестили ребята за соседним столом (возможно они об этом сами напишут)… В общем, веселая была ночка, без шуток.
Воскресенье было посвящено допиливанию всего выпиленного и увязыванию его с веб-страницей, которой мои коллеги по команде параллельно занимались. К сожалению, на презентации со страницей что-то пошло не так, и она отказалась запускать наше устройство. Думаю, все получилось бы, будь у меня с собой второй бубен. Потому пришлось использовать резервный план: eBuben был запущен запасной кнопкой (всегда должен быть план Б!).
А вот и eBuben, собственной перcоной:
Доменное имя bubna.net решили не регистрировать — лениво, да и главной задачей изначально был вовсе не сайт…
Цель была достигнута, выходные прошли не зря, номинация «Самый технологичный проект» была наша.
P.S. Хакатон удался на славу. Было много классных проектов и увлеченных своим делом людей. Спасибо организаторам, буду ждать следующего WTH.
P.P.S. Но самое большое спасибо жене и дочке за то, что отпустили меня на эти айтишные посиделки. Без их одобрения и поддержки у меня ничего бы не получилось.
Автор: goghAta