
Обычная машина для боулинга — механическая, очень напоминающая аппарат для автоматической зарядки снарядов в танке. Вы попадаете мячом по кеглям, срабатывает оптический датчик прохождения мяча (если там пройдёт что-то другое, он тоже сработает), туда опускается измерительная рамка с дырками. Если ли внутри дырки кегля проверяется фотодиодом или контактным ощупыванием.
Потом эти данные отправляются на архаичный сервер Dell OptiPlex 3020 (примерно 2014 года), времён ещё когда Делл был Деллом. Мы их до сих пор закупаем, кстати, для всех 12 Бруклин Боулов.
И вот нам очень хочется выгружать данные с кегельной машины (пинсеттера) в приложение на телефоне игрока.
Мы сделали 3 разных подхода к этому и упёрлись в то, что просто физически не можем снять данные с легаси железа. Мы не айтишники, но приходили разные команды ковыряться.
В итоге мы закончили реверс-инжинирингом блока, который оцифровывает показания датичков, и, фактически, собираемся пересобрать кусок машины. Это не самое элегантное инженерное решение. И не самое умное. Но оно точно работает.
Сейчас расскажу, в чём мы застряли)

Вот так выглядит сзади ряд машин:

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

Есть ещё попытка выбить остальные.
-
Затем рамка снова опускается и считает оставшиеся кегли.

-
Специальная рельса сбивает оставшиеся и сбрасывает назад.

-
Сзади их подбирает система автозарядки и тащит вверх машины, а оттуда заряжает в пинсеттер — ту самую рамку с дырками.



Рамка с дырками опускает кегли в дырки и тем самым выставляет их заново.
В машине одновременно 23 кегли, чтобы не приходилось ждать полного цикла подъёма и раскладывания кеглей — пока одни внизу на дорожке, вторые уже заряжаются. Ещё 3 дополнительных кегли — это запас на разные застревания и проблемы. Число подбиралось по статистике разного рода отказов и является магической константой, оптимумом функционирования машины.

В большей части боулингов используются механические машины Brunswick. Делл 3020 используется там как сервер управления администратора — Front Desk.


Сама машина выдаёт наружу по кабелю сигналы датчиков гребёнки — той самой матрицы с дырками. Машина не оцифровывает сигнал, это делает блок NextGen, который уже превращает её в логику игры.


20 лет назад не было IoT, MQTT или стандартизированного Ethernet для промышленных машин. В результате блоки NextGen объединяются в гирлянду по проприетарному последовательному интерфейсу (токовая петля). Данные летят в сыром hex. Документации нет. Сервер постоянно опрашивает блоки, обновляет статус игры, отправляет счёт на подвесные мониторы над дорожками.






Почему оттуда сложно тащить данные — есть три причины.
Во-первых, Brunswick (и их конкурент AMF) очень не хотели, чтобы кто-то, кроме них, ставил какие-то апргейды. Они зарабатывали на продаже дополнительных модулей. Чтобы выводить результаты на сайт, показывать их в баре или интегрировать с клубными картами — надо купить дополнительную лицензию.
Во-вторых там полный легаси стек. Может встретиться крайне интересный набор блокировок FoxPro (база может блокироваться при записи софтом боулинга, и если пытаться читать файл во время игры, софт можно отвалиться). Есть Sybase SQL Anywhere — ей нужны драйвера ODBC, а логины и пароли к которой зашиты в бинарниках Brunswick.
В-третьих, система не умеет пушить данные наружу. Там постоянно отправляется статус, и, как в лучших промышленных системах, происходит обратная корректировка датчиков — например, сначала машина выдаёт один статус (сбито 2 кегли), потом думает немного и выдаёт корректировку — сбиты все кегли. Но корректировка может прийти раньше фрейма со статусом про две или заблудиться. В общем, мы так и не до конца поняли это шаманство.

Мы попробовали следующие подходы:
Читать базу данных на Dell 3020
Читать показатели НекстГена
Ставить камеру над дорожкой и распознавать состояние игры.
Переписывали NextGen.
Не пробовали OCR с монитора через HDMI-сплиттер, эмулировать принтер (там печатаются результаты игры от администратора на Dell), сетевой сниффинг в других местах.
Все опробованные методы инженерные команды признали практически нерабочими — кроме отдельного стенда для обработки сырых показателей машины. Вот пара ссылок на видео ВК.
Собственно, я подозреваю, что есть способы сделать это правильнее, но это пока единственный работающий. Если вдруг у вас есть идеи — стучите сюда в комментарии или в rakhmeev@brooklynbowl.ru, такое оборудование стоит по всей стране, можно много кому продать. И уж точно это надо во всех 12 наших боулингах по России )
Комментарии (37)

