Inhoudsopgave:

Arduino-schietspel V3 - Ajarnpa
Arduino-schietspel V3 - Ajarnpa

Video: Arduino-schietspel V3 - Ajarnpa

Video: Arduino-schietspel V3 - Ajarnpa
Video: Space Shooting game - Using Arduino 2024, Juli-
Anonim
Image
Image
Arduino-schietspel V3
Arduino-schietspel V3
Arduino-schietspel V3
Arduino-schietspel V3
Arduino-schietspel V3
Arduino-schietspel V3

Deze game is voor jou die airsoft of co2 gebruikt om op doelen te schieten. Het is een spel.

Voor actuele informatie over het spel en ondersteuning:

www.facebook.com/arduinoshooting/

Voor mijn blogpagina over het spel:

shootinggameblog.wordpress.com

Voor de codes over het spel:

github.com/shootinggame82/Shooting-game-v3

Schietspel is x doelen die draadloos zijn, elk doelwit heeft een trillingssensor die trillingen waarneemt die worden veroorzaakt wanneer er een slag wordt gemaakt. De draadloze sensoren zijn een Atmega328-chip (Arduino Uno-chip) en hebben een oplaadbare Li-Po-batterij.

De hoofdcontroller voor dit spel wordt bestuurd door een Arduino en wordt serieel bestuurd vanaf een Raspberry Pi.

Dus hoe werkt dit spel? Nou, het zijn 3 spelmodi:

Quicktime: Speel X-rondes en schiet zo snel als je kunt op elk doelwit.

Tijdmodus: schiet zoveel mogelijk doelen op X seconden.

Rapidfire: schiet X-schoten op de snelste tijd.

Het systeem maakt gebruik van NRF24L01-zenders om een goede afstand van de hoofdcontroller te krijgen. Ze werken op 2,6 GHz (hetzelfde als waar wifi op draait)

In mijn eerdere projecten heb ik Piezo gebruikt voor de trillingen, maar nu wordt de Vibration Sensor Switch gebruikt. Maar je kunt Piezo nog steeds gebruiken als je mijn oude versie van dit spel hebt gemaakt.

De game heeft een Raspberry Pi 7 -touchscreen dat het websysteem bevat waarmee je de game bestuurt. Een terminalprinter drukt de resultaten af.

Benodigdheden

Voor zenders:

  • X Atmega328 met Arduino Bootloader (afhankelijk van hoeveel doelen)
  • X Trillingssensorschakelaar
  • X blauwe led
  • X Groene Led
  • X Rode Led
  • X 3.7v Li-Po-batterij
  • X FC-75 Li-Po-opladermodule (of een ander model)
  • X 100 uF Condensator
  • X Koffers voor de sensoren
  • X LD1117V33 (Maakt een veilige 3,3 V naar zender)
  • X NRF24L01-modules
  • X x 3 220 Ohm Weerstanden (3 is nodig voor één doel)
  • X 16 MHz kristal
  • X x 2 ongeploriseerde condensatoren 22 pF (2 is nodig voor één doel)

Voor de belangrijkste Arduino:

  • 1 Arduino (Nano of Uno wordt aanbevolen, moet USB hebben)
  • 1 NRF24L01-module
  • 1 10 uF condensator

Voor Raspberry Pi:

  • Raspberry Pi (ik gebruikte 3B)
  • 7" touchscreen
  • ATXRaspi (optioneel maar een goede aan / uit-knopmodule)
  • RTCraspi (optioneel maar een goede RTC-module om tijd en datum bij te houden)
  • Termal printer (optioneel maar nodig om te kunnen printen)
  • Barcodescanner (USB-versie die werkt als een toetsenbord, optioneel)
  • Goede 5V-stroom (ik gebruikte een oude 12v USB met 2,5 A-stroom)

Andere dingen:

  • 12v stroom (ik heb er een van 12 Ah)
  • Netwerkaansluiting (Maak het gemakkelijk om verbinding te maken met het netwerk)
  • Kabels

Stap 1: De draadloze sensoren

De draadloze sensoren
De draadloze sensoren
De draadloze sensoren
De draadloze sensoren
De draadloze sensoren
De draadloze sensoren

Laten we beginnen met het maken van de sensoren. Ik gebruik 4 sensoren voor dit spel. Maar u kunt eenvoudig meer sensoren toevoegen. De sensoren communiceren met een 4-cijferige code wanneer het hoofdsysteem de code verzendt met welke functie de sensor met de juiste code oplicht en klaar is voor het doelwit. Het blauwe licht geeft aan dat het dat doel is dat je gaat raken.

We hebben ook een groene en een rode led. Het groen licht altijd op om aan te geven dat de sensor is ingeschakeld. Het rood gaat alleen branden als de batterij minder dan 3,1 V is (hij gebruikt de ingebouwde functie in de chip om te berekenen hoeveel er nog in de batterij zit.

De trillingssensor is verbonden met de analoge pin en leest de waarde ervan. Als de waarde daalt, heeft de sensor een trilling waar en daar registreren we de treffer.

Het doelwit heeft een failsafe-functie, die in het geval dat je niet binnen X seconden raakt (standaard is 15 sec) of als het zenden niet kan worden gedaan, ze teruggaan naar de startpositie.

Ik ga niet uitleggen hoe je gaat bekabelen, kijk op de elektriciteitsplaat hoe je dat gaat doen. Het enige dat er niet op staat, is de accu, aan/uit-schakelaar en de oplader. Dat is aan jou om te beslissen hoe je het wilt.

BELANGRIJK OVER DE NRF24L+-module:

Het kan pijn doen in de … om ze stabiel te krijgen, gecombineerd met goede kracht en isolatie eromheen, en de code waarmee je ze aan het werk krijgt. Voor mij zal een condensator van 10 uF me een stabiele en goede verbinding geven, maar probeer het eerst als je bijvoorbeeld een condensator van 100 uF nodig hebt. Wikkel ze ook eerst in plastic folie en daarna aluminiumfolie om ze te beschermen tegen interferentie

Ook in de code staat de datasnelheid die je niet meer nodig hebt dan 250 Kb dus dat zal het probleem niet zijn. Maar de PA: myRadio.setPALevel(RF24_PA_MIN);

In de code die ik heb ingesteld op MIN (dit is tijdens de test), is dit de laagste en zal niet zoveel stroom verbruiken, maar het bereik zal niet zo lang zijn. Als je stabiel en goed vermogen hebt, kun je tot RF24_PA_MAX gaan om het langste bereik te krijgen, MAAR daar hebben ze GOOOOOD stabiel vermogen voor nodig. Probeer ook LAAG EN HOOG (alleen MAX-tekst wijzigen) om te zien of u goede communicatie krijgt. Je krijgt ook een goed bereik op LAAG en HOOG, tenzij je een sluipschutter gaat worden

Houd de zenders ook minimaal een meter uit elkaar, te dicht kan het signaal slecht maken

Test de communicatie met een ping-voorbeeld in de NRF24-bibliotheek (link op GitHub)

In de code moet u het unieke identificatienummer voor dat doel instellen:

int targID = 3401; //Dit is de doel-ID

int verzend-ID = 2401; //Dit is de antwoord-ID

Er zijn ook 3 DEFINE-functies:

#define DEBUG

#define BATTERIJ

#define SHAKE //IF SHAKE SWITCH WORDT GEBRUIKT IN PLAATS VAN DE OUDE PIEZO

DEBUG:

Tijdens de test is dit goed te definiëren. Maar als u ze beschikbaar maakt, moet u deze niet activeren.

ACCU:

Als u geen batterijcontrole voor de doelen wilt hebben, moet u deze definitie verwijderen.

SCHUDDEN:

Als je mijn oude versie hebt gebouwd, heb je piëzo-sensoren, verwijder deze dan om de juiste code voor hen te krijgen.

ATMEGA328-chip

In plaats van een Arduino nano heb ik besloten om de ATMEGA328-chip te gebruiken (met Uno-bootloader), ze zijn eenvoudig te programmeren, verwijder gewoon de chip van een Arduino Uno en voeg deze chip toe en upload code. Bekijk het elektrische schema voor het bouwen van de doelen.

De code

Ik heb de code geschreven met PlatformIO in plaats van Arduino IDE. Het is een betere software om in te programmeren. Dus de code is een beetje anders. Ik raad aan om in plaats daarvan deze software te gebruiken.

De doel- en zenderbox

Ik heb de sensor en de blauwe led op het doel bevestigd, en met een 3,5 mm phono-kabel op 2 m verbind ik deze met elkaar in de zenderdoos die de atmega-chip, batterijlader en de groene en rode led bevat. Dit is zo om het te beschermen tegen geraakt worden met stalen kogels.

Stap 2: De gamecontroller

De gamecontroller
De gamecontroller
De gamecontroller
De gamecontroller
De gamecontroller
De gamecontroller
De gamecontroller
De gamecontroller

Het volgende dat we moeten doen, is de controller voor de sensoren maken. Het is een Arduino die een NRF24L01-module gebruikt om met de sensoren te communiceren. Niks anders. De Arduino wordt vervolgens via USB in de Raspberry Pi aangesloten om te werken.

Dit is hoe het zal werken. Het gebruikt seriële om te weten wat te doen. De pi zal seriële commando's sturen. Tijdens het instellen wordt eerst verzonden hoeveel doelen u hebt toegevoegd en de identificatienummers van de doelen. Dan zal het de testfunctie uitvoeren en de Raspberry Pi informeren als ze met elkaar communiceren.

Wanneer je het spel speelt, stuurt het van pi welk type spel en hoeveel rondes/hits je moet gebruiken. Dat is het.

Het is mogelijk om de NRF24L01-modules in de Raspberry Pi te gebruiken, maar voor mij is de Arduino een betere optie, want ik gebruik ze nooit in Raspberry, dus ik weet niet hoe goed ze op de lange termijn werken

Er is een voedingsmodule die 5 v gebruikt om de zenders de juiste stabiele stroom te geven. Je kunt ze gebruiken met je Arduino (zie de afbeelding) de naam is Socket Adapter Module Board

Wanneer je speelt, worden de doelen willekeurig één voor één geactiveerd. Wanneer er een wordt geraakt, wordt een andere geactiveerd.

Tijdens de test kun je #DEFINE DEBUG geactiveerd hebben om te zien hoe het werkt, maar niet als je het in de pi-computer gebruikt, dan werkt het niet.

Download de code op de GitHub-pagina.

Stap 3: Raspberry Pi

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

We zijn nu bij de Raspberry Pi gekomen.

Ik heb wat extra functies toegevoegd, zodat ik een aan / uit-knop kan hebben. De ATXRaspi 3 is een geweldige module, je kunt de pi met een knop in-, uitschakelen en opnieuw opstarten. Ook een RTCraspi om de tijd en datum op de pi te houden. Maakte het ook mogelijk om gewoon een netwerkkabel aan te sluiten voor het geval ik wat updates op het systeem moet doen. Je vindt ze op Lowpowerlab

De thermische printer vind je op sparkfun en de barcodelezer is beschikbaar op amazon.

De Pi-computer draait in de kioskmodus, dus de browser wordt bij het opstarten geopend. Allereerst moet u een webserver met PHP 7 en mysql op de pi-computer hebben. (Hiervoor zijn veel handleidingen op internet te vinden)

LET OP: als je een thermische printer met raspberry pi met ingebouwde bluetooth gaat gebruiken, moet je die eerst uitschakelen

Het python-script heeft pyserial nodig en u installeert het: sudo apt-get install python-serial

Om de mysql te laten werken, installeer je het volgende:

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

suso apt-get install pymysql

Nu kunt u uw Arduino via serieel besturen en ook de mysql-database bijwerken.

De volgende stap is om een python-script te maken om verbinding te maken met mysql.

Wijzig in alle drie de python-scripts de verbinding met uw mysql-database.

De volgende stap is om het python-script bij het starten te laten draaien.

Er zijn drie python script.game.py is het belangrijkste van allemaal, die de game bevat function.print.py dit is alleen nodig als je een termal printer gaat gebruiken om te printen.ean.py is alleen nodig als je dat ook bent de barcodescanner gaan gebruiken.

Om ze automatisch te laten starten, bewerk ik:

sudo nano /etc/rc.local

en voeg het volgende toe onderaan voor exit 0:

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

Verander a.u.b. naar de juiste plaats voor uw python-script en vergeet het &-teken aan het einde niet

Nu moeten we een kioskmodus maken voor de webbrowser, verwijder eerst de cursor:

sudo apt-get install opruimen

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

zoek nu in dat bestand en becommentarieer:

@xscreensaver -no-splash # becommentarieer deze regel om de screensaver uit te schakelen

Daaronder voeg je toe:

@xset s uit @xset -dpms @xset s noblank @chromium-browser --noerrdialogs --force-device-scale-factor=1.25 --kiosk

De volgende stap om alle opstartteksten en zo te verwijderen, voeg ook je eigen opstartscherm toe, hier is een korte handleiding:

sudo nano /boot/config.txt en onderaan adddisable_splash=1

Tekstbericht onder splash-afbeelding verwijderen:

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

Zoek en verwijder (of reageer uit):

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

en:

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

Nu verwijderen we opstartberichten:

sudo nano /boot/cmdline.txt

vervang “console=tty1” door “console=tty3”

en voeg aan het einde van de regel toe:

plons rustig plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default=0

En vervang de pi-splash door die van jezelf:

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

Nu heb je je eigen aangepaste opstartscherm voor je spel. Je pi-computer is nu klaar om het spel aan te kunnen. Dus over naar de volgende stap!

Stap 4: Stel het spel in

Op dit punt heb je nu het spel gemaakt.

Eerst moet u het webbsysteem instellen. Upload de database naar uw mysql-server. Het bestand staat in de map include en heeft de naam database.sql

De volgende stap is om het configuratiebestand te bewerken, je vindt het in de naam van de include-map config.php. Wijzig de login-informatie van de database zodat het script werkt.

Het websysteem is gebaseerd op meerdere talen en is geschreven in het Engels. Er is een Zweedse vertaling beschikbaar. Om meer taal te maken heb je de software Poedit nodig.

Om meer taal aan het websysteem toe te voegen, moet je i18n_setup.php bewerken en de array toevoegen:

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

Om de standaardtaal te wijzigen, moet u ook in regel 27 wijzigen: $lang = 'en_US'; verander de en_US in jouw taal.

de taalbestanden moeten worden geplaatst in locales/LANGCODE/LC_MESSAGES/ en de naam main.mo krijgen (Verander de taalcode in uw taal)

om het toetsenbord in bestand selectplayers.php te veranderen, verander je de taal: "en", //en voor engels sv voor zweeds layout: 'qwerty', //qwerty voor engels zweeds-qwerty voor zweeds

Je vindt ze op lijn 218 & 219

De beschikbare talen staan in de map: assets/js/keyboard/talen & layouts staan in assets/js/keyboard/layouts en voeg de juiste bestanden toe aan regel 118 en 119 (vervang degene die je daar nu vindt)

Doelen toevoegen

Om doelen toe te voegen ga je naar localhost/admin/ en klik je op doelen toevoegen.

U moet een naam toevoegen voor het doel en de unieke doel-ID en verzend-ID, voeg zoveel doelen toe als u hebt.

Spelletjes toevoegen

Je moet ook enkele games toevoegen. Ga naar localhost/admin/ en klik op game toevoegen

Je moet een naam voor het spel toevoegen, een beschrijving, min en max spelers wat voor soort spel, ook hoe moeilijk het spel is tussen 1 en 5. En hoe het spel is, dus voor het snelvuurspel voeg je toe hoeveel hits (voorbeeld 30) voor de quickdraw hoeveel rondes (bijvoorbeeld 8) en voor getimed hoe lang ze gaan spelen (bijvoorbeeld 60 voor een minuut)

Start het spel

Wanneer je het spel opstart, zal het de doeltesten doen. De doelen moeten dus ingeschakeld zijn voordat u het hoofdsysteem start. Als ze allemaal door de test komen, kun je het systeem gebruiken, maar als ze dat niet doen, kun je het niet gebruiken. Het zal proberen te communiceren totdat ze antwoord hebben gekregen.

Veel geluk

Nou dat was het zo'n beetje, voor ondersteuning en info over update in de code volg je mijn Facebook-pagina voor dit spel, zodat ik je snel een antwoord kan geven. Links bovenaan vind je hier.

Aanbevolen: