Spisu treści:

Gra strzelanka Arduino V3: 4 kroki
Gra strzelanka Arduino V3: 4 kroki

Wideo: Gra strzelanka Arduino V3: 4 kroki

Wideo: Gra strzelanka Arduino V3: 4 kroki
Wideo: Как спят в разных играх|| #shorts #minecraft #fortnite #gta #roblox 2024, Lipiec
Anonim
Image
Image
Strzelanka Arduino V3
Strzelanka Arduino V3
Strzelanka Arduino V3
Strzelanka Arduino V3
Strzelanka Arduino V3
Strzelanka Arduino V3

Ta gra jest dla tych, którzy używają airsoftu lub co2 do strzelania do celów. To jest gra.

Aby uzyskać aktualne informacje o grze i wsparciu:

www.facebook.com/arduinoshooting/

Na moim blogu o grze:

shootinggameblog.wordpress.com

Kody dotyczące gry:

github.com/shootinggame82/Shooting-game-v3

Strzelanka to x cele, które są bezprzewodowe, każdy cel ma czujnik wibracji, który wykrywa wibracje, które pojawiają się po trafieniu. Czujniki bezprzewodowe to układ Atmega328 (chip Arduino Uno) i ładują akumulator Li-Po.

Główny kontroler tej gry jest kontrolowany przez Arduino i jest sterowany szeregowo z Raspberry Pi.

Jak działa ta gra? Cóż, to 3 tryby gry:

Quicktime: Zagraj X rund i strzelaj tak szybko, że możesz do każdego celu.

Tryb czasowy: strzelaj do jak największej liczby celów w ciągu X sekund.

Rapidfire: oddaj X strzałów w najszybszym czasie.

System wykorzystuje nadajniki NRF24L01, aby uzyskać dobre odległości od głównego kontrolera. Działają na 2,6 GHz (tak samo jak działa WiFi)

W moich poprzednich projektach używałem Piezo do wibracji, ale teraz używany jest przełącznik czujnika wibracji. Ale nadal możesz używać Piezo, jeśli stworzyłeś moją starą wersję tej gry.

Gra ma 7-calowy ekran dotykowy Raspberry Pi, na którym znajduje się system sieciowy, za pomocą którego kontrolujesz grę. Drukarka terminala drukuje wyniki.

Kieszonkowe dzieci

Dla nadajników:

  • X Atmega328 z Arduino Bootloader (w zależności od liczby celów)
  • X Przełącznik czujnika wibracji
  • X Niebieska dioda LED
  • X zielona dioda LED
  • X czerwona dioda LED
  • X bateria litowo-polimerowa 3.7 v
  • X FC-75 Moduł ładowarki Li-Po (lub inny model)
  • X 100 uF kondensator
  • X Etui na czujniki
  • X LD1117V33 (zapewnia bezpieczne 3,3 V do nadajnika)
  • X modułów NRF24L01
  • Rezystory X x 3 220 Ohm (3 potrzebne do jednego celu)
  • X 16 MHz kryształ
  • X x 2 nieplorowane kondensatory 22 pF (potrzebne 2 dla jednego celu)

Dla głównego Arduino:

  • 1 Arduino (zalecane Nano lub Uno, trzeba mieć USB)
  • 1 moduł NRF24L01
  • 1 kondensator 10 uF

Dla malin Pi:

  • Raspberry Pi (użyłem 3B)
  • 7-calowy ekran dotykowy
  • ATXRaspi (Opcjonalny, ale dobry moduł przycisku zasilania)
  • RTCRaspi (Opcjonalny, ale dobry moduł RTC do przechowywania czasu i daty)
  • Drukarka termiczna (opcjonalna, ale potrzebna do drukowania)
  • Skaner kodów kreskowych (wersja USB działająca jak klawiatura, opcjonalnie)
  • Dobra moc 5V (użyłem starego USB 12V o mocy 2,5 A)

Inne rzeczy:

  • Zasilanie 12v (mam jeden przy 12 Ah)
  • Gniazdo sieciowe (ułatwia podłączenie do sieci)
  • Kable

Krok 1: Czujniki bezprzewodowe

Czujniki bezprzewodowe
Czujniki bezprzewodowe
Czujniki bezprzewodowe
Czujniki bezprzewodowe
Czujniki bezprzewodowe
Czujniki bezprzewodowe