Fqyeh29
17.04.2026 09:55Я бы в этом случае смотрел в сторону "OCR с монитора через HDMI-сплиттер" - как по мне самое простое решение в этом случае.
Там даже не столь OCR сколько просто анализ Паттернов и цветов. И не надо "влезать" в оборудование. Для анализа понадобится небольшой сервер.
Artem_Rakhmeev Автор
17.04.2026 09:55А вы можете подсказать специалистов? Мы не знаем, за что хвататься, компетенций в команде нет, а три предыдущих попытки в молоко, как видите.

MEGA_Nexus
17.04.2026 09:55Вы попадаете мячом по кеглям, срабатывает оптический датчик прохождения мяча.
упёрлись в то, что просто физически не можем снять данные с легаси железа.
А что мешает рядышком повесить свой собственный датчик и снимать показания с него? Это самый простой и рабочий вариант. С одной стороны не вы ломаете текущую логику машины, а с другой вы можете наставить сколько угодно своих собственных датчиков и получать даже те данные, которые нельзя получить в оригинальной машине.
Просто представьте, что никакие цифровые данные ваша машина не предоставляет и больше не мучайте её, а повесьте собственные датчики, которые вам нужны и в тех местах, где пожелаете.

Artem_Rakhmeev Автор
17.04.2026 09:55Если ставить внутрь — проще собрать свою машину учёта. Ставить снаружи — камеру с распознаванием видеопотока — получилось неточно, а дальше чтобы прямо совсем точно с Йолой — оказалось, что экономически правильнее с дублирующей машиной. Либо мы что-то не так делали.

xSVPx
17.04.2026 09:55Сама машина выдаёт наружу по кабелю сигналы датчиков гребёнки — той самой матрицы с дырками. Машина не оцифровывает сигнал, это делает блок NextGen, который уже превращает её в логику игры.
Завести параллельно в свой МК оцифровать и дальше делать то, что нужно. (Брать сырые данные до некстгена и скармливать их ацп итп)
Ну это если нет возможности свои датчики везде поставить дублирующие. (Пишу в перерыве между сверлением коробки двери, чтобы запихнуть внутрь датчики отслеживающие положение ригелей, окр замучал :))
ЗЫ. Читать с монитора тоже скорее всего можно. Вам это вообще зачем ? Если чисто показать, то показывайте им в приложении скриншот просто :)).

xSVPx
17.04.2026 09:55ЗЫ. А скорее всего надо просто всё выкинуть и переделать на мк. Без легаси. Вдлинную будет дешевле. 100%. Не исключено что какой-нибудь esp32 всё это легко потянет.(т.е. в идеальном случае все эти сервера можно заменить микроконтроллером за 5$)

Artem_Rakhmeev Автор
17.04.2026 09:55Нам это для того, чтобы данные с Делла вытащить, например, в приложение. И не в виде счёта итогового, а записывать результаты для трекинга отдельных игроков (то есть делать аналитику с этими данными и писать в архив), плюс выделять события типа три страйка подряд.
Про датчики — у нас нет компетенций в команде, если вы знаете, кто это делает, подскажите, пожалуйста.

xSVPx
17.04.2026 09:55Подсказывать тут бессмысленно. Вам нужен географически близко расположенный исполнитель, осцилографом дистанционно не потычешь
Сами датчики сегодня не проблема. В зависимости от типа стоят несколько долларов за штуку. Но у вас скорее всего всё немножко сложнее чем просто датчики. Надо четко понимать итоговую задачу.
Не исключено, что вам надо целиком от делла отказаться. Вообще. Иметь отдельно мониторы какие-то любые "киоски" и отдельно относительно простой МК, который обрабатывает один аппарат и выдает в нужном вам виде странички в html для этих киосков, данные для приложения итд итп. Т.е. вообще потихоньку отползать от этого древнего железа. Это ныне вполне реально и будет надежнее скорее всего(возможно еще нужен отдельный любой сервер для обработки каких-то соревнований итп, я честно не в теме боулинга совсем как там у вас устроено всё). Но сколько тут работы зависит от многого.
Но начать. Начать лучше с того, что разобраться какие датчики уже установлены и можно ли с них напрямую получить инфу ничего не меняя. Это было бы идеально т.к. освободит вас от месяцев обкатки. Что бы вам кто не подобрал совершенно нет гарантии, что в ваших условиях взлетит без проблем. Сюрпризы бывают всегда.
ЗЫ. Вообще надо от делла в этой цепочке отказываться, от любого взаимодействия с ним. И от него самого в идеале тоже. Всё что хорошо бы для своего решения оставить - уже установленные датчики. Просто потому, что они гарантированно работают в ваших условиях. Все проблемы как правило с этим бывают... Дальше сигнал можно обработать, алгоритмы написать, но если сам датчик работает нестабильно, выходит из строя по непредсказанной причине итп - это прям очень неприятно

