2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
MPU-6000 הוא חיישן מעקב תנועה בעל 6 צירים הכולל מד תאוצה 3 צירים וג'ירוסקופ 3 צירים. חיישן זה מסוגל לבצע מעקב יעיל אחר המיקום והמיקום המדויק של אובייקט במישור התלת ממדי. זה יכול להיות מועסק במערכות הדורשות ניתוח מיקום בדיוק הכי גבוה.
במדריך זה הודגם הממשק של מודול החיישנים MPU-6000 עם פוטון חלקיקים. כדי לקרוא את ערכי ההאצה וזווית הסיבוב, השתמשנו בחלקיקים עם מתאם I2c. מתאם I2C זה הופך את החיבור למודול החיישן לקל ואמין יותר.
שלב 1: חומרה נדרשת:
החומרים הדרושים לביצוע המשימה שלנו כוללים את רכיבי החומרה המפורטים להלן:
1. MPU-6000
2. פוטון חלקיקים
3. כבל I2C
4. מגן I2C לפוטון חלקיקים
שלב 2: חיבור חומרה:
סעיף חיבור החומרה מסביר בעצם את חיבורי החיווט הנדרשים בין החיישן לפוטון החלקיקים. הבטחת חיבורים נכונים היא ההכרח הבסיסי בעת עבודה על כל מערכת לתפוקה הרצויה. אז, החיבורים הנדרשים הם כדלקמן:
ה- MPU-6000 יפעל מעל I2C. להלן תרשים החיווט לדוגמה, המדגים כיצד לחבר כל ממשק של החיישן.
הלוח מחוץ לקופסה מוגדר לממשק I2C, ולכן אנו ממליצים להשתמש בחיבור זה אם אתה אגנוסטי אחרת. כל מה שאתה צריך זה ארבעה חוטים!
רק ארבעה חיבורים נדרשים סיכות Vcc, Gnd, SCL ו- SDA ואלו מחוברים בעזרת כבל I2C.
קשרים אלה מודגמים בתמונות למעלה.
שלב 3: קוד למעקב אחר תנועה:
נתחיל עם קוד החלקיקים עכשיו.
בעת השימוש במודול החיישנים עם הארדואינו, אנו כוללים את ספריית 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; הגדרת void () {// הגדר משתנה Particle.variable ("i2cdevice", "MPU-6000"); Particle.variable ("xAccl", xAccl); Particle.variable ("yAccl", yAccl); Particle.variable ("zAccl", zAccl); Particle.variable ("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); // טווח בקנה מידה מלא = +/- 16 גרם Wire.write (0x18); // עצור את שידור I2C Wire.endTransmission (); // התחל את שידור I2C Wire.beginTransmission (Addr); // בחר רישום ניהול צריכת חשמל Wire.write (0x6B); // PLL עם הפניה xGyro Wire.write (0x01); // עצור את שידור I2C Wire.endTransmission (); עיכוב (300); } לולאת void () {נתוני int ללא חתום [6]; // התחל את שידור I2C Wire.beginTransmission (Addr); // בחר רישום נתונים Wire.write (0x3B); // עצור את שידור I2C Wire.endTransmission (); // בקש 6 בתים של נתונים Wire.requestFrom (Addr, 6); // קרא 6 בתים של נתונים אם (Wire.available () == 6) {data [0] = Wire.read (); data [1] = Wire.read (); data [2] = Wire.read (); data [3] = Wire.read (); data [4] = Wire.read (); data [5] = Wire.read (); } עיכוב (800); // המרת הנתונים xAccl = ((נתונים [1] * 256) + נתונים [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 (); data [1] = Wire.read (); data [2] = Wire.read (); data [3] = Wire.read (); data [4] = Wire.read (); data [5] = Wire.read (); } // המרת הנתונים xGyro = ((נתונים [1] * 256) + נתונים [0]); אם (xGyro> 32767) {xGyro -= 65536; } yGyro = ((נתונים [3] * 256) + נתונים [2]); אם (yGyro> 32767) {yGyro -= 65536; } zGyro = ((נתונים [5] * 256) + נתונים [4]); אם (zGyro> 32767) {zGyro -= 65536; } // נתוני פלט ללוח המחוונים Particle.publish ("האצה בציר X:", מחרוזת (xAccl)); עיכוב (1000); Particle.publish ("האצה בציר Y:", מחרוזת (yAccl)); עיכוב (1000); Particle.publish ("האצה בציר Z:", מחרוזת (zAccl)); עיכוב (1000); פרסומת Particle.publish ("ציר X של סיבוב:", מחרוזת (xGyro)); עיכוב (1000); פרסומת Particle.publish ("ציר Y של סיבוב:", מחרוזת (yGyro)); עיכוב (1000); פרסומת Particle.publish ("ציר Z של סיבוב:", מחרוזת (zGyro)); עיכוב (1000); }
הפונקציה Particle.variable () יוצרת את המשתנים לאחסון הפלט של החיישן והפונקציה Particle.publish () מציגה את הפלט בלוח המחוונים של האתר.
פלט החיישן מוצג בתמונה למעלה לעיונך.
שלב 4: יישומים:
MPU-6000 הוא חיישן מעקב אחר תנועה, שמוצא את יישומו בממשק התנועה של סמארטפונים וטאבלטים. בסמארטפונים ניתן להשתמש בחיישנים אלה ביישומים כגון פקודות מחווה ליישומים ושליטה טלפונית, משחקים משופרים, מציאות רבודה, צילום וצפייה פנורמיים וניווט להולכי רגל ורכב. טכנולוגיית MotionTracking יכולה להמיר מכשירים וטאבלטים למכשירים חכמים תלת-ממדיים שניתן להשתמש בהם ביישומים החל מניטור בריאות וכושר וכלה בשירותים מבוססי מיקום.