Zacznijmy tworzyć czujniki. Do tej gry używam 4 czujników. Ale możesz łatwo dodać więcej czujników. Czujniki komunikują się z 4-cyfrowym kodem, gdy główny system wyśle kod, z jaką funkcją czujnik z odpowiednim kodem zaświeci się i będzie gotowy do celu. Niebieskie światło ma informować, że to ten cel, który zamierzasz trafić.

Mamy też zieloną i czerwoną diodę. Zielony zawsze zapala się informując, że czujnik jest włączony. Czerwony zaświeci się tylko wtedy, gdy poziom naładowania baterii spadnie poniżej 3.1V (wykorzystuje wbudowaną funkcję chipa, aby obliczyć, ile jest w baterii).

Czujnik drgań jest podłączony do pinu analogowego i odczytuje jego wartość. Gdy wartość spada, czujnik wykrył wibracje i tam rejestrujemy trafienie.

Cel posiada funkcję failsafe, która w przypadku, gdy nie trafisz w ciągu X sekund (domyślnie 15 sekund) lub jeśli transmisja nie może być wykonana w ciągu, wróci do pozycji początkowej.

Nie będę wyjaśniał, jak zamierzasz podłączyć, sprawdź arkusz elektryczny, aby zobaczyć, jak to zrobisz. Jedyne, czego na nim nie ma, to bateria, włącznik zasilania i ładowarka. To od Ciebie zależy, jak chcesz.

WAŻNE O module NRF24L+:

Ustabilizowanie ich w połączeniu z dobrą mocą i izolacją oraz kodem, który sprawi, że będą działać, może być uciążliwe. Dla mnie kondensator 10 uF zapewni mi stabilne i dobre połączenie, ale spróbuj najpierw, jeśli potrzebujesz na przykład kondensatora 100 uF. Owiń je również najpierw folią plastikową, a następnie folią aluminiową, aby chronić je przed ingerencją

Również w kodzie szybkość transmisji danych nie potrzebujesz więcej niż 250 Kb, więc to nie będzie problemem. Ale PA: myRadio.setPALevel(RF24_PA_MIN);

W kodzie ustawiłem na MIN (jest to podczas testu), jest najniższy i nie będzie zużywał tak dużej mocy, ale zasięg nie będzie tak duży. Jeśli masz do nich stabilną i dobrą moc, możesz podnieść się do RF24_PA_MAX, aby uzyskać najdłuższy zasięg, ALE potrzebują do tego DOBREJ stabilnej mocy. Spróbuj także LOW I HIGH (tylko zmiana tekstu MAX), aby sprawdzić, czy komunikacja jest dobra. Otrzymasz również dobry zasięg na NISKIM i WYSOKIM poziomie, chyba że zamierzasz być snajperem

Należy również trzymać nadajniki w odległości co najmniej jednego metra od siebie, ponieważ zamknięcie może spowodować zły sygnał

Przetestuj komunikację za pomocą przykładu ping w bibliotece NRF24 (Link na GitHub)

W kodzie musisz ustawić unikalny numer identyfikacyjny dla tego celu:

int ID_targu = 3401; //To jest identyfikator docelowy

int identyfikator wyślij = 2401; //To jest identyfikator odpowiedzi

Dostępne są również 3 funkcje DEFINE:

#define DEBUGUJ

#define BATERIA

#define SHAKE //JEŚLI PRZEŁĄCZNIK SHAKE JEST UŻYWANY ZAMIAST STAREGO PIEZO

ODPLUSKWIĆ:

Podczas testu dobrze jest mieć zdefiniowane. Ale kiedy je udostępnisz, nie aktywuj go.

BATERIA:

Jeśli nie chcesz mieć sprawdzania baterii dla celów, musisz usunąć tę definicję.

POTRZĄSNĄĆ:

Jeśli zbudowałeś moją starą wersję, masz czujniki piezo, usuń to, aby uzyskać dla nich poprawny kod.

Układ ATMEGA328

Zamiast Arduino nano zdecydowałem się użyć układu ATMEGA328 (z programem ładującym Uno), są one proste do zaprogramowania, wystarczy wyjąć układ z Arduino Uno i dodać ten układ i przesłać kod. Sprawdź schemat elektryczny, jak budować cele.

Kod

Kod napisałem za pomocą PlatformIO zamiast Arduino IDE. To lepsze oprogramowanie do programowania. Więc kod jest trochę inny. Polecam używać tego oprogramowania.

