Привет, Хабр! Меня зовут Владислав Волох, я руковожу группой разработки сервиса DataSphere в Yandex Cloud — и я люблю учить нейросети тому, что делать вручную не хочется. Эта любовь к инженерным решениям и ML пригодилась в быту: так появился мой пет‑проект автомата для приготовления простых коктейлей со встроенной базой рецептов, который уже полюбился многим коллегам. 

В этой статье расскажу, как это работает и как я собирал свой аппарат под управлением iOS, не написав при этом ни одной строчки кода.

Аналоги, вдохновение и моя задумка

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

Поставить такой диспенсер можно в разные вертикальные ёмкости
Поставить такой диспенсер можно в разные вертикальные ёмкости

Простота обращения натолкнула на мысль: а что если сделать такими же доступными все популярные (по версии меня) миксы напитков и масштабировать этот диспенсер? 

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

Особенно вдохновила вот эта история.

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

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

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

Вот полный список требований к устройству, который сформировался: 

  • удобный UI/UX в домашних условиях;

  • большая свобода в создании коктейлей, с возможностью дозировать разные ингредиенты;

  • доступность компонентов;

  • простота обслуживания; 

  • энергоёмкость. 

Я порисовал скетчи будущего изобретения, всё казалось простым и понятным. Но тут пришло озарение: я никогда не имел дело с железом больше, чем тестовые проектики на STM32 и Raspberry Pi. И знакомых разработчиков, кто делал подобные продукты, тоже нет, только жена с опытом работы в студенческой лаборатории.

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

Алиса, чертёж мне запили

Итак, у меня был большой опыт проведения домашних вечеринок и общения с YandexGPT 5 (сейчас актуальная модель уже Alice AI LLM), а также Raspberry Pi Zero 2W и увесистая книга с рецептами коктейлей. Всё, что я знал из своего опыта, — скорее всего мне нужны перистальтические насосы. Остальное спросим у чат‑ботов.

Начнём с MVP

Для начала я обратился к нейронкам, чтобы получить базовое представление по необходимому железу. ИИ сразу подсказал несколько хороших идей: электромагнитные клапаны, подумать над промывкой водой, минимизировать длину трубок, подумать над расходомером. Также чат‑бот объяснил мне, как подключить насосы и клапаны и что такое MOSFET. А ещё нашёл первые компоненты для теста, собрав мне ссылки на маркетплейсах.

И вот первый моторчик и MOSFET‑модуль у меня в руках, я откопал в ящиках несколько dupont‑проводочков и был готов собрать первый прототип на Raspberry Pi. Пока прикидывал всё даже без паяльника, просто прицепил провода к мотору внатяг, примотав их к корпусу, а провода от MOSFET к насосу придерживал руками.

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

Эволюционный тупик: решение по аналогии не всегда доступно

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

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

Но первая же проблема оказалась в том, что у капсульных роботов есть нажимной клапан в бутылке: когда ставишь её в базу и утапливаешь кнопку в горлышке, жидкость начинает выливаться. Значит, всего‑то надо найти подобные клапаны. Они же много где используются, в баках кофемашин, в увлажнителях, в дешёвых настольных кондиционерах? Ха‑ха.

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

Из реалистичных вариантов нейронка на пару с реддитом на полном серьёзе предлагали купить поилку для хомячков и взять клапан оттуда. Ещё что‑то более‑менее похожее нашлось среди запчастей для моек высокого давления и кофемашин. Эти варианты не подходили, потому что неизвестно как их пластик будет взаимодействовать с разными напитками. 

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

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

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

Делаем прототип посерьёзнее

Рано или поздно наступает момент, когда нужно делать полноценный прототип. В этот раз я решил сделать максимально (то есть немножко) по‑умному и разделить слои электроники и жидкости. Должны были образоваться три слоя в коробке: 

  • электроника (Raspberry Pi, MOSFET'ы, проводка);

    Слой электроники собирали вместе с ассистентом
    Слой электроники собирали вместе с ассистентом
  • жидкостный слой (разводка трубок и клапана);

  • стаканный слой (ставим стакан).

Я спросил у главного нейроконсультанта, может ли он мне что‑нибудь порекомендовать. Тот выдал несколько неплохих вариантов. А потом ехидно спросил: слушай, ты же совсем первый прототип делаешь? У тебя никакого хлама вокруг не завалялось? 

С оценивающим взглядом я пошёл по дому.

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

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

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

Допиливаем

Из первых испытаний и советов чат-бота вырисовывалась уже такая конструкция: 

  1. Корпус из фанеры: она достаточно прочная, с ней легко работать (даже тем, кто инструмент последний раз держал в седьмом классе на уроках труда). Продумать конструкцию, которую легко реализовать в домашних условиях, также помог чат-бот. 

    Первый раскрой прикинул на бумаге, а уже потом чуть исправил косяки чат-бота с толщиной материала и распилил листы фанеры
    Первый раскрой прикинул на бумаге, а уже потом чуть исправил косяки чат-бота с толщиной материала и распилил листы фанеры
  2. Трубки из пищевого силикона: в сам корпус я вмонтировал «ёлочки», которые соединяют внешние и внутренние трубки. Внутри все жидкости из разных трубок попадают в одну главную трубу с помощью специальных крестообразных четверников.

    Изначально я сделал для трубок восемь слотов: за основу взял концепцию «Бар из 12 бутылок» и оптимизировал по непопулярным коктейлям. 

  3. Приведение жидкости в движение. Гигиенично забирать напитки из бутылок с ингредиентами в главную трубу помогает перистальтический насос, уже показанный выше на первом тесте. Единственное его ограничение: не умеет в газированные напитки.

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

    Дозировать количество помогают электромагнитные клапаны (на картинке они сверху, прилепленные):

  4. Электроника. Если тач-скрин с AliExpress легко подключить к «малинке» через HDMI, то для всего остального от платы шла колхозная разводка автомобильными проводами. Сначала для соединения в параллель всех дорожек в одну я использовал макетную плату. На 30 дорожек выходило не очень:

    Чат-бот предложил использовать для соединения клеммники Wago, которые часто используют для разводки электрики в квартирах. Стало аккуратнее, но в какой-то момент перестало работать. Как оказалось, на первом варианте разводки я использовал тонкие провода — не очень надёжно, но зато хватало питания от шины Raspberry Pi. Для более серьёзной финальной схемы пришлось ещё докупить Power Delivery Trigger.

    На промежуточном этапе всё выглядело так, потом это аккуратно закрылось крышкой: 

    Тачскрин расположился над нишей для стакана: 

  5. Источник питания — банка на 10000mAh, на домашних тестах её хватает примерно на 7 часов. Вместе с механизмом power delivery агрегат получает оптимальное питание.  

Пишем софт 

Как сейчас модно делать красивые интерфейсы? Сделаем всё на фронтенде, а потом уже как‑нибудь завернём. У меня в качестве основы «малинка», считай, обычный комп, — подумал я. Буду запускать браузер в киоск‑режиме, а там уже мой красивый интерфейс.

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

Первый подход. Я открыл Cursor и начал с ним разговаривать. Так появлялись фичи, нарисовался слой общения с базой, какое‑то подобие дизайна. Потихоньку вырисовывались первые странички — и первые кривые баги. 

Как в классических шутках про менеджеров, моё воображение рисовало очередные ОЧЕНЬ НУЖНЫЕ фичи. Не будь я разработчик, если бы не захотел темную тему, например. Но Cursor на автоматическом выборе модели лепил код, как стажёр в белой горячке. Файлы разрастались на тысячи строк, попытки рефакторинга затягивались на часы, но это уже было не остановить. 

Когда Cursor тупил, помочь ему было нечем: я не особо хотел разбираться в его коде. Просил добавить логирование, копировал ему логи и надеялся, что он поймёт, в чём баг. Моего энтузиазма хватало только на то, чтобы по диагонали читать изменения которые он хочет сделать, ну и бить по рукам за откровенные костыли и попытки удалить сломанные тесты.

Однажды он упорно не мог починить баг с вёрсткой — в приложении поехали кнопки, а Cursor убеждал меня, что всё нормально. После десятка безуспешных итераций фиксов я вспомнил совет Сергея Брина и начал угрожать нейронке, чтобы она работала лучше. 

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

В итоге, за несколько вечеров я получил работающее приложение. За код было так стыдно, что я попросил Cursor дописать в readme предупреждение, что этих строчек не касалась рука человека, во всём нужно винить ИИ. Он попытался отшутиться от этого, но я настоял.

Пора тестить это всё на «малинке», подумал я.

Первый запуск и второй подход. Реальность показала, что думать надо было сильно раньше — на моей Pi Zero браузер даже не хотел открываться. Ну ладно, он открылся, спустя минут 20 и повесил систему намертво. Мда.

Пошёл советоваться со своим нейроконсультантом: мы договорились до того, что десктопное приложение будет работать шустрее, и для простоты выбрали Python QT. Заодно можно облегчить систему, выбросив всё ненужное, и запускаться с минимально необходимым набором пакетов.

Cursor пошёл разрабатывать проект заново на PyQT. Тут дело пошло быстрее, так как в контексте уже лежало знание о проекте и фичах, которые я хотел реализовать, и был референс в виде фронтового проекта. Long story short, ещё за пару вечеров новое приложение заработало на моём компе. Я настроил ssh‑доступ до «малинки», попросил Cursor написать скрипты для деплоя. 

Несмотря на провал первых тестов, я убедил Cursor, что он может ходить на «малинку» по ssh и читать логи самостоятельно. Он сам делал фиксы, деплоил их, забирал логи и разбирался с проблемами. Лишь иногда его буйную фантазию приходилось корректировать и бить по рукам. В итоге мы собрали облегчённую версию системы c небольшой in‑memory‑базой, отладили скрипты запуска, машина подала первые признаки жизни и работы.

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

ИИ погоняет ИИ. Мой нейроконсультант набросал идею iOS‑приложения и Bluetooth‑протокола для общения. Он очень сильно рвался дать мне примерную архитектуру проекта, наброски кода: давай, говорит, тебе проект начну, вот структура файлов, вот сниппеты кода, давай я тебе это всё в один архив упакую, останется только скачать и открыть в IDE.

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

Подход нейронка‑менеджер + нейронка‑исполнитель сильно упростил процесс написания качественных промптов и планирования дальнейших шагов. Менеджер ставил исполнителю четкие спринты, исполнитель работал по четкому плану полчаса‑час без вмешательства с моей стороны. Затем менеджер просил исполнителя дать отчёт и обновить аудит проекта и проделанной работы.

Так я получил работающее приложение для iOS, рабочий Bluetooth‑протокол для общения с автоматом и наконец мог удобно настраивать свой агрегат сидя в кресле.

Итоговое приложение умеет подключаться к железяке по Bluetooth LE и синхронизировать стейт. Управлять базой ингредиентов и коктейлей и менять настройки с неё гораздо удобнее, чем редачить с самой железки. Затем мы добавили версионирование коктейлей, возможность заводить локальные коктейли, отправлять на автомат только необходимые и даже заложили основу под обновление прошивки автомата.

А я пока решил вернуться к основной цели — заставить машину смешивать коктейли.

Тестируем изделие!

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

Приключения с первыми запусками на этом не закончились. Когда я представлял свой пет‑проект на внутреннем конкурсе в Яндексе, в финале перед награждением мы захотели сделать пафосный запуск прямо на сцене. В честь такого праздника даже поставили напитки немного покрепче, расставили соки. 

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

Я взял стакан и почти сразу понял, что напиток слишком крепкий. 

Как оказалось, для запуска организаторы купили апельсиновый сок с мякотью. А поскольку трубки и клапаны довольно небольшие по диаметру (3-4 мм), то эта мякоть быстро забила все пути для сока. 

Так я узнал, что соки с мякотью у меня пока тоже не поддерживаются. 

Текущая реализация и планы

Сейчас на моём аппарате можно готовить коктейли из любых негазированных напитков (кроме соков с мякотью). 

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

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

Эксплуатация пока выглядит так: я делаю пролив со всеми закрытыми клапанами, чтоб выкачать остатки из трубок внутри. Так внутри в трубках не остаётся жидкости, а вот до клапана она есть. Приходится вытаскивать трубку из бутылки, в сервисном режиме проливать остатки через машину, потом подставлять стакан с водой, проливать ещё раз. И если часть слотов не используются, то нужно либо мучительно скручивать силикон с «ёлочки», либо терпеть «осьминога» с болтающимися и пылящимися трубками.

В софтовой части хранится база коктейлей, есть возможность добавлять новые. Хорошей идеей для развития было бы сделать ИИ‑генерацию рецептов: чтобы нейросеть придумывала новые коктейли из доступных ингредиентов. 

Также довольно много идей по доработке конструкции: 

  • Упростить обслуживание можно за счёт быстросъёмных соединений для трубок, так будет проще всё мыть и ставить обратно. 

  • Добавить базу‑поднос для удобства транспортировки.

  • Продумать более компактный вариант: сейчас внутри есть 50% свободного пространства, и можно высвободить еще 20-30%, если сделать нормальную печатную плату вместо проводной разводки. Текущая реализация хороша для стационарного варианта, но можно сделать и более компактный, «дорожный».

  • Опционально можно добавить LED‑подсветки.

  • Добавить весы в площадке со стаканом — для гарантии дозирования без донастроек под ингредиенты.

  • Если же делать полноценный продукт, то было бы правильно запилить полноценный сервер с возможностью загрузки апде��тов по прикольным коктейлям. 

Еще киллер‑фичей было бы добавление льда, но это сильно увеличивает инженерную сложность, габариты и потребление. Так что это пока тоже оставил в бэклоге.

Если же глядя на моё изобретение, идеи появляются у вас — буду рад разогнать их в комментариях.

Комментарии (2)


  1. KbRadar
    16.01.2026 08:47

    Вот молодёжь пошла, без чат-бота уже и выпить не могут


  1. LinkToOS
    16.01.2026 08:47

    Еще киллер‑фичей было бы добавление льда, но это сильно увеличивает инженерную сложность, габариты и потребление

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