Isi kandungan:

Modul Penjejakan untuk Penunggang basikal: 5 Langkah
Modul Penjejakan untuk Penunggang basikal: 5 Langkah

Video: Modul Penjejakan untuk Penunggang basikal: 5 Langkah

Video: Modul Penjejakan untuk Penunggang basikal: 5 Langkah
Video: Video 5 Selamat Menunggang Basikal#pkjr#videopkjr 2024, November
Anonim
Modul Penjejakan untuk Penunggang basikal
Modul Penjejakan untuk Penunggang basikal

Modul penjejakan untuk penunggang basikal ini adalah modul yang secara automatik mengesan kemalangan dalam perlumbaan, dan yang mengesan kerosakan mekanikal dengan menyentuh sensor sentuh. Apabila salah satu peristiwa ini berlaku, modul akan menghantar acara tersebut ke pangkalan data pada pi raspberry melalui LoRa. Acara ini akan ditunjukkan di paparan LCD dan di laman web. Anda juga boleh mencari di laman web untuk perlumbaan berbasikal tertentu dengan acara tersebut, dan menambahkan perlumbaan berbasikal atau penunggang basikal ke pangkalan data. Saya membuat projek ini kerana saya sangat berminat dengan Berbasikal dan IOT, jadi menggabungkan dua subjek ini sangat menarik bagi saya.

Sebelum anda dapat membuat modul penjejakan untuk penunggang basikal, anda perlu mengumpulkan bahan anda. Anda boleh mendapatkan alat dan bekalan dalam senarai di bawah, atau memuat turun BOM (Binaan Bahan).

Bekalan:

  • kaca plexi (56mm X 85mm)
  • 10 X 2M bolt 10mm dan mur
  • 10 X 3M bolt 10mm dan mur
  • 2 X 3M bolt 50mm dan mur
  • Filamen PLA untuk mencetak 3D casing LCD anda
  • panas menyusut
  • Kabel Lelaki hingga Perempuan
  • PCB asas
  • Pengepala lelaki
  • Raspberry Pi 3b +
  • Kad SD 16GB
  • LCD sparkfun 4X20
  • Sensor sentuh kapasitif
  • Pembesar suara
  • Accelero + meter gyro 3 paksi
  • Modul GPS
  • Papan SODAQ Mbili
  • Modul LoRa WAN
  • Bateri 3.7V 1000mAh
  • Bekalan kuasa Raspberry Pi 3b +

Alat:

  • Timah pateri
  • Besi pematerian
  • Penjepit
  • Pemutar skru
  • Jigsaw
  • Mesin gerudi
  • Latih tubi 2.5 dan 3.5
  • Pistol udara yang lebih ringan / panas

Sekiranya anda perlu membeli semua bekalan, anda memerlukan anggaran € 541.67. Projek ini sangat mahal kerana saya menggunakan kit pengembangan LoRa rappid yang berharga € 299 (saya berpeluang menggunakan kit ini dari sekolah saya). Anda selalu dapat menggunakan Arduino biasa dan menjimatkan banyak wang, tetapi programnya akan berbeza ketika itu.

Langkah 1: Skim Fritzing

Skim Fritzing
Skim Fritzing
Skim Fritzing
Skim Fritzing

Langkah pertama adalah membina litar. Untuk projek ini kami mempunyai 2 litar elektrik, satu dengan Raspberry Pi dan satu dengan papan SADAQ Mbili. Kami akan bermula dengan litar Raspberry Pi.

Skim Raspberry Pi Fritzing:

Skema Raspberry Pi cukup mudah, satu-satunya perkara yang kita sambungkan dengan Pi adalah paparan LCD Sparkfun 4X20. Paparan berfungsi dengan komunikasi Bersiri, SPI atau I2C. Protokol komunikasi yang anda gunakan bergantung kepada anda. Saya menggunakan protokol SPI kerana sangat mudah. Sekiranya anda menggunakan SPI seperti saya, anda memerlukan sambungan berikut:

  • VCC LCD VCC Raspberry Pi
  • GND LCD GND Raspberry Pi
  • SDI LCD MOSI (GPIO 10) Raspberry Pi
  • SDO LCD MISO (GPIO 9) Raspberry Pi
  • SCK LCD SCLK (GPIO 11) Raspberry Pi
  • CS LCD CS0 (GPIO 8) Raspberry Pi

Pada skema Fritzing, anda akan melihat bahawa paparan LCD adalah paparan 2X16. Ini kerana saya tidak menjumpai LCD 4X20 pada pembekuan. Walau bagaimanapun, semua sambungan adalah beberapa sehingga tidak begitu penting.

Skim Fritzing SODAQ Mbili:

Kami akan menghubungkan 4 komponen elektronik dengan papan SODAQ Mbili, jadi skema elektrik ini juga sangat mudah. Kami akan bermula dengan menyambungkan sensor sentuh Capactive. Sensor OUT-pin ini akan TINGGI ketika sensor disentuh, dan sebaliknya akan RENDAH. Ini bermaksud OUT-pin adalah output digital yang dapat kita sambungkan dengan input digital papan Mbili. Sambungannya adalah seperti berikut:

  • Sensor sentuh OUT D5 Mbili
  • Sensor sentuh VCC 3.3V Mbili
  • Sensor sentuh GND GND Mbili

Komponen kedua adalah sensor Triple acces + gyro. Saya menggunakan papan GY-521 yang menggunakan protokol I2C untuk berkomunikasi dengan papan Mbili. Perhatikan bahawa pin AD0 dari papan GY-521 perlu disambungkan dengan VCC papan Mbili! Ini kerana papan Mbili mempunyai jam dengan alamat I2C yang sama seperti GY-521. Dengan menyambungkan pin AD0 ke VCC, kami menukar alamat I2C GY-521. Sambungannya adalah seperti berikut:

  • VCC GY-521 3.3V Mbili
  • GND GY-521 GND Mbili
  • SCL GY-521 SCL Mbili
  • SDA GY-521 SDA Mbili
  • AD0 GY-521 3.3V Mbili

Selepas itu kami akan menghubungkan Buzzer. Saya menggunakan buzzer standard yang mengeluarkan bunyi ketika ada arus. Ini bermaksud kita hanya boleh menyambungkan buzzer ke pin digital papan Mbili. Sambungannya adalah seperti berikut:

  • + Buzzer D4 Mbili
  • - Buzzer GND Mbili

Akhir sekali, kami akan menyambungkan modul GPS. Modul GPS berkomunikasi melalui RX dan TX. Sambungannya adalah seperti berikut:

  • VCC GPS 3.3V Mbili
  • GND GPS GND Mbili
  • TX GPS RX Mbili
  • RX GPS TX Mbili

Langkah 2: Pangkalan Data Normalisasi

Pangkalan Data Dinormalisasi
Pangkalan Data Dinormalisasi

Langkah kedua adalah merancang Pangkalan Data yang dinormalisasi. Saya telah merancang ERD saya di Mysql. Anda akan melihat pangkalan data saya ditulis dalam bahasa Belanda, saya akan menerangkan jadualnya di sini.

Jadual 'ploeg':

Jadual ini adalah meja untuk kelab berbasikal. Ia mengandungi ID kelab berbasikal dan nama kelab berbasikal.

Jadual 'pemula':

Jadual ini adalah jadual untuk penunggang basikal. Setiap penunggang basikal mempunyai LoRaID yang juga merupakan Kunci Utama jadual. Mereka juga mempunyai nama keluarga, nama depan, Negara origen dan ID kelab berbasikal yang dihubungkan dengan meja kelab berbasikal.

Jadual 'plaatsen':

Jadual ini adalah meja yang menyimpan tempat di Belgium di mana perlumbaan berbasikal boleh berlangsung. Ini berisi nama kota (yang merupakan Kunci Utama) dan provinsi di mana bandar itu berada.

Jadual 'wedstrijden':

Jadual ini menyimpan semua perlumbaan berbasikal. Kunci Utama jadual adalah ID. Jadual ini juga mengandungi nama perlumbaan berbasikal, bandar perlumbaan yang dihubungkan dengan jadual tempat, jarak perlumbaan, kategori penunggang basikal dan tarikh perlumbaan.

Jadual 'gebeurtenissen':

Jadual ini menyimpan semua peristiwa yang berlaku. Ini bermaksud, apabila penunggang basikal terlibat dalam kemalangan atau mengalami kerosakan mekanikal, acara tersebut akan disimpan dalam jadual ini. Kunci Utama jadual adalah ID. Jadual juga mengandungi masa peristiwa, Latitud kedudukan, Bujur kedudukan, LoRaID penunggang basikal dan jenis peristiwa (kerosakan atau kerosakan mekanikal).

Jadual 'wedstrijdrenner':

Jadual ini adalah jadual yang diperlukan untuk hubungan banyak ke banyak.

Langkah 3: Daftarkan Modul LoRa Anda

Daftarkan Modul LoRa Anda
Daftarkan Modul LoRa Anda

Sebelum anda dapat memulakan dengan kod, anda perlu mendaftarkan modul LoRa anda di gateway LoRa. Saya menggunakan syarikat telekomunikasi di Belgium bernama 'Proximus' yang mengatur komunikasi untuk modul LoRa saya. Data yang saya hantar dengan simpul LoRa saya mengumpulkan di laman web dari AllThingsTalk. Sekiranya anda juga ingin menggunakan AllThingsTalk API untuk mengumpulkan data anda, anda boleh mendaftar di sini.

Selepas anda mendaftar di AllThingsTalk, anda perlu mendaftarkan nod LoRa anda. Untuk melakukan ini, anda boleh mengikuti langkah-langkah ini atau anda dapat melihat gambar di atas.

  1. Pergi ke 'Peranti' di menu utama
  2. Klik pada 'Peranti Baru'
  3. Pilih nod LoRa anda
  4. Isi semua kunci.

Sekarang anda selesai! Semua data yang anda hantar dengan simpul LoRa anda akan muncul di pembuat AllThingsTalk anda. Sekiranya anda mempunyai masalah dengan pendaftaran, anda selalu boleh melihat dokumen AllThingsTalk.

Langkah 4: Kodnya

Kod tersebut
Kod tersebut
Kod tersebut
Kod tersebut
Kod tersebut
Kod tersebut
Kod tersebut
Kod tersebut

Untuk projek ini, kami memerlukan 5 bahasa pengekodan: HTML, CSS, Java Script, Python (Flask) dan bahasa Arduino. Pertama saya akan menerangkan program Arduino.

Program Arduino:

Pada permulaan program, saya menyatakan beberapa Pembolehubah Global. Anda akan melihat bahawa saya menggunakan SoftwareSerial untuk sambungan dengan GPS saya. Ini kerana papan Mbili hanya mempunyai 2 port bersiri. Anda boleh menyambungkan GPS ke Serial0, tetapi kemudian anda tidak dapat menggunakan terminal Arduino untuk melakukan debug. Inilah sebab mengapa saya menggunakan SoftwareSerial.

Selepas Pembolehubah Global, saya menyatakan beberapa fungsi yang memudahkan membaca program. Mereka membaca koordinat GPS, membuat bunyi bel, menghantar nilai melalui LoRa,…

Blok ketiga adalah blok persediaan. Blok ini adalah permulaan program yang menetapkan pin, komunikasi bersiri dan komunikasi I2C.

Selepas blok persediaan muncul program utama. Pada permulaan gelung utama ini, saya memeriksa sama ada sentuhan sentuh aktif. Sekiranya demikian, saya membuat bunyi buzzer, mendapatkan data GPS dan menghantar semua nilai melalui LoRa atau Bluetooth ke Raspberry PI. Selepas sensor sentuh, saya membaca nilai-nilai Accelerometer. Dengan formula saya mengira sudut tepat bagi paksi X dan Y. Sekiranya nilai ini besar, kita dapat menyimpulkan bahawa penunggang basikal terhempas. Apabila berlaku kemalangan, saya mengeluarkan bunyi bel lagi, mendapatkan data GPS dan menghantar semua nilai melalui LoRa atau Bluetooth ke Raspberry PI.

Anda mungkin berfikir: 'Mengapa anda menggunakan bluetooth dan LoRa?'. Ini kerana saya menghadapi masalah dengan lesen modul LoRa yang saya gunakan. Oleh itu, untuk menjadikan program ini berfungsi untuk demo saya, saya terpaksa menggunakan Bluetooth sebentar.

2. Bahagian belakang:

Hujung belakang adalah litle bit complex. Saya menggunakan Flask untuk laluan saya yang dapat diakses untuk bahagian depan, saya menggunakan socketio untuk mengemas kini beberapa halaman depan secara automatik, saya menggunakan pin GPIO untuk menunjukkan mesej pada paparan LCD dan menerima mesej melalui Bluetooth (tidak diperlukan jika anda menggunakan LoRa) dan saya menggunakan Threading dan Timers untuk membaca kerap API AllThinksTalk dan memulakan pelayan termos.

Saya juga menggunakan pangkalan data SQL untuk menyimpan semua kemalangan yang berlaku, membaca data peribadi penunggang basikal dan data perlumbaan. Pangkalan data ini disambungkan ke bahagian belakang dan juga berjalan di Raspberry Pi. Saya menggunakan kelas 'Database.py' untuk berinteraksi dengan pangkalan data.

Seperti yang anda ketahui dari skema Fritzing, lcd disambungkan ke Raspberry Pi melalui protokol SPI. Untuk menjadikannya lebih mudah, saya menulis kelas 'LCD_4_20_SPI.py'. Dengan kelas ini, anda dapat mengubah kontras, mengubah warna lampu latar, menulis mesej di skrin,…. Sekiranya anda ingin menggunakan Bluetooth, anda boleh menggunakan kelas 'SerialRaspberry.py'. Kelas ini mengatur komunikasi bersiri antara modul Bluetooth dan Raspberry Pi. Satu-satunya perkara yang perlu anda lakukan ialah menyambungkan modul Bluetooth ke Raspberry Pi dengan menghubungkan RX ke TX dan sebaliknya.

Laluan untuk bahagian depan ditulis dengan peraturan @ app.route. Di sini anda boleh membuat laluan tersuai anda sendiri untuk memasukkan atau memasukkan data ke dalam atau dari pangkalan data. Pastikan anda sentiasa mendapat sambutan di akhir laluan. Saya selalu mengembalikan objek JSON ke bahagian depan, walaupun berlaku ralat. Anda boleh menggunakan pemboleh ubah dalam url dengan meletakkan sekeliling pemboleh ubah.

Saya menggunakan socketio untuk laman web dengan kemalangan perlumbaan. Apabila Raspberry Pi menerima kerosakan, saya memancarkan mesej ke bahagian depan melalui socketio. Bahagian depan kemudian mengetahui bahawa mereka harus membaca semula pangkalan data kerana terdapat kemalangan baru.

Anda akan melihat bahawa dalam kod saya komunikasi LoRa ditetapkan dalam perintah. Sekiranya anda ingin menggunakan LoRa, anda perlu memulakan pemasa yang berulang-ulang menghantar permintaan ke API AllThinksTalk. Dari API ini, anda akan menerima nilai sensor (GPS, Time, Crash kind) yang dihantar oleh simpul LoRa tertentu. Anda boleh menggunakan nilai-nilai ini untuk memasukkan keretakan ke dalam pangkalan data.

3. hujung pelepah:

Hujung pelepah terdiri daripada 3 bahasa. HTML untuk teks laman web, CSS untuk markup laman web dan JavaScript untuk komunikasi dengan bahagian belakang. Saya mempunyai 4 halaman laman web untuk projek ini:

  • Index.html di mana anda boleh menemui semua perlumbaan berbasikal.
  • Halaman dengan semua kerosakan dan kerosakan mekanikal untuk perlumbaan khas.
  • Halaman di mana anda boleh menambahkan silinder ke pangkalan data dan mengedit pasukannya.
  • Halaman di mana anda dapat menambahkan perlumbaan baru dengan semua peserta ke pangkalan data.

Cara anda merancangnya bergantung sepenuhnya kepada anda. Anda boleh mendapat inspirasi dari laman web saya jika anda mahu. Malangnya laman web saya dibuat dalam bahasa Belanda, saya minta maaf untuk yang satu itu.

Saya mempunyai fail CSS dan JavaScript secara berasingan untuk setiap halaman. Setiap fail JavaScript menggunakan pengambilan untuk mendapatkan data dari pangkalan data melalui bahagian belakang. Apabila skrip menerima data, html berubah secara dinamik. Di halaman di mana anda dapat menemui kerosakan dan kerosakan mekanikal, anda akan menemui peta di mana semua peristiwa berlaku. Saya menggunakan risalah untuk menunjukkan peta ini.

Anda boleh melihat semua kod saya di Github saya.

Langkah 5: Bina Konstruk

Bina Konstruk
Bina Konstruk
Bina Konstruk
Bina Konstruk
Bina Konstruk
Bina Konstruk

Sebelum kita memulakan dengan pembinaan, pastikan anda mempunyai semua bahan dari BOM atau dari halaman 'Alat + Bekalan'.

Raspberry Pi + LCD

Kami akan mulakan dengan kes untuk Raspberry Pi. Anda boleh mencetak 3D casing, ini juga idea pertama saya. Tetapi kerana tarikh akhir saya hampir tiba, saya memutuskan untuk membuat kes mudah. Saya mengambil casing standard dari Raspberry Pi, dan saya membuka lubang pada casing untuk wayar dari paparan LCD saya. Untuk melakukan ini, anda hanya mengikuti langkah mudah ini:

  1. Lubang lubang ke penutup casing. Saya melakukan ini dengan gerudi 7mm di sisi penutup. Anda dapat melihatnya dalam gambar di atas.
  2. Keluarkan wayar dari paparan LCD dan geser kepala mengecil ke atas wayar.
  3. Gunakan pistol yang lebih ringan atau udara panas untuk membuat kepala mengecil.
  4. Tarik wayar dengan kepala mengecil melalui lubang casing, dan sambungkan kembali pada LCD.

Sekarang anda sudah siap dengan casing Raspberry Pi, anda boleh mulakan dengan casing untuk paparan LCD. Saya mencetak 3D casing untuk Paparan LCD saya kerana saya menjumpai kotak dalam talian di pautan ini. Saya hanya perlu membuat perubahan kecil pada ketinggian casing. Apabila anda menganggap gambar anda bagus, anda boleh mengeksport fail dan mula mencetak. Sekiranya anda tidak tahu bagaimana mencetak 3D, anda boleh mengikuti petunjuk ini mengenai cara mencetak 3D dengan fusion 360.

Pembinaan SODAQ MBili

Saya tidak membuat kes untuk papan SODAQ Mbili. Saya menggunakan kaca plexi untuk meletakkan komponen saya tanpa sarung di sekitar pembinaan. Sekiranya anda mahu melakukan ini juga, anda boleh mengikuti langkah-langkah berikut:

  1. Keluar plexiglass dengan dimensi papan SODAQ Mbili. Dimensinya ialah: 85mm X 56mm
  2. Potong plexiglass dengan jigsaw.
  3. Letakkan komponen elektronik pada plexiglass dan tandakan lubang dengan pensil.
  4. Lubang lubang yang baru anda tandatangani dan lubang untuk penyingkiran dengan gerudi 3.5mm.
  5. Pasang semua komponen elektronik pada plexiglass dengan bolt dan kacang 3M 10mm.
  6. Langkah terakhir adalah memasang plexiglass di atas papan Mbili. Anda boleh melakukan ini dengan berhenti, tetapi saya menggunakan dua baut 3M 50mm dan 8 kacang 3M untuk memasang plexiglass di atas papan.

Disyorkan: