สารบัญ:

การติดตามการเคลื่อนไหวโดยใช้ MPU-6000 และอนุภาคโฟตอน: 4 ขั้นตอน
การติดตามการเคลื่อนไหวโดยใช้ MPU-6000 และอนุภาคโฟตอน: 4 ขั้นตอน

วีดีโอ: การติดตามการเคลื่อนไหวโดยใช้ MPU-6000 และอนุภาคโฟตอน: 4 ขั้นตอน

วีดีโอ: การติดตามการเคลื่อนไหวโดยใช้ MPU-6000 และอนุภาคโฟตอน: 4 ขั้นตอน
วีดีโอ: Arduino Nano - MPU-6000 6-Axis Motion Tracking Sensor Tutorial 2024, พฤศจิกายน
Anonim
Image
Image

MPU-6000 เป็นเซ็นเซอร์ติดตามการเคลื่อนไหวแบบ 6 แกนซึ่งมีมาตรความเร่งแบบ 3 แกนและไจโรสโคปแบบ 3 แกนฝังอยู่ในนั้น เซ็นเซอร์นี้สามารถติดตามตำแหน่งที่แน่นอนและตำแหน่งของวัตถุในระนาบ 3 มิติได้อย่างมีประสิทธิภาพ สามารถใช้ในระบบที่ต้องการการวิเคราะห์ตำแหน่งเพื่อความแม่นยำสูงสุด

ในบทช่วยสอนนี้ แสดงการเชื่อมต่อโมดูลเซ็นเซอร์ MPU-6000 กับอนุภาคโฟตอน ในการอ่านค่าความเร่งและมุมการหมุน เราใช้อนุภาคกับอะแดปเตอร์ I2c อะแดปเตอร์ I2C นี้ทำให้การเชื่อมต่อกับโมดูลเซ็นเซอร์ทำได้ง่ายและเชื่อถือได้มากขึ้น

ขั้นตอนที่ 1: ฮาร์ดแวร์ที่จำเป็น:

ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น

วัสดุที่จำเป็นในการทำงานของเราให้สำเร็จ ได้แก่ ส่วนประกอบฮาร์ดแวร์ที่กล่าวถึงด้านล่าง:

1. MPU-6000

2. อนุภาคโฟตอน

3. สายเคเบิล I2C

4. I2C Shield สำหรับอนุภาคโฟตอน

ขั้นตอนที่ 2: การเชื่อมต่อฮาร์ดแวร์:

การเชื่อมต่อฮาร์ดแวร์
การเชื่อมต่อฮาร์ดแวร์
การเชื่อมต่อฮาร์ดแวร์
การเชื่อมต่อฮาร์ดแวร์

ส่วนการเชื่อมต่อฮาร์ดแวร์โดยทั่วไปจะอธิบายการเชื่อมต่อสายไฟที่จำเป็นระหว่างเซ็นเซอร์และโฟตอนของอนุภาค ตรวจสอบให้แน่ใจว่าการเชื่อมต่อถูกต้องเป็นสิ่งจำเป็นพื้นฐานในขณะที่ทำงานกับระบบใด ๆ สำหรับเอาต์พุตที่ต้องการ ดังนั้น การเชื่อมต่อที่จำเป็นมีดังนี้:

MPU-6000 จะทำงานบน I2C นี่คือตัวอย่างไดอะแกรมการเดินสาย ซึ่งสาธิตวิธีเชื่อมต่อแต่ละอินเทอร์เฟซของเซ็นเซอร์

นอกกรอบ บอร์ดได้รับการกำหนดค่าสำหรับอินเทอร์เฟซ I2C ดังนั้นเราขอแนะนำให้ใช้การเชื่อมต่อนี้หากคุณไม่เชื่อเรื่องพระเจ้า สิ่งที่คุณต้องมีคือสี่สาย!

ต้องใช้พิน Vcc, Gnd, SCL และ SDA เพียงสี่การเชื่อมต่อเท่านั้น และเชื่อมต่อด้วยสายเคเบิล I2C

การเชื่อมต่อเหล่านี้แสดงให้เห็นในภาพด้านบน

ขั้นตอนที่ 3: โค้ดสำหรับการติดตามการเคลื่อนไหว:

รหัสสำหรับการติดตามการเคลื่อนไหว
รหัสสำหรับการติดตามการเคลื่อนไหว

เริ่มต้นด้วยรหัสอนุภาคตอนนี้

ในขณะที่ใช้โมดูลเซ็นเซอร์กับ Arduino เราได้รวมไลบรารี application.h และ spark_wiring_i2c.h "application.h" และไลบรารี spark_wiring_i2c.h มีฟังก์ชันที่อำนวยความสะดวกในการสื่อสาร i2c ระหว่างเซ็นเซอร์และอนุภาค

รหัสอนุภาคทั้งหมดได้รับด้านล่างเพื่อความสะดวกของผู้ใช้:

