Блог

«Искал как разгрузить мозг». Разработчик рассказывает, как автоматизировал кикер (он считает голы)

«Есть вещи, которые могут изменить мир, и одна из них — офисный кикер!» — сказал бы, наверное, Доктор Браун из фильма «Назад в будущее», если бы жил в 21 веке.

Я увлекся кикером в прошлом году. Не курю, на офисную кухню хожу не так часто. Искал способ разгрузить мозг. Тут офисный кикер пришелся как нельзя кстати. Но просто кикер — скучно. Хотелось чего-то большего, автоматизированного, с подсчетом голов, статистикой и разными фишечками.

Однажды я наткнулся на статью об апгрейде кикера (ссылка на неё в конце статьи), и меня осенило. «Этот мир заслуживает большего», — подумал я, и начал великую миссию. Что из этого вышло, а также полный список деталей, гайд по сборке и советы по тюнингу читайте в этой статье. 


Кто пишет: Александр Говгель, мобильный разработчик и, по совместительству, изобретатель в On The Spot.


Кикер в офисе On The Spot, фото: Таня Капитонова 

Какие умения помогут вам сделать офисный кикер 2.0?

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

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

Александр Говгель  и его детище. Фото: Таня Капитонова

Что я хотел сделать (и сделал!)

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

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

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

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

Тот самый навороченный кикер вблизи. Фото: Таня Капитонова

Шаг 1. Заказываем необходимые детали

Сразу скажу, что почти всё, кроме терпения ждать посылку, можно купить на Aliexpress.

  • Дисплей. Вам нужен обычный числовой четырехсекционный дисплей, который выводит цифры, как в часах. 
  • Фоторезисторы (2 шт.). Я выбирал между аналоговым и цифровым сигналом. Разница в полдоллара, поэтому заказал цифровой  — в надежде, что он будет выдавать «0» или «1», что максимально упростит задачу.
  • Одноплатник. Самый известный — Raspberry Pi. По совету нашего CTO я рассмотрел альтернативы, аналогов было много: Orange Pi, Banana Pi и даже Repka Pi. Выбор пал на Orange Pi Zero3. Дешевле в три раза, да и по функционалу не хуже.
  • Лазеры (2 шт.). 
  • Провода (2-3 м), чтобы развести датчики по четырем концам доски. Советую брать именно такую длину или даже больше. У мудрого изобретателя всегда должен быть в запасе лишний проводок.
  • Наконечники для сенсоров и кабеля, чтобы аккуратно всё соединить.
  • Паяльник, хотя я не планировал паять, честное слово.
  • Клеевой пистолет для крепления деталей. 
  • Реле. Это как общий выключатель в квартире, только для всех сенсоров. Если не нужно, чтобы сенсоры горели 24/7, то по долгому нажатию этот аппарат механически отключает питание на сенсорах, и они гаснут. Пробуждение сенсоров работает по такому же принципу.
  • Пластиковые уголки для скатывания мяча по ним. Их можно найти в строительном магазине типа Leroy Merlin.
  • Кнопка. Допустим, ваш друг забил десятый гол. Теперь что? Я предлагаю поставить кнопку рядом с дисплеем счета. Нажал один раз — обновил счет. Нажал и удерживаешь — включаешь или выключаешь сенсоры. Всего-то кнопка, но сколько радости может принести. Она, кстати, идет в комплекте с проводами. И в библиотеке C# (если пишете на нем) есть инструменты для работы с кнопкой. 
  • NFC-метки (4 шт.), чтобы автоматизировать процесс регистрации игроков и моментально формировать команды.

За все отдал ~100$, из них необходимое железо стоило 50$, столько же расходники (паяльник, клеевой пистолет, провода, наконечники, переходник, уголки), которые еще послужат у меня в быту.

Так выглядят датчики. Фото: Таня Капитонова

Шаг 2. Пишем софт

Я использовал C#, потому что пишу на нем. Но вы можете использовать и другой язык программирования — внизу даю нужные ссылки. У Microsoft есть неплохая библиотека для работы с контроллерами и устройствами, поэтому через нее я смог подключить дисплей, сенсоры и лазеры.

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

Шаг 3. Собираем на коленке

Откручиваем желоба и закрепляем пластиковые уголки с датчиками на внутренних углах, убедившись, что они не мешают мячику. Прячем Orange Pi так, чтобы он был незаметен, и подключаем провода так, чтобы они не висели и не мешали, как у меня.

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

Вот так вот собирался кикер. Фото: Таня Капитонова
Дисплей с кнопкой. Фото: Таня Капитонова

Самое интересное — датчики. Регулируем чувствительность так, чтобы они надежно реагировали на мячики, и стараемся уменьшить ложные срабатывания. Фиксируем наконечник лазера и крепим его так, чтобы он не болтался и не сбивал фокус при ударах о ворота. А то я с этим возился долго, пока не залил всё клеем. Если что-то не так, настраиваем до идеала. Если что, то всегда можно обвинить алгоритм починки всего и вся.

Согласны со схемой? 

Шаг 4. Занимаемся статистикой и рейтингом

Для сбора статистики используем Telegram-бот, запущенный на Orange Pi вместе с приложением, которое отслеживает забитые голы. Через бота можно узнать свой рейтинг и даже посмотреть топ-10 игроков. Создать Telegram-бот несложно, нужно лишь получить токен и использовать библиотеку для C#. Небольшая проблемка — бот общедоступный. Но мы решили это проверяя, добавлен ли пользователь в нашу специальную группу для кикера «On the Spot».

Так выглядит чат-бот. Фото: Таня Капитонова

Дальше подключаем Orange Pi к локальной сети компании с уникальным IP-адресом. Мы создали Linux-сервис, который автоматически перезапускает приложение в случае ошибки или сбоя. Таким образом система работает почти автономно. Для хранения данных используем локальную базу данных SQLite.

Пришло время рейтинга — то, ради чего я ввязался во всё это. Мы используем рейтинговую систему Эло (используется в шахматах.) У каждого игрока есть дефолтное количество очков, например, тысяча. За победу в матче игроку начисляются очки, за поражение отменяются. Рейтинг можно улучшать, но чем сильнее игрок, тем сложнее ему зарабатывать очки. Иногда новичок может быть выше опытных игроков, поэтому тут есть поле для улучшения.

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

Фото: Таня Капитонова

Как подсчитываются результаты

Холодный старт сервиса (длится пару секунд, и на дисплее начинает мигать тире «--». Так мы понимаем, что подсчитывается рейтинг. Он это делает каждый раз при запуске сервиса.

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

Долгое нажатие на клавишу пробуждает систему. Загораются лазеры, датчики, и на дисплее отображается количество сыгранных рейтинговых игр (более 400 на данный момент). Когда на дисплее мигает нижние тире «_ _ _ _ «, игроки могут подключиться к игре. Для этого на углах стола наклеены NFC-метки, которые открывают Telegram бот и отправляют команду о присоединении игрока N на позицию M. 

Если нет NFC в телефоне, то нужную позицию можно запросить через бота. После подключения игрока на дисплее загорается нолик «__00». Так мы понимаем, кого мы еще ждем.

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

После игры Telegram-бот рассылает участникам индивидуальную статистику: рейтинг, % винрейта, количество игр, серию побед и поражений. Также мы знаем продолжительность матча и каждого раунда, состав команд и позицию игроков. Если игра завершилась с «красивым» счетом (т.е. кратным ста — 200, 300, 400) или со счетом 10:0, бот отправляет сообщение в общий чат. Всегда приятно видеть новые сообщения о достижениях. 

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

Фото: Таня Капитонова

Как отреагировали коллеги

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

Когда случаются баги, есть большой соблазн вернуться к мануальной системе подсчета и затормозить эволюцию. А мне, как разработчику, любопытно докопаться до сути проблемы и пофиксить всё. Сейчас коллеги регулярно рубятся в кикер, и им очень нравится. 

Сотрудники On the Spot играют в кикер. Фото: Таня Капитонова

Что планирую дальше?

Кикер 2.0 — это только начало. Я полон идей и готов развивать его дальше.

Вот что я задумал:

  • Турнирная сетка в Telegram-боте. Хочу, чтобы мы могли следить за ходом турниров, видеть, кто лидирует, и болеть за свои команды.
  • 3D-печатный корпус. Хочу распечатать стильный корпус, который спрячет все провода и кнопку, сделав конструкцию более эстетичной и надежной.
  • Установка камеры над столом и возможность стримить локально на телевизор в офисе
  • Автоматическая система подачи мяча. Обдумываю два варианта: LEGO с моторами или самодельная система с Aliexpress.
Александр Говгель. Фото: Таня Капитонова

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

До новых апгрейдов!

Статьи с хабра о том, как усовершенствовать офисный кикер

C# библиотеки и документация

Мнение автора может не отражать позицию редакции. 

Что ещё почитать про хобби у комьюнити: 

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

5

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

В целом было интересно почитать. Спасибо.

Пользователь отредактировал комментарий 30 апреля 2024, 18:41

3

"некоторые вещи на мой взгляд можно было сделать проще."

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