Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Capture The Box to gra teambuildingowa, w którą możesz grać ze znajomymi z Twojej okolicy.
Celem jest przechwycenie pudełka i utrzymanie go w swoim posiadaniu tak długo, jak to możliwe, podczas gdy inni gracze próbują uciec i wykraść je z ganku lub frontowego ogrodu.
Ta gra wykorzystuje GPS do zlokalizowania pudełka i tagi RFID do identyfikacji graczy. Opcjonalny LDR można dodać, aby dopasować intensywność wyświetlacza z matrycą punktową do procentu światła w obszarze.
Kieszonkowe dzieci
Mikrokontrolery i komputery
- Malina Pi
- Arduino (Mega) Wybrałem Arduino Mega zamiast normalnego Uno, ponieważ ma dużo więcej pinów. Jest to konieczne, ponieważ używamy tarczy Dragino LoRa, która pozostawiałaby nam za mało cyfrowych pinów podczas korzystania z UNO. WSKAZÓWKA: Najlepiej użyć oryginalnego, ponieważ chińskie klony nie zawsze działają zgodnie z oczekiwaniami.
Czujniki i moduły
- 4 moduły matrycy punktowej MAX7219Podłącz DOUT do DIN, CS do CS, CLK do CLK…
- Rezystor światłoczuły (10K) + Rezystor (10K)
- Moduł GPS NEO-7M (lub podobny) Używam VMA430 firmy Velleman
- Moduł RFID RC522 + niektóre odznaki/karty RFID;
Do korzystania z LoRa (technologia bezprzewodowa)
Tarcza Dragino Lory
Opcjonalne czujniki i moduły
Wyświetlacz LCD do wyświetlania adresu IP Raspberry Pi
Do wykonania konfiguracji testowej
Płytka stykowa i kable Dupont (męsko-męskie)
Opcjonalnie (obudowa)
- Lutownica
- Stara walizka narzędziowa
- Materiały do druku 3D
- Niektóre cienkie drewniane deski
- Niektóre śruby i nakrętki (które pasują do otworów Arduino). Moje śruby mają średnicę około 3mm.
Szacunkową cenę można znaleźć w BOM (Bill of Materials), zamieszczonym poniżej.
Krok 1: Konfiguracja Raspberry Pi
Raspberry Pi jest sercem projektu.
Uruchomi frontend, backend i bazę danych. Będzie również odpowiedzialny za komunikację między backendem a Arduino.
Aby móc korzystać z Raspberry Pi, musimy wykonać następujące czynności:
Część 1: Zainstaluj Raspbian na Raspberry Pi
Samouczek, jak to zrobić, można znaleźć tutaj:
Część 2: Zainstaluj Raspbian na Raspberry PiKonfigurowanie domowej sieci WiFi.
Można to zrobić za pomocą wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf
Uruchom ponownie Pi i powinieneś zobaczyć adres IP podczas wpisywania ifconfig
Część 3: Zainstaluj serwer WWW i bazę danych
Po uruchomieniu i uruchomieniu Pi najlepiej zmienić hasło. Można to zrobić za pomocą polecenia passwd.
Gdy to zrobisz, zainstaluj Apache, PHP, MariaDB i PHPMyAdmin.
Apache, PHP sudo apt zainstaluj apache2 -y sudo apt zainstaluj php libapache2-mod-php -y
MariaDB sudo apt zainstaluj mariadb-server mariadb-client -y sudo apt zainstaluj php-mysql -y sudo systemctl uruchom ponownie apache2.service
PHPMyAdminsudo apt zainstaluj phpmyadmin -y
Nie zapomnij ustawić bezpiecznego hasła MySQL.
Część 4: Instalacja niezbędnych bibliotek Pythona
Do backendu będziemy potrzebować kilku bibliotek. Można je zainstalować za pomocą polecenia pip3.
pip3 zainstaluj mysql-connector-python
pip3 zainstaluj kolbę-socketio
pip3 zainstaluj kolby-cors
pip3 zainstaluj geventpip3 zainstaluj gevent-websocket
pip3 zainstaluj ttn
Krok 2: Rozmieszczenie elektroniki
Aby ten projekt działał, musimy podłączyć całą elektronikę.
Osłonę LoRa można łatwo umieścić na swoim miejscu. Po prostu dopasuj piny do pinów na Arduino.
Pozostałe połączenia są opisane w moim schemacie Fritzing. Który można pobrać tutaj:
Krok 3: Projektowanie bazy danych
Aby móc przechowywać wszystkie dane dotyczące gry i czujników, stworzyłem kilka tabel:
pomiar i czujnik Pomiary z czujników znajdują się w tabelach czujników. Zawiera odniesienie do czujnika, wartość pomiaru (np. współrzędne: 51.123456; 3.123456) oraz opcjonalny identyfikator gry (jeśli gra była aktywna podczas pomiaru).
spelerNazwiska graczy i UID ich identyfikatora RFID. Dodany jest opcjonalny moderator pola, osoba ta może modyfikować grę (np. zatrzymać ją przed czasem).
Informacje o grze (czas rozpoczęcia i zakończenia).
spel_has_spelerRelacja między pisownią a pisownią. Tutaj gracze są przypisywani do gry.
bezitW tej tabeli zapisywany jest wynik. Zawiera identyfikator gry, identyfikator gracza, czas, w którym ukradł pudełko i czas, w którym je zgubił (kiedy ktoś inny je ukradnie lub kiedy gra się kończy). Odejmując czas rozpoczęcia od czasu zakończenia, możesz obliczyć wynik, jaki uzyskał z tego przejęcia.
Eksport bazy danych można znaleźć na moim GitHub (https://github.com/BoussonKarel/CaptureTheBox)
Otwórz sql w PHPMyAdmin / MySQL Workbench i uruchom go. Baza danych powinna zostać teraz zaimportowana.
Krok 4: Założenie konta na TTN
Krok 1: Załóż konto w TTN i utwórz aplikację
Załóż konto w TheThingsNetwork, a następnie przejdź do Konsola > Dodaj aplikację.
Wybierz nazwę swojej aplikacji i kliknij Dodaj aplikację.
Krok 2: Zarejestruj urządzenie
Po złożeniu wniosku przejdź do zakładki Zarejestruj urządzenie.
Wybierz identyfikator urządzenia, może to być dowolny (o ile jest to obudowa węża) i kliknij Zarejestruj.
Kliknij ikonę Generuj w obszarze EUI urządzenia, aby TTN wygenerował je dla Ciebie.
Krok 3: Zapisanie swoich danych uwierzytelniających
Teraz przejdź do swojego urządzenia i kliknij ikonę Kod obok EUI urządzenia, EUI aplikacji i klucz aplikacji. Powinien teraz pojawić się jako tablica bajtów.
Zanim zaczniesz kopiować, kliknij przycisk Przełącz i upewnij się, że Twoje Dev EUI i App EUI to LSB FIRST.
Twój klucz aplikacji powinien pozostać MSB FIRST (nie zmieniaj tego).
Te klucze będą potrzebne w następnym kroku: Konfiguracja Arduino.
Krok 4: Zapisanie klucza dostępu do aplikacji
Teraz potrzebujemy jeszcze jednego klucza, aby skonfigurować MQTT na naszym Raspberry Pi.
Przejdź do aplikacji i przewiń w dół do klawiszy dostępu.
Będziesz tego potrzebować w kroku Backend.
Krok 5: Konfiguracja Arduino
Kod Arduino można również znaleźć na moim GitHubie, pod Arduino (https://github.com/BoussonKarel/CaptureTheBox)
Ten kod jest podzielony na wiele zakładek, aby był uporządkowany.
main.inoGłówny kod: deklaracje pinów, setup() i loop()
0_LoRa.inoTen kod obsługuje komunikację za pomocą LoRa.
Umieszcza dane z tagów LDR, GPS i RFID w tablicy 13 bajtów i przesyła je do TheThingsNetwork.
1_LDR.inoUżywając analogRead(), mierzy wielkość napięcia na rezystorze zależnym od światła.
To jest następnie zamieniane na procent światła (0 to nic, 100 to latarka telefonu komórkowego).
2_GPS.ino Wykorzystuje komunikację szeregową przy użyciu TX1 i RX1 (Serial1).
Używa wiadomości NMEA (a dokładniej wiadomości $GPRMC), aby znaleźć szerokość i długość geograficzną pudełka.
3_RFID.inoKorzystając z biblioteki MFRC522, ten kod skanuje w poszukiwaniu nowych tagów RFID. Gdy taki jest obecny, zapisuje go jako RFID_lastUID.
4_DotMatrix.ino Ten kod służy do inicjalizacji i ustawienia wyświetlania matrycy punktowej. Zawiera definicje animacji ładowania itp…
Konfigurowanie go
Zanim będziesz mógł przesłać ten kod do swojego Arduino, musisz zainstalować kilka bibliotek.
Biblioteka Arduino-LMIC autorstwa matthijskooijmana (https://github.com/matthijskooijman/arduino-lmic)
Biblioteka MFRC522 dla czytnika RFID (https://github.com/miguelbalboa/rfid)
Teraz przejdź do main.ino i zmień DEVEUI, APPEUI i APPKEY na te, które skopiowałeś w ostatnim kroku.
Krok 6: Konfiguracja backendu
Backend dla tego projektu można znaleźć na moim GitHubie, pod RPI > Backend (https://github.com/BoussonKarel/CaptureTheBox).
Jak to działa?
- Co 10 sekund kod szuka aktywnej gry. Jeśli taka zostanie znaleziona, zostanie zapisana w zmiennej o nazwie huidigSpel (currentGame)
- Jeśli tryb jest ustawiony na Serial, między Arduino i Pi jest używany kabel. The Pi odpytuje wartości LDR i GPS. Arduino odpowiada w formacie JSON. Tagi RFID są wysyłane za każdym razem, gdy są prezentowane. Ten tryb był używany wyłącznie do celów programistycznych i nie jest już tak naprawdę potrzebny.
- Jeśli tryb jest ustawiony na LoRa, tworzony jest klient MQTT, który wyzwala oddzwonienie za każdym razem, gdy dane LoRa są odbierane przez TTN. Zawiera dane LDR, GPS i RFID.
- Frontend może pobierać dane za pomocą punktów końcowych API. Większość danych jest pobierana za pomocą huidigSpel.id. Dane są zwracane w formacie JSON za pomocą jsonify()
Zmodyfikuj ustawienia Przejdź do secrets.py i wpisz nazwę swojej aplikacji LoRa oraz swój klucz dostępu (zapisałeś wcześniej).
Przejdź do config.py i wypełnij poświadczenia bazy danych (takie jak hasło, użytkownik…)
Konfigurowanie go jako usługi Spróbuj uruchomić app.py, gdy potwierdzisz, że to działa, możemy użyć go jako usługi. Spowoduje to automatyczne uruchomienie kodu w tle podczas uruchamiania pi.
Aby to zrobić, skopiuj ctb_service.service do /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service
Teraz włącz go za pomocą systemctl enable ctb_service.service
Jeśli chcesz wprowadzić pewne zmiany w kodzie, możesz go łatwo zatrzymać za pomocą systemctl stop (to uruchomi się ponownie po ponownym uruchomieniu) lub wyłączyć (zatrzymać automatyczne uruchamianie) za pomocą systemctl disable.
Jeśli potrzebujesz sprawdzić dzienniki (z powodu błędów), możesz użyć journalctl -u ctb_service.service.
Więcej informacji o usługach można znaleźć tutaj:
Krok 7: Konfiguracja frontendu
Jak zwykle, frontend można znaleźć na moim GitHubie, pod RPI > Frontend (https://github.com/BoussonKarel/CaptureTheBox)
Wklej to w folderze /var/html swojego Raspberry Pi.
Zawiera wszystkie niezbędne strony internetowe do gry.
Zawiera również skrypt do komunikacji z backendem (zarówno w czasie rzeczywistym, jak i za pomocą punktów końcowych API).
Krok 8: Dodawanie obudowy
Do walizki użyłem starej walizki narzędziowej wraz z następującymi materiałami/technikami:
- drukowanie 3d
- Pianka do utrzymywania baterii na miejscu
- Drewniane deski z recyklingu
- Gorący klej
- Śruby i nakrętki
To, co robisz ze swoją walizką, to Twój wybór! Dam ci artystyczną swobodę.
Dla inspiracji dodałem kilka zdjęć mojej (skończonej) sprawy.