Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Capture The Box adalah permainan membangun tim yang dapat Anda mainkan dengan teman-teman di lingkungan Anda.
Tujuannya adalah untuk menangkap kotak dan menyimpannya di tangan Anda selama mungkin sementara pemain lain mencoba untuk pergi dan menyelinap pergi dari teras atau taman depan Anda.
Game ini menggunakan GPS untuk menemukan kotak dan tag RFID untuk mengidentifikasi para pemain. LDR opsional dapat ditambahkan untuk menyesuaikan intensitas tampilan dot matrix dengan persentase cahaya di area tersebut.
Perlengkapan
Mikrokontroler dan komputer
- Raspberry Pi
- Arduino (Mega)Saya memilih Arduino Mega daripada Uno biasa, karena memiliki lebih banyak pin. Ini diperlukan karena kita menggunakan perisai Dragino LoRa, yang akan meninggalkan kita dengan terlalu sedikit pin digital saat menggunakan UNO. TIP: Sebaiknya gunakan yang asli, karena klon Cina tidak selalu berfungsi seperti yang diharapkan.
Sensor dan modul
- 4 Modul Dot Matrix MAX7219Hubungkan DOUT ke DIN, CS ke CS, CLK ke CLK…
- Resistor Bergantung Cahaya (10K) + Resistor (10K)
- Modul GPS NEO-7M (atau serupa)Saya menggunakan VMA430 dari Velleman
- RC522 Modul RFID + beberapa lencana/kartu RFID
Untuk menggunakan LoRa (teknologi nirkabel)
Perisai Dragino Lora
Sensor dan modul opsional
Layar LCDUntuk menampilkan alamat IP Raspberry Pi
Untuk membuat pengaturan pengujian
Papan tempat memotong roti dan Kabel Dupont (Pria-Pria
Opsional (selubung)
- Besi solder
- Kotak alat tua
- Bahan untuk pencetakan 3D
- Beberapa papan kayu tipis
- Beberapa baut dan mur (yang bisa masuk ke lubang Arduino). Sekrup saya memiliki diameter sekitar 3mm.
Perkiraan harga dapat ditemukan di BOM (Bill of Material), termasuk di bawah ini.
Langkah 1: Menyiapkan Raspberry Pi
Raspberry Pi adalah jantung dari Proyek.
Ini akan menjalankan frontend, backend dan database. Ini juga akan bertanggung jawab untuk komunikasi antara backend dan Arduino.
Agar kita dapat menggunakan Raspberry Pi, kita perlu melakukan hal berikut:
Bagian 1: Instal Raspbian di Raspberry Pi
Tutorial tentang cara melakukannya dapat ditemukan di sini:
Bagian 2: Instal Raspbian di Raspberry PiMenyiapkan WiFi rumah Anda.
Ini dapat dilakukan dengan menggunakan wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf
Reboot Pi dan Anda akan melihat alamat IP saat mengetik ifconfig
Bagian 3: Instal server web dan database
Setelah Pi Anda aktif dan berjalan, yang terbaik adalah mengubah kata sandi Anda. Ini dapat dilakukan dengan perintah passwd.
Setelah selesai, lanjutkan dan instal Apache, PHP, MariaDB dan PHPMyAdmin.
Apache, PHP sudo apt install apache2 -y sudo apt install php libapache2-mod-php -y
MariaDB sudo apt install mariadb-server mariadb-client -y sudo apt install php-mysql -y sudo systemctl restart apache2.service
PHPMyAdminsudo untuk menginstal phpmyadmin -y
Jangan lupa untuk mengatur kata sandi MySQL yang aman.
Bagian 4: Menginstal pustaka Python yang diperlukan
Untuk backend, kita akan membutuhkan beberapa library. Ini dapat diinstal menggunakan perintah pip3.
pip3 instal mysql-connector-python
pip3 menginstal flask-socketio
pip3 menginstal flask-cors
pip3 instal geventpip3 instal gevent-websocket
pip3 instal ttn
Langkah 2: Meletakkan Elektronik
Untuk membuat Proyek ini bekerja, kita perlu menghubungkan semua elektronik.
Perisai LoRa dapat dengan mudah dipasang pada tempatnya. Cukup sejajarkan pin dengan pin pada Arduino Anda.
Koneksi lainnya dijelaskan dalam skema Fritzing saya. Yang bisa di download disini:
Langkah 3: Merancang Basis Data
Untuk dapat menyimpan semua data game dan sensor, saya membuat beberapa tabel:
pengukuran dan sensorPengukuran dari sensor, terdapat di tabel sensor. Ini berisi referensi ke sensor, nilai pengukuran (misalnya koordinat: 51.123456; 3.123456) dan id game opsional (jika game aktif selama pengukuran).
spelerNama pemain dan UID dari lencana RFID mereka. Moderator bidang opsional ditambahkan, orang ini dapat memodifikasi permainan (misalnya menghentikannya sebelum waktunya).
spelInfo permainan (waktu mulai dan waktu berakhir).
spel_has_spelerHubungan antara spel dan speler. Di sinilah pemain ditugaskan untuk sebuah permainan.
bezitDalam tabel ini, skor disimpan. Ini berisi id permainan, id pemain, waktu dia mencuri kotak dan waktu dia kehilangannya (ketika orang lain mencurinya atau saat permainan berakhir). Dengan mengurangi waktu mulai dari waktu akhir, Anda dapat menghitung skor yang dia dapatkan dari tangkapan itu.
Ekspor database dapat ditemukan di GitHub saya (https://github.com/BoussonKarel/CaptureTheBox)
Buka sql di PHPMyAdmin / MySQL Workbench dan jalankan. Database sekarang harus diimpor.
Langkah 4: Menyiapkan Akun di TTN
Langkah 1: Daftar akun di TTN dan buat aplikasi
Daftar akun di TheThingsNetwork, lalu buka Konsol > Tambahkan aplikasi.
Pilih nama untuk aplikasi Anda dan klik Tambahkan aplikasi.
Langkah 2: Daftarkan perangkat
Setelah Anda membuat aplikasi, buka Daftarkan perangkat.
Pilih id perangkat, ini bisa apa saja yang Anda inginkan (asalkan itu kasus ular) dan klik Daftar.
Klik pada ikon Generate di bawah Device EUI, sehingga TTN akan menghasilkan satu untuk Anda.
Langkah 3: Tuliskan kredensial Anda
Sekarang buka Perangkat Anda dan klik ikon Kode di sebelah EUI Perangkat, EUI Aplikasi, dan kunci Aplikasi. Sekarang seharusnya muncul sebagai array byte.
Sebelum Anda menyalin, klik tombol Switch dan pastikan Dev EUI dan App EUI Anda LSB PERTAMA.
Kunci Aplikasi Anda harus tetap MSB PERTAMA (jangan ubah itu).
Anda akan memerlukan kunci ini pada langkah berikutnya: Menyiapkan Arduino.
Langkah 4: Tuliskan kunci Akses Aplikasi Anda
Sekarang kita memerlukan satu kunci lagi untuk mengatur MQTT di Raspberry Pi kita.
Buka Aplikasi Anda dan gulir ke bawah ke Tombol Akses.
Anda akan membutuhkan ini di langkah Backend.
Langkah 5: Menyiapkan Arduino
Kode Arduino juga dapat ditemukan di GitHub saya, di bawah Arduino (https://github.com/BoussonKarel/CaptureTheBox)
Kode ini dibagi menjadi beberapa tab, agar tetap teratur.
main.inoKode utama: deklarasi pin, setup() dan loop()
0_LoRa.inoKode ini menangani komunikasi menggunakan LoRa.
Ini menempatkan data tag LDR, GPS dan RFID dalam array 13 byte dan mengirimkannya ke TheThingsNetwork.
1_LDR.inoMenggunakan analogRead(), ini mengukur jumlah tegangan pada Light Dependent Resistor.
Ini kemudian diubah menjadi persentase cahaya (0 menjadi bukan apa-apa, 100 menjadi senter ponsel).
2_GPS.inoIni menggunakan komunikasi Serial menggunakan TX1 dan RX1 (Serial1).
Ini menggunakan pesan NMEA (lebih tepatnya pesan $GPRMC) untuk menemukan garis lintang dan bujur kotak.
3_RFID.inoMenggunakan perpustakaan MFRC522, kode ini memindai tag RFID baru. Setiap kali ada tag, disimpan sebagai RFID_lastUID.
4_DotMatrix.inoKode ini digunakan untuk menginisialisasi dan mengatur tampilan dot matrix. Ini berisi definisi untuk memuat animasi dll…
Mengaturnya
Sebelum Anda dapat mengunggah kode ini ke Arduino Anda, Anda harus menginstal beberapa pustaka.
Perpustakaan Arduino-LMIC oleh matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)
Perpustakaan MFRC522 untuk pembaca RFID (https://github.com/miguelbalboa/rfid)
Sekarang, buka main.ino dan ubah DEVEUI, APPEUI dan APPKEY menjadi yang Anda salin pada langkah terakhir.
Langkah 6: Menyiapkan Backend
Backend untuk Proyek ini dapat ditemukan di GitHub saya, di bawah RPI > Backend(https://github.com/BoussonKarel/CaptureTheBox).
Bagaimana cara kerjanya?
- Setiap 10 detik, kode mencari game yang aktif. Jika ditemukan, kode akan disimpan dalam variabel yang disebut huidigSpel (Game saat ini)
- Jika mode diatur ke Serial, kabel digunakan antara Arduino dan Pi. Pi polling untuk nilai LDR dan GPS. Arduino merespons dengan format JSON. Tag RFID dikirim setiap kali ditampilkan. Mode ini hanya digunakan untuk tujuan pengembangan dan tidak benar-benar diperlukan lagi.
- Jika mode diatur ke LoRa, klien MQTT dibuat yang memicu panggilan balik setiap kali data LoRa diterima oleh TTN. Ini berisi data LDR, GPS dan RFID.
- Frontend dapat mengambil data menggunakan titik akhir API. Sebagian besar data diambil menggunakan huidigSpel.id. Data dikembalikan dalam format JSON menggunakan jsonify()
Ubah pengaturan Buka secret.py dan isi nama aplikasi LoRa Anda dan Kunci Akses Anda (yang Anda tulis sebelumnya).
Buka config.py dan isi kredensial Database Anda (seperti kata sandi, pengguna…)
Menyiapkannya sebagai layananCoba jalankan app.py, setelah Anda memastikan ini berfungsi, kita dapat menggunakannya sebagai layanan. Ini akan secara otomatis memulai kode di latar belakang saat Anda mem-boot pi Anda.
Untuk melakukan ini, salin ctb_service.service ke /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service
Sekarang aktifkan menggunakan systemctl enable ctb_service.service
Jika Anda perlu membuat beberapa perubahan pada kode, Anda dapat dengan mudah menghentikannya menggunakan systemctl stop (ini akan memulai lagi saat reboot) atau menonaktifkan adalah (menghentikannya dari memulai secara otomatis) menggunakan systemctl disable.
Jika Anda perlu berkonsultasi dengan log (karena kesalahan), Anda dapat menggunakan journalctl -u ctb_service.service.
Info lebih lanjut tentang layanan dapat ditemukan di sini:
Langkah 7: Menyiapkan Frontend
Seperti biasa, frontend dapat ditemukan di GitHub saya, di bawah RPI > Frontend(https://github.com/BoussonKarel/CaptureTheBox)
Rekatkan ini di folder /var/html Raspberry Pi Anda.
Ini berisi semua halaman web yang diperlukan untuk permainan.
Ini juga berisi skrip untuk berkomunikasi dengan backend (baik waktu nyata dan menggunakan titik akhir API).
Langkah 8: Menambahkan Casing
Untuk case, saya menggunakan tool case lama, dengan bahan/teknik sebagai berikut:
- pencetakan 3D
- Busa untuk menjaga baterai tetap pada tempatnya
- Papan kayu daur ulang
- Lem panas
- Sekrup dan mur
Apa yang Anda lakukan dengan kasing Anda adalah pilihan Anda! Saya akan memberi Anda kebebasan artistik.
Untuk inspirasi, saya telah menambahkan beberapa foto dari kasus saya (selesai).