Робот-бармен своими руками — когда лень на корпоративе наливать коктейли вручную

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

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

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

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

Но была проблема — у меня совсем нет опыта в разработке устройств на Arduino... Да и C/C++ я знаю только поверхностно, что-то стабильно работающее в короткий срок не смогу разработать.

Так как я неплохо знаю ECMAScript (JavaScript), решил погуглить на эту тему. Нашёл быстро то, что позволило бы мне быстро разработать эту разливайку — Espruino! Ещё немного погуглив, нашёл плату IskraJS, которая реализована в форм-факторе Arduino и совместима с ее шилдами. То что нужно!

Так как в голове уже были наброски устройства, я приступил к формированию заказа. Я предполагал, что мне для всего этого необходимо:

В одном магазине всего этого не нашлось, поэтому пришлось дробить заказ между двумя магазинами. К слову, в «Амперку» мне пришлось ездить ещё два раза, чтобы поменять бракованные устройства. Неприятно, конечно, но ребята всё без проблем заменили либо вернули деньги и отправили в «ЧипДип».

Часть заказа​

Ок! Всё есть, приступаем к сборке механической части по чертежам, которые есть в голове. Параллельно доехав до магазина, чтобы купить паяльник, мультиметр, соединительные провода и ещё пакет необходимой мелочевки. И в итоге получается что-то подобное:

​Собрал «на коленке»

Замечательно! Пытаемся установить среду разработки, подключиться к Iskra JS и подёргать клапанами и насосом. Но! Ноутбук не видит устройство… Сначала думаем, что мертвый USB-кабель, пытаемся подключить ещё через два провода, которые остались от Android-телефонов. Не работает…

Следующая мысль: USB-хаб, который в power bank чем-то не устраивает какую-то из сторон (Macbook, Iskra JS). Не проблема! Идём в ближайший re: Store, прихватив с собой контроллер, провода, ноутбук. Покупаем переходник, там же пробуем все это на глазах удивленных покупателей — не видит… Возвращаем его обратно!

Совсем уже ошалев от происходящего, ведь зная, что Iskra JS точно рабочая, поднимаемся на четвёртый этаж ТЦ и покупаем самый бюджетный ноутбук на Windows. Добираемся до дома, подключаем, и о счастье — окна спиликали и сказали, что найдено устройство, но оно не верно работает. Достаём бубен и танцуем вокруг с попытками накатить другой драйвер. Но каменный цветок так и не выходит.

Открываем пиво, и в этот момент приходит гениальная мысль: «А возможно, все три моих USB-кабеля мертвые, ведь я не уверен в них, так как не пользуюсь ими?!». Доходим до ближайшего магазина с ширпотребом и покупаем USB-провод. Бежим домой через пивной магазин, чтобы пополнить запасы. Подключаем Iskra JS к Macbook и — о чудо! — всё работает! Так как пиво уже открыто и в холодильнике есть ещё, забываем про зря купленный ноутбук :D

Пишем несколько десятков строк кода, чтобы контроллер принимал команды по Bluetooth и отправлял туда же логи, чтобы проверить работу насоса, клапанов и, самое главное, счётчика жидкости, так как основное, что необходимо, — правильно дозировать жидкости!

Проверяем всё это, и выясняется два неприятных факта:

  • Датчик жидкости считает больше, чем на самом деле через него прошло.
  • Bluetooth-соединение отваливается после включения насоса.

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

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

Решение второй — отказаться от Bluetooth в пользу Wi-Fi и управлять устройством через Telegram-бота. Преимущество налицо! Не нужно писать программу для телефона, а всё необходимое Telegram уже предоставляет.

Едем в магазин и покупаем ещё два шилда:

Возвращаемся, подключаем Wi-Fi — не работает! Танцы с бубном — не работает! Едем в магазин, возвращаем деньги, покупаем в другом месте — работает!

И тут же понимаем, что рассадник зла и террористов Telegram заблокирован в РФ, а в библиотеке, которую планировал использовать для быстрого поднятия бота, нет возможности указать адрес прокси.

Ну ничего не поделать — форкаем библиотеку, дописываем возможность использовать домен, отличный от api.telegram.org. Поднимаем на DigitalOcean самую дешёвую VPS и настраиваем там на nginx реверс-прокси для api.telegram.org. Пробуем на тестовой команде — всё ок, бот работает! Наконец-то! Можно приступить непосредственно к программированию того, что будет готовить наши крутые коктейли!

Посоветовавшись с СЕО компании, решаем, что нужно готовить три коктейля: негрони, джин-тоник, кампари шприц. Чтобы в случае отсутствия спроса на коктейли можно было догнаться отдельно оставшимися ингредиентами!

Итого: для приготовления этих коктейлей нам необходимо: джин, кампари, красный вермут, тоник, шампанское.

В прошивку углубляться не буду, ведь там всё довольно просто. В одном объекте храним информацию о том, какой клапан за какой ингредиент отвечает. В другом — рецепт коктейлей.

const bottles = { 'gin': 4, 'vermouth rosson': 3, 'campari': 2, 'tonic': 1, 'prosecco': 0 }; const cocktails = { 'negroni': [ { name: 'vermouth rosson', volume: 30 }, { name: 'campari', volume: 30 }, { name: 'gin', volume: 30 } ], 'gin_tonik': [ { name: 'gin', volume: 50 }, { name: 'tonic', volume: 150 } ], 'campari_spritz': [ { name: 'campari', volume: 60 }, { name: 'prosecco', volume: 60 }, { name: 'tonic', volume: 100 } ], 'gin': [ { name: 'gin', volume: 50 }, ], 'tonic': [ { name: 'tonic', volume: 100 }, ], 'prosecco': [ { name: 'prosecco', volume: 100 }, ] };

И не забываем добавить отдельно «топпинги» для привередливых гостей :)

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

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

Но после того как натренировались на кошках, время взвалить на себя тяжёлое бремя тестировщика-дегустатора! Идём до «Ашана», покупаем те же самые ингредиенты, что планируются на мероприятии. Заодно покупаем будущий корпус для устройства — пластиковый пищевой контейнер!

Прототип устройства готов! Приступаем к тестам!

Это запись из Instagram*. По требованиям Роскомнадзора, мы не можем её показать
*Meta, владеющая Instagram, признана экстремистской организацией на территории Российской Федерации

Я думаю, не стоит говорить, что на следующий день я был в совсем не работоспособном состоянии :D

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

Две вспомогательных функции по промывке системы после использования устройства и прокачке системы в самом начале тоже были написаны уже в бессознательном состоянии :D И даже не пришлось рефакторить!

За день до корпоратива устройство приобрело вид настоящего MVP из го… и палок. Пришлось очередной раз сгонять в магазин за чем-то, что было похоже на ножки, — этим оказались деревянные шампуры.

В этом пластиковом контейнере компактно расположилась вся механическая часть.

А всю электронику решил облагородить и расположить снаружи, чтобы придать более интересный вид устройству.

Настал день корпоратива. Так как сейчас единственный возможный вариант настроить подключение к Wi-Fi — это прописать в прошивку SSID и пароль. Пришлось принести с собой ноутбук и залить обновленный код, и бот сразу же написал мне «Ready!».

Презентация устройства и демонстрация его работы прошли успешно! Устройство работало без ошибок и глюков весь долгий вечер.

Не могу сказать, что путь, пройденный во время разработки устройства проще, чем вручную разливать коктейли. Но ведь и смысл в другом — получить моральное удовлетворение и удивить гостей :) Надеюсь, это получилось!

Следующие устройства, которые планирую начать с нового года: полностью автоматическая пивоварня и кофе-машина, умеющая HomeKit и управляемая с помощью Siri.

0
40 комментариев
Написать комментарий...
Vlad Limbo

Когда на Хабре стало так душно, что люди пошли на vc)))

Ответить
Развернуть ветку
Сергей Соломакер

пришёл сюда написать тот же самый комментарий)

Ответить
Развернуть ветку
Vl Al

"Но ведь и смысл в другом - получить моральное удовлетворение и удивить гостей"

Можно идти по пути Лукаса. 

Картонную коробку обклеиваем фольгой. Вырезаем дырки. Водружаем на голову специальным образом выбранного сотрудника.

Всё, робот почти готов. Осталось залить 300 мл свежей прошивки.

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

А если заливать сразу в себя 300мл свежей прошивки, то совсем ничего не придется делать 😂

Ответить
Развернуть ветку
Виктор Алексеенко Графический Дизайн

Прикольно, когда не скучно, позабавил коллег, развлекся сам, молодца!

Ответить
Развернуть ветку
Pasha Kislova

И добавить функцию "random" :-) 

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

Есть такая недокументированная функция 😂 но в таком случае нужно минимум бутылок 10. Иначе не будет нужного разнообразия

Ответить
Развернуть ветку
Vl Al

Если вызывать функцию на улице - ППС задокументирует.

Ответить
Развернуть ветку
Pasha Kislova

Количеством каждого ингридиентов играть-тоже может интересно получиться

Ответить
Развернуть ветку
Egor Zubarev

Охуенно! 

Ответить
Развернуть ветку
Ако Чавчавадзе

У ребят, что делали нейробармена (есть на vc) всё покруче было.

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

Да, спасибо, нашел статью, почитаю вечером!

Ответить
Развернуть ветку
Roman Muksimov

Ну вот и робот собутыльник готов. Скоро кожаные мешки совсем не нужны будут)

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

Как кто-то в FB выразился: "Теперь будут писать роботу-бармену в телеграм, а не своей бывшей" :D

Ответить
Развернуть ветку
Rogozhkin

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

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

Спасибо, буду постигать помаленьку) как раз следующие 2 устройства примерно в таком же направлении. В пивоварне безконтактно нужно измерять объем воды. И датчик расхода воды не подойдет. Остается либо по весу либо по давлению воды/сусла у дна с поправками на предположительную плотность... ик и уз способ измерения тоже отсек, так как сверху ничего не должно торчать.

Ответить
Развернуть ветку
Pavel Sharonov

Вооот, делом занят человек!

Поддерживаю!

Ответить
Развернуть ветку
Pasha Kislova

