- Zahtevane komponente:
- MPU6050 giro senzor:
- Opis:
- Shema vezja in razlaga:
- Konfiguriranje Raspberry Pi za giro senzor MPU6050:
- Pojasnilo programiranja:
Senzor MPU6050 ima več funkcij kot en čip. Sestavljen je iz merilnika pospeška MEMS, žiroskopa MEMS in temperaturnega senzorja. Ta modul je med pretvorbo analognih vrednosti v digitalne zelo natančen, saj ima za vsak kanal 16-bitno analogno-digitalno pretvorniško strojno opremo. Ta modul lahko hkrati zajema kanal x, y in z. Ima vmesnik I2C za komunikacijo z gostiteljskim krmilnikom. Ta modul MPU6050 je kompakten čip z merilnikom pospeška in žiroskopom. To je zelo uporabna naprava za številne aplikacije, kot so droni, roboti, senzorji gibanja. Imenuje se tudi žiroskop ali troosni merilnik pospeška.
Danes bomo v tem članku vmesnik MPU6050 povezovali z Raspberry Pi in prikazali vrednosti na 16x2 LCD.
Zahtevane komponente:
- Raspberry Pi
- MPU-6050
- 10K LONČEK
- Jumper žica
- Breadboard
- Napajanje
MPU6050 giro senzor:
MPU-6050 je 8-polni 6-osni žiroskop in merilnik pospeška v enem čipu. Ta modul privzeto deluje na serijski komunikaciji I2C, vendar ga je mogoče konfigurirati za vmesnik SPI z nastavitvijo registra. Za I2C ima ta SDA in SCL linije. Skoraj vsi zatiči so večfunkcijski, toda tu nadaljujemo samo z zatiči v načinu I2C.
Konfiguracija zatiča:
Vcc: - ta zatič se uporablja za napajanje modula MPU6050 glede na tla
GND: - to je ozemljitveni zatič
SDA: - Zatič SDA se uporablja za podatke med krmilnikom in modulom mpu6050
SCL: - Za vnos ure se uporablja zatič SCL
XDA: - To je podatkovna linija senzorja I2C SDA za konfiguriranje in branje z zunanjih senzorjev ((neobvezno), ki se v našem primeru ne uporablja)
XCL: - To je taktna linija I2C SCL za konfiguracijo in branje z zunanjih senzorjev ((neobvezno), ki se v našem primeru ne uporablja)
ADO: - I2C podrejeni naslov LSB (v našem primeru ni veljaven)
INT: - Prekinitveni zatič za prikaz pripravljenosti podatkov.
Pred tem smo MPU6050 povezali z Arduinom.
Opis:
V tem članku prikazujemo odčitke temperature, žiroskopa in merilnika pospeška na LCD zaslonu z uporabo MPU6050 z Raspberry Pi. Če ste novi v Raspberry Pi, pojdite v naš razdelek o vajah za Raspberry Pi in se naučite, kako začeti z Raspberry Pi.
V tem projektu smo najprej prikazali vrednost temperature na LCD-ju, čez nekaj časa prikažemo vrednosti giroskopov, nato pa čez nekaj časa odčitke merilnika pospeška, kot je prikazano na spodnjih slikah:
Shema vezja in razlaga:
Shema vezja za povezovanje MPU6050 z Raspberry Pi je zelo preprosta, tukaj smo uporabili LCD in MPU6050. Za nadzor svetlosti LCD se uporablja 10k lonec. V povezavi z MPU6050 smo izvedli 4 povezave, v katere smo 3.3v napajalnik in ozemljitev MPU6050 priključili na 3.3v in ozemljitev Raspberry Pi. Zatiči SCL in SDA MPU6050 so povezani z Raspberry-jevim fizičnim zatičem 3 (GPIO2) in zatičem 5 (GPIO3). LCD-ji RS, RW in EN so neposredno povezani z GPIO18 in 23 maline pi. Podatkovni pin je neposredno povezan z digitalno številko PIN-a GPIO24, GPIO25, GPIO8 in GPIO7. Več o povezovanju LCD-ja z Raspberry Pi preberite tukaj.
Konfiguriranje Raspberry Pi za giro senzor MPU6050:
Pred začetkom programiranja moramo z dano metodo omogočiti i2c Raspberry Pi:
1. korak: Omogočite komunikacijo I2C
Pred namestitvijo knjižnice Adafruit SSD1306 moramo v Raspberry Pi omogočiti komunikacijo I2C.
To naredite v konzoli Raspberry Pi:
sudo raspi -config
Nato se prikaže modri zaslon. Zdaj izberite možnost vmesnika
Po tem moramo izbrati I2C
U
Po tem moramo izbrati da in pritisniti enter in nato v redu
Po tem moramo znova zagnati malino pi z izdajo spodnjega ukaza:
sodo ponovni zagon
2. korak: Namestite python-pip in knjižnico GPIO
sudo apt-get namestite bistveno gradnjo python-dev python-pip
Po tem moramo namestiti Raspberry pi GPIO knjižnico
sudo pip namesti RPi.GPIO
3. korak: Namestite knjižnico smbus
Nazadnje moramo knjižnico smbus namestiti v Raspberry Pi z uporabo danega ukaza:
sudo apt-get namestite python-smbus
4. korak: Namestite knjižnico MPU6050
Po tem moramo z danim ukazom namestiti knjižnico MPU6050
sudo pip namestite mpu6050
Zdaj lahko v primerih najdemo primere kod. Uporabnik lahko to kodo preizkusi z neposrednim prenosom na Raspberry Pi ali jo prilagodi glede na zahteve. Tu smo prikazali vrednosti osi X, Y in Z MPU6050 na LCD zaslonu 16x2. Celotno kodo Pythona najdete na koncu vadnice.
Pojasnilo programiranja:
Popolna koda Python je podana na koncu, tukaj razlagamo nekaj pomembnih delov kode.
V program Python smo uvozili nekaj zahtevanih knjižnic, kot so čas, smbus in GPIO.
uvoz smbus čas uvoza uvoz RPi.GPIO kot gpio
Po tem moramo vzeti nekaj naslova registra za konfiguracijo MPU6050 in za pridobivanje vrednosti iz istega. Vzeli smo tudi nekaj spremenljivk za kalibriranje in inicializacijo vodila za 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 = 0bus G = 0Xbus G = 0xbus G = 0Xbus G = 0xbus G = 0x1 G = 0x40 G0ROXD = 0x45 GxROBZ = 0x45 GxROBZ = 0x45 GxROBZ = 0 bus GYRO_Z = 0 bus GYRO_Z = 0 bus G 0 AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Nato smo napisali nekaj funkcij za vožnjo 16x2LCD, kot so def begin (), def cmd (ch), def write (ch), def Print (str), def clear () itd . Nadalje lahko preverite Povezava LCD-ja z Raspberry Pi.
Po tem moramo inicializirati modul 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_AddressONFYROAddress, GYRO_Adrite, GYRO_Adrite, GYRO, INT_EN, 1) time.sleep (1)
Po tem moramo napisati nekaj funkcij za branje vrednosti iz MPU6050 in njihovo prikaz na LCD. Dana funkcija se uporablja za branje podatkov iz MPU6050
def readMPU (addr): high = bus.read_byte_data (Address_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) value = ((high << 8) - low) if (value> 32768): value = value - 65536 vrnjena vrednost
Dana funkcija se uporablja za branje podatkov merilnika pospeška in girosimetra
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 (): globalni GxCal globalni GyCal globalni 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) prikaz (Gx, Gy, Gz) time.sleep (. 01)
Po tem smo napisali funkcijo odčitavanja temperature
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Print ("Temp:") Print (str (tempC)) čas.spanje (.2)
Funkcija def calibrate () se uporablja za kalibriranje MPU6050, funkcija def display () pa za prikaz vrednosti na LCD-prikazovalniku. Preverite te funkcije v spodnji celotni kodi.
Po tem smo začeli LCD, inicializirali in kalibrirali MPU6050 in nato v zanki while poklicali vse tri sklope vrednosti iz temperature MPU , merilnika pospeška in žiroskopa ter jih prikazali na LCD-ju.
začeti(); Print ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () while 1: InitMPU () clear () for i in range (20): temp () clear () Print ("Accel") time.sleep (1) for i in range (30): accel () clear () Print ("Gyro") time.sleep (1) for i in range (30): gyro ()
Žiroskop in merilnik pospeška MPU6050 se uporabljata za zaznavanje položaja in usmeritve katere koli naprave. Žiro uporablja zemeljsko gravitacijo za določanje položajev osi x, y in z, merilnik pospeška pa zazna na podlagi hitrosti spremembe gibanja. Merilnik pospeška z Arduinom smo že uporabljali pri mnogih naših projektih, kot so:
- Robot s krmiljenjem na merilniku pospeška
- Sistem za opozarjanje na nezgode na osnovi Arduina
- Alarm za detektor potresa z uporabo Arduina