#include#include // ที่อยู่ MPU-6000 I2C คือ 0x68(104) #define Addr 0x68 int xGyro = 0, yGyro = 0, zGyro = 0, xAccl = 0, yAccl = 0, zAccl = 0; การตั้งค่าเป็นโมฆะ () {// ตั้งค่าตัวแปร Particle.variable ("i2cdevice", "MPU-6000"); Particle.variable("xAccl", xAccl); Particle.variable("yAccl", yAccl); Particle.variable("zAccl", zAccl); ตัวแปรอนุภาค ("xGyro", xGyro); Particle.variable("yGyro", yGyro); Particle.variable("zGyro", zGyro); // เริ่มต้นการสื่อสาร I2C เป็น Master Wire.begin(); // เริ่มต้นการสื่อสารแบบอนุกรม กำหนดอัตรารับส่งข้อมูล = 9600 Serial.begin(9600); // เริ่มส่ง I2C Wire.beginTransmission(Addr); // เลือกการลงทะเบียนการกำหนดค่าไจโรสโคป Wire.write(0x1B); // ช่วงสเกลเต็ม = 2000 dps Wire.write (0x18); // หยุดการส่ง I2C Wire.endTransmission(); // เริ่มส่ง I2C Wire.beginTransmission(Addr); // เลือกการลงทะเบียนการกำหนดค่ามาตรความเร่ง Wire.write(0x1C); // ช่วงสเกลเต็ม = +/-16g Wire.write (0x18); // หยุดการส่ง I2C Wire.endTransmission(); // เริ่มส่ง I2C Wire.beginTransmission(Addr); // เลือกการลงทะเบียนการจัดการพลังงาน Wire.write(0x6B); // PLL พร้อมการอ้างอิง xGyro Wire.write(0x01); // หยุดการส่ง I2C Wire.endTransmission(); ล่าช้า (300); } void loop() { ข้อมูล int ที่ไม่ได้ลงชื่อ[6]; // เริ่มส่ง I2C Wire.beginTransmission(Addr); // เลือก data register Wire.write(0x3B); // หยุดการส่ง I2C Wire.endTransmission(); // ขอข้อมูล 6 ไบต์ Wire.requestFrom(Addr, 6); // อ่านข้อมูล 6 ไบต์ ถ้า (Wire.available() == 6) { data[0] = Wire.read(); ข้อมูล[1] = Wire.read(); ข้อมูล [2] = Wire.read(); ข้อมูล[3] = Wire.read(); ข้อมูล[4] = Wire.read(); ข้อมูล[5] = Wire.read(); } ล่าช้า (800); // แปลงข้อมูล xAccl = ((data[1] * 256) + data[0]); ถ้า (xAccl > 32767) { xAccl -= 65536; } yAccl = ((ข้อมูล[3] * 256) + ข้อมูล[2]); ถ้า (yAccl > 32767) { yAccl -= 65536; } zAccl = ((ข้อมูล[5] * 256) + ข้อมูล[4]); ถ้า (zAccl > 32767) { zAccl -= 65536; } ล่าช้า (800); // เริ่มส่ง I2C Wire.beginTransmission(Addr); // เลือกการลงทะเบียนข้อมูล Wire.write(0x43); // หยุดการส่ง I2C Wire.endTransmission(); // ขอข้อมูล 6 ไบต์ Wire.requestFrom(Addr, 6); // อ่านข้อมูล 6 ไบต์ ถ้า (Wire.available() == 6) { data[0] = Wire.read(); ข้อมูล[1] = Wire.read(); ข้อมูล [2] = Wire.read(); ข้อมูล[3] = Wire.read(); ข้อมูล[4] = Wire.read(); ข้อมูล[5] = Wire.read(); } // แปลงข้อมูล xGyro = ((data[1] * 256) + data[0]); ถ้า (xGyro > 32767) { xGyro -= 65536; } yGyro = ((ข้อมูล[3] * 256) + ข้อมูล[2]); ถ้า (yGyro > 32767) { yGyro -= 65536; } zGyro = ((ข้อมูล[5] * 256) + ข้อมูล[4]); ถ้า (zGyro > 32767) { zGyro -= 65536; } // ส่งออกข้อมูลไปยังแดชบอร์ด Particle.publish("Acceleration in X-Axis: ", String(xAccl)); ล่าช้า (1000); Particle.publish("การเร่งความเร็วในแกน Y: ", สตริง (yAccl)); ล่าช้า (1000); Particle.publish("การเร่งความเร็วในแกน Z: ", สตริง (zAccl)); ล่าช้า (1000); Particle.publish("แกน X ของการหมุน: ", String(xGyro)); ล่าช้า (1000); Particle.publish("แกน Y ของการหมุน: ", String(yGyro)); ล่าช้า (1000); Particle.publish("แกน Z ของการหมุน: ", String(zGyro)); ล่าช้า (1000); }

ฟังก์ชัน Particle.variable() สร้างตัวแปรเพื่อเก็บเอาต์พุตของเซ็นเซอร์ และฟังก์ชัน Particle.publish() จะแสดงเอาต์พุตบนแดชบอร์ดของไซต์

เอาต์พุตเซ็นเซอร์แสดงในภาพด้านบนสำหรับการอ้างอิงของคุณ

ขั้นตอนที่ 4: การใช้งาน:

การใช้งาน
การใช้งาน

MPU-6000 เป็นเซ็นเซอร์ติดตามการเคลื่อนไหว ซึ่งพบแอปพลิเคชันในอินเทอร์เฟซการเคลื่อนไหวของสมาร์ทโฟนและแท็บเล็ต ในสมาร์ทโฟนสามารถใช้เซ็นเซอร์เหล่านี้ในแอปพลิเคชันต่างๆ เช่น คำสั่งท่าทางสัมผัสสำหรับแอปพลิเคชันและการควบคุมโทรศัพท์ การเล่นเกมที่ได้รับการปรับปรุง เพิ่มความเป็นจริงยิ่งขึ้น การจับภาพและการดูภาพถ่ายพาโนรามา และระบบนำทางสำหรับคนเดินเท้าและในรถยนต์ เทคโนโลยี MotionTracking สามารถแปลงโทรศัพท์เคลื่อนที่และแท็บเล็ตให้เป็นอุปกรณ์อัจฉริยะ 3 มิติที่มีประสิทธิภาพ ซึ่งสามารถใช้ในแอปพลิเคชันต่างๆ ตั้งแต่การตรวจสุขภาพและฟิตเนส ไปจนถึงบริการตามตำแหน่ง

แนะนำ: