- רכיבים נדרשים:
- חיישן ג'יירו MPU6050:
- תיאור:
- תרשים מעגל והסבר:
- קביעת תצורה של Raspberry Pi עבור חיישן ג'יירו MPU6050:
- הסבר על תכנות:
לחיישן MPU6050 פונקציות רבות על פני השבב היחיד. הוא מורכב ממד תאוצה MEMS, מג'ירו MEMS וחיישן טמפרטורה. מודול זה מדויק מאוד בעת המרת ערכים אנלוגיים לדיגיטל מכיוון שיש לו חומרת אנלוגי ממיר דיגיטלי 16 ביט לכל ערוץ. מודול זה מסוגל ללכוד ערוצים x, y ו- z בו זמנית. יש לו ממשק I2C לתקשר עם הבקר המארח. מודול MPU6050 זה הוא שבב קומפקטי בעל מד תאוצה וג'ירו. זהו מכשיר שימושי מאוד עבור יישומים רבים כמו מזל"טים, רובוטים, חיישני תנועה. זה נקרא גם גירוסקופ או מד תאוצה עם ציר משולש.
היום במאמר זה אנו מתכוונים לממשק MPU6050 זה עם Raspberry Pi ולהציג את הערכים מעל 16x2 LCD.
רכיבים נדרשים:
- פאי פטל
- MPU-6050
- עציץ 10K
- כבל מגשר
- קרש לחם
- ספק כוח
חיישן ג'יירו MPU6050:
MPU-6050 הוא ג'יירו 8-פינים ומד תאוצה בשבב יחיד. מודול זה עובד על תקשורת טורית I2C כברירת מחדל, אך ניתן להגדירו לממשק SPI על ידי הגדרת הרישום שלו. ל- I2C יש קווי SDA ו- SCL. כמעט כל הפינים מרובי תפקודים אך כאן אנו ממשיכים רק עם פינים של מצב I2C.
תצורת סיכה:
Vcc: - סיכה זו משמשת להפעלת מודול MPU6050 ביחס לקרקע
GND: - זהו סיכת קרקע
SDA: - סיכת SDA משמשת לנתונים בין בקר למודול mpu6050
SCL: - סיכת SCL משמשת להזנת שעון
XDA: - זהו קו נתונים חיישן I2C SDA לתצורה וקריאה מחיישנים חיצוניים ((אופציונלי) לא נעשה שימוש במקרה שלנו)
XCL: - זהו קו שעון חיישן I2C SCL לתצורה וקריאה מחיישנים חיצוניים ((אופציונלי) לא נעשה שימוש במקרה שלנו)
ADO: - כתובת עבדים I2C LSB (לא רלוונטי במקרה שלנו)
INT: - סיכה הפסקה לציון נתונים מוכנים.
בעבר התממשקנו MPU6050 עם Arduino.
תיאור:
במאמר זה אנו מציגים קריאות טמפרטורה, גירו ומד תאוצה מעל LCD באמצעות MPU6050 עם Raspberry Pi. אם אתה לא חדש ב- Raspberry Pi, עיין בסעיף ההדרכות של Raspberry Pi ולמד כיצד להתחיל בעבודה עם Raspberry Pi.
בפרויקט זה, לראשונה הראינו ערך טמפרטורה על גבי LCD ולאחר זמן מה אנו מציגים ערכי גירו ואז לאחר זמן מה יש לנו קריאות מד תאוצה, כפי שמוצג בתמונות למטה:
תרשים מעגל והסבר:
תרשים המעגל, לממשק MPU6050 עם Raspberry Pi, פשוט מאוד כאן השתמשנו ב- LCD ו- MPU6050. סיר 10k משמש לשליטה על בהירות ה- LCD. בקשר ל- MPU6050, ביצענו 4 חיבורים בהם חיברנו את אספקת החשמל 3.3v ואת האדמה של MPU6050 ל- 3.3v ואת הקרקע של Raspberry Pi. סיכות SCL ו- SDA של MPU6050 מחוברות לסיכה הפיזית 3 של פטל (GPIO2) ולסיכה 5 (GPIO3). ה- RS, RW ו- EN של LCD מחוברים ישירות ל- GPIO18, ו- 23 של פטל פטל. סיכת נתונים מחוברת ישירות למספר הסיכה הדיגיטלי GPIO24, GPIO25, GPIO8 ו- GPIO7. למידע נוסף על ממשק LCD עם Raspberry Pi כאן.
קביעת תצורה של Raspberry Pi עבור חיישן ג'יירו MPU6050:
לפני שתתחיל בתכנות, עלינו לאפשר את i2c של Raspberry Pi על ידי שימוש בשיטה הנתונה:
שלב 1: אפשר תקשורת I2C
לפני התקנת ספריית Adafruit SSD1306 עלינו לאפשר תקשורת I2C ב- Raspberry Pi.
כדי לעשות סוג זה במסוף Raspberry Pi:
sudo raspi -config
ואז יופיע מסך כחול. עכשיו בחר באפשרות ממשק
אחרי זה, אנחנו צריכים לבחור I2C
</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>
אחרי זה, עלינו לבחור כן ולחץ על Enter ואז בסדר
לאחר מכן, עלינו להפעיל מחדש את פטל פטל על ידי הנפקת הפקודה הבאה:
אתחול סודה מחדש
שלב 2: התקן פייתון-פיפ וספריית GPIO
sudo apt-get להתקין python-dev פיתון-פיפ חיוני
לאחר מכן, עלינו להתקין את ספריית ה- GPIO של פטל
sudo pip מתקין את RPi.GPIO
שלב 3: התקן את ספריית smbus
לבסוף, עלינו להתקין את ספריית smbus ב- Raspberry Pi באמצעות הפקודה הנתונה:
sudo apt-get install python-smbus
שלב 4: התקן את הספרייה MPU6050
לאחר מכן עלינו להתקין את ספריית MPU6050 באמצעות הפקודה הנתונה
sudo PIP להתקין mpu6050
כעת אנו יכולים למצוא קודים לדוגמא בדוגמאות. המשתמש יכול לבדוק את הקוד על ידי העלאה ישירה ל- Raspberry Pi או להתאמה אישית לפי הדרישה. כאן הצגנו ערכי X, Y ו- Z של MPU6050 על 16x2 LCD. אתה יכול למצוא את קוד הפייתון המלא בסוף ההדרכה.
הסבר על תכנות:
קוד פייתון מלא ניתן בסוף כאן אנו מסבירים כמה חלקים חשובים בקוד.
בתוכנית Python ייבאנו ספרייה נדרשת כמו זמן, smbus ו- GPIO.
ייבא smbus זמן ייבוא ייבוא RPi.GPIO כ gpio
לאחר מכן, עלינו לקחת כתובת רישום כלשהי כדי להגדיר את MPU6050 ולקבלת ערכים מאותו דבר. לקחנו גם כמה משתנים לכיול ולאתחול של אוטובוס עבור I2C.
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYM AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
לאחר מכן כתבנו כמה פונקציות לנהיגה של 16x2LCD כמו def begin (), def cmd (ch), def write (ch), def Print (str), def clear () וכו ' . אתה יכול לבדוק את הממשק של LCD עם Raspberry Pi.
לאחר מכן, עלינו לאתחל את מודול MPU6050
def InitMPU (): bus.write_byte_data (Device_Address, DIV, 7) bus.write_byte_data (Device_Address, PWR_M, 1) bus.write_byte_data (Device_Address, CONFIG, 0) bus.write_byte_data (Device_Address, GYRO_ConFIG., INT_EN, 1) time.sleep (1)
אחרי זה, עלינו לכתוב כמה פונקציות כדי לקרוא ערכים מ- MPU6050 ולהציג אותם ב- LCD. הפונקציה הנתונה משמשת לקריאת נתונים מ- MPU6050
def readMPU (addr): high = bus.read_byte_data (Device_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) value = ((high << 8) - low) if (value> 32768): value = value - 65536 ערך החזר
הפונקציה הנתונה משמשת לקריאת נתוני מד תאוצה ומדי גירו
def accel (): x = readMPU (ACCEL_X) y = readMPU (ACCEL_Y) z = readMPU (ACCEL_Z) Ax = (x / 16384.0-AxCal) Ay = (y / 16384.0-AyCal) Az = (z / 16384.0-AzCal) #print "X =" + str (Ax) תצוגה (Ax, Ay, Az) time.sleep (.01) def gyro (): global GxCal global GyCal global GzCal x = readMPU (GYRO_X) y = readMPU (GYRO_Y) z = readMPU (GYRO_Z) Gx = x / 131.0 - GxCal Gy = y / 131.0 - GyCal Gz = z / 131.0 - GzCal #print "X =" + str (Gx) display (Gx, Gy, Gz) time.sleep (. 01)
לאחר מכן כתבנו פונקציה לקריאת טמפרטורה
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC temp temp print set סמן (0,0) הדפס ("Temp:") הדפס (str (tempC)) זמן. שינה (.2)
פונקציית def calibrate () משמשת לכיול MPU6050 ופונקציית def display () משמשת להצגת הערכים על גבי LCD. בדוק פונקציות אלה בקוד המלא המופיע להלן.
לאחר מכן, התחלנו את ה- LCD, אתחלנו וכיילנו את MPU6050 ואז תוך כדי לולאה קראנו לכל שלושת ערכי הערכים מ- MPU- טמפרטורה, תאוצה וג'ירו והראינו אותם על גבי LCD.
התחל(); הדפס ("ממשק MPU6050") setCursor (0,1) זמן הדפסה ("Circuit Digest"). שינה (2) InitMPU () כיול () בעוד 1: InitMPU () ברור () עבור i בטווח (20): temp () נקה () הדפס ("Accel") זמן. שינה (1) עבור i בטווח (30): accel () נקה () הדפס ("גירו") זמן. שינה (1) עבור i בטווח (30): ג'יירו()
מג'ירו MPU6050 ומד תאוצה משמשים לזיהוי המיקום והכיוון של כל מכשיר. גירו משתמש בכוח המשיכה של כדור הארץ כדי לקבוע את עמדות ציר ה- x, y ו- z ומד התאוצה מזהה בהתבסס על קצב שינוי התנועה. כבר השתמשנו במד התאוצה עם ארדואינו ברבים מהפרויקטים שלנו כמו:
- רובוט מבוקר תנועת יד מבוסס תאוצה
- מערכת התראות על תאונות תאונות דרכים על בסיס ארדואינו
- אזעקת גלאי רעידות אדמה באמצעות Arduino