- Erforderliche Komponenten:
- MPU6050 Gyro Sensor:
- Beschreibung:
- Schaltplan und Erklärung:
- Konfigurieren von Raspberry Pi für den Gyro-Sensor MPU6050:
- Programmiererklärung:
Der MPU6050- Sensor hat viele Funktionen über den einzelnen Chip. Es besteht aus einem MEMS-Beschleunigungsmesser, einem MEMS-Kreisel und einem Temperatursensor. Dieses Modul ist sehr genau, wenn analoge Werte in digitale konvertiert werden, da es für jeden Kanal eine 16-Bit-Hardware für analoge und digitale Konverter enthält. Dieses Modul kann gleichzeitig x-, y- und z-Kanäle erfassen. Es verfügt über eine I2C-Schnittstelle zur Kommunikation mit dem Host-Controller. Dieses MPU6050-Modul ist ein kompakter Chip mit Beschleunigungsmesser und Kreisel. Dies ist ein sehr nützliches Gerät für viele Anwendungen wie Drohnen, Roboter und Bewegungssensoren. Es wird auch Gyroskop oder dreiachsiger Beschleunigungsmesser genannt.
Heute in diesem Artikel werden wir diese MPU6050 mit Raspberry Pi verbinden und die Werte über 16x2 LCD anzeigen.
Erforderliche Komponenten:
- Himbeer-Pi
- MPU-6050
- 10K POT
- Überbrückungskabel
- Steckbrett
- Energieversorgung
MPU6050 Gyro Sensor:
MPU-6050 ist ein 8-poliger 6-Achsen-Kreisel und Beschleunigungsmesser in einem einzigen Chip. Dieses Modul arbeitet standardmäßig mit der seriellen I2C-Kommunikation, kann jedoch durch Konfigurieren des Registers für die SPI-Schnittstelle konfiguriert werden. Für I2C hat dies SDA- und SCL-Leitungen. Fast alle Pins sind multifunktional, aber hier fahren wir nur mit I2C-Modus-Pins fort.
Pin-Konfiguration:
Vcc: - Dieser Pin wird zur Stromversorgung des MPU6050-Moduls in Bezug auf Masse verwendet
GND: - Dies ist ein Erdungsstift
SDA: - Der SDA-Pin wird für Daten zwischen Controller und mpu6050-Modul verwendet
SCL: - Der SCL-Pin wird für die Takteingabe verwendet
XDA: - Dies ist die Sensor I2C SDA-Datenleitung zum Konfigurieren und Lesen von externen Sensoren ((optional) wird in unserem Fall nicht verwendet).
XCL: - Dies ist die Sensor-I2C-SCL-Taktleitung zum Konfigurieren und Lesen von externen Sensoren ((optional) wird in unserem Fall nicht verwendet).
ADO: - I2C-Slave-Adress-LSB (in unserem Fall nicht anwendbar)
INT: - Interrupt-Pin zur Anzeige der Datenbereitschaft.
Wir haben zuvor MPU6050 mit Arduino verbunden.
Beschreibung:
In diesem Artikel zeigen wir Temperatur-, Kreisel- und Beschleunigungsmesserwerte über LCD mit MPU6050 mit Raspberry Pi. Wenn Sie Raspberry Pi noch nicht kennen, lesen Sie unseren Abschnitt mit den Raspberry Pi-Tutorials und erfahren Sie, wie Sie mit Raspberry Pi beginnen.
In diesem Projekt haben wir erste Temperatur angezeigt Wert über LCD und nach einiger Zeit zeigen wir Gyro - Werte und dann nach einiger Zeit haben wir Beschleunigungsmesser Lesungen wie in den folgenden Bildern dargestellt:
Schaltplan und Erklärung:
Der Schaltplan für die Verbindung der MPU6050 mit dem Raspberry Pi ist sehr einfach. Hier haben wir ein LCD und eine MPU6050 verwendet. Ein 10k-Topf dient zur Steuerung der Helligkeit des LCD. In Verbindung mit der MPU6050 haben wir 4 Verbindungen hergestellt, bei denen wir das 3,3-V-Netzteil und die Masse der MPU6050 mit der 3,3-V-Masse und der Masse des Raspberry Pi verbunden haben. Die SCL- und SDA-Pins der MPU6050 sind mit Raspberrys physischem Pin 3 (GPIO2) und Pin 5 (GPIO3) verbunden. Die RS, RW und EN des LCD sind direkt mit GPIO18 und 23 mit Himbeer-Pi verbunden. Der Daten-Pin ist direkt mit den digitalen Pin-Nummern GPIO24, GPIO25, GPIO8 und GPIO7 verbunden. Weitere Informationen zur Verbindung von LCD mit Raspberry Pi finden Sie hier.
Konfigurieren von Raspberry Pi für den Gyro-Sensor MPU6050:
Bevor wir mit der Programmierung beginnen, müssen wir i2c von Raspberry Pi mit der folgenden Methode aktivieren:
Schritt 1: Aktivieren Sie die I2C-Kommunikation
Vor der Installation der Adafruit SSD1306-Bibliothek müssen wir die I2C-Kommunikation in Raspberry Pi aktivieren.
So geben Sie dies in der Raspberry Pi-Konsole ein:
sudo raspi -config
Und dann erscheint ein blauer Bildschirm. Wählen Sie nun die Schnittstellenoption
Danach müssen wir I2C auswählen
Danach müssen wir Ja auswählen und die Eingabetaste drücken und dann OK
Danach müssen wir raspberry pi neu starten, indem wir den folgenden Befehl ausgeben:
Soda Neustart
Schritt 2: Installieren Sie Python-Pip und GPIO Library
sudo apt-get install build-essentielles python-dev python-pip
Danach müssen wir die Himbeer-Pi-GPIO-Bibliothek installieren
sudo pip installiert RPi.GPIO
Schritt 3: Installieren Sie die smbus- Bibliothek
Schließlich müssen wir die smbus- Bibliothek in Raspberry Pi mit dem folgenden Befehl installieren:
sudo apt-get installiere python-smbus
Schritt 4: Installieren Sie die Bibliothek MPU6050
Danach müssen wir die MPU6050-Bibliothek mit dem angegebenen Befehl installieren
sudo pip installiere mpu6050
Jetzt finden wir Beispielcodes in den Beispielen. Der Benutzer kann diesen Code testen, indem er ihn direkt auf den Raspberry Pi hochlädt oder ihn je nach Anforderung anpasst. Hier haben wir die X-, Y- und Z-Achsenwerte des MPU6050 auf einem 16x2-LCD angezeigt. Den vollständigen Python-Code finden Sie am Ende des Tutorials.
Programmiererklärung:
Der vollständige Python-Code wird am Ende hier angegeben. Wir erklären einige wichtige Teile des Codes.
In Python Program haben wir einige erforderliche Bibliotheken wie time, smbus und GPIO importiert.
import smbus import time import RPi.GPIO als gpio importieren
Danach müssen wir eine Registeradresse verwenden, um die MPU6050 zu konfigurieren und Werte von derselben zu erhalten. Wir haben auch einige Variablen zum Kalibrieren und Initialisieren des Busses für I2C verwendet.
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 = 0x4 = 0x45 GYRO_Y = 0x45 AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Dann haben wir einige Funktionen geschrieben für Driving 16x2LCD wie def () beginnen, def cmd (ch), def write (ch), Drucken def (str), def clear () etc . Sie können die Schnittstelle des LCD mit Raspberry Pi weiter überprüfen.
Danach müssen wir das MPU6050-Modul initialisieren
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_Fr, INT_EN, 1) time.sleep (1)
Danach müssen wir einige Funktionen schreiben, um Werte von der MPU6050 zu lesen und sie auf dem LCD anzuzeigen. Die angegebene Funktion wird zum Lesen von Daten von der MPU6050 verwendet
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 Rückgabewert
Die angegebene Funktion wird zum Lesen von Beschleunigungsmesser- und Kreiselmesserdaten verwendet
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) Anzeige (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) Anzeige (Gx, Gy, Gz) time.sleep (. 01)
Danach haben wir eine Temperaturlesefunktion geschrieben
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)
Mit der Funktion def kalibrieren () wird die MPU6050 kalibriert, und mit der Funktion def display () werden die Werte auf dem LCD angezeigt. Überprüfen Sie diese Funktionen im unten angegebenen vollständigen Code.
Danach haben wir das LCD gestartet, die MPU6050 initialisiert und kalibriert und dann in der while- Schleife alle drei Wertesätze von MPU- Temperatur, Beschleunigungsmesser und Kreisel aufgerufen und über das LCD angezeigt.
Start(); Drucken ("MPU6050-Schnittstelle") setCursor (0,1) Drucken ("Circuit Digest") time.sleep (2) InitMPU () kalibrieren (), während 1: InitMPU () clear () für i im Bereich (20): temp () clear () Print ("Accel") time.sleep (1) für i im Bereich (30): accel () clear () Print ("Gyro") time.sleep (1) für i im Bereich (30): Kreisel ()
Der Kreisel MPU6050 und der Beschleunigungsmesser werden beide verwendet, um die Position und Ausrichtung eines Geräts zu erfassen. Gyro verwendet die Erdgravitation, um die Positionen der x-, y- und z-Achse zu bestimmen, und der Beschleunigungsmesser erkennt basierend auf der Änderungsrate der Bewegung. Wir haben den Beschleunigungsmesser bereits mit Arduino in vielen unserer Projekte verwendet, wie zum Beispiel:
- Handgestengesteuerter Roboter auf Beschleunigungsmesserbasis
- Arduino-basiertes Fahrzeugunfall-Warnsystem
- Erdbebenmelder Alarm mit Arduino