Подписаться на новости
brand brand
logo logo
Сообщество робототехников

Умный кикер своими руками

Умный кикер своими руками
Понедельник, 8 Декабря 2014, в 17:03
ГАДЖЕТЫ

Чтобы сделать умный настольный футбол, нам понадобится:
 

  • обычный глупый настольный футбол — 1шт.,
  • контроллер Arduino — 1шт.,
  • лазер — 2шт.,
  • фоторезистор — 2шт.,
  • несколько заинтересованных людей,
  • свободные выходные.

 

Предыстория

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

И вот, однажды, когда путаница с очередью всем порядком надоела, нам в голову пришла идея:

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


И все разбежались гуглить.
 

День 1

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

День 2

Первым делом в субботу утром развинтили стол. Чтобы научить его отслеживать забитые голы, прицепили 2 лазера и 2 фоторезистора на ворота и контроллер Arduino посередине. Систему придумали такую: когда в область между лазером и фоторезистором попадает мяч, контроллер фиксирует изменение напряжения на сенсоре. Так, изменение напряжения является следствием изменения сопротивления на фоторезисторе. Принципиальная схема изображена ниже.

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

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

Arduino:

 

Лазеры:

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

  • Режимы игры 1x1, 2x2.
  • Уровни игроков.
  • Коллекционирование достижений игроков.
  • Ведение личных и командных рейтингов.
  • Звуковое сопровождение игры.



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

 

Разработка велась параллельно по трем веткам:
 

  1. Клиентская сторона — Angular.js, Bootstrap.
  2. Создали основные страницы приложения, оформили дизайн, реализовали взаимодействие с сервером через Rest API и Socket.io. Адаптировали верстку под мобильные устройства.
  3. Серверная сторона — Node.js, Socket.io, MongoDB.
  4. Создали структуру проекта, разработали модель данных, настроили взаимосвязь между клиентом и сервером, разграничение по правам доступа. Реализовали логику по расчёту статистики, коллекционированию достижений, ведению рейтингов. Сделали оповещение клиента о возникающих событиях при помощи Socket.io.
  5. Взаимосвязь между Arduino и сервером.
  6. Написали прослойку между контроллером и сервером.


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

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

Конечно же, было бы правильнее организовать беспроводную передачу данных между Adruino и сервером, используя wi-fi или bluetooth модули для взаимодействия с сервером. Или даже использовать Raspberry Pi как сервер для нашего приложения. Но у нас не было ни первого, ни второго, ни третьего, зато был компот старый компьютер, который все еще мог послужить нам в качестве сервера. Поэтому наш сервер соединен со столом при помощи USB кабеля, и все общение между Arduino и сервером происходит через COM-порт.

Arduino получает с порта сигналы о включении/выключении лазеров и, в свою очередь, отправляет сигналы о зафиксированных голах на сервер.


Скетч для Arduino:

 

 


 

Контроллер на серверной стороне:

 


 

Здесь мониторим порт, к которому подключён Arduino. При получении команды, генерируем то или иное событие. Для запуска и остановки Arduino у нас есть две специальных функции start и stop, которые управляют включением и выключением лазеров.

 


 

Пример обработки событий:

 


 

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

День 3

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

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

Наконец, все собрано, подключено, запуск – заработало!

Приступили к функциональному тестированию. Ладно-ладно, играли в футбол, чего уж тут)

Парочка багфиксингов, небольшой допил и ...PROFIT! Умный футбол готов.

 

 

Итог

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

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

 

Блог компании IntexSoft Company

рейтинг

6653

просмотров

0

комментариев

порекомендовать друзьям

ЧИТАТЬ НА ЭТУ ТЕМУ

Loading

комментарии

Нет комментариев

Гость

Дорогие друзья! Помните, что администрация сайта будет удалять:

  • Комментарии с грубой и ненормативной лексикой
  • Прямые или косвенные оскорбления героя поста или читателей
  • Короткие оценочные комментарии ("ужасно", "класс", "отстой")
  • Комментарии, разжигающие национальную и социальную рознь
brand brand