propell-ant
17.04.2026 09:55Под виндой есть такая штука - Volume Shadow Copy. Можно попробовать делать снепшоты почаще, и читьть базу из снепшотов (можно даже копировать ее в отдельную папку). Основная прога просто не увидит ваших обращений. Если в снепшоте установлены блокировки - берете предыдущий.

yudelex
17.04.2026 09:55В итоге мы закончили реверс-инжинирингом блока, который оцифровывает показания датичков, и, фактически, собираемся пересобрать кусок машины. Это не самое элегантное инженерное решение. И не самое умное.
А какие у вас варианты? Реверсить проприетарное ПО и пытаться соорудить для него костыль выгрузки данных? Так это еще сложнее чем сниффить обмен по токовой петле своей железкой и потом делать что угодно с этими данными.

yudelex
17.04.2026 09:55Если есть вывод картинки всех счетов и номеров дорожек, то скринте и нейросеткой ищите значения, потом в своем ПО будете их использовать. Тут допжелезки не потребуются.

I_I_V
17.04.2026 09:55Зачем нейронкой дергать? Проще. Тут все положения всех цифр известны наверняка. Задача для чистой opencv с простейшей логикой по определенным точкам в кадре.

digrobot
17.04.2026 09:55А что, последовательный протокол не удалось расшифровать? Там не так много данных должно быть.

AllExK
17.04.2026 09:55А на самом Dell, насколько увидел, стоит Win.
1)Какая из версий?
2) К нему подключен монитор? На мониторе отображается вся нужная Вам информация, на одном экране?
3) Если на предыдущий вопрос ответ - "да", можно попросить скриншот/фото как это выглядит?)

drandulet2024
17.04.2026 09:55В 90-х на американ ком оборудовании для боулинга была реализация ПО под dos, кегли определяло по аналоговой камере. Там просто кадр делился на точки и выставлялись квадратики в кадре где стоят кегли. Камера чёрно-белая. Если в квадратике белого больше чем чёрного считалось что кегля есть, если квадрат тёмный кегли нет. В ё просто. Массив кадра довольно не большой, нужна древняя аналоговая камера и ардуино, прямого контакта с механизмом не нужно. Главное правильно установить камеру.

Hemml
17.04.2026 09:55Как я понял, там есть какой-то электронный блок, который обрабатывает датчики и потом посылает пакет по пропиетарной шине на управляющий комп. Подключите логический анализатор с записью к шине, потом (самая приятная часть работы) просто играете в болулинг, записывая на бумажке сколько кеглей сбито каждым броском. Под конец рабочего дня, усталые, но довольные, снимаете запись логического анализатора и ищете повторяющиеся пакеты (или какая-то часть в них будет повторяться) и сверяете с бумажными записями о количестве кеглей. Если найдете совпадение, то есть, скажем, для трех кеглей 7-й байт в пакете всегда был 3, а для 2-х кеглей 2, то всё, задача решена. Ставите на шину простое устройство, которое только слушает, оно ловит пакеты, выбирает 7-й байт и шлет пуши в телефон клиента. Но, разумеется, для отладки и тестирования нужно будет еще 2-3 дня поиграть всей командой!

vdudouyt
17.04.2026 09:55Да, как я понял, это то, что в статье называется NextGen. Поддерживаю - судя по датировке маловероятно, чтобы там было что-то зашифрованное. А если и да, то задача сводится к реверс-инжинерингу бинарника brunswick.