Skrzynka celu i nadajnika

Podłączyłem czujnik i niebieską diodę na tarczy, a kablem phono 3,5 mm na 2 m łączę go razem w puszce nadajnika, w której znajduje się chip atmega, ładowarka i dioda zielona i czerwona. Ma to na celu ochronę przed uderzeniem stalowymi kulami.

Krok 2: Kontroler gier

Kontroler gier
Kontroler gier
Kontroler gier
Kontroler gier
Kontroler gier
Kontroler gier
Kontroler gier
Kontroler gier

Następną rzeczą, którą musimy zrobić, to zrobić kontroler dla czujników. To Arduino wykorzystujące moduł NRF24L01 do komunikacji z czujnikami. Nic więcej. Arduino jest następnie połączone z USB w raspberry pi do pracy.

Tak to będzie działać. Używa szeregowego, aby wiedzieć, co robić. Pi wyśle polecenia szeregowe. Najpierw podczas konfiguracji wysyła liczbę dodanych celów oraz numery identyfikacyjne celów. Następnie wykona funkcję testową i poinformuje raspberry pi, czy komunikują się ze sobą.

Kiedy grasz w grę, wyśle od pi, jaki rodzaj gry i ile rund/hitów użyć. Otóż to.

Możliwe jest użycie modułów NRF24L01 w raspberry pi, ale dla mnie Arduino jest lepszą opcją, ponieważ nigdy nie używam ich w raspberry, więc nie wiem, jak dobrze działają na dłuższą metę

Istnieje moduł zasilania, który wykorzystuje napięcie 5 V do prawidłowego, stabilnego zasilania nadajników. Możesz ich używać ze sobą Arduino (patrz zdjęcie) nazwa to płyta modułu adaptera gniazda

Podczas gry cele będą losowo aktywowane jeden po drugim. Kiedy jeden zostanie trafiony, aktywowany zostanie kolejny.

Podczas testu możesz aktywować #DEFINE DEBUG, aby zobaczyć, jak to działa, ale nie wtedy, gdy używasz go na komputerze pi, wtedy nie będzie działać.

Pobierz kod na stronie GitHub.

Krok 3: Raspberry Pi

Malina Pi
Malina Pi
Malina Pi
Malina Pi
Malina Pi
Malina Pi
Malina Pi
Malina Pi

Doszliśmy teraz do Raspberry Pi.

Dodałem kilka dodatkowych funkcji, więc mogę mieć przycisk zasilania. ATXRaspi 3 to świetny moduł, możesz włączyć, wyłączyć i ponownie uruchomić pi za pomocą przycisku. Również RTCRaspi do przechowywania czasu i daty na pi. Umożliwiło również podłączenie kabla sieciowego na wypadek, gdybym musiał dokonać aktualizacji w systemie. Znajdziesz je na Lowpowerlab

Drukarka termiczna, którą znajdziesz na sparkfun, a czytnik kodów kreskowych jest dostępny na amazon.

Komputer Pi działa w trybie kiosku, więc przeglądarka otworzy się na starcie. Przede wszystkim musisz mieć serwer WWW z PHP 7 i mysql na komputerze pi. (W Internecie jest wiele przewodników na ten temat)

UWAGA: jeśli zamierzasz używać drukarki termicznej z raspberry pi, która ma wbudowany bluetooth, musisz ją najpierw wyłączyć

Skrypt Pythona wymaga pyserial i instalujesz go: sudo apt-get install python-serial

Aby mysql działał, zainstaluj:

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

suso apt-get zainstaluj pymysql

Teraz możesz kontrolować Arduino przez port szeregowy, a także aktualizować bazę danych mysql.

Następnym krokiem jest stworzenie skryptu Pythona do połączenia z mysql.

We wszystkich trzech skryptach Pythona zmień połączenie z bazą danych mysql.

Następnym krokiem jest uruchomienie skryptu Pythona na starcie.

Istnieją trzy python script.game.py jest najważniejszy ze wszystkich, ten zawiera funkcję.print.py jest to potrzebne tylko wtedy, gdy zamierzasz używać drukarki termicznej do print.ean.py jest potrzebne tylko wtedy, gdy jesteś zamierzam użyć skanera kodów kreskowych.

Aby automatycznie uruchamiały się, edytuję:

sudo nano /etc/rc.local

i dodaj następujące na dole przed wyjściem 0:

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

