- Szükséges alkatrészek:
- MPU6050 giroszkóp érzékelő:
- Leírás:
- Áramkör és magyarázat:
- A Raspberry Pi beállítása az MPU6050 Gyro érzékelőhöz:
- Programozási magyarázat:
Az MPU6050 érzékelőnek számos funkciója van egyetlen chipen keresztül. MEMS-gyorsulásmérőből, MEMS-giroszkópból és hőmérséklet-érzékelőből áll. Ez a modul nagyon pontos, miközben az analóg értékeket digitálisra konvertálja, mivel minden csatornához tartozik egy 16 bites analóg-digitális átalakító hardver. Ez a modul képes egyszerre rögzíteni az x, y és z csatornákat. I2C interfésszel rendelkezik a gazda vezérlővel való kommunikációhoz. Ez az MPU6050 modul egy kompakt chip, gyorsulásmérővel és giroszkóppal egyaránt. Ez egy nagyon hasznos eszköz számos alkalmazáshoz, például drónokhoz, robotokhoz, mozgásérzékelőkhöz. Giroszkópnak vagy hármas tengelyes gyorsulásmérőnek is nevezik.
Ma ebben a cikkben az MPU6050-et összekapcsoljuk a Raspberry Pi-vel, és megmutatjuk az értékeket 16x2 LCD-nél.
Szükséges alkatrészek:
- Raspberry Pi
- MPU-6050
- 10K POT
- Jumper huzal
- Kenyérlemez
- Tápegység
MPU6050 giroszkóp érzékelő:
Az MPU-6050 egy 8 tűs 6 tengelyes giroszkóp és gyorsulásmérő egyetlen chipben. Ez a modul alapértelmezés szerint az I2C soros kommunikáción működik, de az SPI interfészhez a regisztráció konfigurálásával konfigurálható. Az I2C esetében ez SDA és SCL vonallal rendelkezik. Szinte az összes csap többfunkciós, de itt csak az I2C módú csapokkal folytatjuk a munkát.
PIN konfiguráció:
Vcc: - ezt a csapot használják az MPU6050 modul földeléshez történő táplálásához
GND: - ez egy földelt csap
SDA: - Az SDA csapot a vezérlő és az mpu6050 modul közötti adatokhoz használják
SCL: - Az SCL tű az óra bemenetére szolgál
XDA: - Ez az I2C érzékelő SDA adatsor a külső érzékelők konfigurálásához és beolvasásához ((esetenként nem használatos))
XCL: - Ez az I2C érzékelő SCL óra vonala a külső érzékelők konfigurálásához és leolvasásához ((opcionális), esetünkben nem használatos)
ADO: - I2C Slave Address LSB (esetünkben nem alkalmazható)
INT: - Megszakító tű az adatok készenlétének jelzésére.
Korábban már csatlakoztattuk az MPU6050-et az Arduino-hoz.
Leírás:
Ebben a cikkben a hőmérséklet, a giroszkóp és a gyorsulásmérő mutatóit mutatjuk be az LCD-n keresztül az MPU6050 és a Raspberry Pi segítségével. Ha még nem ismeri a Raspberry Pi alkalmazást, akkor nézze át a Raspberry Pi oktatóanyagok részt és tanulja meg a Raspberry Pi használatának megkezdését.
Ebben a projektben először bemutattuk a hőmérsékleti értéket az LCD-n keresztül, majd egy idő után megmutatjuk a giroszkóp értékeket, majd egy idő után gyorsulásmérő leolvasásaink vannak, amint az az alábbi képeken látható:
Áramkör és magyarázat:
Az MPU6050 és a Raspberry Pi összekapcsolására szolgáló kapcsolási rajz nagyon egyszerű, itt LCD-t és MPU6050-et használtunk. 10k potot használnak az LCD fényerejének szabályozására. Az MPU6050 kapcsán 4 olyan csatlakozást hajtottunk végre, amelyekben csatlakoztattuk az MPU6050 3,3 V-os tápellátását és földelését a Raspberry Pi 3,3 V-os és földeléséhez. Az MPU6050 SCL és SDA csapjai össze vannak kötve Raspberry fizikai 3-as (GPIO2) és 5-ös (GPIO3) tűjével. Az LCD RS, RW és EN közvetlenül kapcsolódnak a GPIO18-hoz és 23 málna pi-hez. Az adatcsapok közvetlenül kapcsolódnak a GPIO24, GPIO25, GPIO8 és GPIO7 digitális PIN-kódokhoz. Itt többet tudhat meg az LCD és a Raspberry Pi összekapcsolásáról.
A Raspberry Pi beállítása az MPU6050 Gyro érzékelőhöz:
A programozás megkezdése előtt engedélyeznünk kell a Raspberry Pi i2c-jét a megadott módszerrel:
1. lépés: Engedélyezze az I2C kommunikációt
Az Adafruit SSD1306 könyvtár telepítése előtt engedélyeznünk kell az I2C kommunikációt a Raspberry Pi-ben.
Ennek a típusnak a végrehajtása a Raspberry Pi konzolon:
sudo raspi -config
És akkor megjelenik egy kék képernyő. Most válassza az interfész opciót
Ezt követően ki kell választanunk az I2C-t
A
Ezt követően ki kell választanunk az igent, és meg kell nyomnunk az Enter billentyűt, majd az ok gombot
Ezt követően újra kell indítanunk a málna pi- t az alábbi parancs kiadásával:
sodo újraindítás
2. lépés: Telepítse a python-pip és a GPIO könyvtárat
sudo apt-get install build-essential python-dev python-pip
Ezek után telepítenünk kell a málna pi GPIO könyvtárat
A sudo pip telepíti az RPi.GPIO fájlt
3. lépés: Telepítse az smbus könyvtárat
Végül a megadott parancs használatával telepítenünk kell az smbus könyvtárat a Raspberry Pi-be:
sudo apt-get install python-smbus
4. lépés: Telepítse az MPU6050 könyvtárat
Ezek után telepítenünk kell az MPU6050 könyvtárat a megadott parancs használatával
sudo pip install mpu6050
Most a példákban találhatunk példakódokat. A felhasználó tesztelheti a kódot közvetlenül feltöltve a Raspberry Pi-be, vagy testreszabhatja azt a követelményeknek megfelelően. Itt az MPU6050 X, Y és Z tengelyértékeit jelenítettük meg a 16x2 LCD-n. A teljes Python kódot az oktatóanyag végén találja meg.
Programozási magyarázat:
A teljes Python-kód a végén található, a kód néhány fontos részét elmagyarázzuk.
A Python programba importáltunk néhány szükséges könyvtárat, például az időt, az smbus-t és a GPIO-t.
import smbus import time import RPi.GPIO as gpio
Ezt követően be kell vennünk egy regisztrációs címet az MPU6050 konfigurálásához és az értékek megszerzéséhez. Néhány változót is vettünk az I2C busz kalibrálásához és inicializálásához.
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 = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 40x45 AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Ezután írtunk néhány olyan funkciót a 16x2LCD vezetésére, mint a def start (), def cmd (ch), def write (ch), def Print (str), def clear () stb . Ezenkívül ellenőrizheti az LCD és a Raspberry Pi összekötését.
Ezt követően inicializálnunk kell az MPU6050 modult
def InitMPU (): bus.write_byte_data (Eszköz_cím, DIV, 7) bus.write_byte_data (Eszköz_cím, PWR_M, 1) bus.write_byte_data (Eszköz_cím, CONFIG, 0) bus.write_byte_data (Eszköz_cím_eszköz (Device_Address), INT_HU, 1) idő. Alvás (1)
Ezt követően meg kell írnunk néhány függvényt az MPU6050 értékeinek kiolvasásához és az LCD-re történő megjelenítéshez. A megadott funkció az MPU6050 adatainak olvasására szolgál
def readMPU (addr): high = bus.read_byte_data (Device_Cím, addr) low = bus.read_byte_data (Device_Cím, addr + 1) value = ((high << 8) - low) if (value> 32768): value = érték - 65536 visszatérési érték
A megadott funkciót a gyorsulásmérő és a giroszkóp mérő adatainak leolvasására használják
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) kijelző (Axe, Ay, Az) time.sleep (.01) def gyro (): globális GxCal globális 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) kijelző (Gx, Gy, Gz) time.sleep (. 01)
Ezek után megírtunk egy hőmérséklet-leolvasási függvényt
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Print ("Temp:") Print (str (tempC))) idő.alszik (.2)
def kalibrálás () funkció az MPU6050 kalibrálásához, a def kijelző () funkció pedig az értékek megjelenítéséhez az LCD-n. Ellenőrizze ezeket a funkciókat az alább megadott teljes kódban.
Ezt követően elkezdtük az LCD, initialize és kalibrálja a MPU6050 majd miközben hurok hívtuk az összes mindhárom halmaza értékek MPU- hőmérséklet, gyorsulásmérő és giroszkóp és megmutatta őket LCD.
kezdődik(); Nyomtatás ("MPU6050 Interface") setCursor (0,1) Nyomtatás ("Circuit Digest") time.sleep (2) InitMPU () kalibrálás () while 1: InitMPU () clear () i tartományban (20): temp () törlés () Nyomtatási ("Accel") idő. alvás (1) i tartományban (30): gyorsítás () tiszta () Nyomtatás ("gyro") idő. alvás (1) i tartományban (30): giroszkóp ()
Az MPU6050 giroszkópot és a gyorsulásmérőt egyaránt használják bármely eszköz helyzetének és helyzetének detektálására. Gyro a föld gravitációjával határozza meg az x, y és z tengely helyzetét, a gyorsulásmérő pedig a mozgás változásának sebessége alapján érzékeli. Számos projektünkben már használtuk a gyorsulásmérőt az Arduinóval:
- Gyorsulásmérő alapú kézmozdulattal vezérelt robot
- Arduino alapú járműbaleset-riasztó rendszer
- Földrengés-érzékelő riasztás az Arduino segítségével