Tangkap Kotak: 8 Langkah
Tangkap Kotak: 8 Langkah
Anonim
Tangkap Kotak
Tangkap Kotak
Tangkap Kotak
Tangkap Kotak

Capture The Box adalah permainan teambuilding yang boleh anda mainkan dengan rakan-rakan di kawasan kejiranan anda.

Tujuannya adalah untuk menangkap kotak itu dan menyimpannya selama mungkin sementara pemain lain cuba pergi dan menyelinapnya dari beranda atau taman depan anda.

Permainan ini menggunakan GPS untuk mencari kotak dan tag RFID untuk mengenal pasti pemain. LDR pilihan boleh ditambahkan untuk memadankan intensiti paparan dot matrix dengan peratusan cahaya di kawasan itu.

Bekalan

Pengawal mikro dan komputer

  • Pai raspberi
  • Arduino (Mega) Saya memilih Arduino Mega daripada Uno biasa, kerana ia mempunyai lebih banyak pin. Ini perlu kerana kita menggunakan pelindung Dragino LoRa, yang akan menyebabkan kita menggunakan pin digital yang terlalu sedikit ketika menggunakan UNO. PETUA: Lebih baik menggunakan yang asli, kerana klon Cina tidak selalu berfungsi seperti yang diharapkan.

Sensor dan modul

  • 4 MAX7219 Modul Dot MatrixSambungkan DOUT ke DIN, CS ke CS, CLK ke CLK…
  • Perintang Bergantung Cahaya (10K) + Perintang (10K)
  • NEO-7M (atau serupa) Modul GPSSaya menggunakan VMA430 dari Velleman
  • Modul RFID RC522 + beberapa lencana / kad RFID

Untuk menggunakan LoRa (teknologi tanpa wayar)

Perisai Dragino Lora

Sensor dan modul pilihan

Paparan LCD Untuk memaparkan alamat IP Raspberry Pi

Untuk membuat persediaan ujian

Papan roti dan Kabel Dupont (Lelaki-Lelaki

Pilihan (selongsong)

  • Besi pematerian
  • Sarung alat lama
  • Bahan untuk percetakan 3D
  • Beberapa papan kayu nipis
  • Beberapa selak dan mur (yang boleh dipasang di lubang Arduino). Skru saya mempunyai diameter sekitar 3mm.

Harga anggaran boleh didapati di BOM (Bil Bahan), termasuk di bawah.

Langkah 1: Menyiapkan Raspberry Pi

Raspberry Pi adalah nadi Projek.

Ia akan menjalankan frontend, backend dan database. Ini juga akan bertanggungjawab untuk komunikasi antara backend dan Arduino.

Untuk menggunakan Raspberry Pi, kita perlu melakukan perkara berikut:

Bahagian 1: Pasang Raspbian pada Raspberry Pi

Tutorial mengenai cara melakukannya boleh didapati di sini:

Bahagian 2: Pasang Raspbian pada Raspberry PiMenyiapkan WiFi rumah anda.

Ini dapat dilakukan dengan menggunakan wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Nyalakan semula Pi dan anda akan melihat alamat IP semasa menaip ifconfig

Bahagian 3: Pasang pelayan web dan pangkalan data

Setelah Pi dan komputer anda berjalan, lebih baik menukar kata laluan anda. Ini boleh dilakukan dengan arahan passwd.

Setelah selesai, teruskan dan pasang 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 apt pasang phpmyadmin -y

Jangan lupa untuk menetapkan kata laluan MySQL yang selamat.

Bahagian 4: Memasang perpustakaan Python yang diperlukan

Untuk backend, kami memerlukan beberapa perpustakaan. Ini boleh dipasang menggunakan arahan pip3.

pip3 pasang mysql-connector-python

pip3 memasang flask-socketio

pip3 memasang termos-cors

pip3 pasang geventpip3 pasang gevent-websocket

pip3 memasang ttn

Langkah 2: Menetapkan Elektronik

Menyusun Elektronik
Menyusun Elektronik
Menyusun Elektronik
Menyusun Elektronik

Untuk menjayakan Projek ini, kita perlu menyambungkan semua elektronik.

Perisai LoRa dapat dipasang dengan mudah. Sejajarkan pin dengan pin di Arduino anda.

Sambungan lain dijelaskan dalam skema Fritzing saya. Yang boleh dimuat turun di sini:

Langkah 3: Merancang Pangkalan Data

Merancang Pangkalan Data
Merancang Pangkalan Data

Untuk dapat menyimpan semua data permainan dan sensor, saya membuat beberapa jadual:

Pengukuran dari sensor, yang terdapat di dalam jadual sensor. Ia mengandungi rujukan ke sensor, nilai pengukuran (mis. koordinat: 51.123456; 3.123456) dan id permainan pilihan (jika permainan aktif semasa pengukuran).

spelerNama pemain dan UID lencana RFID mereka. Moderator medan pilihan ditambahkan, orang ini dapat mengubah suai permainan (mis. Menghentikannya sebelum waktunya).

spelInformasi permainan (permulaan dan waktu akhir).

spel_has_spelerHubungan antara spel dan speler. Di sinilah pemain ditugaskan untuk permainan.

bezitDalam jadual ini, skor disimpan. Ini mengandungi id permainan, id pemain, masa dia mencuri kotak dan masa dia kehilangannya (ketika orang lain mencurinya atau ketika permainan berakhir). Dengan mengurangkan masa mula dari waktu akhir, anda dapat mengira skor yang dia dapat dari tangkapan tersebut.

Eksport pangkalan data boleh didapati di GitHub saya (https://github.com/BoussonKarel/CaptureTheBox)

Buka sql di PHPMyAdmin / MySQL Workbench dan jalankan. Pangkalan data kini harus diimport.

Langkah 4: Menyiapkan Akaun di TTN

Langkah 1: Daftar untuk akaun di TTN dan buat aplikasi

Daftar untuk akaun di TheThingsNetwork, kemudian pergi ke Konsol> Tambahkan aplikasi.

Pilih nama untuk aplikasi anda dan klik Tambah aplikasi.

Langkah 2: Daftarkan peranti

Setelah membuat permohonan, pergi ke Daftar peranti.

Pilih id peranti, ini boleh menjadi apa sahaja yang anda mahukan (selagi itu sarung ular) dan klik Daftar.

Klik pada ikon Jana di bawah Peranti EUI, jadi TTN akan menghasilkan satu untuk anda.

Langkah 3: Tuliskan kelayakan anda

Sekarang pergi ke Peranti anda dan klik pada ikon Kod di sebelah Peranti EUI, Aplikasi EUI dan kunci Aplikasi. Ia kini boleh muncul sebagai sebilangan bait.

Sebelum menyalin, klik butang Tukar dan pastikan Dev EUI dan App EUI anda LSB PERTAMA.

Kunci Aplikasi anda harus kekal MSB PERTAMA (jangan ubah itu).

Anda memerlukan kunci ini pada langkah seterusnya: Menyiapkan Arduino.

Langkah 4: Tuliskan kunci Akses Aplikasi anda

Sekarang kita memerlukan satu lagi kunci untuk menyediakan MQTT pada Raspberry Pi kami.

Pergi ke Aplikasi anda dan tatal ke bawah ke Acces Keys.

Anda memerlukannya dalam langkah Backend.

Langkah 5: Menyiapkan Arduino

Kod Arduino juga boleh didapati di GitHub saya, di bawah Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Kod ini dibahagikan kepada beberapa tab, agar tetap teratur.

main.inoKod utama: deklarasi pin, persediaan () dan gelung ()

0_LoRa.inoKod ini mengendalikan komunikasi menggunakan LoRa.

Ini meletakkan data tag LDR, GPS dan RFID dalam array 13 bait dan mengirimkannya ke TheThingsNetwork.

1_LDR.inoMenggunakan analogRead (), ia mengukur jumlah voltan berbanding Perintang Bergantung Cahaya.

Ini kemudian ditukar kepada peratusan cahaya (0 tidak ada apa-apa, 100 menjadi lampu suluh telefon bimbit).

2_GPS.inoIni menggunakan komunikasi Bersiri menggunakan TX1 dan RX1 (Serial1).

Ia menggunakan mesej NMEA (mesej $ GPRMC tepat) untuk mencari garis lintang dan garis bujur kotak.

3_RFID.inoMenggunakan perpustakaan MFRC522, kod ini mengimbas tag RFID baru. Setiap kali ada, ia disimpan sebagai RFID_lastUID.

4_DotMatrix.inoKod ini digunakan menginisialisasi dan menetapkan paparan dot matrix. Ia mengandungi definisi untuk memuatkan animasi dan lain-lain …

Menyiapkannya

Sebelum anda dapat memuat naik kod ini ke Arduino anda, anda perlu memasang beberapa perpustakaan.

Perpustakaan Arduino-LMIC oleh matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

Perpustakaan MFRC522 untuk pembaca RFID (https://github.com/miguelbalboa/rfid)

Sekarang, pergi ke main.ino dan ubah DEVEUI, APPEUI dan APPKEY ke yang anda salin langkah terakhir.

Langkah 6: Menyiapkan Backend

Backend untuk Projek ini boleh didapati di GitHub saya, di bawah RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).

Bagaimanakah ia berfungsi?

  1. Setiap 10 saat, kod mencari permainan aktif. Sekiranya terdapat, ia disimpan dalam pemboleh ubah yang disebut huidigSpel (currentGame)
  2. Sekiranya mod ditetapkan ke Serial, kabel digunakan antara Arduino dan Pi. Pi memilih nilai LDR dan GPS. Arduino bertindak balas dengan format JSON. Tag RFID dihantar setiap kali ditunjukkan. Mod ini digunakan hanya untuk tujuan pembangunan dan tidak lagi diperlukan.
  3. Sekiranya mod ditetapkan ke LoRa, klien MQTT dibuat yang memicu panggilan balik setiap kali data LoRa diterima oleh TTN. Ini mengandungi data LDR, GPS dan RFID.
  4. Frontend dapat mengambil data menggunakan titik akhir API. Sebilangan besar data diambil menggunakan huidigSpel.id. Data dikembalikan dalam format JSON menggunakan jsonify ()

Ubah suai tetapan Pergi ke secret.py dan isikan nama aplikasi LoRa dan Kunci Acces anda (anda tulis sebelumnya).

Pergi ke config.py dan isikan kelayakan Pangkalan Data anda (seperti kata laluan, pengguna…)

Menyiapkannya sebagai perkhidmatanCuba jalankan app.py, setelah anda mengesahkan ini berfungsi, kami dapat menggunakannya sebagai perkhidmatan. Ini secara automatik akan memulakan kod di latar belakang semasa anda boot pi anda.

Untuk melakukan salinan ini, 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 aktifkan ctb_service.service

Sekiranya anda perlu membuat beberapa perubahan pada kod, anda dapat menghentikannya dengan mudah menggunakan systemctl stop (ini akan dimulakan lagi ketika reboot) atau melumpuhkan adalah (hentikan dari memulakan secara automatik) menggunakan systemctl disable.

Sekiranya anda perlu melihat log (kerana kesilapan), anda boleh menggunakan journalctl -u ctb_service.service.

Maklumat lanjut mengenai perkhidmatan boleh didapati di sini:

Langkah 7: Menyiapkan Frontend

Seperti biasa, frontend boleh didapati di GitHub saya, di bawah RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

Tampalkan ini di folder / var / html Raspberry Pi anda.

Ini mengandungi semua halaman web yang diperlukan untuk permainan.

Ini juga berisi skrip untuk berkomunikasi dengan backend (baik waktu nyata maupun menggunakan titik akhir API).

Langkah 8: Menambah Selongsong

Menambah Selongsong
Menambah Selongsong
Menambah Selongsong
Menambah Selongsong

Untuk kes itu, saya menggunakan sarung alat lama, bersama dengan bahan / teknik berikut:

  • Percetakan 3D
  • Buih untuk mengekalkan bateri di tempatnya
  • Papan kayu yang dikitar semula
  • Gam panas
  • Skru dan kacang

Apa yang anda buat dengan kes anda adalah pilihan anda! Saya akan memberi anda kebebasan seni.

Untuk inspirasi, saya telah menambahkan beberapa gambar kes (selesai) saya.

Disyorkan: