Inhaltsverzeichnis:

Arduino Shooting Game V3 - Gunook
Arduino Shooting Game V3 - Gunook

Video: Arduino Shooting Game V3 - Gunook

Video: Arduino Shooting Game V3 - Gunook
Video: DIY Arduino Laser pointer Shooting Game 2024, Juli
Anonim
Image
Image
Arduino-Schießspiel V3
Arduino-Schießspiel V3
Arduino-Schießspiel V3
Arduino-Schießspiel V3
Arduino-Schießspiel V3
Arduino-Schießspiel V3

Dieses Spiel ist für Sie, die Airsoft oder Co2 verwenden, um auf Ziele zu schießen. Es ist ein Spiel.

Für aktuelle Infos zum Spiel und Support:

www.facebook.com/arduinoshooting/

Für meine Blogseite zum Spiel:

shootinggameblog.wordpress.com

Für die Codes zum Spiel:

github.com/shootinggame82/Shooting-game-v3

Das Schießspiel besteht aus x Zielen, die drahtlos sind. Jedes Ziel hat einen Vibrationssensor, der Vibrationen erkennt, die bei einem Treffer auftreten. Die drahtlosen Sensoren sind ein Atmega328-Chip (Arduino Uno-Chip) und verfügen über einen aufladbaren Li-Po-Akku.

Der Hauptcontroller für dieses Spiel wird von einem Arduino gesteuert und wird seriell von einem Raspberry Pi gesteuert.

Wie funktioniert dieses Spiel? Nun, es gibt 3 Spielmodi:

Quicktime: Spiele X Runden und schieße so schnell du kannst auf jedes Ziel.

Zeitmodus: Schießen Sie in X Sekunden so viele Ziele wie möglich.

Rapidfire: Schieße X Schüsse in der schnellsten Zeit.

Das System verwendet NRF24L01-Sender, um eine gute Entfernung vom Hauptcontroller zu erhalten. Sie arbeiten mit 2,6 GHz (das gleiche wie WiFi)

In meinen letzten Projekten habe ich Piezo für die Vibration verwendet, aber jetzt werden Vibrationssensor-Schalter verwendet. Aber Sie können Piezo immer noch verwenden, wenn Sie meine alte Version dieses Spiels erstellt haben.

Das Spiel verfügt über einen Raspberry Pi 7 -Touchscreen, der das Websystem enthält, über das Sie das Spiel steuern. Ein Terminaldrucker druckt die Ergebnisse aus.

Lieferungen

Für Sender:

  • X Atmega328 mit Arduino Bootloader (je nachdem wie viele Ziele)
  • X Vibrationssensor-Schalter
  • X Blaue LED
  • X Grüne LED
  • X rote LED
  • X 3,7 V Li-Po-Akku
  • X FC-75 Li-Po-Lademodul (oder ein anderes Modell)
  • X 100 uF Kondensator
  • X Koffer für die Sensoren
  • X LD1117V33 (macht sichere 3,3 V zum Sender)
  • X NRF24L01-Module
  • X x 3 220 Ohm Widerstände (3 wird für ein Ziel benötigt)
  • X 16 MHz Quarz
  • X x 2 unplorierte Kondensatoren 22 pF (2 wird für ein Ziel benötigt)

Für Haupt-Arduino:

  • 1 Arduino (Nano oder Uno wird empfohlen, muss USB haben)
  • 1 NRF24L01-Modul
  • 1 10 uF Kondensator

Für Himbeer-Pi:

  • Raspberry Pi (ich habe 3B verwendet)
  • 7" Touchscreen
  • ATXRaspi (Optional, aber ein gutes Power-Button-Modul)
  • RTCRaspi (Optional, aber ein gutes RTC-Modul, um Zeit und Datum zu behalten)
  • Termaldrucker (optional, aber erforderlich, um drucken zu können)
  • Barcode-Scanner (USB-Version, die wie eine Tastatur funktioniert, optional)
  • Gute 5V-Leistung (ich habe einen alten 12-V-USB mit 2,5-A-Leistung verwendet)

Andere Sachen:

  • 12V Strom (ich habe einen bei 12 Ah)
  • Netzwerkbuchse (Erleichtern Sie die Verbindung zum Netzwerk)
  • Kabel

Schritt 1: Die drahtlosen Sensoren

Die drahtlosen Sensoren
Die drahtlosen Sensoren
Die drahtlosen Sensoren
Die drahtlosen Sensoren
Die drahtlosen Sensoren
Die drahtlosen Sensoren

Beginnen wir mit der Herstellung der Sensoren. Ich verwende 4 Sensoren für dieses Spiel. Sie können jedoch problemlos weitere Sensoren hinzufügen. Die Sensoren kommunizieren mit einem 4-stelligen Code, wenn das Hauptsystem den Code aussendet, mit welcher Funktion der Sensor mit dem richtigen Code aufleuchtet und für das Ziel bereit ist. Das blaue Licht soll Sie darüber informieren, dass Sie dieses Ziel treffen werden.

