- Vereiste componenten:
- MPU6050 Gyrosensor:
- Omschrijving:
- Schakelschema en uitleg:
- Raspberry Pi configureren voor MPU6050-gyrosensor:
- Programmering Toelichting:
De MPU6050- sensor heeft veel functies ten opzichte van de enkele chip. Het bestaat uit een MEMS-versnellingsmeter, een MEMS-gyroscoop en temperatuursensor. Deze module is zeer nauwkeurig bij het omzetten van analoge waarden naar digitaal omdat het een 16bit analoog naar digitaal converterhardware voor elk kanaal heeft. Deze module is in staat om het x-, y- en z-kanaal tegelijkertijd vast te leggen. Het heeft een I2C-interface om te communiceren met de hostcontroller. Deze MPU6050-module is een compacte chip met zowel een versnellingsmeter als een gyroscoop. Dit is een zeer handig apparaat voor veel toepassingen zoals drones, robots, bewegingssensoren. Het wordt ook wel gyroscoop of drieassige versnellingsmeter genoemd.
Vandaag gaan we in dit artikel deze MPU6050 verbinden met Raspberry Pi en de waarden weergeven op een 16x2 LCD.
Vereiste componenten:
- Raspberry Pi
- MPU-6050
- 10K POT
- Doorverbindingsdraad
- Breadboard
- Stroomvoorziening
MPU6050 Gyrosensor:
MPU-6050 is een 8-pins 6-assige gyro en versnellingsmeter in een enkele chip. Deze module werkt standaard op I2C seriële communicatie, maar kan worden geconfigureerd voor SPI-interface door het register te configureren. Voor I2C heeft dit SDA- en SCL-lijnen. Bijna alle pinnen zijn multifunctioneel, maar hier gaan we alleen verder met I2C-modus pinnen.
Pin-configuratie:
Vcc: - deze pin wordt gebruikt voor het voeden van de MPU6050-module ten opzichte van aarde
GND: - dit is een aardpen
SDA: - SDA-pin wordt gebruikt voor gegevens tussen controller en mpu6050-module
SCL: - SCL-pin wordt gebruikt voor klokingang
XDA: - Dit is sensor I2C SDA Datalijn voor het configureren en uitlezen van externe sensoren ((optioneel) niet gebruikt in ons geval)
XCL: - Dit is sensor I2C SCL kloklijn voor het configureren en uitlezen van externe sensoren ((optioneel) niet gebruikt in ons geval)
ADO: - I2C Slave Address LSB (niet van toepassing in ons geval)
INT: - Onderbrekingspin voor indicatie van gegevens gereed.
We hebben eerder MPU6050 met Arduino gekoppeld.
Omschrijving:
In dit artikel tonen we temperatuur-, gyro- en versnellingsmeterwaarden via LCD met MPU6050 met Raspberry Pi. Als Raspberry Pi nieuw voor je is, ga dan door ons Raspberry Pi-tutorialsgedeelte en leer hoe je aan de slag kunt gaan met Raspberry Pi.
In dit project hebben we voor het eerst getoond temperatuur waarde boven LCD en na enige tijd laten zien dat we autopilootinstelling en vervolgens na enige tijd we hebben accelerometer lezingen, zoals aangegeven in de onderstaande afbeeldingen:
Schakelschema en uitleg:
Het schakelschema, voor het koppelen van MPU6050 met Raspberry Pi, is heel eenvoudig, hier hebben we een LCD en MPU6050 gebruikt. Een 10k pot wordt gebruikt om de helderheid van het LCD-scherm te regelen. In verband met MPU6050 hebben we 4 aansluitingen gedaan waarbij we de 3.3v voeding en aarde van MPU6050 hebben aangesloten op de 3.3v en aarde van Raspberry Pi. SCL- en SDA-pinnen van MPU6050 zijn verbonden met Raspberry's fysieke pin 3 (GPIO2) en pin 5 (GPIO3). LCD's RS, RW en EN zijn rechtstreeks verbonden met GPIO18 en 23 van Raspberry Pi. De gegevenspin is rechtstreeks verbonden met de digitale pincode GPIO24, GPIO25, GPIO8 en GPIO7. Lees hier meer over het koppelen van LCD met Raspberry Pi.
Raspberry Pi configureren voor MPU6050-gyrosensor:
Voordat we beginnen met programmeren, moeten we i2c van Raspberry Pi inschakelen met behulp van de gegeven methode:
Stap 1: Schakel I2C-communicatie in
Voordat we de Adafruit SSD1306-bibliotheek kunnen installeren, moeten we I2C-communicatie inschakelen in Raspberry Pi.
Om dit type in Raspberry Pi-console te doen:
sudo raspi -config
En dan verschijnt er een blauw scherm. Selecteer nu de interface-optie
Hierna moeten we I2C selecteren
Het is een feit dat u zich geen zorgen hoeft te maken.
Hierna moeten we ja selecteren en op enter drukken en vervolgens op ok
Hierna moeten we raspberry pi opnieuw opstarten door het onderstaande commando te geven:
sodo herstart
Stap 2: Installeer python-pip en GPIO-bibliotheek
sudo apt-get install build-essential python-dev python-pip
Hierna moeten we de Raspberry Pi GPIO-bibliotheek installeren
sudo pip installeert RPi.GPIO
Stap 3: Installeer de smbus- bibliotheek
Ten slotte moeten we de smbus- bibliotheek in Raspberry Pi installeren met behulp van het gegeven commando:
sudo apt-get install python-smbus
Stap 4: Installeer de bibliotheek MPU6050
Hierna moeten we de MPU6050-bibliotheek installeren met behulp van de gegeven opdracht
sudo pip installeer mpu6050
Nu kunnen we voorbeeldcodes in de voorbeelden vinden. De gebruiker kan die code testen door deze rechtstreeks naar de Raspberry Pi te uploaden of deze naar behoefte aan te passen. Hier hebben we de X-, Y- en Z-aswaarden van de MPU6050 weergegeven op een 16x2 LCD. U vindt de volledige Python-code aan het einde van de zelfstudie.
Programmering Toelichting:
De volledige Python-code wordt aan het einde gegeven, we leggen hier enkele belangrijke delen van de code uit.
In Python-programma hebben we een aantal vereiste bibliotheken geïmporteerd, zoals tijd, smbus en GPIO.
import smbus import tijd importeer RPi.GPIO als gpio
Hierna hebben we een registeradres nodig om MPU6050 te configureren en om waarden ervan te krijgen. We hebben ook enkele variabelen genomen voor het kalibreren en initialiseren van de bus voor 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 GYROB-apparaatbus = 0.Sx45 GYROB-adres = 0.Sx47-apparaatbus_ZP = 0x47 GYROB-adres = 0. AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Vervolgens hebben we enkele functies geschreven voor het aansturen van 16x2LCD zoals def begin (), def cmd (ch), def write (ch), def Print (str), def clear () enz . U kunt de interface van LCD met Raspberry Pi verder controleren.
Hierna moeten we de MPU6050-module initialiseren
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_byte_data_data (Device_Address, CONFIG, 0) bus., INT_EN, 1) time.sleep (1)
Hierna moeten we enkele functies schrijven om waarden van MPU6050 te lezen en op het LCD-scherm weer te geven. De gegeven functie wordt gebruikt om gegevens van MPU6050 te lezen
def readMPU (addr): high = bus.read_byte_data (Device_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) waarde = ((hoog << 8) - laag) if (waarde> 32768): waarde = waarde - 65536 retourwaarde
De gegeven functie wordt gebruikt om de gegevens van de versnellingsmeter en de gyrometer te lezen
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) weergave (Ax, Ay, Az) time.sleep (.01) def gyro (): globaal GxCal globaal GyCal globaal 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) weergave (Gx, Gy, Gz) time.sleep (. 01)
Hierna hebben we een temperatuurmeetfunctie geschreven
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Afdrukken ("Temp:") Afdrukken (str (tempC)) time.sleep (.2)
def calibrate () functie wordt gebruikt om de MPU6050 te kalibreren en def display () functie wordt gebruikt om de waarden op LCD weer te geven. Controleer deze functies in de volledige onderstaande code.
Hierna zijn we begonnen met het LCD-scherm, initialiseren en kalibreren we de MPU6050 en vervolgens in de while- lus hebben we alle drie de waarden van MPU- temperatuur, accelerometer en gyro opgeroepen en op het LCD-scherm getoond.
beginnen(); Print ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () while 1: InitMPU () clear () voor i in bereik (20): temp () clear () Print ("Accel") time.sleep (1) voor i binnen bereik (30): accel () clear () Print ("Gyro") time.sleep (1) voor i binnen bereik (30): gyro ()
MPU6050-gyro en versnellingsmeter worden beide gebruikt om de positie en oriëntatie van elk apparaat te detecteren. Gyro gebruikt de zwaartekracht van de aarde om de x-, y- en z-asposities te bepalen en de versnellingsmeter detecteert op basis van de snelheid van de verandering van beweging. We hebben de accelerometer al met Arduino gebruikt in veel van onze projecten, zoals:
- Op versnellingsmeter gebaseerde robot met handgebaren
- Op Arduino gebaseerd waarschuwingssysteem voor voertuigongevallen
- Aardbevingsdetectoralarm met Arduino