Zmień na właściwe miejsce dla swojego skryptu Pythona i nie zapomnij o znaku & na końcu

Teraz musimy zrobić tryb kiosku dla przeglądarki internetowej, najpierw usuń kursor:

sudo apt-get install unclutter

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

teraz w tym pliku znajdź i skomentuj:

@xscreensaver -no-splash # skomentuj ten wiersz, aby wyłączyć wygaszacz ekranu

Poniżej dodaj:

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

Następnym krokiem, aby usunąć wszystkie teksty rozruchowe i inne rzeczy, a także dodać własny ekran rozruchowy, oto krótki przewodnik:

sudo nano /boot/config.txt i na dole adddisable_splash=1

Usuń wiadomość tekstową pod obrazem powitalnym:

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

Znajdź i usuń (lub skomentuj):

wiadomość_sprite = Sprite();wiadomość_sprite. SetPosition(szerokość_ekranu * 0,1, wysokość_ekranu * 0,9, 10000);

oraz:

mój_obraz = Obraz. Tekst(tekst, 1, 1, 1);wiadomość_sprite. UstawObraz(mój_obraz);

Teraz usuwamy komunikaty startowe:

sudo nano /boot/cmdline.txt

zamień „console=tty1” na „console=tty3”

a na końcu linii dodaj:

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

I zastąp plusk pi swoim własnym:

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

Teraz masz swój własny ekran startowy do swojej gry. Twój komputer pi jest teraz gotowy do obsługi gry. Przejdź do następnego kroku!

Krok 4: Skonfiguruj grę

W tym momencie stworzyłeś grę.

Najpierw musisz skonfigurować webbsystem. Prześlij bazę danych na swój serwer mysql. Plik znajduje się w folderze include i ma nazwę database.sql

Następnym krokiem jest edycja pliku konfiguracyjnego, znajdziesz go w folderze include nazwa config.phpZmień dane logowania do bazy danych, aby skrypt działał.

System sieciowy jest wielojęzyczny i napisany w języku angielskim. Dostępne jest szwedzkie tłumaczenie. Aby uzyskać więcej języka, potrzebujesz oprogramowania o nazwie Poedit.

Aby dodać więcej języka do systemu webowego należy wyedytować i18n_setup.php i dodać w tablicy:

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

Również aby zmienić domyślny język musisz zmienić w linii 27: $lang = 'en_US'; zmień en_US na swój język.

pliki językowe muszą być umieszczone w locales/LANGCODE/LC_MESSAGES/ i mieć nazwę main.mo (Zmień langcode na swój język)

aby zmienić klawiaturę w pliku selectplayers.php zmieniasz język: "en", //en na angielski sv na szwedzki układ: 'qwerty', //qwerty na angielski szwedzki-qwerty na szwedzki

Znajdziesz je na linii 218 i 219

Dostępne języki znajdują się w folderze: assets/js/keyboard/languages & layouts znajdują się w asset/js/keyboard/layouts i dodaj odpowiednie pliki do linii 118 i 119 (zastąp ten, który tam teraz znajdziesz)

Dodaj cele

Aby dodać cele, przejdź do localhost/admin/ i kliknij Dodaj cele.

Musisz dodać nazwę celu i unikalny identyfikator celu oraz identyfikator wysyłania, dodaj tyle celów, ile masz.

Dodaj gry

Musisz także dodać kilka gier. Przejdź do localhost/admin/ i kliknij dodaj grę

Musisz dodać nazwę gry, opis, min i max graczy jaki typ gry, a także jak trudna jest gra od 1 do 5. I jaka jest gra, więc do gry Rapidfire dodaj ile trafień (przykład 30) dla szybkiego losowania ile rund (na przykład 8) i na jaki czas mają grać (na przykład 60 na minutę)

Zacząć gre

Kiedy włączysz grę, wykona ona testy docelowe. Tak więc cele muszą być włączone przed uruchomieniem głównego systemu. Jeśli wszyscy zdadzą test, możesz korzystać z systemu, ale jeśli nie, nie możesz z niego korzystać. Będzie próbował komunikować się, dopóki nie otrzymają odpowiedzi.

Powodzenia

Cóż, to wszystko, aby uzyskać wsparcie i informacje o aktualizacji w kodzie, śledź moją stronę na Facebooku dotyczącą tej gry, abym mógł szybko odpowiedzieć. Linki znajdziesz na górze tutaj.

Zalecana: