Як програмісти вирішують проблеми

image
Періодично перевіряю розділ «події» на місцевому айтишном порталі, і ось недавно знайшов там те, що давно шукав — черговий хакатон. Та не простий хакатон, а складний правильний: без стартаперства, без Hrів, без нав'язування і обмеження тим, без обідів. Загалом, я став збирати валізи…

Про те, що з цього вийшло — читайте в статті.

Що? Знову?!

Можливо, хтось із вас знає/пам'ятає, що мені не подобається робити речі на зразок черговий «соціальної мережі для {placeholder}». І це моє небажання, як виявилося, повністю збігається з метою організаторів майбутнього хакатона. Загалом, і в цей раз я вирішив зробити що-небудь незвичайне, спробувати щось нове. І вибір мій упав на Arduino.

Ту саму ардуину, яку ми командою проекту подарували на день народження одного з колег, і яку мені вдалося взяти напрокат на вихідні («віджати», як висловився її власник). Залишалося придумати, що з нею робити.

Бубон программерский, стандартний, одна штука

Всі знають переказ про админском бубні? Те, що оживляє залізо і піднімає мережі з мертвих? Якщо ні — тут розписано що і як. Так ось, виявляється, бубни ці не тільки адмінам допомагають, але і программерские проблеми вирішують як на духу. Побубнел хвилинку і все — баги виправляються, проект компилится і працює. І бубон такий у мене є, программерский, заряджений правильною енергією:
image

Але не у всіх є такі девайси. А навіть якщо і є, то не завжди працюють. А мій-то — перевірений, не перший рік служить вірою і правдою. Загалом, я вирішив дати можливість скористатися цілющою силою мого бубна всім тим, у кого є проблеми. Не тільки программерам, природно — бубна на всіх вистачить. Так народилася ідея проекту «bubna.net» — сайту з прямою трансляцією бубна, у який можна погомоніти, просто натиснувши на кнопку на сторінці. Натиснув, побубнил, вирішив свої проблеми, поступився місцем чергового стражденному. Вирішено було зупинитися на цій ідеї.

Мізки бубнилки є, бубон теж є. Потрібно було щось, що буде бити в бубон. Так у мене з'явилися дві рульові машинки:
image

І така макетна плата:
image

І дроти до неї, і всяка дрібнота. До речі, з ардуиной я вперше познайомився тільки завдяки реалізації цієї моєї ідеї. Тому майже все необхідне довелося купувати в рамках підготовки до хакатону.

Погнали!!!

Вечір початку хакатона. Мультиметр, паяльник, необхідні залізяки — все взяв з собою на всякий пожежний. Хтось, як я, прийшов зі своєю ідеєю. Хтось, як і я, прийшов без команди. Решта — без того й іншого. Моєю дурною ідеєю, як мені здалося, захопилися ще двоє учасників — бізнес-аналітик Вікторія і програміст мобільних додатків Андрій. Завдання розподілили просто: я займаюся залізом, а хлопці всім іншим. Решта — сайт з кнопкою і прямою трансляцією бубна, презентація, чай-кава-печеньки, анекдоти. Моє завдання — зібрати воєдино всі компоненти бубнилки і змусити її працювати.

Хакатон проходив з вечора п'ятниці до вечора неділі. У перший день вирішив розібратися з ардуиной, харчуванням, макетної платою, проводами і сервами. Проблем з підключенням серв і ардуины не виникло, якщо не вважати затримок з харчуванням (БЖ від тонометра мав нестандартний штекер) і вибором кольору проводів для макетної плати. Перша серва почала виконувати мої команди вже через годину.

Було вирішено зробити два «молоточка» (по одному на сервопривід) — так можна було б поєднувати і комбінувати удари, варіювати затримки. «Молоточок» — стрижень від кулькової ручки з надітим на його кінець шматочком гумки, художньо обтертым об стіл до кулястої форми. Кріпимо його поліетиленовими стяжками до гойдалок сервоприводу і отримуємо непоганий такий «ударний інструмент»:
image

Благополучно переночувавши будинку, треба було братися за виготовлення корпусу нашого музичного інструменту. Для основи автоматизованого бубна я вирішив використовувати обрізки шпонірованного ДСП, що залишилися від нещодавно закінчився припиненого ремонту. Для скріплення всього цього воєдино знадобилися більш довгі стяжки і дріт. Стяжки взагалі дуже корисна штука. Вийшло дуже навіть непогано, враховуючи, що це все робилося з порізаним і забинтованным пальцем руки (не питайте, що трапилося):
image

бубон + молоточки + підстава = eBuben:
image

А що всередині?

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

Прошивки для Arduino потрібно писати на С++, моєму другу рідною мовою. Але це не врятувало мене від долбания головою об стіну з приводу і без. Импирическим шляхом вдалося підібрати мінімальні і максимальні позиції серв, з яких удари відбувалися чітко і були добре чутні; таймінги, необхідні для наголосу сервой по бубну (у максимальну позицію) і разударения назад (мінімальну); і т.д. Був «винайдений» кінцевий автомат переходів серв з станів спокою у наголос, разударение і назад спокій. Доданий механізм асинхронного управління N-сервами одночасно (в нашому випадку їх було дві), логування, типи семплів (тиша, удар i-й сервой або всіма одночасно), програвання і зупинка треків, зациклення треку, програвання протягом X-секунд і т.д. По суті, був розроблений невеликий секвенсор для бубна. Правда, без можливості запису музики, а тільки її хардкода прямо в прошивку.

Управлялося все це через послідовний порт. Звичайно, можна було б зробити можливість завантаження інтерфейсу треку в «ардуину» прямо з компа, але на це не вистачало часу — тут би домогтися стабільної роботи і не вдарити в бруд бубном особою на презентації.

Діряві джинси, баян і план Б

В ніч з суботи на неділю треба було зробити прошарок між бубнилкой і майбутньої веб-сторінкою з прямою трансляцією. Рішенням став консольний сервер на Python, який слухав потрібний url і посилав в потрібний порт потрібний байт. Все просто. Але якою ж великою помилкою було поставити Python 3.x замість Python 2.x! Хто знає, той зрозуміє…

Ніч почалася з спільного перегляду декількох фільмів найстійкішими учасниками, а продовжилася на кріслі-мішку поруч з теплим ламповим масляним обігрівачем. Всю ніч мені снилися сни, що я наскрізь пропалив джинси. Я просто відчував це. Прокидався, перевіряв їх, не знаходив дірок і спав далі. Вранці став заважати баян, який тестили хлопці за сусіднім столом (можливо вони про це самі напишуть)… загалом, весела була нічка, без жартів.

Неділю було присвячено допиливанию всього випиляного і пов'язанню з веб-сторінкою, яку мої колеги по команді паралельно займалися. На жаль, на презентації зі сторінкою щось пішло не так, і вона відмовилася запускати наш пристрій. Думаю, все вийшло б, будь у мене з собою другий бубон. Тому довелося використовувати резервний план: eBuben був запущений запасний кнопкою (завжди повинен бути план Б!).

А ось і eBuben, власною персоною:


Доменне ім'я bubna.net вирішили не реєструвати — ліниво, та й головним завданням спочатку був зовсім не сайт…

Мета була досягнута, вихідні пройшли не дарма, номінація «Найбільш технологічний проект» була наша.

P.S. Хакатон вдався на славу. Було багато класних проектів і захоплених своєю справою людей. Спасибі організаторам, буду чекати наступного WTH.

P.P.S. Але саме велике спасибі дружині і доньці за те, що відпустили мене на ці айтишные посиденьки. Без їх схвалення і підтримки у мене нічого б не вийшло.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.