Arhammon
А зачем машина? Почему нельзя оптикой определять кегли на месте "ардуиной" и дальше делать обработку уже как хочется? Вам же не надо пока дублировать работу родного оборудования.
Artem_Rakhmeev Автор
Можно, только для этого надо будет влезть внутрь машины и поставить там эту ардуину на движущиеся части (а там всё сильно вибрирует и трясётся). Поэтому мы попробовали другой подход с камерой перед дорожкой, которая смотрит снаружи на оставшиеся кегли. И он оказался экономически менее целесообразным, чем собирать вот такие железные решения для дублирования машин.
Arhammon
Я в общем-то про тоже самое только без модного распознавания - что-то типа лидара присобаченного где-нить сбоку, который смотрит есть препятствие по координатам итп.
xSVPx
Кстати да, с боков и сзади можно поставить действительно лидары. Но это боюсь дороже будет чем в ячейки датчики поставить, надож по два на кеглю будет + сдается мне кегли в рядах, т.е. одни перекрывают другие.
Вряд ли что-то будет дешевле и надежнее датчиков в ячейках. Что надо предпринять, чтобы не было проблем с вибрацией вопрос отличный, но с другой стороны в автомобилях все работает десятилетиями. Вряд ли нормально собранная электроника будет разваливаться от вибраций.
Но лучше, конечно, снимать инфу с тех датчиков, что уже есть... Вряд ли там что-то сильно редкое используется.
Arhammon
Я мельком глянул(может что-то пропустил) одиночные ИК и лазерные датчики вроде не то чтоб дешевые и лидар от пылесоса с расковырянным энтузиастами протоколом возможно экономически целесообразнее...
xSVPx
ИК какие-то копеечные довольно. Единицы долларов при измерении максимум полметра-метр.
Но у них размер окна миллиметр. Если там грязюка...
Что выбирать аппаратно имеет смысл думать только если нельзя с имеющихся данные снять.
xSVPx
ЗЫ. В целом лазерные похоже годные(как раз сегодня с ними копался). На малых расстояниях болтанка в пару миллиметров, может даже меньше. Как детекторы, подозреваю почти идеальный вариант. Лучше только микрики :).
Но из пяти штук(брал разных) пара оказалась совершенно непонятного вида(похоже клоны какие-то не вполне точные, возвращают не тот девайсайди итп), что-то китайцы нахреновертили, вот думаю реверсинжинирить это всё или просто "выкинуть на склад".
Xexa
В 2000+ делал на Атмеге контроллер панели и пультов кнопок рулевых, а на другой контроллер нагрузки(лампы/зажигание). И всё это на мотоцикле Урал. Неделю назад заводил его. Ни каких проблем из-за вибрации и накопленной пайки не возникло с контроллерами за десяток тысяч км в разных климатических/дорожных условиях.
Какие вибрации могут быть в автомате боулинга, что выведут из строя электронику? Ну поставьте на демпферную прокладку контроллер. Ну не ставьте контроллер на вибронагруженные элементы, а поставьте в отдельной комнате на стену, а к датчикам провода длиннее.
Зачем усложнять то, что делается легко и просто? Особенно сейчас при наличии множества готовых компонент в ближайшем "чипдипе" под контроллеры
xSVPx
Контроллеру то наверняка ничего не будет. Яб больше о пайке беспокоился. Но согласен, что в боулинге вряд ли могут быть и с этим серьезные проблемы. Всеж это не НАСА, не ступень ракеты итд итп.
Ну отвалится что-то через пяток лет, починить придется. В любом случае это как-то все надо поддерживать.
Artem_Rakhmeev Автор
Так. Нам бы реализацию, если вы знаете простой вариант. Платим деньгами, можно эту же реализацию ещё куче компаний по миру продать, у них такие же проблемы.
yudelex
Не просто простой вариант, а именно простую интеграцию.
xSVPx
Я вам буквально бесплатно написал куда можно двигаться. Можно ли это превратить в продукт и как "по фото не понять". То, что вы готовы платить деньгами - это отлично, вопрос всегда в их количестве.
Напишите в лс хотя бы где вы находитесь. Удаленно вряд ли возможно разобраться с железом.
Хоть фото того что уже стоит (датчиков) пришлите. Хоть документацию. Хоть что-то.
xSVPx
ЗЫ. Если у вас как и подписано на слайде фотодиоды, и вам надо знать только состоянее кегель, то непонятно чего там три года то делать ? Уж с фотодиодов то точно данные можно считать. Как это делать параллельно с вашим некстгеном могут быть заморочки, но в самом тяжёлом случае всегда можно считать в свое железо и эмулировать для некстгена некую обманку с правильным состоянием.