İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Capture The Box, mahallenizdeki arkadaşlarınızla oynayabileceğiniz bir ekip oluşturma oyunudur.
Amaç, kutuyu ele geçirmek ve diğer oyuncular onu sundurmadan veya ön bahçenizden gizlice kaçırmaya çalışırken, kutuyu mümkün olduğunca uzun süre elinizde tutmaktır.
Bu oyun, oyuncuları tanımlamak için kutuyu ve RFID etiketlerini bulmak için GPS kullanır. Nokta vuruşlu ekranın yoğunluğunu alandaki ışık yüzdesiyle eşleştirmek için isteğe bağlı bir LDR eklenebilir.
Gereçler
Mikrodenetleyiciler ve bilgisayarlar
- Ahududu Pi
- Arduino (Mega) Çok daha fazla pini olduğu için normal bir Uno yerine Arduino Mega'yı seçtim. Bu gerekli çünkü bir UNO kullanırken bize çok az dijital pin bırakacak olan bir Dragino LoRa kalkanı kullanıyoruz. İPUCU: Orijinalini kullanmak en iyisidir çünkü Çin klonları her zaman beklendiği gibi çalışmaz.
Sensörler ve modüller
- 4 MAX7219 Dot Matrix Modülü DOUT'u DIN'e, CS'den CS'ye, CLK'dan CLK'ya bağlayın…
- Işığa Bağlı Direnç (10K) + Direnç (10K)
- NEO-7M (veya benzeri) GPS ModülüVelleman'dan VMA430 kullanıyorum
- RC522 RFID Modülü+ bazı RFID rozetleri/kartları
LoRa (kablosuz teknoloji) kullanmak için
Dragino Lora Kalkanı
Opsiyonel sensörler ve modüller
Raspberry Pi'nin IP adresini görüntülemek için bir LCD ekran
Test kurulumu yapmak için
A breadboard ve Dupont Kabloları (Erkek-Erkek
Opsiyonel (gövde)
- Havya
- Eski bir alet çantası
- 3D baskı için malzemeler
- Bazı ince ahşap plakalar
- Bazı cıvata ve somunlar (Arduino deliklerine sığabilir). Vidalarımın çapı yaklaşık 3 mm'dir.
Aşağıda bulunan Malzeme Listesinde (Malzeme Listesi) tahmini bir fiyat bulunabilir.
Adım 1: Raspberry Pi'yi Ayarlama
Raspberry Pi, Projenin kalbidir.
Ön uç, arka uç ve veritabanını çalıştıracaktır. Ayrıca arka uç ve Arduino arasındaki iletişimden de sorumlu olacaktır.
Raspberry Pi'yi kullanabilmemiz için aşağıdakileri yapmamız gerekecek:
Bölüm 1: Raspbian'ı Raspberry Pi'ye Kurun
Bunun nasıl yapılacağına dair bir eğitim burada bulunabilir:https://thepi.io/how-to-install-raspbian-on-the-ra…
Bölüm 2: Raspbian'ı bir Raspberry Pi'ye kurun Ev WiFi'nizi kurma.
Bu, wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf kullanılarak yapılabilir.
Pi'yi yeniden başlatın ve ifconfig yazarken bir IP adresi görmelisiniz
Bölüm 3: Web sunucusunu ve veritabanını kurun
Pi'nizi çalıştırıp çalıştırdıktan sonra, şifrenizi değiştirmek en iyisidir. Bu, passwd komutuyla yapılabilir.
Bu yapıldıktan sonra devam edin ve Apache, PHP, MariaDB ve PHPMyAdmin'i kurun.
Apache, PHP sudo apt kurulumu apache2 -y sudo apt kurulumu php libapache2-mod-php -y
MariaDB sudo apt kurulumu mariadb-sunucusu mariadb-client -y sudo apt kurulumu php-mysql -y sudo systemctl apache2.service'i yeniden başlatın
PHPMyAdminsudo uygun kurulum phpmyadmin -y
Güvenli bir MySQL şifresi belirlemeyi unutmayın.
Bölüm 4:Gerekli Python kitaplıklarının kurulması
Arka uç için bazı kütüphanelere ihtiyacımız olacak. Bunlar pip3 komutu kullanılarak kurulabilir.
pip3 mysql-connector-python'u kurun
pip3 yükleme şişesi-socketio
pip3 flask-cors yükleyin
pip3 kurulumu geventpip3 kurulumu gevent-websocket
pip3 kurulumu ttn
Adım 2: Elektroniği Yerleştirme
Bu Proje'nin çalışması için tüm elektroniği bağlamamız gerekiyor.
LoRa kalkanı kolayca yerine yerleştirilebilir. Pinleri Arduino'nuzdaki pinlerle hizalayın.
Diğer bağlantılar Fritzing şemamda açıklanmıştır. Hangisi buradan indirilebilir:
Adım 3: Veritabanını Tasarlamak
Tüm oyun ve sensör verilerini depolayabilmek için birkaç tablo yaptım:
ölçüm ve sensörSensör tablolarında bulunan sensörlerden gelen ölçümler. Sensöre bir referans, ölçüm değerini (örn. koordinatlar: 51.123456; 3.123456) ve isteğe bağlı bir oyun kimliğini (ölçüm sırasında bir oyun etkinse) içerir..
spelerOyuncu adları ve RFID rozetlerinin UID'si. İsteğe bağlı bir alan moderatörü eklenir, bu kişi oyunu değiştirebilir (örneğin, zamanından önce durdurabilir).
oyun bilgisi (başlangıç ve bitiş zamanı).
spel_has_speler Büyü ve büyü arasındaki ilişki. Burası oyuncuların bir oyuna atandığı yerdir.
Bezit Bu tabloda puan kaydedilir. Oyun kimliğini, oyuncu kimliğini, kutuyu çaldığı zamanı ve kaybettiği zamanı (başkası onu çaldığında veya oyun bittiğinde) içerir. Başlangıç zamanını bitiş zamanından çıkararak, o yakalamadan aldığı puanı hesaplayabilirsiniz.
Veritabanının dışa aktarımı GitHub'ımda bulunabilir (https://github.com/BoussonKarel/CaptureTheBox)
PHPMyAdmin / MySQL Workbench'te sql'yi açın ve çalıştırın. Veritabanı şimdi içe aktarılmalıdır.
Adım 4: TTN'de Hesap Oluşturma
Adım 1: TTN'de bir hesap açın ve bir uygulama oluşturun
TheThingsNetwork'te bir hesap için kaydolun, ardından Konsol > Uygulama ekle'ye gidin.
Uygulamanız için bir ad seçin ve Uygulama ekle'yi tıklayın.
2. Adım: Bir cihazı kaydedin
Başvurunuzu yaptığınızda, Cihazı kaydet'e gidin.
Bir cihaz kimliği seçin, bu istediğiniz gibi olabilir (yılan durumu olduğu sürece) ve Kaydol'a tıklayın.
Cihaz EUI'si altındaki Oluştur simgesine tıklayın, böylece TTN sizin için bir tane oluşturacaktır.
3. Adım: Kimlik bilgilerinizi yazın
Şimdi Cihazınıza gidin ve Cihaz EUI, App EUI ve Uygulama anahtarının yanındaki Kod simgesine tıklayın. Şimdi bir bayt dizisi olarak görünmelidir.
Kopyalamadan önce Değiştir düğmesini tıklayın ve Dev EUI ve App EUI'nizin LSB İLK olduğundan emin olun.
Uygulama Anahtarınız MSB İLK olarak kalmalıdır (bunu değiştirmeyin).
Bir sonraki adımda bu anahtarlara ihtiyacınız olacak: Arduino'yu kurmak.
Adım 4: Uygulama Erişim anahtarınızı yazma
Şimdi Raspberry Pi'mizde MQTT'yi kurmak için bir anahtara daha ihtiyacımız olacak.
Uygulamanıza gidin ve Erişim Anahtarlarına gidin.
Buna Arka Uç adımında ihtiyacınız olacak.
Adım 5: Arduino'yu Ayarlama
Arduino kodu ayrıca GitHub'ımda Arduino altında bulunabilir (https://github.com/BoussonKarel/CaptureTheBox)
Bu kod, düzenli kalması için birden çok sekmeye ayrılmıştır.
main.inoAna kod: pin bildirimleri, setup() ve loop()
0_LoRa.inoBu kod, LoRa kullanarak iletişimi yönetir.
LDR, GPS ve RFID etiketlerinin verilerini 13 baytlık bir diziye koyar ve bunu TheThingsNetwork'e gönderir.
1_LDR.inoanalogRead() kullanarak, Işığa Bağlı Direnç üzerindeki voltaj miktarını ölçer.
Bu daha sonra bir ışık yüzdesine dönüştürülür (0 hiçbir şey değildir, 100 cep telefonu feneridir).
2_GPS.inoBu, TX1 ve RX1 (Serial1) kullanarak Seri iletişimi kullanır.
Kutunun enlem ve boylamını bulmak için NMEA mesajlarını (kesin olarak $GPRMC mesajları) kullanır.
3_RFID.inoMFRC522 kitaplığını kullanarak, bu kod yeni RFID etiketleri arar. Varsa, RFID_lastUID olarak depolanır.
4_DotMatrix.inoBu kod dot matrix gösterimi başlatmak ve ayarlamak için kullanılır. Yükleme animasyonu vb. için tanımlamalar içerir.
Ayarlıyorum
Bu kodu Arduino'nuza yüklemeden önce birkaç kitaplık kurmanız gerekir.
matthijskooijman tarafından Arduino-LMIC kütüphanesi (https://github.com/matthijskooijman/arduino-lmic)
RFID okuyucu için MFRC522 kitaplığı (https://github.com/miguelbalboa/rfid)
Şimdi, main.ino'ya gidin ve DEVEUI, APPEUI ve APPKEY'i son adımda kopyaladığınızlarla değiştirin.
6. Adım: Arka Uç Kurulumu
Bu Proje için arka uç GitHub'da, RPI > Arka Uç(https://github.com/BoussonKarel/CaptureTheBox) altında bulunabilir.
O nasıl çalışır?
- Her 10 saniyede bir kod, aktif bir oyun arar. Bulunursa, huidigSpel (currentGame) adlı bir değişkene kaydedilir.
- Mod Seri olarak ayarlanırsa Arduino ve Pi arasında bir kablo kullanılır. Pi, LDR ve GPS değerleri için anket yapar. Arduino bir JSON formatı ile yanıt verir. RFID etiketleri sunulduğunda gönderilir. Bu mod yalnızca geliştirme amacıyla kullanılmıştır ve artık gerçekten gerekli değildir.
- Mod LoRa olarak ayarlanırsa, TTN tarafından LoRa verileri her alındığında bir geri aramayı tetikleyen bir MQTT istemcisi oluşturulur. Bu LDR, GPS ve RFID verilerini içerir.
- Ön uç, API uç noktalarını kullanarak verileri alabilir. Verilerin çoğu huidigSpel.id kullanılarak alınır. Veriler, jsonify() kullanılarak JSON formatında döndürülür
Ayarları değiştirin secrets.py adresine gidin ve LoRa uygulamanızın adını ve Erişim Anahtarınızı girin (daha önce yazmıştınız).
config.py adresine gidin ve Veritabanı kimlik bilgilerinizi girin (şifre, kullanıcı… gibi)
Bir hizmet olarak ayarlama app.py'yi çalıştırmayı deneyin, bunun çalıştığını onayladıktan sonra onu bir hizmet olarak kullanabiliriz. Bu, pi'nizi başlattığınızda kodu otomatik olarak arka planda başlatacaktır.
Bunu yapmak için ctb_service.service dosyasını /etc/systemd/system/ctb_service.service dizinine kopyalayın. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service
Şimdi systemctl enable ctb_service.service kullanarak etkinleştirin
Kodda bazı değişiklikler yapmanız gerekiyorsa, systemctl stop (bu, yeniden başlatıldığında yeniden başlayacaktır) veya devre dışı bırakma (otomatik olarak başlatılmasını durdur) kullanarak systemctl disable kullanarak kolayca durdurabilirsiniz.
Günlüklere bakmanız gerekiyorsa (hatalardan dolayı),journalctl -u ctb_service.service kullanabilirsiniz.
Hizmetler hakkında daha fazla bilgiyi burada bulabilirsiniz:
7. Adım: Ön Uç Kurulumu
Her zamanki gibi, ön uç GitHub'ımda RPI > Ön Uç(https://github.com/BoussonKarel/CaptureTheBox) altında bulunabilir.
Bunu Raspberry Pi'nizin /var/html klasörüne yapıştırın.
Bu, oyun için gerekli tüm web sayfalarını içerir.
Ayrıca arka uçla iletişim kurmak için bir komut dosyası içerir (hem gerçek zamanlı hem de API uç noktalarını kullanarak).
Adım 8: Kasa Ekleme
Durum için, aşağıdaki malzemeler/tekniklerle birlikte eski bir alet çantası kullandım:
- 3D baskı
- Pili yerinde tutmak için köpük
- Geri dönüştürülmüş ahşap plakalar
- Sıcak tutkal
- Vidalar ve somunlar
Davanızla ne yapacağınız sizin seçiminiz! Sana sanatsal özgürlük vereceğim.
İlham almak için (bitmiş) davamın bazı fotoğraflarını ekledim.