- Απαιτούμενα συστατικά:
- MPU6050 γυροσκοπικός αισθητήρας:
- Περιγραφή:
- Διάγραμμα κυκλώματος και επεξήγηση:
- Διαμόρφωση Raspberry Pi για αισθητήρα Gyro MPU6050:
- Επεξήγηση προγραμματισμού:
Ο αισθητήρας MPU6050 έχει πολλές λειτουργίες πάνω από το μονό τσιπ. Αποτελείται από επιταχυνσιόμετρο MEMS, γυροσκόπιο MEMS και αισθητήρα θερμοκρασίας. Αυτή η ενότητα είναι πολύ ακριβής κατά τη μετατροπή αναλογικών τιμών σε ψηφιακό, επειδή διαθέτει υλικό 16 αναλογικών σε ψηφιακό μετατροπέα για κάθε κανάλι. Αυτή η μονάδα μπορεί να συλλάβει το κανάλι x, y και z ταυτόχρονα. Διαθέτει διασύνδεση I2C για επικοινωνία με τον κεντρικό ελεγκτή. Αυτή η μονάδα MPU6050 είναι ένα συμπαγές τσιπ με επιταχυνσιόμετρο και γυροσκόπιο. Αυτή είναι μια πολύ χρήσιμη συσκευή για πολλές εφαρμογές όπως drones, ρομπότ, αισθητήρες κίνησης. Ονομάζεται επίσης Γυροσκόπιο ή Επιταχυνσιόμετρο τριπλού άξονα.
Σήμερα σε αυτό το άρθρο πρόκειται να διασυνδέσουμε αυτό το MPU6050 με το Raspberry Pi και να δείξουμε τις τιμές πάνω από 16x2 LCD.
Απαιτούμενα συστατικά:
- Raspberry Pi
- MPU-6050
- 10Κ ΔΟΧΕΙΟ
- Καλώδιο αλτών
- Ψωμί
- Παροχή ηλεκτρικού ρεύματος
MPU6050 γυροσκοπικός αισθητήρας:
Το MPU-6050 είναι ένα γυροσκόπιο 8 ακίδων 6 και επιταχυνσιόμετρο σε ένα μόνο τσιπ. Αυτή η ενότητα λειτουργεί σε σειριακή επικοινωνία I2C από προεπιλογή, αλλά μπορεί να ρυθμιστεί για διασύνδεση SPI ρυθμίζοντας την εγγραφή της. Για I2C αυτό έχει γραμμές SDA και SCL. Σχεδόν όλες οι ακίδες είναι πολλαπλών λειτουργιών, αλλά εδώ προχωράμε μόνο με καρφίτσες λειτουργίας I2C.
Διαμόρφωση καρφιτσών:
Vcc: - αυτός ο πείρος χρησιμοποιείται για την τροφοδοσία της μονάδας MPU6050 σε σχέση με τη γείωση
GND: - αυτός είναι ένας πείρος γείωσης
SDA: - Ο πείρος SDA χρησιμοποιείται για δεδομένα μεταξύ ελεγκτή και μονάδας mpu6050
SCL: - Ο πείρος SCL χρησιμοποιείται για είσοδο ρολογιού
XDA: - Αυτή είναι η γραμμή δεδομένων αισθητήρα I2C SDA για διαμόρφωση και ανάγνωση από εξωτερικούς αισθητήρες ((προαιρετικά) που δεν χρησιμοποιείται στην περίπτωσή μας)
XCL: - Αυτή είναι η γραμμή ρολογιού αισθητήρα I2C SCL για διαμόρφωση και ανάγνωση από εξωτερικούς αισθητήρες ((προαιρετικά) που δεν χρησιμοποιείται στην περίπτωσή μας)
ADO: - I2C Slave Διεύθυνση 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 του Raspberry (GPIO2) και τον ακροδέκτη 5 (GPIO3). Τα RS, RW και EN των LCD συνδέονται απευθείας με το GPIO18 και το 23 του raspberry pi. Ο ακροδέκτης δεδομένων συνδέεται απευθείας με τον ψηφιακό αριθμό pin GPIO24, GPIO25, GPIO8 και GPIO7. Μάθετε περισσότερα σχετικά με τη διασύνδεση της οθόνης LCD με το Raspberry Pi εδώ.
Διαμόρφωση Raspberry Pi για αισθητήρα Gyro MPU6050:
Πριν ξεκινήσουμε τον προγραμματισμό, πρέπει να ενεργοποιήσουμε το i2c του Raspberry Pi χρησιμοποιώντας τη δεδομένη μέθοδο:
Βήμα 1: Ενεργοποίηση επικοινωνίας I2C
Πριν από την εγκατάσταση της βιβλιοθήκης Adafruit SSD1306 πρέπει να ενεργοποιήσουμε την επικοινωνία I2C στο Raspberry Pi.
Για να κάνετε αυτόν τον τύπο στην κονσόλα Raspberry Pi:
sudo raspi -config
Και τότε θα εμφανιστεί μια μπλε οθόνη. Τώρα επιλέξτε την επιλογή διεπαφής
Μετά από αυτό, πρέπει να επιλέξουμε το I2C
Μετά από αυτό, πρέπει να επιλέξετε ναι και να πατήσετε enter και στη συνέχεια εντάξει
Μετά από αυτό, πρέπει να επανεκκινήσουμε το βατόμουρο pi εκδίδοντας την παρακάτω εντολή:
επανεκκίνηση sodo
Βήμα 2: Εγκαταστήστε τη βιβλιοθήκη python-pip και GPIO
sudo apt-get install build-essential python-dev python-pip
Μετά από αυτό, πρέπει να εγκαταστήσουμε τη βιβλιοθήκη σμέουρων pi GPIO
Το sudo pip εγκαθιστά το RPi.GPIO
Βήμα 3: Εγκαταστήστε τη βιβλιοθήκη smbus
Τέλος, πρέπει να εγκαταστήσουμε τη βιβλιοθήκη smbus στο Raspberry Pi χρησιμοποιώντας τη δεδομένη εντολή:
sudo apt-get εγκαταστήστε το python-smbus
Βήμα 4: Εγκαταστήστε τη βιβλιοθήκη MPU6050
Μετά από αυτό πρέπει να εγκαταστήσουμε τη βιβλιοθήκη MPU6050 χρησιμοποιώντας τη δεδομένη εντολή
sudo pip εγκαταστήστε mpu6050
Τώρα μπορούμε να βρούμε παραδείγματα κωδικών στα παραδείγματα. Ο χρήστης μπορεί να δοκιμάσει αυτόν τον κώδικα ανεβάζοντας απευθείας στο Raspberry Pi ή να το προσαρμόσει ανάλογα με τις απαιτήσεις. Εδώ έχουμε εμφανίσει τις τιμές άξονα X, Y και Z MPU6050 σε LCD 16x2. Μπορείτε να βρείτε τον πλήρη κώδικα Python στο τέλος του Οδηγού.
Επεξήγηση προγραμματισμού:
Ο πλήρης κώδικας Python δίνεται στο τέλος εδώ εξηγώντας λίγο σημαντικό μέρος του κώδικα.
Στο Πρόγραμμα 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 GYRO_Z = 0x4d AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Στη συνέχεια έχουμε γράψει ορισμένες λειτουργίες για οδήγηση 16x2LCD όπως def ξεκινήσει (), def CMD (ch), def εγγραφής (ch), def Εκτύπωση (str), def σαφή () κλπ . Μπορείτε να ελέγξετε περαιτέρω το Interfacing of LCD με το Raspberry Pi.
Μετά από αυτό, πρέπει να αρχικοποιήσουμε το MPU6050 Module
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, GY_ddress), 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 (τιμή> 32768): τιμή = τιμή - 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) display (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) οθόνη (Gx, Gy, Gz) time.sleep (. 01)
Μετά από αυτό, έχουμε γράψει μια λειτουργία ανάγνωσης θερμοκρασίας
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Print ("Temp:") Print (str (tempC)) time.sleep (.2)
Η λειτουργία def calibrate () χρησιμοποιείται για τη βαθμονόμηση του MPU6050 και η λειτουργία def display () χρησιμοποιείται για την εμφάνιση των τιμών στην οθόνη LCD. Ελέγξτε αυτές τις λειτουργίες στον πλήρη κωδικό που δίνεται παρακάτω.
Μετά από αυτό, έχουμε ξεκινήσει την οθόνη LCD, Προετοιμασία και βαθμονόμηση του MPU6050 και στη συνέχεια , ενώ βρόχο έχουμε καλέσει όλα τα τα τρία σετ των τιμών από MPU- θερμοκρασίας, επιταχυνσιόμετρο και γυροσκόπιο και τους έδειξε πάνω LCD.
αρχίζουν(); Εκτύπωση ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () while 1: InitMPU () clear () for i in range (20): temp () εκκαθάριση () Εκτύπωση ("Accel") time.sleep (1) for i in range (30): accel () clear () Print ("Gyro") time.sleep (1) for i in range (30): γυροσκόπιο ()
Το MPU6050 γυροσκόπιο και το επιταχυνσιόμετρο χρησιμοποιούνται και για τον εντοπισμό της θέσης και του προσανατολισμού οποιασδήποτε συσκευής. Το Gyro χρησιμοποιεί τη βαρύτητα της γης για να προσδιορίσει τις θέσεις άξονα x, y και z και το επιταχυνσιόμετρο ανιχνεύει με βάση τον ρυθμό αλλαγής κίνησης. Χρησιμοποιήσαμε ήδη το επιταχυνσιόμετρο με το Arduino σε πολλά από τα έργα μας όπως:
- Ρομπότ ελεγχόμενο με χειρονομία βάσει επιταχυνσιόμετρου
- Σύστημα ειδοποίησης ατυχημάτων με βάση το Arduino
- Συναγερμός ανιχνευτή σεισμού χρησιμοποιώντας το Arduino