- Reikalingi komponentai:
- MPU6050 giroskopo jutiklis:
- Apibūdinimas:
- Grandinės schema ir paaiškinimas:
- „Raspberry Pi“ konfigūravimas „MPU6050 Gyro“ jutikliui:
- Programavimo paaiškinimas:
MPU6050 jutiklis turi daug funkcijų per vieną lustą. Jį sudaro MEMS akselerometras, MEMS giroskopas ir temperatūros jutiklis. Šis modulis yra labai tikslus konvertuojant analogines vertes į skaitmenines, nes kiekvienam kanalui yra skirta 16 bitų analoginio į skaitmeninį keitiklio aparatūrą. Šis modulis vienu metu gali užfiksuoti x, y ir z kanalus. Jis turi I2C sąsają, kad galėtų bendrauti su pagrindinio kompiuterio valdikliu. Šis „ MPU6050“ modulis yra kompaktiškas lustas, turintis ir akselerometrą, ir giroskopą. Tai yra labai naudingas prietaisas daugeliui programų, pavyzdžiui, dronams, robotams, judesio jutikliams. Jis taip pat vadinamas giroskopu arba trigubos ašies akselerometru.
Šiandien šiame straipsnyje mes sujungsime šį MPU6050 su „Raspberry Pi“ ir parodysime vertes per 16x2 LCD.
Reikalingi komponentai:
- Avietė Pi
- MPU-6050
- 10K POT
- Džemperio viela
- Bandomoji Lenta
- Maitinimo šaltinis
MPU6050 giroskopo jutiklis:
MPU-6050 yra 8 kontaktų 6 ašių giroskopas ir akselerometras vienoje mikroschemoje. Šis modulis veikia pagal I2C nuoseklųjį ryšį pagal numatytuosius nustatymus, tačiau jį galima sukonfigūruoti SPI sąsajai sukonfigūruojant jo registrą. „I2C“ tai turi SDA ir SCL linijas. Beveik visi kaiščiai yra daugiafunkciniai, tačiau čia mes dirbame tik su I2C režimo kaiščiais.
Smeigtuko konfigūracija:
Vcc: - šis kaištis naudojamas MPU6050 moduliui maitinti atsižvelgiant į žemę
GND: - tai žemės smeigtukas
SDA: - SDA kaištis naudojamas duomenims tarp valdiklio ir „mpu6050“ modulio
SCL: - SCL kaištis naudojamas laikrodžio įvedimui
XDA: - Tai jutiklio I2C SDA duomenų linija, skirta konfigūruoti ir skaityti iš išorinių jutiklių ((pasirinktinai), mūsų atveju nenaudojama)
XCL: - tai jutiklio I2C SCL laikrodžio linija, skirta konfigūruoti ir skaityti iš išorinių jutiklių ((pasirinktinai), mūsų atveju nenaudojama)
ADO: - I2C vergo adresas LSB (mūsų atveju netaikomas)
INT: - pertraukimo kaištis, rodantis paruoštus duomenis.
Anksčiau mes sąsajojome MPU6050 su „Arduino“.
Apibūdinimas:
Šiame straipsnyje mes parodome temperatūros, giroskopo ir akselerometro rodmenis per LCD, naudodami MPU6050 su „Raspberry Pi“. Jei esate naujokas „Raspberry Pi“, eikite į mūsų „Raspberry Pi“ pamokų skyrių ir sužinokite, kaip pradėti naudoti „Raspberry Pi“.
Šiame projekte mes pirmiausia parodėme temperatūros vertę per LCD ir po kurio laiko parodome giroskopo reikšmes, o po kurio laiko turime akselerometro rodmenis, kaip parodyta toliau pateiktuose paveikslėliuose:
Grandinės schema ir paaiškinimas:
Grandinės schema, skirta susieti MPU6050 su „Raspberry Pi“, yra labai paprasta, čia mes naudojome LCD ir MPU6050. LCD ryškumui reguliuoti naudojamas 10 000 puodas. Ryšium su MPU6050, mes padarėme 4 jungtis, kuriose mes prijungėme 3,3 V maitinimo šaltinį ir MPU6050 įžeminimą su 3,3 V ir „Raspberry Pi“ žeme. MPL6050 SCL ir SDA kaiščiai yra sujungti su „Raspberry“ fiziniu kaiščiu 3 (GPIO2) ir 5 kaiščiu (GPIO3). LCD RS, RW ir EN yra tiesiogiai prijungti prie GPIO18 ir 23 aviečių pi. Duomenų kaištis yra tiesiogiai prijungtas prie skaitmeninio smeigtuko numerio GPIO24, GPIO25, GPIO8 ir GPIO7. Sužinokite daugiau apie LCD sąsają su „Raspberry Pi“ čia.
„Raspberry Pi“ konfigūravimas „MPU6050 Gyro“ jutikliui:
Prieš pradėdami programuoti, turime įgalinti „Raspberry Pi“ i2c naudodami nurodytą metodą:
1 veiksmas: įjunkite „I2C“ ryšį
Prieš diegdami „Adafruit SSD1306“ biblioteką, turime įjungti „I2C“ ryšį „Raspberry Pi“.
Norėdami tai padaryti „Raspberry Pi“ pulte:
sudo raspi -config
Tada pasirodys mėlynas ekranas. Dabar pasirinkite sąsajos parinktį
Po to turime pasirinkti I2C
A
Po to turime pasirinkti „Taip“ ir paspausti „Enter“, tada gerai
Po to turime iš naujo paleisti aviečių pi, išleisdami žemiau esančią komandą:
sodo perkrauti
2 žingsnis: įdiekite python-pip ir GPIO biblioteką
sudo apt-get install build-essential python-dev python-pip
Po to turime įdiegti aviečių pi GPIO biblioteką
sudo pip įdiegia RPi.GPIO
3 žingsnis: įdiekite „ smbus“ biblioteką
Galiausiai, naudodami nurodytą komandą, turime įdiegti „ smbus“ biblioteką „Raspberry Pi“:
sudo apt-get install python-smbus
4 žingsnis: įdiekite biblioteką MPU6050
Po to turime įdiegti MPU6050 biblioteką naudodami nurodytą komandą
sudo pip įdiegti mpu6050
Dabar pavyzdžiuose galime rasti kodų pavyzdžius. Vartotojas gali išbandyti tą kodą tiesiogiai įkeldamas į „Raspberry Pi“ arba pritaikyti jį pagal reikalavimus. Čia mes parodėme MPU6050 X, Y ir Z ašių vertes 16x2 LCD ekrane. Galite rasti visą Python kodas ties Tutorial pabaigoje.
Programavimo paaiškinimas:
Čia pateikiamas pilnas „Python“ kodas. Čia mes paaiškiname keletą svarbių kodo dalių.
„Python“ programoje mes importavome kai kurias reikalingas bibliotekas, tokias kaip laikas, „smbus“ ir GPIO.
importuoti smbus importo laikas importuoti RPi.GPIO kaip gpio
Po to, norėdami sukonfigūruoti MPU6050 ir gauti iš to paties reikšmes, turime paimti tam tikrą registro adresą. Mes taip pat paėmėme kelis kintamuosius I2C magistralės kalibravimui ir inicializavimui.
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 = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 40x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 0x45 GYRO_Z = 40x45 GYRO_ AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Tada mes parašėme kai kurias funkcijas, skirtas vairuoti 16x2LCD, pvz., Def begin (), def cmd (ch), def write (ch), def Print (str), def clear () ir kt . Galite dar patikrinti LCD sąsają su „Raspberry Pi“.
Po to turime inicijuoti MPU6050 modulį
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 (Device_Address), INT_LT, 1) laikas. Miegoti (1)
Po to turime parašyti keletą funkcijų, kad galėtume nuskaityti vertes iš MPU6050 ir rodyti jas LCD. Pateikta funkcija naudojama duomenims nuskaityti iš 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 (value> 32768): value = value - 65536 grąžos vertė
Duota funkcija naudojama nuskaityti akselerometro ir giroskopo skaitiklio duomenis
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) ekranas (Ax, Ay, Az) time.sleep (.01) def gyro (): global GxCal globalus 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) ekranas (Gx, Gy, Gz) time.sleep (. 01)
Po to mes parašėme temperatūros skaitymo funkciją
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Print ("Temp:") Print (str (tempC))) laikas. miega (.2)
Def calibrate () funkcija naudojama kalibruojant MPU6050, o def display () funkcija naudojama rodant vertes LCD ekrane. Patikrinkite šias funkcijas visame žemiau pateiktame kode.
Po to mes pradėjome skystųjų kristalų ekraną, inicializavome ir kalibravome MPU6050, o tada, kol kilpa, mes iškvietėme visus tris MPU temperatūros, akselerometro ir giroskopo verčių rinkinius ir parodėme juos per LCD.
pradėti (); Spausdinti („MPU6050 sąsaja“) setCursor (0,1) Spausdinimo („Circuit Digest“) laikas. Miego režimas (2) InitMPU () kalibruoti (), o 1: InitMPU () išvalyti () i diapazone (20): temp () išvalyti () Spausdinti („Accel“) laikas. užmigti (1) i diapazone (30): pagreitinti () išvalyti () Spausdinti („giroskopo“) laiką. miegoti (1) i diapazone (30): giroskopas ()
MPU6050 giroskopas ir akselerometras naudojami aptikti bet kurio prietaiso padėtį ir orientaciją. Giroskopas naudoja žemės gravitaciją, kad nustatytų x, y ir z ašies padėtį, o akselerometras aptinka pagal judėjimo pokyčio greitį. Akselerometrą su „Arduino“ jau naudojome daugelyje savo projektų, tokių kaip:
- Akselerometru paremtas robotas, valdomas rankomis
- „Arduino“ pagrįsta transporto priemonių įspėjimo apie avarijas sistema
- Žemės drebėjimo detektoriaus signalizacija naudojant „Arduino“