Зачёт!!! MVP готов, можно приводить все это в надлежащий вид (корпус, дизайн) и продавать как кухонную бытовую технику типо всяких блендеров, тостеров (хотя тостер к этой штуке очень нужная вещь:-))). 

На мой взгляд сразу нужно бить в два диаметрально противоположных сегмента: эконом (ценой где то в 3-4, ну может 5 тыс. простой вариант с мин. набором ингридиентов) и премиум (15-20 тыс. с ассортиментом коктейлей, дизайном, качественными материалами). 

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

Есть еще один вариант - сдавать устройства на свадьбы/вечеринки. Для интереса поговорил с ведущими мероприятий, сказали что для некоторых людей можно за дорого предлагать на мероприятие. Типа «вау эффект» для гостей 😀

Ответить
Развернуть ветку
Pasha Kislova

Почему бы и да! Только выглядеть она должна тоже как WOW- машина

Ответить
Развернуть ветку
Oleg Sokolukhin

Если бы автор был чуть-чуть по умнее сейчас бы готовил презентационную версию для CES, это неплохой дивайс для алеи стартапов, ну или катался бы по инвесторам между Сан-Хосе и Сан-Франциско. Зачем лучше написать статью на vc.  Но идея неплохая, я думаю в след году можно будет купить на ali за 159 долл

Ответить
Развернуть ветку
Александр Иванов

Привет, пишу тебе из будущего, вон у нас чо уже есть.

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

😂 ахахаха

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

А вы не в курсе как там газированные напитки подключены? Не вижу на фото...

Ответить
Развернуть ветку
Alex Nosov

Помнится, Наоми Ву довольно давно выкладывала у себя на ютубе робота-бармена на ардуине. Только там реализация была без насосов - манипулятор со стаканом позиционировался под нужной бутылкой, находящейся в перевернутом состоянии, и нажимал этим же стаканом на клапан открытия. Дозировка удержанием клапана. Барная карта и выбор напитка через дисплей.

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

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

Ответить
Развернуть ветку
Alex Nosov

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

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

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

Ответить
Развернуть ветку
Alex Nosov

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

Ответить
Развернуть ветку
Дмитрий Жалнов

Мне кажется для сиропов и тп, нужны отдельные краники и второй такой механизм...

Ответить
Развернуть ветку
Дмитрий Жалнов

Здорово.... Обязательно в несу в список "вещей, которые надо собрать до смерти".

Ответить
Развернуть ветку
Егор Демешко

Ссылки на авторов проекта, у которых брали технические идеи, будут? А главное, на авторов самой идеи?

Ответить
Развернуть ветку
Егор Демешко

Если вы хотите повторить данный проект, то советую посмотреть на Ютубе. AlexGyver недавно выпустил подобное видео. Наливатор - рассчитан на несколько рюмок, +в качестве корпуса - чемодан, то есть он ещё и переносной.

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

Не будет!) Ссылки на тех, кто придумал изобретать устройства? Если вы искали подобные проекты - поделитесь!

Ответить
Развернуть ветку
Егор Демешко

Недавно AlexGyver на Ютубе делал. Очень интересно, выше описал. И ещё много десятков других. Так что это не изобретение, а лишь проект.

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

Да, я посмотрел это видео. Этот проект и тот, на который вы дали "ссылку", делают совершенно разные вещи) Это как автобус и трактор. Вроде бы обе машины, но совершенно разные машины :D

Вроде бы никто и не говорил, что это изобретение))) В статье описано как на коленке это устройство придумывалось, дорабатывалось и тестировалось :D Какие проблемы встречались. И возможно кто-то возьмет и усовершенствует это. Добавит дисплей, заменит датчик расхода жидкости на датчик веса, реализует промывку трассы водой, когда в следующем коктейле нет ингредиента, остатки которого присутствуют в трассе.

Ответить
Развернуть ветку
Лев Щенин

Отличная тема для бизнеса!

Почти как в фильме "Пассажиры" 2016 года !
Жизнь иногда "догоняет" фантастику!
Надо помочь разработчику заработать на этом роботе денег !
Кто со мной - пишите в личку!

Ответить
Развернуть ветку
Иван Борода

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

С интересом обнаружил подобный проект двухлетней давности на кикстартере.
https://www.kickstarter.com/projects/barobot/barobot-a-cocktail-mixing-robot. Создатели смогли собрать чуть больше 20 т.дол. при запрашиваемых 120000, то есть денег никаких не получили. Но проект запустили сами и вроде аппарат даже продавался какое-то время. https://barobot.com/
Сейчас на сайте ничего нет. Что случилось, почему не выстрелило и другие нюансы обнаружить не смог. Какие версии?

Ответить
Развернуть ветку
Максим Александрович

Возьмите esp32 и не городите огород из контроллеров. Там Вам и JS будет работать и WiFi c блюпупом всё в одной мощной и недорогой железяке.

Ответить
Развернуть ветку
Евгений Кузнецов
Автор

Да вот сейчас уже в курсе 😂 это мой первый опыт был. Пока колхозил это - многое почитал)

Ответить
Развернуть ветку
37 комментариев
Раскрывать всегда