Пригласили нас как-то с сыном на аренный лазертаг, очень нам понравилось! Т.к. готовые комплекты стоят не мало, пришла идея собрать что-то подобное на Arduino для игры дома и на улице. Что у меня получилось, читайте ниже.
В качестве корпуса для тагера было решено использовать готовый комплект для интеграции «LSD RAVEN», в комплект входит сам корпус, излучатель с линзой, кнопка перезарядки, замок включения и спусковой крючок с микриком. Это оказалось выгоднее, чем печать корпуса на 3D-принтере и покупка излучателя.
В роли платы управления использовал Arduino Nano, для удобства её монтажа в корпусе и пайки разработал в EasyEDA печатную плату, также сделал платы для датчиков головной повязки.
Комплектующие:
Тагер |
Повязка |
Arduino Nano |
ИК-приёмник TL1838 - 6 шт. |
Усилитель звука PAM8403 |
Светодиод индикации попадания - 6 шт. |
Buzzer |
Вибромотор |
Дисплей OLED 128x64 |
|
ИК-светодиод TSAL6100 |
|
Светодиод подсветки выстрела |
|
Вибромотор |
|
Микропереключатель |
|
Кнопка без фиксации - 2 шт. |
|
Ключ-выключатель |
|
Батарейный отсек 4xAAA |
Схема подключения
Собрал всё на макетной плате для отладки, набросал скетч и при компиляции столкнулся с проблемой:
libraries\IRremote-2.0.1\IRremote.cpp.o (symbol from plugin): In function `MATCH(int, int)':
(.text+0x0): multiple definition of `__vector_7'
sketch\PlaySound.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino Nano.
Дело в том, что PlaySound и IRremote используют один и тот же аппаратный таймер, поэтому не могут работать вместе. Для решения этой проблемы нужно в библиотеке IRremote, в файле IRremoteInt.h, в блоке для Nano раскомментить IR_USE_TIMER1 и закомментить IR_USE_TIMER2.
// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, Nano, etc
#else
#define IR_USE_TIMER1 // tx = pin 9
//#define IR_USE_TIMER2 // tx = pin 3
#endif
Также не всё было гладко с комплектным излучателем:
Я его разделил - отдельно плата подсветки выстрела и плата с ИК-диодом + заменил ИК-диод.
После отладки собрал всё в корпусе и спаял. Головную повязку сшил из эластичной ленты, закрепил на ней датчики. В качестве корпусов для датчиков использовал какие-то капсулы от игрушек, нашёл у детей :)
Принцип игры прост, включаем тагер, на старте у нас 9 жизней, 20 патронов в магазине и 5 магазинов. Бегаем, стреляем :) Доступно два режима стрельбы: одиночный - однократное нажатие на спусковой крючок и очередь - удержание спускового крючка. Выстрел сопровождается характерным звуком + подсветкой + вибрацией в рукоятке. Если патроны закончились, нажимаем перезарядку, если кончились и патроны и магазины - засчитывается поражение (смерть), наступает небольшая пауза и игра возобновляется. Перезарядка, осечка (когда нет патронов) и смерть также сопровождаются звуками. Попадания фиксируются датчиками повязки и сопровождаются характерным звуком + вибрацией и зажиганием светодиодов + убавляются жизни, если жизни закончились - засчитывается смерть. Ещё на тагере, сверху, есть кнопка выбора команды (за красных / за зелёных) - это на будущее, для каждой команды можно прописать свои коды выстрела, тем самым исключить огонь по своим и т.п. Сейчас в прошивке используются коды обеих команд, т.к. мы играем втроём и каждый сам за себя. Если удерживать кнопку выбора команды - будет показана статистика: кол-во выстрелов и смертей, статистика сбрасывается при выключении тагера. Также в скетче, на будущее, заложено пополнение боекомплекта и аптечка. Вот такой лазертаг у меня получился, дети в восторге :)
Дополнительные фото
Ссылка на скетч и библиотеки
P.S. Скетч конечно сыроват и требует доработки по части многозадачности, в момент выстрела не фиксируются попадания и наоборот, в связи с этим прошу не кидаться помидорами в комментах. Если у кого-то есть идеи и желание, пишите в личку, буду рад помощи.
Комментарии (13)
ZERGeich
30.09.2022 11:06+2Чтобы батарейки сменить - раскручивать тайзер?
На сколько их при активной игре хватает с таким набором?
Ну, и насколько раскручиваний хватит тайзера?
SantaCluster
02.10.2022 07:44пофиг, что сырое. зато столько всего сделал сам и - получилось!
успехов в дальнейшей доработке
es1046
02.10.2022 14:19Эксперимент интересный. Но играть с таким против нормального оборудования в лесу или на заброшке не получится. Проще присоединиться к команде и брать оборудование в прокат.
Поищите команду. Например лазгард
terraplane
На тазерах интереснее игра проходит, увлекает до дрожи!
DAN_SEA
Хардбол лучче (это когда 2 команды перестреливаются из тировых воздушек О_о) . "Это тебе не пейнтбол" ©
P.S. сам был в шоке, когда первый раз увидел. Полностью в плотной одежде, щитках строительных на лице. Средняя дистанция между командами - метров 80-90.
Linder666
Таки тазеры правдивее, там не скрыть попадание тихим "ай, <censored>!" и продолжением стрельбы(в стракболе таких называют маклаудами), а с тазером, если попал, хочешь не хочешь ничего не сделаешь))
AndreyHenneberg
А какой смысл идти/ехать на игру, если собираешься нарушать правила?
daggert
Не всегда заметно, как самая частая проблема. Ну и есть люди, которые хотят доказать что они рэмбо. А таких уже надо учить
AndreyHenneberg
В целом, я вижу смысл навешивания разной электроники в том, чтобы игрок как можно меньше отвлекался на обработку моделей. Ну а те, кто хочет жульничать, могут идти нафиг.
wAgo
В хардболе присутствует весьма громкий хлопок от попадания. Но есть один боОольшой недостаток, когда шарик попадает под кожу и самостоятельно его вынуть не получается, в травмпункте придётся выдумывать историю что это "самострел" каким-то невероятным образом получился именно в спину, а потом ещё и дяде милиционеру это обИснять ))) Картинок постить не буду ;)
xl0e
В детстве играли с воздушками в подобное, щитки - вырезанные из пэт бутылок, пульки - жеванная бумага, летит недалеко, но вблизи достаточно больно) Ограничений - никаких)