Πίνακας περιεχομένων:

Arduino Vr: 4 βήματα
Arduino Vr: 4 βήματα

Βίντεο: Arduino Vr: 4 βήματα

Βίντεο: Arduino Vr: 4 βήματα
Βίντεο: Программирование AVR на языке Ассемблер, часть 4. "Зажигаем светодиод" 2024, Ιούλιος
Anonim
Arduino Vr
Arduino Vr

Γεια Με λένε Κρίστιαν και είμαι 13 ετών. Λατρεύω το arduino και έχω ένα ταλέντο γι 'αυτό, εδώ είναι το διδακτικό μου για ένα arduino vr.

Προμήθειες

Προμήθειες:

1. Arduino board Mega, Due, Uno ή Yun.

2. Σύρματα από αρσενικά σε αρσενικά (τυπικά καλώδια άλτη).

3. Μικρή σανίδα ψωμιού

4. USB

5. GY-521 MPU-6050

Προαιρετικός:

6. Οθόνη LCD 5,5 ιντσών 2560*1440 2K HDMI σε MIPI

7. Φακός Fresnel Εστιακό μήκος 50mm

8. Τρισδιάστατος εκτυπωτής ή υπηρεσία τρισδιάστατου εκτυπωτή

Βήμα 1: Συναρμολόγηση

Συγκεντρώνουν
Συγκεντρώνουν

Χρησιμοποιήστε το σχηματικό για να το συνδυάσετε.

Βήμα 2: Πώς να εγκαταστήσετε τη βιβλιοθήκη;

Ρίξτε μια ματιά στο Github: https://github.com/relativty/Relativ Μπορείτε είτε να το εγκαταστήσετε χρησιμοποιώντας το Git είτε να το κατεβάσετε απευθείας.

Βήμα 3: Κωδικός

// i2cdevlib και MPU6050 χρειάζονται:

// Ευχαριστώ πολύ τον εκπληκτικό Jeff Rowberg <3, ελέγξτε το repo του για να μάθετε περισσότερα MPU6050. // =============================================== =============================

// I2Cdev και MPU6050 πρέπει να εγκατασταθούν ως βιβλιοθήκες, αλλιώς τα αρχεία.cpp/.h // και για τις δύο τάξεις πρέπει να βρίσκονται στη διαδρομή συμπερίληψης του έργου σας

#include "Relativ.h"

#include "I2Cdev.h"

#include "MPU6050_6Axis_MotionApps20.h"

#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif

MPU6050 mpu. Σχετική σχετικότητα;

#define INTERRUPT_PIN 2

// Κατάσταση και έλεγχος IMU: bool dmpReady = false; // true αν το DMP init ήταν επιτυχές uint8_t mpuIntStatus. uint8_t devStatus; // 0 = επιτυχία,! 0 = σφάλμα uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64];

Quaternion q; // [w, x, y, z]

πτητικό bool mpuInterrupt = false; // υποδεικνύει εάν ο πείρος διακοπής MPU έχει πάει πολύ void dmpDataReady () {mpuInterrupt = true; }

void setup () {#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // ρολόι I2C 400kHz. Σχολιάστε αυτήν τη γραμμή εάν αντιμετωπίζετε δυσκολίες στη σύνταξη #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #τέλος εαν

relativ.startNative (); // Το "startNative" μπορεί να χρησιμοποιηθεί για μικροελεγκτή πυρήνα ARM 32-bit με εγγενή USB όπως το Arduino DUE // που συνιστάται. // Relativ.start (); // "Έναρξη" είναι για ΜΙΚΡΟ-μικροελεγκτή USB, όπως Arduino MEGA, Arduino UNO.. // Αυτά είναι σημαντικά πιο αργά. mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT);

SerialUSB.println (mpu.testConnection ()? F ("Η σύνδεση MPU6050 είναι επιτυχής"): F ("Η σύνδεση MPU6050 απέτυχε"));

// διαμορφώστε το DMP devStatus = mpu.dmpInitialize ();

// ================================== // παρέχετε τις δικές σας αντισταθμίσεις γυροσυστήματος εδώ: // === =============================== mpu.setXGyroOffset (220) · mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788);

// devSTatus εάν όλα λειτουργούσαν σωστά εάν (devStatus == 0) {// ενεργοποιήσετε το DMP, τώρα που είναι έτοιμο mpu.setDMPEnabled (true);

// ενεργοποίηση Arduino interrupt detection attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus ();

dmpReady = true;

// λάβετε το αναμενόμενο μέγεθος πακέτου DMP για μεταγενέστερη σύγκριση packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ERROR! }}

void loop () {// Μην κάνετε τίποτα εάν το DMP δεν αρχικοποιήσει σωστά εάν (! dmpReady) επιστρέψει.

// περιμένετε να είναι διαθέσιμη η διακοπή MPU ή επιπλέον πακέτα (ες) όσο (! mpuInterrupt && fifoCount <packetSize) {}

// επαναφορά σημαίας διακοπής και λήψη INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus ();

// λάβετε τον τρέχοντα αριθμό FIFO fifoCount = mpu.getFIFOCount ();

if ((mpuIntStatus & 0x10) || fifoCount == 1024) {mpu.resetFIFO (); } // έλεγχος για διακοπή else if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) fifoCount = mpu.getFIFOCount (); mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); relativ.updateOrientationNative (q.x, q.y, q.z, q.w, 4); // updateOrientationNative "μπορεί να χρησιμοποιηθεί για μικρο-ελεγκτή πυρήνα ARM 32-bit με εγγενή USB όπως το Arduino DUE // που συνιστάται. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" είναι για μη-φυσικό μικροελεγκτή USB, όπως το Arduino MEGA, το Arduino UNO.. // Αυτά είναι σημαντικά πιο αργά. }}

Βήμα 4: Παίξτε

η μετακίνηση του μικρού πίνακα σε οποιοδήποτε παιχνίδι vr πρέπει να περιστρέψει την κάμερα

Συνιστάται: