สารบัญ:
- ขั้นตอนที่ 1: ฮาร์ดแวร์ที่จำเป็น:
- ขั้นตอนที่ 2: การเชื่อมต่อฮาร์ดแวร์:
- ขั้นตอนที่ 3: โค้ดสำหรับการติดตามการเคลื่อนไหว:
- ขั้นตอนที่ 4: การใช้งาน:
วีดีโอ: การติดตามการเคลื่อนไหวโดยใช้ MPU-6000 และอนุภาคโฟตอน: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
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 มิติที่มีประสิทธิภาพ ซึ่งสามารถใช้ในแอปพลิเคชันต่างๆ ตั้งแต่การตรวจสุขภาพและฟิตเนส ไปจนถึงบริการตามตำแหน่ง
แนะนำ:
การวัดความเร่งโดยใช้ ADXL345 และอนุภาคโฟตอน: 4 ขั้นตอน
การวัดความเร่งโดยใช้ ADXL345 และอนุภาคโฟตอน: ADXL345 เป็นมาตรความเร่งแบบ 3 แกนที่มีกำลังไฟต่ำและบางเป็นพิเศษซึ่งใช้พลังงานต่ำมากและมีความละเอียดสูง (13 บิต) ที่การวัดสูงสุด ±16 กรัม ข้อมูลเอาท์พุตดิจิตอลมีรูปแบบเป็นส่วนประกอบสองส่วน 16 บิต และสามารถเข้าถึงได้ผ่านอินเทอร์เฟซดิจิตอล I2 C มันวัดการ
การวัดสนามแม่เหล็กโดยใช้ HMC5883 และอนุภาคโฟตอน: 4 ขั้นตอน
การวัดสนามแม่เหล็กโดยใช้ HMC5883 และอนุภาคโฟตอน: HMC5883 เป็นเข็มทิศดิจิตอลที่ออกแบบมาสำหรับการตรวจจับสนามแม่เหล็กระดับต่ำ อุปกรณ์นี้มีช่วงสนามแม่เหล็กกว้าง +/-8 Oe และอัตราเอาต์พุต 160 Hz เซ็นเซอร์ HMC5883 ประกอบด้วยตัวขับสายรัดแบบลดแรงดันอัตโนมัติ การยกเลิกออฟเซ็ต และ
การวัดความชื้นโดยใช้ HYT939 และอนุภาคโฟตอน: 4 ขั้นตอน
การวัดความชื้นโดยใช้ HYT939 และอนุภาคโฟตอน: HYT939 เป็นเซ็นเซอร์ความชื้นแบบดิจิตอลที่ทำงานบนโปรโตคอลการสื่อสาร I2C ความชื้นเป็นตัวแปรสำคัญเมื่อพูดถึงระบบทางการแพทย์และห้องปฏิบัติการ ดังนั้นเพื่อให้บรรลุเป้าหมายเหล่านี้ เราจึงพยายามเชื่อมต่อ HYT939 กับราสเบอร์รี่ pi ผม
การวัดความเร่งโดยใช้ H3LIS331DL และอนุภาคโฟตอน: 4 ขั้นตอน
การวัดความเร่งโดยใช้ H3LIS331DL และอนุภาคโฟตอน: H3LIS331DL เป็นเครื่องวัดความเร่งเชิงเส้นแบบ 3 แกนประสิทธิภาพสูงที่ใช้พลังงานต่ำซึ่งเป็นของตระกูล "นาโน" พร้อมอินเทอร์เฟซแบบอนุกรม I²C แบบดิจิตอล H3LIS331DL มีสเกลแบบเต็มที่ผู้ใช้สามารถเลือกได้ ±100g/±200g/±400g และสามารถวัดความเร่งด้วย
การวัดอุณหภูมิโดยใช้ MCP9803 และอนุภาคโฟตอน: 4 ขั้นตอน
การวัดอุณหภูมิโดยใช้ MCP9803 และอนุภาคโฟตอน: MCP9803 เป็นเซ็นเซอร์อุณหภูมิความแม่นยำสูงแบบ 2 สาย สิ่งเหล่านี้รวมเข้ากับการลงทะเบียนที่ผู้ใช้ตั้งโปรแกรมได้ซึ่งอำนวยความสะดวกในการใช้งานการตรวจวัดอุณหภูมิ เซ็นเซอร์นี้เหมาะสำหรับระบบตรวจสอบอุณหภูมิแบบหลายโซนที่มีความซับซ้อนสูง ใ