Tabla de contenido:
- Suministros
- Paso 1: los sensores inalámbricos
- Paso 2: el controlador del juego
- Paso 3: Raspberry Pi
- Paso 4: configura el juego
Video: Juego de disparos Arduino V3: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-31 10:18
Este juego es para los que usan airsoft o co2 para disparar a los objetivos. Es un juego.
Para obtener información actualizada sobre el juego y soporte:
www.facebook.com/arduinoshooting/
Para mi página de blog sobre el juego:
shootinggameblog.wordpress.com
Para los códigos sobre el juego:
github.com/shootinggame82/Shooting-game-v3
El juego de disparos es x objetivos que son inalámbricos, cada objetivo tiene un sensor de vibración que detecta la vibración que se obtiene cuando se realiza un golpe. Los sensores inalámbricos son un chip Atmega328 (chip Arduino Uno) y tienen batería de recarga Li-Po.
El controlador principal de este juego está controlado por un Arduino y está controlado en serie desde una Raspberry Pi.
Entonces, ¿cómo está funcionando este juego? Bueno, son 3 modos de juego:
Quicktime: Juega X rondas y dispara tan rápido que puedas en cada objetivo.
Modo de tiempo: Dispara a tantos objetivos como puedas en X segundos.
Rapidfire: dispara X tiros en el tiempo más rápido.
El sistema utiliza transmisores NRF24L01 para obtener una buena distancia del controlador principal. Funcionan en 2.6 GHz (lo mismo que se ejecuta WiFi)
En mis proyectos anteriores, he estado usando Piezo para la vibración, pero ahora se usa Vibration Sensor Switch. Pero aún puedes usar Piezo si has creado mi versión anterior de este juego.
El juego tiene una pantalla táctil Raspberry Pi de 7 que contiene el sistema web a través del cual controlas el juego. Una impresora terminal imprime los resultados.
Suministros
Para transmisores:
- X Atmega328 con Arduino Bootloader (dependiendo de cuántos objetivos)
- X Interruptor del sensor de vibración
- X LED azul
- X Led verde
- X Led rojo
- Batería Li-Po X 3.7v
- Módulo cargador X FC-75 Li-Po (u otro modelo)
- Condensador X 100 uF
- X Casos para los sensores
- X LD1117V33 (Hace un transmisor seguro de 3.3 V)
- Módulos X NRF24L01
- X x 3 resistencias de 220 ohmios (se necesitan 3 para un objetivo)
- X Cristal de 16 MHz
- X x 2 Condensadores no plorizados 22 pF (se necesitan 2 para un objetivo)
Para Arduino principal:
- 1 Arduino (se recomienda Nano o Uno, necesita tener USB)
- 1 módulo NRF24L01
- 1 condensador de 10 uF
Para frambuesa Pi:
- Raspberry Pi (usé 3B)
- Pantalla táctil de 7"
- ATXRaspi (opcional pero un buen módulo de botón de encendido)
- RTCRaspi (Opcional pero un buen módulo RTC para mantener la hora y la fecha)
- Impresora térmica (opcional pero necesaria para poder imprimir)
- Escáner de código de barras (versión USB que funciona como un teclado, opcional)
- Buena potencia de 5V (utilicé un viejo USB de 12v con 2,5 A de potencia)
Otras cosas:
- 12v de potencia (tengo uno a 12 Ah)
- Toma de red (facilita la conexión a la red)
- Cables
Paso 1: los sensores inalámbricos
Comencemos a hacer los sensores. Yo uso 4 sensores para este juego. Pero puede agregar fácilmente más sensores. Los sensores se comunican con un código de 4 números cuando el sistema principal envía el código con qué función se iluminará el sensor con el código correcto y estará listo para el objetivo. La luz azul es para informar que es ese objetivo al que vas a acertar.
También disponemos de led verde y rojo. El verde siempre se enciende para informar que el sensor está encendido. El rojo solo se iluminará cuando la batería tenga menos de 3,1 V (utiliza la función incorporada en el chip para calcular cuánto hay en la batería.
El sensor de vibración está conectado al pin analógico y lee su valor. Cuando el valor se está hundiendo, el sensor tiene una imagen de vibración y ahí es donde registramos el golpe.
El objetivo tiene una función a prueba de fallos, que en caso de que no golpee en X segundos (el valor predeterminado es 15 segundos) o si la transmisión no se puede realizar, volverá a la posición inicial.
No voy a explicarte cómo vas a cablear, revisa la hoja eléctrica para ver cómo vas a hacer eso, lo único que no está en ella es la batería, el interruptor de encendido y el cargador. Depende de usted decidir cómo lo quiere.
IMPORTANTE ACERCA DEL Módulo NRF24L +:
Puede ser doloroso … mantenerlos estables, combinado con un buen poder y aislamiento a su alrededor, y el código que hará que funcionen. Para mí, el condensador de 10 uF me proporcionará una conexión estable y buena, pero inténtelo primero en caso de que necesite, por ejemplo, un condensador de 100 uF. También envuélvalos primero con papel de aluminio y luego con papel de aluminio para protegerlos de interferencias
También en el código, la velocidad de datos no necesita más de 250 Kb, por lo que ese no será el problema. Pero el PA: myRadio.setPALevel (RF24_PA_MIN);
En el código que configuré en MIN (Esto es durante la prueba), es el más bajo y no usará tanta energía, pero el rango no será tan largo. Si tiene una potencia estable y buena para ellos, puede subir a RF24_PA_MAX para obtener el rango más largo, PERO necesitan una potencia estable de GOOOOOD para eso. Pruebe también LOW AND HIGH (cambie solo el texto MAX) para ver si obtiene una buena comunicación. También obtendrás un buen alcance en BAJO y ALTO a menos que vayas a ser un francotirador
También mantenga los transmisores separados por lo menos un metro, ¡cerrar puede hacer que la señal sea mala
Pruebe la comunicación con algún ejemplo de ping en la biblioteca NRF24 (enlace en GitHub)
En el código, debe establecer el número de identificación único para ese objetivo:
int targID = 3401; // Este es el ID del objetivo
int sendID = 2401; // Este es el ID de respuesta
También hay 3 funciones DEFINIR:
#define DEBUG
#define BATERÍA
#define SHAKE // SI SE UTILIZA SHAKE SWITCH EN LUGAR DEL ANTIGUO PIEZO
DEPURAR:
Durante la prueba, es bueno haberlo definido. Pero cuando los ponga a disposición, no los active.
BATERÍA:
Si no desea tener un comprobador de batería para los objetivos, debe eliminar esta definición.
SACUDIR:
Si ha compilado mi versión anterior, tiene sensores piezoeléctricos, luego elimínelo para obtener el código correcto para ellos.
Chip ATMEGA328
En lugar de un Arduino nano, decidí usar el chip ATMEGA328 (con el cargador de arranque Uno), son simples de programar, simplemente retire el chip de un Arduino Uno y agregue este chip y cargue el código. Verifique el esquema eléctrico sobre cómo construir los objetivos.
El código
He escrito el código con PlatformIO en lugar de Arduino IDE. Es un mejor software para programar. Así que el código es un poco diferente. Recomiendo usar este software en su lugar.
La caja de destino y transmisor
He colocado el sensor y el led azul en el objetivo, y con un cable phono de 3,5 mm en 2 m lo conecto en la caja del transmisor que contiene el chip atmega, el cargador de batería y el led verde y rojo. Esto es así para protegerlo de los impactos de balas de acero.
Paso 2: el controlador del juego
Lo siguiente que debemos hacer es crear el controlador de los sensores. Es un Arduino que usa un módulo NRF24L01 para comunicarse con los sensores. Nada más. Luego, el Arduino se conecta con USB en la raspberry pi para que funcione.
Así es como funcionará. Utiliza serial para saber qué hacer. Pi enviará comandos seriales. Primero, durante la configuración, envía cuántos objetivos ha agregado y los números de identificación de los objetivos. Luego, hará la función de prueba e informará a la Raspberry Pi si se comunican entre sí.
Cuando juegas el juego te enviará desde pi qué tipo de juego y cuántas rondas / hits usar. Eso es todo.
Es posible usar los módulos NRF24L01 en la raspberry pi, pero para mí el Arduino es una mejor opción porque nunca los uso en frambuesa, así que no sé qué tan bien funcionan a largo plazo
Hay un módulo de potencia que usa 5 v para hacer que la potencia estable correcta a los transmisores. Puede usarlos con su Arduino (vea la imagen) el nombre es Placa de módulo adaptador de enchufe
Cuando juegues, los objetivos se activarán aleatoriamente uno por uno. Cuando se golpea uno, se activará otro.
Durante la prueba puede tener activado #DEFINE DEBUG para ver cómo funciona, pero no cuando lo use en la computadora pi, entonces no funcionará.
Descarga el código en la página de GitHub.
Paso 3: Raspberry Pi
Ahora hemos llegado a la Raspberry Pi.
He agregado algunas funciones adicionales para poder tener un botón de encendido. El ATXRaspi 3 es un gran módulo, puede encender, apagar y reiniciar el pi con un botón. También un RTCRaspi para mantener la fecha y la hora en el pi. También hizo posible simplemente conectar un cable de red en caso de que necesite hacer algunas actualizaciones en el sistema. Los encontrarás en Lowpowerlab
La impresora térmica que encontrará en sparkfun y el lector de códigos de barras están disponibles en amazon.
La computadora Pi se ejecuta en modo quiosco, por lo que el navegador se abrirá al inicio. En primer lugar, debe tener un servidor web con PHP 7 y mysql en la computadora pi. (Hay muchas guías en la web para esto)
TENGA EN CUENTA: si va a utilizar una impresora térmica con raspberry pi que tiene bluetooth incorporado, primero debe desactivar esa
El script de Python necesita pyserial y lo instalas: sudo apt-get install python-serial
Para hacer que mysql funcione, instale lo siguiente:
sudo apt-get install mysql-python sudo apt-get install python-mysql.connector
suso apt-get install pymysql
Ahora puede controlar su Arduino a través de serie y también actualizar la base de datos mysql.
El siguiente paso es crear un script de Python para conectarse a mysql.
En las tres secuencias de comandos de Python, cambie la conexión a su base de datos mysql.
El siguiente paso es hacer que el script de Python se ejecute al inicio.
Hay tres script de python. El juego.py es el más importante de todos, el que contiene la función del juego.print.py, esto solo es necesario si va a usar una impresora térmica para imprimir.ean.py solo es necesario si está va a utilizar el escáner de código de barras.
Para que se inicien automáticamente, edito:
sudo nano /etc/rc.local
y agregue lo siguiente en la parte inferior antes de la salida 0:
sudo python /home/pi/Gamefiles/game.py & sudo python /home/pi/Gamefiles/print.py & sudo python /home/pi/Gamefiles/ean.py &
Cambie al lugar correcto para su secuencia de comandos de Python y no olvide el signo & al final
Ahora necesitamos hacer un modo kiosco para el navegador web, primero quite el cursor:
sudo apt-get install unclutter
sudo nano / etc / xdg / lxsession / LXDE-pi / autostart
ahora en ese archivo busque y comente:
@xscreensaver -no-splash # comente esta línea para deshabilitar el protector de pantalla
Debajo de eso, agregue:
@xset s desactivado @xset -dpms @xset s noblank @ chromium-browser --noerrdialogs --force-device-scale-factor = 1.25 --kiosk https:// localhost
El siguiente paso para eliminar todos los textos de inicio y demás también agrega su propia pantalla de inicio aquí es una guía rápida:
sudo nano /boot/config.txt y en la parte inferior adddisable_splash = 1
Eliminar el mensaje de texto debajo de la imagen de bienvenida:
sudo nano /usr/share/plymouth/themes/pix/pix.script
Buscar y eliminar (o comentar):
message_sprite = Sprite (); message_sprite. SetPosition (ancho_pantalla * 0.1, altura_pantalla * 0.9, 10000);
y:
my_image = Imagen. Texto (texto, 1, 1, 1); message_sprite. SetImage (mi_imagen);
Ahora eliminamos los mensajes de arranque:
sudo nano /boot/cmdline.txt
reemplace "consola = tty1" por "consola = tty3"
y al final de la línea agregue:
splash silencioso plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default = 0
Y reemplace el pi splash con el suyo:
sudo cp ~ / my_splash-p.webp" />
Ahora tienes tu propia pantalla de inicio personalizada para tu juego. Tu computadora pi está ahora lista para manejar el juego, ¡así que pasa al siguiente paso!
Paso 4: configura el juego
En este punto, ya ha creado el juego.
Lo primero que debe hacer es configurar el sistema web. Sube la base de datos a tu servidor mysql. El archivo está en la carpeta incluye y se llama database.sql
El siguiente paso es editar el archivo de configuración, lo encontrará en el nombre de la carpeta incluye config.php Cambie la información de inicio de sesión de la base de datos para que el script funcione.
El sistema web está basado en varios idiomas y está escrito en inglés. Hay una traducción al sueco disponible. Para hacer más idiomas, necesita un software llamado Poedit.
Para agregar más lenguaje al sistema web, debe editar i18n_setup.php y agregar en la matriz:
return in_array ($ locale, ['en_US', 'sv_SE']); (Línea 23)
Además, para cambiar el idioma predeterminado, debe cambiar en la línea 27: $ lang = 'en_US'; cambie el en_US a su idioma.
los archivos de idioma deben colocarse en locales / LANGCODE / LC_MESSAGES / y llamarse main.mo (Cambie el código de idioma a su idioma)
para cambiar el teclado en el archivo selectplayers.php cambia el idioma: "en", // en para inglés sv para diseño sueco: 'qwerty', // qwerty para inglés sueco-qwerty para sueco
Los encontrará en las líneas 218 y 219
Los idiomas disponibles están en la carpeta: assets / js / keyboard / languages & layouts están en assets / js / keyboard / layouts y agregue los archivos correctos a las líneas 118 y 119 (reemplace el que encuentra allí ahora)
Agregar objetivos
Para agregar objetivos, vaya a localhost / admin / y haga clic en agregar objetivos.
Debe agregar un nombre para el objetivo y el ID de objetivo único y enviar ID, agregue tantos objetivos como tenga.
Agregar juegos
También necesitas agregar algunos juegos. Vaya a localhost / admin / y haga clic en agregar juego
Debe agregar un nombre para el juego, una descripción, jugadores mínimos y máximos qué tipo de juego, también qué tan difícil es el juego entre 1 y 5. Y cómo es el juego, por lo que para el juego de fuego rápido agrega cuántos golpes (ejemplo 30) para la extracción rápida cuántas rondas (por ejemplo, 8) y por cuánto tiempo van a jugar (por ejemplo, 60 por un minuto)
Empieza el juego
Cuando enciendas el juego, hará las pruebas de destino. Por lo tanto, los objetivos deben estar activados antes de iniciar el sistema principal. Si todos pasan la prueba, puede usar el sistema, pero si no lo hacen, no puede usarlo. Intentará comunicarse hasta que obtengan respuesta.
¡Buena suerte
Bueno, eso es todo, para obtener soporte e información sobre la actualización en el código, siga mi página de Facebook para este juego, así puedo darle una respuesta rápida. Encontrará enlaces en la parte superior aquí.
Recomendado:
Juego de disparos ARDUINO + SCRATCH: 6 pasos
ARDUINO + SCRATCH Shooting Game: ¡Guarda tu pastel! Está en peligro. Hay cuatro moscas que se acercan a él. Solo tienes 30 segundos para disparar a las moscas y guardar tu pastel
Juego de disparos láser (Star Wars): 5 pasos
Juego de disparos láser (Star Wars): en este artículo compartiré el proyecto de star wars basado en arduino que puedes hacer con un presupuesto limitado. Este proyecto es un juego de disparos láser que se adaptará a ti como producto casero. Este proyecto consta de 2 subproyectos: hacer del blaster de cartón un
Controlador de juego Arduino Rhythm (para mi propio juego): 6 pasos
Controlador de juego de ritmo Arduino (para mi propio juego): en este instructivo le mostraré cómo construyo este controlador de juego de ritmo desde cero. Implica habilidades básicas de carpintería, habilidades básicas de impresión 3D y habilidades básicas de soldadura. Probablemente puedas construir este proyecto con éxito si no tienes ex
Arduino para Nerf: cronógrafo y contador de disparos: 28 pasos (con imágenes)
Arduino para Nerf: cronógrafo y contador de disparos: mi Instructable anterior cubría los conceptos básicos de la detección de la velocidad de los dardos utilizando un emisor y un detector de infrarrojos. Este proyecto va un paso más allá, utilizando una placa de circuito impreso, pantalla y baterías para hacer un contador de munición portátil y un cronógrafo
Disparos sencillos con microcámara: 5 pasos (con imágenes)
Disparos fáciles con microcámara: Disparos fáciles con microcámara (o al menos cómo las hago yo) Hola, ¡es tu vieja bolsa de viento Osgeld aquí difundiendo una manera fácil de hacer micro disparos! Comencé esto la semana antes de mudarme, encontré instructivos en este apartamento , y parecía apropiado hacer o