- מהו חיישן תאוצה וחיישן גירוסקופי?
- MPU6050 תאוצה ומודול חיישן גירוסקופי
- רכיבים נדרשים
- תרשים מעגל
- הסבר על תכנות
MPU6050 הוא IC תאוצה 3 צירים ג'ירוסקופ 3-ציר משולב לתוך יחידה אחת. הוא כולל גם חיישן טמפרטורה ו- DCM לביצוע משימה מורכבת. MPU6050 משמש בדרך כלל בבניית מזל"ט ורובוטים מרוחקים אחרים כמו רובוט המאזן על עצמו. בפרויקט זה נבנה מד זוית דיגיטלי באמצעות MPU6050 ו- Arduino. כאן משתמשים במנוע סרוו להצגת הזווית על תמונת מד זווית. פיר מנוע סרוו מחובר עם מחט אשר תסתובב על תמונת מד זווית כדי לציין את הזווית המוצגת גם בתצוגה 16xLCD. לפני שנכנס לפרטים בואו נלמד על חיישן גירוסקופ.
מהו חיישן תאוצה וחיישן גירוסקופי?
מד תאוצה משמש למדידת התאוצה. זה למעשה מרגיש גם את התאוצה הסטטית וגם את התאוצה הדינמית. לדוגמה, טלפונים ניידים משתמשים בחיישן תאוצה כדי לחוש שהנייד נמצא במצב נוף או במצב דיוקן. השתמשנו בעבר ב- Accelerometer עם Arduino לבניית פרויקטים רבים כמו:
גירוסקופ משמש למדידת מהירות זוויתית המשתמשת בכוח המשיכה של כדור הארץ כדי לקבוע את כיוון האובייקט בתנועה. מהירות זוויתית היא קצב השינוי במיקום הזוויתי של גוף מסתובב.
לדוגמא, ניידים של ימינו משתמשים בחיישנים גירוסקופיים כדי לשחק במשחקים ניידים בהתאם לכיוון הטלפון הנייד. כמו כן, אוזניות VR משתמשות בחיישן גירוסקופ כדי לקבל תצוגות בכיוון 360
אז בעוד שמד תאוצה יכול למדוד תאוצה לינארית, גירוסקופ יכול לעזור במציאת תאוצה הסיבובית. כאשר משתמשים בשני החיישנים כמודולים נפרדים, קשה למצוא כיוון, מיקום ומהירות. אך על ידי שילוב שני החיישנים הוא פועל כיחידת מדידה אינרציאלית (IMU). אז במודול MPU6050, תאוצה וגירוסקופ נמצאים על גבי PCB יחיד כדי למצוא את הכיוון, המיקום והמהירות.
יישומים:
- משמש במזל"טים לבקרת כיוון
- איזון עצמי של רובוטים
- שליטה בזרוע רובוטית
- חיישן הטיה
- משמש בטלפונים ניידים, קונסולות משחקי וידאו
- רובוטים אנושיים
- משמש במטוסים, כלי רכב וכו '.
MPU6050 תאוצה ומודול חיישן גירוסקופי
ה- MPU6050 היא מערכות מיקרו אלקטרו-מכניות (MEMS) המורכבת ממאי תאוצה בעל 3 צירים וגירוסקופ בעל 3 צירים בתוכו. יש לו גם חיישן טמפרטורה.
זה יכול למדוד:
- תְאוּצָה
- מְהִירוּת
- נטייה
- תְזוּזָה
- טֶמפֶּרָטוּרָה
במודול זה יש גם מעבד תנועה דיגיטלי (DMP) שהוא חזק מספיק בכדי לבצע חישוב מורכב ובכך לפנות את העבודה למיקרו-בקר.
למודול יש גם שני סיכות עזר בהן ניתן להשתמש כדי לממשק מודולי IIC חיצוניים כמו מגנומטר. מכיוון שניתן להגדיר את כתובת ה- IIC של המודול, ניתן להתממשק יותר מחיישן MPU6050 אחד למיקרו -בקר באמצעות הפין AD0.
מאפיינים ומפרטים:
- ספק כוח: 3-5V
- תקשורת: פרוטוקול I2C
- ADC מובנה של 16 סיביות מספק דיוק גבוה
- DMP מובנה מספק כוח חישובי גבוה
- יכול לשמש לממשק עם מכשירי IIC אחרים כמו מגנומטר
- כתובת IIC ניתנת להגדרה
- חיישן טמפרטורה מובנה
Pinout של MPU6050:
מספר סיכה | שם סיכה | להשתמש |
1 | Vcc | מספק כוח למודול, יכול להיות + 3 וולט + 5 וולט. בדרך כלל משתמשים ב- + 5V |
2 | קרקע, אדמה | מחובר לקרקע המערכת |
3 | שעון סידורי (SCL) | משמש לאספקת דופק שעון לתקשורת I2C |
4 | נתונים סידוריים (SDA) | משמש להעברת נתונים באמצעות תקשורת I2C |
5 | נתוני סידור עזר (XDA) | יכול לשמש לממשק מודולי I2C אחרים עם MPU6050. זה אופציונלי |
6 | שעון עזר עזר (XCL) | יכול לשמש לממשק מודולי I2C אחרים עם MPU6050. זה אופציונלי |
7 | AD0 | אם משתמשים ביותר מ MPU6050 אחד ב- MCU יחיד, ניתן להשתמש בסיכה זו כדי לשנות את הכתובת |
8 | להפריע (INT) | הפסק סיכה כדי לציין כי נתונים זמינים לקריאת MCU. |
השתמשנו בעבר ב- MPU6050 עם Arduino לבניית רובוט מאזן עצמי ושיפוע מד.
רכיבים נדרשים
- ארדואינו UNO
- מודול גירוסקופ MPU6050
- צג LCD 16x2
- פוטנציומטר 10k
- מנוע סרוו SG90
- תמונת מד זווית
תרשים מעגל
דיאגרמת מעגלים עבור מד זווית זה Arduino ניתן להלן:
חיבורי מעגלים בין Arduino UNO ל- MPU6050:
MPU6050 |
ארדואינו UNO |
VCC |
+ 5 וולט |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
חיבורי מעגל בין Arduino UNO לבין מנוע סרוו:
מנוע סרוו |
ארדואינו UNO |
אדום (VCC) |
+ 5 וולט |
כתום (PWM) |
9 |
חום (GND) |
GND |
חיבורי מעגלים בין Arduino UNO ו- 16x2 LCD:
LCD |
ארדואינו ננו |
VSS |
GND |
VDD |
+ 5 וולט |
V0 |
ל- PIN של מרכז הפוטנציומטר לשליטה על ניגודיות ה- LCD |
RS |
2 |
RW |
GND |
ה |
3 |
D4 |
4 |
D5 |
5 |
D6 |
6 |
D7 |
7 |
א |
+ 5 וולט |
ק |
GND |
הסבר על תכנות
כרגיל התוכנית המלאה עם סרטון הדגמה ניתנת בסוף הדרכה זו.
כאן מנוע סרוו מחובר עם Arduino והציר שלו מוקרן על תמונת מד זווית המציין את זווית ה- MPU6050 נוטה. התכנות להדרכה זו הוא פשוט. בואו נראה את זה בפירוט.
ראשית כלול כל הספריות הנדרשות - ספריית סרוו מוטור לשימוש בסרוו, ספריית LCD לשימוש LCD וספריית חוטים לשימוש בתקשורת I2C.
ה- MPU6050 משתמש בתקשורת I2C ומכאן שהוא חייב להיות מחובר רק לסיכות I2C של הארדואינו. אז, ספריית Wire.h משמשת ליצירת תקשורת בין Arduino UNO ל- MPU6050. בעבר התממשקנו MPU6050 עם Arduino והצגנו את ערכי הקואורדינטות x, y, z על גבי 16x2 LCD.
#לִכלוֹל
לאחר מכן הגדירו את סיכות תצוגת LCD RS, E, D4, D5, D6, D7 המחוברות ל- Arduino UNO.
LiquidCrystal lcd (2,3,4,5,6,7);
בהמשך מוגדרת כתובת ה- I2C של ה- MPU6050.
const int MPU_addr = 0x68;
לאחר מכן אתחל את אובייקט myservo לשימוש במחלקת סרוו ושלושה משתנים לאחסון ערכי ציר X, Y ו- Z.
סרוו מיסרו; int16_t axis_X, axis_Y, axis_Z;
הערך המינימלי והמקסימלי הבא מוגדר כ- 265 ו- 402 למדידת זווית בין 0 ל -360.
int minVal = 265; int maxVal = 402;
הגדרת חלל ():
בשנת התקנת חלל פונקצית תקשורת I2C הראשון הוא התחילה והעברה החלה עם MPU6050 עם כתובת של 0x68.
Wire.begin (); Wire.beginTransmission (MPU_addr);
שים את ה- MPU6050 למצב שינה על ידי כתיבת 0x6B ואז מעיר אותו על ידי כתיבת 0
Wire.write (0x6B); Wire.write (0);
לאחר הפעלת MPU6050 פעיל, סיים את השידור
Wire.endTransmission (נכון);
כאן סיכת PWM של מנוע סרוו מחוברת עם סיכה 9 של Arduino UNO.
myservo.attach (9);
ברגע שאנחנו מפעילים את המעגל LCD מציג הודעת קבלת פנים ומנקה אותו לאחר 3 שניות
lcd.begin (16,2); // מגדיר את LCD במצב 16X2 lcd.print ("מעגל DIGEST"); עיכוב (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("ארדואינו"); lcd.setCursor (0,1); lcd.print ("MPU6050"); עיכוב (3000); lcd.clear ();
לולאה בטל ():
שוב, תקשורת I2C החלה עם MPU6050.
Wire.beginTransmission (MPU_addr);
ואז התחל עם הרשמה 0x3B (ACCEL_XOUT_H)
Wire.write (0x3B);
כעת התהליך מופעל מחדש על ידי שידור קצה מוגדר כשקר אך החיבור פעיל.
Wire.endTransmission (שקר);
לאחר מכן, בקש כעת את הנתונים מ -14 המרשמים.
Wire.requestFrom (MPU_addr, 14, נכון);
כעת מתקבלים ערכי רישום צירים מכובדים (x, y, z) ומאוחסנים במשתנים axis_X, axis_Y, axis_Z.
axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
ואז ממפה את הערכים האלה בין 265 ל- 402 כ-90 ל- 90. זה נעשה עבור כל שלושת הצירים.
int xAng = מפה (axis_X, minVal, maxVal, -90,90); int yAng = מפה (axis_Y, minVal, maxVal, -90,90); int zAng = מפה (axis_Z, minVal, maxVal, -90,90);
הנוסחה לחישוב ערך x במעלה (0 עד 360) מובאת להלן. כאן אנו ממירים רק x מכיוון שסיבוב המנוע הסרוו מבוסס על תנועת ערך x.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
ערך זווית X, בין 0 ל -360 מעלות, מומר ל- 0 ל -180.
int pos = מפה (x, 0,180,0,180);
לאחר מכן כתוב את ערך הזווית כדי לסובב את הסרוו על תמונת המדידה והדפס את הערכים הללו על גבי צג ה- LCD בגודל 16x2.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("זווית"); lcd.setCursor (0,1); lcd.print (x); עיכוב (500); lcd.clear ();
אז ככה ניתן להשתמש ב- MPU6050 עם Arduino למדידת הזווית. הקוד והווידאו המלא לפרויקט זה מופיעים להלן.