Wir haben auch eine grüne und eine rote LED. Das Grün leuchtet immer, um anzuzeigen, dass der Sensor eingeschaltet ist. Das Rot leuchtet nur auf, wenn der Akku weniger als 3,1 V hat (es verwendet die eingebaute Funktion im Chip, um zu berechnen, wie viel Akku sich im Akku befindet.

Der Vibrationssensor wird an den analogen Pin angeschlossen und liest seinen Wert aus. Wenn der Wert sinkt, hat der Sensor eine Vibration aufgenommen und dort registrieren wir den Treffer.

Das Ziel hat eine Failsafe-Funktion, die für den Fall, dass Sie nicht in X Sekunden treffen (Standard ist 15 Sekunden), oder wenn die Übertragung nicht möglich ist, in die Startposition zurückkehrt.

Ich werde nicht erklären, wie Sie verdrahten werden, überprüfen Sie das elektrische Blatt, um zu sehen, wie Sie das tun werden. Das einzige, was nicht darauf steht, ist die Batterie, der Netzschalter und das Ladegerät. Das liegt an Ihnen, wie Sie es wollen.

WICHTIG ZUM NRF24L+ Modul:

Es kann schmerzhaft sein, sie stabil zu machen, kombiniert mit guter Leistung und Isolation um sie herum, und dem Code, den Sie zum Laufen bringen. Für mich wird ein 10 uF Kondensator mir eine stabile und gute Verbindung geben, aber bitte versuchen Sie es zuerst, falls Sie zum Beispiel einen 100 uF Kondensator benötigen. Umwickeln Sie sie auch zuerst mit Plastikfolie und dann mit Aluminiumfolie, um sie vor Störungen zu schützen

Auch im Code brauchst du die Datenrate nicht mehr als 250 Kb damit das nicht das Problem sein wird. Aber die PA: myRadio.setPALevel(RF24_PA_MIN);

In dem Code, den ich auf MIN gesetzt habe (dies ist während des Tests), ist es der niedrigste und verbraucht nicht so viel Strom, aber die Reichweite wird nicht so groß sein. Wenn Sie eine stabile und gute Leistung für sie haben, können Sie bis zu RF24_PA_MAX gehen, um die größte Reichweite zu erzielen, ABER sie benötigen dafür GOOOOOD stabile Leistung. Versuchen Sie auch LOW UND HIGH (nur MAX-Text ändern), um zu sehen, ob Sie eine gute Kommunikation erhalten. Außerdem erhalten Sie eine gute Reichweite bei LOW und HIGH, es sei denn, Sie werden ein Scharfschütze

Halten Sie auch die Sender mindestens einen Meter voneinander entfernt, zu nahe kann das Signal schlecht werden

Testen Sie die Kommunikation mit einem Ping-Beispiel in der NRF24-Bibliothek (Link auf GitHub)

Im Code müssen Sie die eindeutige Identifikationsnummer für dieses Ziel festlegen:

int ZielID = 3401; //Dies ist die Ziel-ID

int sendID = 2401; //Dies ist die Antwort-ID

Es gibt auch 3 DEFINE-Funktionen:

#define DEBUG

#define BATTERIE

#define SHAKE //WENN SHAKE SWITCH STATT DES ALTEN PIEZO VERWENDET WIRD

DEBUGGEN:

Während des Tests ist es gut, dies definiert zu haben. Aber wenn Sie sie verfügbar machen, lassen Sie es nicht aktivieren.

BATTERIE:

Wenn Sie keinen Batterie-Checker für die Ziele haben möchten, müssen Sie diese Definition entfernen.

SHAKE:

Wenn Sie meine alte Version erstellt haben, haben Sie Piezo-Sensoren, dann entfernen Sie diese, um den richtigen Code für sie zu erhalten.

ATMEGA328-Chip

Anstelle eines Arduino Nano habe ich mich für den ATMEGA328-Chip (mit Uno-Bootloader) entschieden. Sie sind einfach zu programmieren, entfernen Sie einfach den Chip von einem Arduino Uno und fügen Sie diesen Chip hinzu und laden Sie den Code hoch. Überprüfen Sie das elektrische Schema, wie die Ziele gebaut werden.

Der Code

Ich habe den Code mit PlatformIO anstelle von Arduino IDE geschrieben. Es ist eine bessere Software zum Programmieren. Der Code ist also ein wenig anders. Ich empfehle, stattdessen diese Software zu verwenden.

Die Ziel- und Senderbox

Ich habe den Sensor und die blaue LED am Ziel befestigt und mit einem 3,5-mm-Phonokabel auf 2 m verbinde ich sie in der Senderbox, die den Atmega-Chip, das Ladegerät und die grüne und rote LED enthält. Dies dient dazu, es vor Schlägen mit Stahlkugeln zu schützen.

Schritt 2: Der Gamecontroller

Der Gamecontroller
Der Gamecontroller
Der Gamecontroller
Der Gamecontroller
Der Gamecontroller
Der Gamecontroller
Der Gamecontroller
Der Gamecontroller

Als nächstes müssen wir den Controller für die Sensoren erstellen. Es ist ein Arduino, das ein NRF24L01-Modul verwendet, um mit den Sensoren zu kommunizieren. Nichts anderes. Der Arduino wird dann mit USB im Himbeer-Pi verbunden, um zu arbeiten.

So wird es funktionieren. Es verwendet seriell, um zu wissen, was zu tun ist. Das Pi sendet serielle Befehle. Während der Einrichtung sendet es zuerst, wie viele Ziele Sie hinzugefügt haben, und die Zielidentifikationsnummern. Dann führt es die Testfunktion durch und informiert den Himbeer-Pi, wenn sie miteinander kommunizieren.

Wenn Sie das Spiel spielen, wird von pi gesendet, welche Art von Spiel und wie viele Runden/Treffer verwendet werden sollen. Das ist es.

Es ist möglich, die NRF24L01-Module im Himbeer-Pi zu verwenden, aber für mich ist der Arduino eine bessere Option, da ich sie nie in Himbeere verwende, daher weiß ich nicht, wie gut sie auf lange Sicht funktionieren

Es gibt ein Strommodul, das 5 V verwendet, um die Sender mit korrekter stabiler Stromversorgung zu versorgen. Sie können sie mit Ihrem Arduino verwenden (siehe Bild), der Name ist Socket Adapter Module Board

Wenn Sie spielen, werden die Ziele zufällig nacheinander aktiviert. Wenn einer getroffen wird, wird ein anderer aktiviert.

Während des Tests können Sie #DEFINE DEBUG aktivieren, um zu sehen, wie es funktioniert, aber nicht, wenn Sie es im pi-Computer verwenden, es funktioniert dann nicht.

Laden Sie den Code auf der GitHub-Seite herunter.

Schritt 3: Himbeer-Pi

Himbeer-Pi
Himbeer-Pi
Himbeer-Pi
Himbeer-Pi
Himbeer-Pi
Himbeer-Pi
Himbeer-Pi
Himbeer-Pi

Wir sind jetzt beim Raspberry Pi angekommen.

Ich habe einige zusätzliche Funktionen hinzugefügt, damit ich einen Netzschalter haben kann. Das ATXRaspi 3 ist ein großartiges Modul, Sie können den Pi mit einer Taste ein- und ausschalten und neu starten. Auch ein RTCRaspi, um die Uhrzeit und das Datum auf dem Pi zu halten. Es ist auch möglich, nur ein Netzwerkkabel anzuschließen, falls ich einige Updates auf dem System durchführen muss. Sie finden sie auf Lowpowerlab

Den Thermodrucker finden Sie bei sparkfun und den Barcodeleser gibt es bei Amazon.

Der Pi-Computer läuft im Kiosk-Modus, sodass der Browser beim Start geöffnet wird. Als erstes benötigen Sie einen Webserver mit PHP 7 und MySQL auf dem Pi-Computer. (Dafür gibt es viele Anleitungen im Internet)

BITTE BEACHTEN: Wenn Sie einen Thermodrucker mit Raspberry Pi verwenden, der über Bluetooth verfügt, müssen Sie diesen zuerst deaktivieren

Das Python-Skript benötigt pyserial und Sie installieren es: sudo apt-get install python-serial

Damit das MySQL funktioniert, installieren Sie Folgendes:

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

suso apt-get install pymysql

Jetzt können Sie Ihr Arduino seriell steuern und auch die MySQL-Datenbank aktualisieren.

Der nächste Schritt besteht darin, ein Python-Skript zu erstellen, um eine Verbindung zu mysql herzustellen.

Ändern Sie in allen drei Python-Skripten die Verbindung zu Ihrer MySQL-Datenbank.

Der nächste Schritt besteht darin, das Python-Skript beim Start auszuführen.

Es gibt drei Pythons script.game.py ist das wichtigste von allen, das eine enthält die Spielfunktion.print.py dies wird nur benötigt, wenn Sie einen Terminaldrucker zum Drucken verwenden möchten.ean.py wird nur benötigt, wenn Sie es sind Ich werde den Barcode-Scanner verwenden.

Um sie automatisch zu starten, bearbeite ich:

sudo nano /etc/rc.local

und füge unten vor Exit 0 Folgendes hinzu:

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

Bitte wechseln Sie an die richtige Stelle für Ihr Python-Skript und vergessen Sie nicht das &-Zeichen am Ende

Jetzt müssen wir einen Kiosk-Modus für den Webbrowser erstellen, entfernen Sie zuerst den Cursor:

sudo apt-get install aufgeräumt

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

Jetzt in dieser Datei suchen und auskommentieren:

@xscreensaver -no-splash # Kommentiere diese Zeile, um den Bildschirmschoner zu deaktivieren

Darunter hinzufügen:

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

Der nächste Schritt, um alle Boot-Texte und andere Dinge zu entfernen, fügen auch Ihren eigenen Boot-Bildschirm hinzu. Hier ist eine Kurzanleitung:

sudo nano /boot/config.txt und unten adddisable_splash=1

Textnachricht unter Splash-Bild entfernen:

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

Suchen und entfernen (oder auskommentieren):

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

und:

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

Jetzt entfernen wir Boot-Meldungen:

sudo nano /boot/cmdline.txt

Ersetze „console=tty1“durch „console=tty3“

und am Ende der Zeile hinzufügen:

spritz leise plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default=0

Und ersetzen Sie den Pi-Splash durch Ihren eigenen:

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

Jetzt haben Sie Ihren eigenen benutzerdefinierten Startbildschirm für Ihr Spiel. Ihr Pi-Computer ist jetzt bereit, das Spiel zu handhaben. Also zum nächsten Schritt!

Schritt 4: Spiel einrichten

An diesem Punkt haben Sie nun das Spiel erstellt.

Zuerst müssen Sie das webbsystem einrichten. Laden Sie die Datenbank auf Ihren MySQL-Server hoch. Die Datei befindet sich im Ordner include und heißt database.sql

Der nächste Schritt besteht darin, die Konfigurationsdatei zu bearbeiten. Sie finden sie im Ordnernamen config.php. Ändern Sie die Anmeldeinformationen für die Datenbank, damit das Skript funktioniert.

Das Websystem ist mehrsprachig und in englischer Sprache verfasst. Es ist eine schwedische Übersetzung verfügbar. Um mehr Sprache zu machen, benötigen Sie eine Software namens Poedit.

Um dem Websystem mehr Sprache hinzuzufügen, müssen Sie i18n_setup.php bearbeiten und im Array hinzufügen:

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

Um auch die Standardsprache zu ändern, müssen Sie in Zeile 27 ändern: $lang = 'en_US'; Ändern Sie die en_US in Ihre Sprache.

die Sprachdateien müssen in locales/LANGCODE/LC_MESSAGES/ platziert sein und main.mo heißen (Langcode in deine Sprache ändern)

Um die Tastatur in der Datei selectplayers.php zu ändern, ändern Sie die Sprache: "en", //en für Englisch sv für Schwedisches Layout: 'qwerty', //qwerty für Englisch Schwedisch-qwerty für Schwedisch

Sie finden sie in den Linien 218 & 219

Die verfügbaren Sprachen befinden sich im Ordner: assets/js/keyboard/languages & layouts sind in assets/js/keyboard/layouts und fügen Sie die richtigen Dateien in Zeile 118 und 119 hinzu (ersetzen Sie die, die Sie jetzt dort finden)

Ziele hinzufügen

Um Ziele hinzuzufügen, gehen Sie zu localhost/admin/ und klicken auf Ziele hinzufügen.

Sie müssen einen Namen für das Ziel und die eindeutige Ziel-ID und Sende-ID hinzufügen. Fügen Sie so viele Ziele hinzu, wie Sie haben.

Spiele hinzufügen

Sie müssen auch einige Spiele hinzufügen. Gehe zu localhost/admin/ und klicke auf Spiel hinzufügen

Sie müssen einen Namen für das Spiel, eine Beschreibung, Mindest- und Höchstspieler, welche Art von Spiel, sowie wie schwer das Spiel zwischen 1 und 5 ist, hinzufügen. Und wie das Spiel ist, fügen Sie also für das Schnellfeuerspiel hinzu, wie viele Treffer (Beispiel 30) für die Schnellziehung, wie viele Runden (zum Beispiel 8) und wie lange gespielt werden soll (zum Beispiel 60 für eine Minute)

Starte das Spiel

Wenn Sie das Spiel einschalten, führt es den Zieltest durch. Daher müssen die Ziele aktiviert sein, bevor Sie das Hauptsystem starten. Wenn alle den Test bestehen, können Sie das System verwenden, aber wenn nicht, können Sie es nicht verwenden. Es wird versuchen zu kommunizieren, bis sie eine Antwort erhalten.

Viel Glück

Nun, das war es auch schon, für Support und Infos zum Update im Code folgen Sie bitte meiner Facebook-Seite für dieses Spiel, damit ich Ihnen schnell antworten kann. Links finden Sie hier oben.

Empfohlen: