Оглавление:

Стрельба на Arduino V3: 4 шага
Стрельба на Arduino V3: 4 шага

Видео: Стрельба на Arduino V3: 4 шага

Видео: Стрельба на Arduino V3: 4 шага
Видео: Косячный Arduino CNC Shield v4. Полное восстановление работоспособности. Fix cnc shield v4 2024, Июль
Anonim
Image
Image
Ардуино стрелялка V3
Ардуино стрелялка V3
Ардуино стрелялка V3
Ардуино стрелялка V3
Ардуино стрелялка V3
Ардуино стрелялка V3

Эта игра для тех, кто использует страйкбол или СО2 для стрельбы по целям. Это игра.

Для получения актуальной информации об игре и поддержке:

www.facebook.com/arduinoshooting/

Для страницы моего блога об игре:

shootinggameblog.wordpress.com

Для кодов об игре:

github.com/shootinggame82/Shooting-game-v3

Стрельба состоит из x целей, которые являются беспроводными, каждая цель имеет датчик вибрации, который воспринимает вибрацию, которая возникает при нанесении удара. Беспроводные датчики представляют собой чип Atmega328 (чип Arduino Uno) и имеют перезаряжаемую батарею Li-Po.

Главный контроллер для этой игры управляется Arduino, а последовательный - с Raspberry Pi.

Итак, как эта игра работает? Ну, это 3 режима игры:

Quicktime: сыграйте X раундов и стреляйте так быстро, что сможете, по каждой цели.

Режим времени: Стреляйте в как можно больше целей за X секунд.

Rapidfire: сделайте X выстрелов в кратчайшие сроки.

Система использует передатчики NRF24L01, чтобы получить хорошее отдаление от главного контроллера. Они работают на частоте 2,6 ГГц (так же, как работает WiFi)

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

В игре есть 7-дюймовый сенсорный экран Raspberry Pi, на котором размещена веб-система, через которую вы управляете игрой. Терминальный принтер распечатывает результаты.

Запасы

Для передатчиков:

  • X Atmega328 с загрузчиком Arduino (в зависимости от количества целей)
  • X переключатель датчика вибрации
  • X синий светодиод
  • X зеленый светодиод
  • X красный светодиод
  • X 3,7 В Li-Po аккумулятор
  • Зарядный модуль X FC-75 Li-Po (или другая модель)
  • X 100 мкФ конденсатор
  • X Чехлы для датчиков
  • X LD1117V33 (Обеспечивает безопасное напряжение 3,3 В на передатчик)
  • Модули X NRF24L01
  • X x 32 резистора 220 Ом (на одну мишень нужно 3 штуки)
  • X 16 МГц кристалл
  • X x 2 конденсатора без покрытия по 22 пФ (на одну цель нужно 2)

Для основного Arduino:

  • 1 Arduino (рекомендуется Nano или Uno, требуется USB)
  • 1 модуль NRF24L01
  • 1 конденсатор 10 мкФ

Для Raspberry Pi:

  • Raspberry Pi (я использовал 3B)
  • 7-дюймовый сенсорный экран
  • ATXRaspi (дополнительный, но хороший модуль кнопки питания)
  • RTCRaspi (необязательный, но хороший модуль RTC для хранения времени и даты)
  • Термальный принтер (необязательно, но необходим для печати)
  • Сканер штрих-кода (версия USB, которая работает как клавиатура, опционально)
  • Хорошее питание 5 В (я использовал старый USB 12 В с мощностью 2,5 А)

Другие вещи:

  • Питание 12В (у меня один на 12 Ач)
  • Сетевой разъем (упростите подключение к сети)
  • Кабели

Шаг 1. Беспроводные датчики

Беспроводные датчики
Беспроводные датчики
Беспроводные датчики
Беспроводные датчики
Беспроводные датчики
Беспроводные датчики

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

У нас также есть зеленый и красный светодиоды. Зеленый всегда горит, чтобы сообщить, что датчик включен. Красный светится только тогда, когда уровень заряда батареи ниже 3,1 В (он использует встроенную функцию в микросхеме, чтобы вычислить, сколько заряда в батарее.

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

У цели есть функция отказоустойчивости, которая в случае, если вы не попали в X секунд (по умолчанию 15 секунд) или если передача не может быть осуществлена, они вернутся в исходное положение.

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

ВАЖНО О МОДУЛЕ NRF24L +:

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

Также в коде скорость передачи данных вам не нужна больше 250 Кб, так что это не будет проблемой. Но PA: myRadio.setPALevel (RF24_PA_MIN);

В коде, который я установил на MIN (это во время теста), он самый низкий и не будет потреблять столько энергии, но диапазон не будет таким длинным. Если у вас есть стабильная и хорошая мощность, вы можете подняться до RF24_PA_MAX, чтобы получить самый длинный диапазон, НО им для этого требуется GOOOOOD стабильная мощность. Попробуйте также LOW AND HIGH (Изменить только текст MAX), чтобы убедиться, что у вас хорошее общение. Также у вас будет хороший диапазон на LOW и HIGH, если вы не собираетесь быть снайпером

Также держите передатчики на расстоянии не менее одного метра, закрытие может испортить сигнал

Проверьте связь с помощью некоторого примера ping в библиотеке NRF24 (ссылка на GitHub)

В коде вам нужно установить уникальный идентификационный номер для этой цели:

int targID = 3401; // Это целевой идентификатор

int sendID = 2401; // Это идентификатор ответа

Также есть 3 функции DEFINE:

#define DEBUG

#define BATTERY

#define SHAKE // ЕСЛИ ВЫКЛЮЧАТЕЛЬ SHAKE ИСПОЛЬЗУЕТСЯ ВМЕСТО СТАРОГО ПЬЕЗО

ОТЛАЖИВАТЬ:

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

АККУМУЛЯТОР:

Если вы не хотите использовать средство проверки заряда батареи для целей, вам необходимо удалить это определение.

Встряхнуть:

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

Чип ATMEGA328

Вместо Arduino nano я решил использовать чип ATMEGA328 (с загрузчиком Uno), их легко запрограммировать, просто удалите чип из Arduino Uno, добавьте этот чип и загрузите код. Проверьте электрическую схему, как строить мишени.

Код

Я написал код с PlatformIO вместо Arduino IDE. Это лучшее программное обеспечение для программирования. Так что код немного отличается. Я рекомендую вместо этого использовать это программное обеспечение.

Блок мишени и передатчика

Я прикрепил датчик и синий светодиод к цели, и с помощью фонокабеля 3,5 мм на 2 м я соединяю его вместе в коробке передатчика, которая удерживает чип atmega, зарядное устройство и зелено-красный светодиоды. Это сделано для защиты от попадания стальных пуль.

Шаг 2: игровой контроллер

Игровой контроллер
Игровой контроллер
Игровой контроллер
Игровой контроллер
Игровой контроллер
Игровой контроллер
Игровой контроллер
Игровой контроллер

Следующее, что нам нужно сделать, это сделать контроллер для датчиков. Это Arduino, который использует модуль NRF24L01 для связи с датчиками. Ничего больше. Затем Arduino подключается к USB в Raspberry Pi для работы.

Вот как это будет работать. Он использует последовательный порт, чтобы знать, что делать. Pi отправляет последовательные команды. Сначала во время настройки он отправляет количество добавленных целей и идентификационные номера целей. Затем он выполнит тестовую функцию и сообщит raspberry pi, если они действительно общаются друг с другом.

Когда вы играете в игру, он отправляет из пи, какой тип игры и сколько раундов / ударов использовать. Вот и все.

Можно использовать модули NRF24L01 в raspberry pi, но для меня Arduino - лучший вариант, потому что я никогда не использую их в raspberry, поэтому я не знаю, насколько хорошо они работают в долгосрочной перспективе

Есть силовой модуль, который использует 5 В для обеспечения стабильного питания передатчиков. Вы можете использовать их с вами Arduino (см. Рисунок), имя - плата модуля адаптера гнезда

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

Во время теста вы можете активировать #DEFINE DEBUG, чтобы увидеть, как он работает, но не тогда, когда вы используете его на компьютере Pi, он не будет работать.

Загрузите код на странице GitHub.

Шаг 3: Raspberry Pi

Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi
Raspberry Pi

Теперь мы подошли к Raspberry Pi.

Я добавил несколько дополнительных функций, поэтому у меня может быть кнопка питания. ATXRaspi 3 - отличный модуль, вы можете включать, выключать и перезагружать пи с помощью кнопки. Также RTCRaspi для хранения времени и даты на пи. Также стало возможным просто подключить сетевой кабель, если мне нужно сделать некоторые обновления в системе. Вы найдете их на Lowpowerlab.

Термопринтер вы найдете на sparkfun, а считыватель штрих-кода доступен на Amazon.

Компьютер Pi работает в режиме киоска, поэтому браузер открывается при запуске. Прежде всего, вам необходимо иметь веб-сервер с PHP 7 и mysql на компьютере Pi. (Для этого в сети есть множество руководств)

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: если вы собираетесь использовать термопринтер с Raspberry Pi со встроенным Bluetooth, вам необходимо сначала отключить его

Сценарию python нужен pyserial, и вы его устанавливаете: sudo apt-get install python-serial

Чтобы заставить mysql работать, установите следующее:

sudo apt-get install mysql-python sudo apt-get install python-mysql.connector

suso apt-get install pymysql

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

Следующим шагом будет создание скрипта python для подключения к mysql.

Во всех трех скриптах python измените соединение с вашей базой данных mysql.

Следующим шагом является запуск скрипта python при запуске.

Существует три сценария python. Game.py - самый важный из всех, в котором хранится игровая функция. Print.py это необходимо только в том случае, если вы собираетесь использовать термальный принтер для печати. Ean.py требуется только в том случае, если вы собираюсь использовать сканер штрих-кода.

Чтобы они запускались автоматически, я редактирую:

sudo nano /etc/rc.local

и добавьте следующее внизу перед выходом 0:

sudo python /home/pi/Gamefiles/game.py и sudo python /home/pi/Gamefiles/print.py и sudo python /home/pi/Gamefiles/ean.py &

Пожалуйста, измените правильное место для вашего скрипта python и не забудьте знак & в конце

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

sudo apt-get install unclutter

sudo nano / etc / xdg / lxsession / LXDE-pi / автозапуск

теперь в этом файле найдите и закомментируйте:

@xscreensaver -no-splash # закомментируйте эту строку, чтобы отключить заставку

Ниже этого добавьте:

@xset s off @xset -dpms @xset s noblank @ chromium-browser --noerrdialogs --force-device-scale-factor = 1.25 --kiosk https:// localhost

Следующий шаг, чтобы удалить все загрузочные тексты и прочее, а также добавить свой собственный загрузочный экран, вот краткое руководство:

sudo nano /boot/config.txt и внизу adddisable_splash = 1

Удалить текстовое сообщение под заставкой:

sudo nano /usr/share/plymouth/themes/pix/pix.script

Найдите и удалите (или закомментируйте):

message_sprite = Sprite (); message_sprite. SetPosition (ширина_экрана * 0,1, высота_экрана * 0,9, 10000);

а также:

my_image = Image. Text (текст, 1, 1, 1); message_sprite. SetImage (my_image);

Теперь убираем загрузочные сообщения:

судо нано /boot/cmdline.txt

замените console = tty1 на console = tty3

и в конце строки добавить:

splash quiet plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default = 0

И замените заставку pi на свою:

sudo cp ~ / my_splash-p.webp" />

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

Шаг 4: Настройте игру

На этом этапе вы создали игру.

Сначала вам нужно настроить веб-систему. Загрузите базу данных на свой сервер mysql. Файл находится в папке include и называется database.sql.

Следующий шаг - отредактировать файл конфигурации, вы найдете его в папке с именем config.php Измените информацию для входа в базу данных, чтобы скрипт заработал.

Веб-система основана на нескольких языках и написана на английском языке. Доступен шведский перевод. Чтобы сделать больше языков, вам понадобится программа под названием Poedit.

Чтобы добавить больше языка в веб-систему, вам нужно отредактировать i18n_setup.php и добавить в массив:

вернуть in_array ($ locale, ['en_US', 'sv_SE']); (Строка 23)

Также, чтобы изменить язык по умолчанию, вам нужно изменить в строке 27: $ lang = 'en_US'; измените en_US на свой язык.

языковые файлы должны быть помещены в locales / LANGCODE / LC_MESSAGES / и называться main.mo (измените langcode на свой язык)

чтобы изменить клавиатуру в файле selectplayers.php, вы меняете язык: "en", // en для английского sv для шведской раскладки: 'qwerty', // qwerty для английского шведского-qwerty для шведского

Вы найдете их в строках 218 и 219.

Доступные языки находятся в папке: assets / js / keyboard / languages & layout находятся в assets / js / keyboard / layouts и добавьте правильные файлы в строки 118 и 119 (замените тот, который вы там сейчас найдете)

Добавить цели

Чтобы добавить цели, перейдите в localhost / admin / и нажмите «Добавить цели».

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

Добавить игры

Вам также необходимо добавить несколько игр. Перейдите в localhost / admin / и нажмите «Добавить игру».

Вам нужно добавить название игры, описание, минимальное и максимальное количество игроков, тип игры, а также то, насколько сложна игра от 1 до 5. И как игра, поэтому для игры Rapidfire вы добавляете, сколько ударов (пример 30) для оттяжки, сколько раундов (например, 8) и с указанием времени, сколько они будут играть (например, 60 за одну минуту)

Начать игру

Когда вы включите игру, она выполнит целевое тестирование. Таким образом, цели должны быть поставлены перед запуском основной системы. Если все прошло проверку, вы можете использовать систему, но если они этого не сделают, вы не сможете ее использовать. Он будет пытаться общаться, пока они не получат ответ.

Удачи

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

Рекомендуемые: