Tentang proyek ini
Ini adalah proyek yang sangat menyenangkan dan mudah yang dapat dilakukan dalam waktu sekitar satu jam. Di bagian bawah skateboard terdapat akselerometer/gyro dengan papan Arduino yang mentransmisikan gerakan sudut papan melalui Bluetooth ke game VR kecil yang saya buat di Unity untuk ponsel Android. Jadi, ketika Anda menyalakan Arduino dan bluetooth terhubung dengan telepon Anda, Anda mulai bergerak maju. Condong ke kiri dan Anda ke kiri, condong ke kanan dan Anda ke kanan. Angkat roda depan dan karakter Anda akan melompat. Ini hanya berfungsi untuk ponsel Android dan ponsel Anda harus kompatibel dengan Google Cardboard. Jadi, jika Anda memiliki papan luncur lama, ubahlah menjadi papan luncur realitas virtual. Begini caranya:
Anda akan membutuhkan:
Headset realitas virtual bergaya Google Cardboard.
Sebuah skateboard.
4 bola tenis (agar tidak menggelinding)
Arduino Leonardo (atau Uno)
Beberapa kabel jumper
Papan tempat memotong roti mini
Modul Bluetooth HC-06
Akselerometer/gyro MPU-6050
Baterai 9V dengan kotak baterai yang memiliki sakelar hidup/mati dan colokan barel (untuk memberi daya pada papan Arduino)
Besi solder dan mungkin pistol lem panas
Aplikasi Android, kode Arduino, dan daftar suku cadang dengan tautan dapat ditemukan di sini:
http://wirebeings.com/virtual-reality-skateboard.html
Langkah 1:Buat Perangkat/Pemancar/Input/Barang Arduino Anda
Rakit perangkat Anda seperti yang ditunjukkan pada gambar di atas.
Anda perlu menyolder pin header ke MPU-6050, jika besi solder Anda baru dan ujungnya bersih, ini dapat dilakukan dalam waktu sekitar 11 detik. Jika ujung besi solder Anda kotor dan tua, ini akan dengan cepat menjadi hal tersulit yang pernah Anda lakukan (berdasarkan pengalaman).
Pastikan orientasi semuanya persis seperti yang ditunjukkan pada gambar di atas sehingga Anda tidak perlu masuk ke kode dan mengedit apa pun.
Lampirkan semuanya ke skateboard Anda PERSIS seperti yang ditunjukkan (pastikan saja MPU6050 menghadap ke arah yang sama dengan gambar)
Di sini saya merekatkan kotak baterai ke papan dengan lem panas dan memasang papan Arduino ke bawah. Saya menggunakan papan sekolah lama karena papan yang lebih lebar lebih baik untuk tujuan pengalaman ini. Cukup sulit untuk menyeimbangkan di papan saat berada dalam realitas virtual.
CATATAN:Leonardo bekerja jauh lebih baik untuk ini...namun...
Jika Anda menggunakan Arduino Uno, semua koneksinya sama kecuali:
SDA ke A4 dan SCL ke A5
Langkah 2:Unggah kode Arduino ke Perangkat / Pemancar / Masukan Anda PENTING:Cabut pin RX dan TX sebelum mengupload kode ke board Anda.
Langkah 3:Hampir selesai! Unduh Aplikasi ke Ponsel Anda!
Ikuti tautan ini dan unduh aplikasi ke ponsel Anda.
Aplikasi Skateboard/Snowboard Virtual Reality Google Karton
Anda harus masuk ke setelan keamanan dan mengizinkan aplikasi dipasang dari pengembang yang tidak dikenal.
Pastikan untuk memasangkan modul Bluetooth ke telepon Anda, jangan mengubah nama default (HC-06). Sandi harus 1234.
Catatan:
Ini adalah Game Unity pertama saya...jadi ini cukup mendasar.
Jika cukup banyak orang yang membuat ini, saya dapat mencoba membuat permainan papan luncur salju yang lebih baik, atau membuat permainan papan seluncur yang sebenarnya tergantung pada permintaan yang saya dapatkan.
Saat menghidupkan perangkat Arduino Anda, pastikan skateboard rata di tanah dan kemudian buka aplikasinya. Segera setelah Bluetooth terhubung, Anda akan masuk.
Jika Bluetooth terputus, mulai ulang aplikasi (ini disetel untuk terhubung hanya di awal aplikasi, untuk saat ini).
Kode
Kode ArduinoArduino
#include "I2Cdev.h"#include "MPU6050_6Axis_MotionApps20.h"#if I2CDEV_IMPLEMENTATION ==I2CDEV_ARDUINO_WIRE #include "Wire.h"#endifMPU6050 mpu;bool dmpReady =false; uint8_t mpuIntStatus; uint8_t devStatus; ukuran paket uint16_t; uint16_t fifoCount; uint8_t fifoBuffer[64]; Quaternion q; VektorInt16 aa; VectorInt16 aaReal; VectorInt16 aaWorld; gravitasi vektorFloat; mengapung euler[3]; mengapung ypr[3]; volatil bool mpuInterrupt =false; void setup() { #jika I2CDEV_IMPLEMENTATION ==I2CDEV_ARDUINO_WIRE Wire.begin(); TWBR =24; #elif I2CDEV_IMPLEMENTATION ==I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif Serial.begin(9600); //Untuk digunakan dengan Arduino Uno Serial1.begin(9600); //Untuk digunakan dengan Leonardo Serial.println(F("Menginisialisasi perangkat I2C...")); mpu.initialize(); Serial.println(F("Menguji koneksi perangkat...")); Serial.println(mpu.testConnection() ? F("Koneksi MPU6050 berhasil") :F("Koneksi MPU6050 gagal")); Serial.println(F("Inisialisasi DMP...")); devStatus =mpu.dmpInitialize(); mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); if (devStatus ==0) { Serial.println(F("Mengaktifkan DMP...")); mpu.setDMPEnabled(benar); Serial.println(F("Mengaktifkan deteksi interupsi (interupsi eksternal Arduino 0)...")); attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus =mpu.getIntStatus(); Serial.println(F("DMP siap! Menunggu interupsi pertama...")); dmpSiap =benar; packetSize =mpu.dmpGetFIFOPacketSize(); } else { Serial.print(F("Inisialisasi DMP gagal (kode ")); Serial.print(devStatus); Serial.println(F(")")); } }void sendData(int x, int y, int z){ if(z <-10){ //forward Serial1.write("f"); // Tulis ke Leonardo Serial1.write(10); //Hentikan Bit Serial.write("f"); // Tulis ke Uno Serial.write(10); //Hentikan bit } else if (z> 0){ //backward Serial1.write("b"); Serial1.write(10); Serial.write("b"); Serial.tulis(10); } else if (y> 5){ //Untuk membuat nilai perubahan yang lebih sensitif menjadi 4 atau kurang //right Serial1.write("r"); Serial1.write(10); Serial.write("r"); Serial.tulis(10); } else if (y <-5){ //Untuk membuat perubahan yang lebih sensitif ke -4 atau lebih besar //left Serial1.write("l"); Serial1.write(10); Serial.write("l"); Serial.tulis(10); } else //hentikan Serial1.write("s"); Serial1.write(10); Serial.write("s"); Serial.tulis(10); }void loop() { jika (!dmpReady) kembali; mpuInterrupt =salah; mpuIntStatus =mpu.getIntStatus(); fifoCount =mpu.getFIFOCount(); if ((mpuIntStatus &0x10) || fifoCount ==1024) { mpu.resetFIFO(); Serial.println(F("FIFO Meluap")); } else if (mpuIntStatus &0x02) { while (fifoCount Skema