Índice:

Jogo de tiro Arduino V3: 4 etapas
Jogo de tiro Arduino V3: 4 etapas

Vídeo: Jogo de tiro Arduino V3: 4 etapas

Vídeo: Jogo de tiro Arduino V3: 4 etapas
Vídeo: Criando jogo de Nave em Arduino #P1 - Curso de Arduino #34 2024, Julho
Anonim
Image
Image
Jogo de tiro Arduino V3
Jogo de tiro Arduino V3
Jogo de tiro Arduino V3
Jogo de tiro Arduino V3
Jogo de tiro Arduino V3
Jogo de tiro Arduino V3

Este jogo é para você que usa airsoft ou co2 para atirar em alvos. É um jogo.

Para informações atualizadas sobre o jogo e suporte:

www.facebook.com/arduinoshooting/

Para minha página de blog sobre o jogo:

shootinggameblog.wordpress.com

Para os códigos sobre o jogo:

github.com/shootinggame82/Shooting-game-v3

O jogo de tiro é x alvos sem fio, cada alvo tem um sensor de vibração que sente a vibração que recebe quando um acerto é feito. Os sensores wireless são um chip Atmega328 (chip Arduino Uno) e possuem bateria Li-Po recarregável.

O controlador principal deste jogo é controlado por um Arduino e é controlado serialmente a partir de um Raspberry Pi.

Então, como este jogo está funcionando? Bem, são três modos de jogo:

Quicktime: Jogue X rodadas e atire o mais rápido que puder em cada alvo.

Modo de tempo: atire em quantos alvos puder em X segundos.

Rapidfire: Atire X tiros no tempo mais rápido.

O sistema usa transmissores NRF24L01 para obter uma boa distância do controlador principal. Eles funcionam em 2,6 GHz (o mesmo que o WiFi funciona)

Em meus projetos anteriores, usei o Piezo para a vibração, mas agora o interruptor do sensor de vibração é usado. Mas você ainda pode usar o Piezo se tiver feito minha versão antiga deste jogo.

O jogo tem uma tela de toque do Raspberry Pi 7 que contém o sistema da web por meio do qual você controla o jogo. Uma impressora de terminal imprime os resultados.

Suprimentos

Para transmissores:

  • X Atmega328 com Arduino Bootloader (dependendo de quantos destinos)
  • Chave do sensor de vibração X
  • X Azul Led
  • X Led Verde
  • X Led Vermelho
  • Bateria Li-Po X 3,7v
  • Módulo carregador Li-Po X FC-75 (ou outro modelo)
  • Capacitor X 100 uF
  • Casos X para os sensores
  • X LD1117V33 (Torna 3,3 V seguro para o transmissor)
  • Módulos X NRF24L01
  • X x 3 resistores de 220 Ohm (3 são necessários para um alvo)
  • Cristal X 16 MHz
  • X x 2 Capacitores não plorizados 22 pF (2 são necessários para um alvo)

Para o Arduino principal:

  • 1 Arduino (Nano ou Uno é recomendado, precisa ter USB)
  • 1 Módulo NRF24L01
  • 1 capacitor 10 uF

Para framboesa Pi:

  • Raspberry Pi (usei 3B)
  • 7 "Touch Screen
  • ATXRaspi (opcional, mas um bom módulo do botão liga / desliga)
  • RTCRaspi (opcional, mas um bom módulo RTC para manter a hora e a data)
  • Impressora térmica (opcional, mas precisava ser capaz de imprimir)
  • Leitor de código de barras (versão USB que funciona como um teclado, opcional)
  • Boa alimentação de 5 V (usei um antigo USB de 12 V com alimentação de 2,5 A)

Outras coisas:

  • Potência 12v (tenho um a 12 Ah)
  • Soquete de rede (facilita a conexão à rede)
  • Cabos

Etapa 1: os sensores sem fio

Os Sensores Sem Fio
Os Sensores Sem Fio
Os Sensores Sem Fio
Os Sensores Sem Fio
Os Sensores Sem Fio
Os Sensores Sem Fio

Vamos começar a fazer os sensores. Eu uso 4 sensores para este jogo. Mas você pode adicionar mais sensores facilmente. Os sensores se comunicam com um código de 4 números quando o sistema principal envia o código com qual função o sensor com o código certo acenderá e estará pronto para o alvo. A luz azul é para informar que é esse alvo que você vai acertar.

Também temos um led verde e um led vermelho. O verde sempre acende para informar que o sensor está ligado. O vermelho só acenderá quando a bateria estiver abaixo de 3,1 V (ele usa a função embutida no chip para calcular quanto há na bateria.

O sensor de vibração é conectado ao pino analógico e lê seu valor. Quando o valor está afundando, o sensor captou uma vibração e é aí que registramos o acerto.

O alvo possui uma função à prova de falhas, que caso você não acerte em X segundos (o padrão é 15 segundos) ou se a transmissão não puder ser feita eles voltarão à posição inicial.

Não vou explicar como você vai fazer a fiação, verifique a ficha elétrica para ver como você vai fazer isso. A única coisa que não está nela é a bateria, o botão liga / desliga e o carregador. Cabe a você decidir como deseja.

IMPORTAÇÃO SOBRE O Módulo NRF24L +:

Pode ser difícil … mantê-los estáveis, combinado com boa potência e isolamento ao redor, e o código que você fará com que funcionem. Para mim, um capacitor de 10 uF me dará uma conexão estável e boa, mas tente primeiro caso você precise, por exemplo, de um capacitor de 100 uF. Também embrulhe-os primeiro com folha de plástico e depois com folha de alumínio para protegê-los de interferências

Também no código, a taxa de dados que você não precisa mais do que 250 Kb, então esse não será o problema. Mas o PA: myRadio.setPALevel (RF24_PA_MIN);

No código que defini como MIN (isso é durante o teste), é o mais baixo e não usará tanta energia, mas o alcance não será tão longo. Se você os tiver estável e com boa potência, pode ir até RF24_PA_MAX para obter o maior alcance, MAS eles precisam de GOOOOOD potência estável para isso. Tente também LOW E HIGH (alterar apenas o texto MAX) para ver se você consegue uma boa comunicação. Além disso, você terá um bom alcance em BAIXO e ALTO, a menos que seja um atirador de elite

Além disso, mantenha os transmissores a pelo menos um metro de distância, pois fechar pode tornar o sinal ruim

Teste a comunicação com algum exemplo de ping na biblioteca NRF24 (link no GitHub)

No código, você precisa definir o número de identificação exclusivo para esse alvo:

int targID = 3401; // Este é o ID de destino

int sendID = 2401; // Este é o ID da resposta

Existem também 3 funções DEFINE:

#define DEBUG

#define BATERIA

#define SHAKE // SE SHAKE SWITCH FOR USADO EM VEZ DO ANTIGO PIEZO

DEPURAR:

Durante o teste, é bom ter definido isso. Mas quando você estiver disponibilizando-os, não os tenha ativado.

BATERIA:

Se você não quiser ter um verificador de bateria para os alvos, você precisa remover esta definição.

SACUDIR:

Se você construiu minha versão antiga, tem sensores piezoelétricos, remova-os para obter o código correto para eles.

Chip ATMEGA328

Em vez de um Arduino nano, decidi usar o chip ATMEGA328 (com carregador de boot Uno), eles são simples de programar, basta remover o chip de um Arduino Uno e adicionar esse chip e fazer o upload do código. Verifique o esquema elétrico sobre como construir os alvos.

O código

Eu escrevi o código com PlatformIO em vez de Arduino IDE. É um software melhor para programar. Portanto, o código é um pouco diferente. Eu recomendo usar este software ao invés.

O alvo e a caixa do transmissor

Fixei o sensor e o led azul no alvo e com um cabo fono de 3,5 mm em 2 m eu os conecto na caixa do transmissor que contém o chip atmega, o carregador de bateria e o led verde e vermelho. Isso é feito para protegê-lo de ser atingido por balas de aço.

Etapa 2: o controlador do jogo

O controlador de jogo
O controlador de jogo
O controlador de jogo
O controlador de jogo
O controlador de jogo
O controlador de jogo
O controlador de jogo
O controlador de jogo

A próxima coisa que precisamos fazer é criar o controlador para os sensores. É um Arduino que usa um módulo NRF24L01 para se comunicar com os sensores. Nada mais. O Arduino é então conectado com USB no raspberry pi para funcionar.

É assim que vai funcionar. Ele usa serial para saber o que fazer. O pi enviará comandos seriais. Primeiro, durante a configuração, ele envia quantos alvos você adicionou e os números de identificação dos alvos. Em seguida, ele fará a função de teste e informará ao framboesa pi se eles se comunicam.

Quando você joga o jogo, ele enviará de pi que tipo de jogo e quantas rodadas / acertos usar. É isso.

É possível usar os módulos NRF24L01 no raspberry pi, mas para mim o Arduino é a melhor opção, mas nunca os uso no raspberry então não sei o quão bons eles funcionam a longo prazo

Há um módulo de energia que usa 5 V para tornar a energia estável correta para os transmissores. Você pode usá-los com seu Arduino (veja a imagem), o nome é Socket Adapter Module Board

Quando você joga, os alvos serão ativados aleatoriamente um por um. Quando um é atingido, outro será ativado.

Durante o teste, você pode ativar o #DEFINE DEBUG para ver como funciona, mas não quando o usar no computador pi, ele não funcionará.

Baixe o código na página GitHub.

Etapa 3: Raspberry Pi

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

Chegamos agora ao Raspberry Pi.

Eu adicionei algumas funções extras para que eu possa ter um botão liga / desliga. O ATXRaspi 3 é um ótimo módulo, você pode ligar, desligar e reiniciar o pi com um botão. Também um RTCRaspi para manter a hora e a data no pi. Também tornou possível apenas conectar um cabo de rede no caso de eu precisar fazer algumas atualizações no sistema. Você os encontrará no Lowpowerlab

A impressora térmica você encontra no sparkfun e o leitor de código de barras está disponível na amazon.

O computador Pi é executado em modo quiosque, de modo que o navegador será aberto na inicialização. Primeiramente, você precisa ter um servidor web com PHP 7 e mysql no computador pi. (Existem muitos guias na web para isso)

ATENÇÃO: se você for usar uma impressora térmica com raspberry pi que tem bluetooth embutido, você precisa desabilitá-la primeiro

O script python precisa do pyserial e você o instala: sudo apt-get install python-serial

Para fazer o mysql funcionar, instale o seguinte:

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

suso apt-get install pymysql

Agora você pode controlar seu Arduino através de serial e também atualizar o banco de dados mysql.

O próximo passo é fazer o script python se conectar ao mysql.

Em todos os três scripts python, altere a conexão com seu banco de dados mysql.

A próxima etapa é fazer com que o script python seja executado no início.

Existem três python script.game.py é o mais importante de todos, aquele contém o jogo function.print.py isso só é necessário se você for usar uma impressora térmica para print.ean.py só é necessário se você for vai usar o leitor de código de barras.

Para fazê-los iniciar automaticamente, eu edito:

sudo nano /etc/rc.local

e adicione o seguinte na parte inferior antes da saída 0:

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

Por favor, mude para o local correto para o seu script python e não se esqueça do sinal & no final

Agora precisamos fazer um modo quiosque para o navegador da web, primeiro remova o cursor:

sudo apt-get install unclutter

sudo nano / etc / xdg / lxsession / LXDE-pi / autostart

agora nesse arquivo encontre e comente:

@xscreensaver -no-splash # comente esta linha para desativar o protetor de tela

Abaixo disso, adicione:

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

O próximo passo para remover todos os textos de inicialização e outras coisas também adicionar sua própria tela de inicialização aqui é um guia rápido:

sudo nano /boot/config.txt e na parte inferior adddisable_splash = 1

Remova a mensagem de texto da imagem inicial:

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

Encontre e remova (ou comente):

message_sprite = Sprite (); message_sprite. SetPosition (screen_width * 0.1, screen_height * 0.9, 10000);

e:

my_image = Image. Text (text, 1, 1, 1); message_sprite. SetImage (my_image);

Agora removemos as mensagens de inicialização:

sudo nano /boot/cmdline.txt

substitua “console = tty1” por “console = tty3”

e no final da linha adicione:

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

E substitua o respingo de pi pelo seu próprio:

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

Agora você tem sua própria tela de inicialização personalizada para o seu jogo. Seu computador pi agora está pronto para lidar com o jogo. Vá para a próxima etapa!

Etapa 4: configure o jogo

Neste ponto, você já criou o jogo.

Primeiro você precisa fazer é configurar o webbsystem. Faça upload do banco de dados para o seu servidor mysql. O arquivo está na pasta includes e é denominado database.sql

O próximo passo é editar o arquivo de configuração, você o encontra na pasta inclui o nome config.php. Altere as informações de login do banco de dados para que o script funcione.

O sistema da web é baseado em vários idiomas e é escrito em inglês. Há uma tradução sueca disponível. Para disponibilizar mais idiomas, você precisa de um software chamado Poedit.

Para adicionar mais linguagem ao sistema da web, você precisa editar i18n_setup.php e adicionar o array:

return in_array ($ locale, ['en_US', 'sv_SE']); (Linha 23)

Além disso, para alterar o idioma padrão, você precisa alterar na linha 27: $ lang = 'en_US'; mude o en_US para o seu idioma.

os arquivos de idioma devem ser colocados em locales / LANGCODE / LC_MESSAGES / e ser nomeados main.mo (alterar o código de idioma para o seu idioma)

para mudar o teclado no arquivo selectplayers.php você muda o idioma: "en", // en para inglês sv para layout sueco: 'qwerty', // qwerty para inglês swedish-qwerty para sueco

Você os encontra nas linhas 218 e 219

Os idiomas disponíveis estão na pasta: assets / js / keyboard / languages & layouts estão em assets / js / keyboard / layouts e adicione os arquivos corretos às linhas 118 e 119 (substitua o que você encontra lá agora)

Adicionar alvos

Para adicionar alvos, vá para localhost / admin / e clique em adicionar alvos.

Você precisa adicionar um nome para o alvo e o ID de alvo exclusivo e enviar ID, adicionar quantos alvos você tiver.

Adicionar jogos

Você também precisa adicionar alguns jogos. Vá para localhost / admin / e clique em adicionar jogo

Você precisa adicionar um nome para o jogo, uma descrição, jogadores mínimos e máximos que tipo de jogo, e também quão difícil o jogo é entre 1 a 5. E como o jogo é, então para o jogo rapidfire você adiciona quantos acertos (exemplo 30) para o sorteio rápido quantas rodadas (por exemplo 8) e por quanto tempo eles vão jogar (por exemplo 60 por um minuto)

Comece o jogo

Quando você ligar o jogo, ele fará o teste de destino. Portanto, os alvos precisam estar ativados antes de iniciar o sistema principal. Se tudo passar no teste, você pode usar o sistema, mas se não passar, você não pode usá-lo. Ele tentará se comunicar até obter uma resposta.

Boa sorte

Bem, é sobre isso, para suporte e informações sobre atualização no código, siga minha página no Facebook para este jogo, para que eu possa responder rapidamente. Você encontrará links no topo aqui.

Recomendado: