Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Capture The Box é um jogo de construção de equipes que você pode jogar com amigos na sua vizinhança.
O objetivo é capturar a caixa e mantê-la em sua posse pelo maior tempo possível, enquanto outros jogadores tentam ir e roubá-la de sua varanda ou jardim da frente.
Este jogo usa GPS para localizar a caixa e etiquetas RFID para identificar os jogadores. Um LDR opcional pode ser adicionado para combinar a intensidade da exibição da matriz de pontos com a porcentagem de luz na área.
Suprimentos
Microcontroladores e computadores
- Raspberry Pi
- Arduino (Mega) Escolhi um Arduino Mega em vez de um Uno normal, porque ele tem muito mais pinos. Isso é necessário porque estamos usando um escudo Dragino LoRa, o que nos deixaria com poucos pinos digitais ao usar um UNO. DICA: É melhor usar um original, porque os clones chineses nem sempre funcionam como esperado.
Sensores e módulos
- 4 Módulos de matriz de pontos MAX7219 Conecte DOUT a DIN, CS a CS, CLK a CLK…
- Resistor dependente de luz (10K) + resistor (10K)
- Módulo GPS NEO-7M (ou similar); estou usando o VMA430 da Velleman
- Módulo RC522 RFID + alguns emblemas / cartões RFID
Para usar LoRa (tecnologia sem fio)
Escudo Dragino Lora
Sensores e módulos opcionais
Um display LCD para exibir o endereço IP do Raspberry Pi
Para fazer uma configuração de teste
Uma placa de ensaio e cabos Dupont (macho-macho
Opcional (caixa)
- Ferro de solda
- Um velho estojo de ferramentas
- Materiais para impressão 3D
- Algumas tábuas de madeira finas
- Alguns parafusos e porcas (que podem caber em orifícios do Arduino). Meus parafusos têm um diâmetro de cerca de 3 mm.
Um preço estimado pode ser encontrado no BOM (Bill of Materials), incluído abaixo.
Etapa 1: Configurando o Raspberry Pi
O Raspberry Pi é o coração do Projeto.
Ele executará o front-end, o back-end e o banco de dados. Ele também será responsável pela comunicação entre o back-end e o Arduino.
Para usarmos o Raspberry Pi, precisamos fazer o seguinte:
Parte 1: Instale o Raspbian em um Raspberry Pi
Um tutorial sobre como fazer isso pode ser encontrado aqui:
Parte 2: Instale o Raspbian em um Raspberry PiConfigurando seu WiFi doméstico.
Isso pode ser feito usando wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf
Reinicie o Pi e você verá um endereço IP ao digitar ifconfig
Parte 3: Instale o servidor da web e o banco de dados
Depois de ter seu Pi instalado e funcionando, é melhor alterar sua senha. Isso pode ser feito com o comando passwd.
Feito isso, vá em frente e instale o Apache, PHP, MariaDB e PHPMyAdmin.
Apache, PHP sudo apt install apache2 -y sudo apt install php libapache2-mod-php -y
MariaDB sudo apt install mariadb-server mariadb-client -y sudo apt install php-mysql -y sudo systemctl restart apache2.service
PHPMyAdminsudo apt install phpmyadmin -y
Não se esqueça de definir uma senha segura do MySQL.
Parte 4: instalando as bibliotecas Python necessárias
Para o back-end, vamos precisar de algumas bibliotecas. Eles podem ser instalados usando o comando pip3.
pip3 instalar mysql-connector-python
pip3 instalar flask-socketio
pip3 instalar flask-cors
pip3 install geventpip3 install gevent-websocket
pip3 install ttn
Etapa 2: Layout da eletrônica
Para fazer este projeto funcionar, precisamos conectar todos os componentes eletrônicos.
O escudo LoRa pode ser facilmente colocado no lugar. Basta alinhar os pinos com os pinos em seu Arduino.
As outras conexões são descritas em meu esquema de Fritzing. Que pode ser baixado aqui:
Etapa 3: Projetando o banco de dados
Para poder armazenar todos os dados do jogo e dos sensores, fiz algumas tabelas:
medição e sensor As medições dos sensores, encontradas nas tabelas do sensor. Contém uma referência ao sensor, o valor da medição (por exemplo, coordenadas: 51.123456; 3.123456) e um id de jogo opcional (se um jogo estava ativo durante a medição).
spelerOs nomes dos jogadores e o UID de seu crachá RFID. Um moderador de campo opcional é adicionado, esta pessoa pode modificar o jogo (por exemplo, interrompê-lo antes do tempo).
spelThe informações do jogo (horário de início e término).
spel_has_spelerA relação entre spel e speler. É aqui que os jogadores são atribuídos a um jogo.
bezitNesta tabela, a pontuação é salva. Ele contém o id do jogo, o id do jogador, a hora em que ele roubou a caixa e a hora em que a perdeu (quando outra pessoa a rouba ou quando o jogo termina). Subtraindo a hora de início da hora de término, você pode calcular a pontuação que ele obteve dessa captura.
Uma exportação do banco de dados pode ser encontrada em meu GitHub (https://github.com/BoussonKarel/CaptureTheBox)
Abra o sql no PHPMyAdmin / MySQL Workbench e execute-o. O banco de dados agora deve ser importado.
Etapa 4: Configurando uma conta no TTN
Etapa 1: Cadastre-se em uma conta no TTN e crie um aplicativo
Inscreva-se em uma conta no TheThingsNetwork e vá para Console> Adicionar aplicativo.
Escolha um nome para seu aplicativo e clique em Adicionar aplicativo.
Etapa 2: registrar um dispositivo
Depois de fazer sua inscrição, vá para Registrar dispositivo.
Escolha um ID de dispositivo, pode ser o que você quiser (desde que seja um estojo de cobra) e clique em Registrar.
Clique no ícone Gerar em EUI do dispositivo, então TTN irá gerar um para você.
Etapa 3: anotando suas credenciais
Agora vá para o seu dispositivo e clique no ícone de código ao lado de dispositivo EUI, App EUI e chave de aplicativo. Agora ele deve aparecer como uma matriz de bytes.
Antes de copiar, clique no botão Alternar e certifique-se de que seu Dev EUI e App EUI são LSB PRIMEIRO.
Sua chave de aplicativo deve permanecer MSB PRIMEIRO (não mude isso).
Você precisará dessas chaves na próxima etapa: Configurando o Arduino.
Etapa 4: anotando a chave de acesso do aplicativo
Agora precisaremos de mais uma chave para configurar o MQTT em nosso Raspberry Pi.
Vá para o seu aplicativo e role para baixo até Chaves de acesso.
Você precisará disso na etapa de back-end.
Etapa 5: Configurando o Arduino
O código do Arduino também pode ser encontrado no meu GitHub, em Arduino (https://github.com/BoussonKarel/CaptureTheBox)
Este código é dividido em várias guias, para mantê-lo organizado.
main.ino O código principal: declarações de pin, setup () e loop ()
0_LoRa.inoEste código lida com a comunicação usando LoRa.
Ele coloca os dados das tags LDR, GPS e RFID em um array de 13 bytes e os envia para TheThingsNetwork.
1_LDR.inoUsing analogRead (), ele mede a quantidade de voltagem sobre o resistor dependente de luz.
Isso é então convertido em uma porcentagem de luz (0 sendo nada, 100 sendo uma lanterna de celular).
2_GPS.inoThis usa comunicação serial usando TX1 e RX1 (Serial1).
Ele usa mensagens NMEA (as mensagens $ GPRMC para ser mais preciso) para encontrar a latitude e a longitude da caixa.
3_RFID.inoUsando a biblioteca MFRC522, este código faz a varredura para novas tags RFID. Sempre que uma estiver presente, ele é armazenado como RFID_lastUID.
4_DotMatrix.ino Este código é usado para inicializar e definir a exibição da matriz de pontos. Ele contém definições para a animação de carregamento etc …
Configurando
Antes de fazer upload deste código para o Arduino, você precisará instalar algumas bibliotecas.
A biblioteca Arduino-LMIC de matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)
A biblioteca MFRC522 para o leitor RFID (https://github.com/miguelbalboa/rfid)
Agora, vá para main.ino e mude o DEVEUI, APPEUI e APPKEY para os que você copiou na última etapa.
Etapa 6: Configurando o back-end
O back-end para este projeto pode ser encontrado no meu GitHub, em RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).
Como funciona?
- A cada 10 segundos, o código procura por um jogo ativo. Se algum for encontrado, ele é salvo em uma variável chamada huidigSpel (currentGame)
- Se o modo for definido como Serial, um cabo será usado entre o Arduino e o Pi. O Pi pesquisa os valores do LDR e do GPS. O Arduino responde com um formato JSON. As tags RFID são enviadas sempre que são apresentadas. Este modo foi usado exclusivamente para fins de desenvolvimento e não é mais necessário.
- Se o modo for configurado para LoRa, um cliente MQTT é criado que aciona um retorno de chamada sempre que os dados LoRa são recebidos por TTN. Contém dados LDR, GPS e RFID.
- O front-end pode recuperar dados usando os endpoints da API. A maioria dos dados é recuperada usando huidigSpel.id. Data é retornada no formato JSON usando jsonify ()
Modifique as configurações. Vá para secrets.py e preencha o nome de seu aplicativo LoRa e sua chave de acesso (você anotou anteriormente).
Vá para config.py e preencha suas credenciais de banco de dados (como senha, usuário …)
Configurando-o como um serviçoTente executar app.py; depois de confirmar que está funcionando, podemos usá-lo como um serviço. Isso iniciará automaticamente o código em segundo plano quando você inicializar seu pi.
Para fazer isso, copie ctb_service.service para /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service
Agora habilite-o usando systemctl enable ctb_service.service
Se você precisar fazer algumas alterações no código, pode facilmente interrompê-lo usando systemctl stop (ele será reiniciado na reinicialização) ou disable is (interromper a inicialização automática) usando systemctl disable.
Se precisar consultar os logs (devido a erros), você pode usar journalctl -u ctb_service.service.
Mais informações sobre os serviços podem ser encontradas aqui:
Etapa 7: Configurando o front-end
Como de costume, o frontend pode ser encontrado no meu GitHub, em RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)
Cole na pasta / var / html do seu Raspberry Pi.
Ele contém todas as páginas da web necessárias para o jogo.
Ele também contém um script para se comunicar com o back-end (tanto em tempo real quanto usando os endpoints da API).
Etapa 8: Adicionando um revestimento
Para o caso, usei um estojo de ferramentas antigo, juntamente com os seguintes materiais / técnicas:
- impressao 3D
- Espuma para manter a bateria no lugar
- Tábuas de madeira recicladas
- Cola quente
- Parafusos e porcas
O que você faz com o seu caso é sua escolha! Vou te dar liberdade artística.
Para me inspirar, adicionei algumas fotos do meu caso (acabado).