Cov txheej txheem:

MPU 6050 Gyro, Kev Sib Txuas Lus Accelerometer Nrog Arduino (Atmega328p): 5 Kauj Ruam
MPU 6050 Gyro, Kev Sib Txuas Lus Accelerometer Nrog Arduino (Atmega328p): 5 Kauj Ruam

Video: MPU 6050 Gyro, Kev Sib Txuas Lus Accelerometer Nrog Arduino (Atmega328p): 5 Kauj Ruam

Video: MPU 6050 Gyro, Kev Sib Txuas Lus Accelerometer Nrog Arduino (Atmega328p): 5 Kauj Ruam
Video: Tutorial: Gyroscope and Accelerometer (GY-521/MPU6050) with Arduino | UATS A&S #12 2024, Hlis ntuj nqeg
Anonim
MPU 6050 Gyro, Kev Sib Txuas Lus Txuas nrog Arduino (Atmega328p)
MPU 6050 Gyro, Kev Sib Txuas Lus Txuas nrog Arduino (Atmega328p)
MPU 6050 Gyro, Kev Sib Txuas Lus Txuas nrog Arduino (Atmega328p)
MPU 6050 Gyro, Kev Sib Txuas Lus Txuas nrog Arduino (Atmega328p)
MPU 6050 Gyro, Kev Sib Txuas Lus Txuas nrog Arduino (Atmega328p)
MPU 6050 Gyro, Kev Sib Txuas Lus Txuas nrog Arduino (Atmega328p)

MPU6050 IMU muaj ob qho tib si 3-Axis accelerometer thiab 3-Axis gyroscope ua ke ntawm ib leeg.

Lub gyroscope ntsuas qhov nrawm nrawm lossis tus nqi ntawm kev hloov pauv ntawm txoj haujlwm kaum ob lub sijhawm, raws X, Y thiab Z axis.

Cov txiaj ntsig ntawm lub gyroscope nyob hauv qib ib ob, yog li txhawm rau kom tau txais txoj haujlwm angular peb tsuas yog xav tau los ua ke qhov nrawm nrawm.

Ntawm qhov tod tes, MPU6050 ntsuas lub ntsuas cua nrawm los ntawm kev ntsuas lub ntiajteb txawj nqus nrawm raws 3 txoj kab thiab siv qee qhov lej lej trigonometry peb tuaj yeem xam lub kaum sab xis uas lub ntsuas ntsuas tau nyob. Yog li, yog tias peb fuse, lossis sib xyaw cov ntsuas qhov ntsuas thiab ntsuas cov ntaub ntawv peb tuaj yeem tau txais cov ntaub ntawv raug tseeb txog qhov ntsuas qhov ntsuas.

3-axis GyroscopeThe MPU-6050 suav nrog 3 axis gyroscope uas tuaj yeem txheeb xyuas qhov nrawm nrawm raws x, y, z axis nrog micro electro mechanical system tshuab (MEMS). Thaum lub ntsuas hluav taws xob tig raws ib qho axis qhov kev co tau tsim los ntawm Coriolis cov txiaj ntsig uas tau pom los ntawm MEMS.16-ntsis ADC tau siv los digitize qhov hluav taws xob mus ua piv txwv txhua lub axis. +/- 250, +/- 500, +/- 1000, +/- 2000 yog qhov ntsuas tag nrho ntawm cov zis. Qhov nrawm nrawm tau ntsuas raws txhua lub axis hauv qib ib chav tsev thib ob.

Pab Link: ……………….

Arduino Board: ………….

MPU6050 IMU ……………

Kauj Ruam 1: MPU-6050 Module

MPU-6050 Module
MPU-6050 Module

MPU-6050 module muaj 8 tus pin,

INT: cuam tshuam cov lej tso zis.

AD0: I2C Slave Address LSB tus pin. Qhov no yog 0th hauv 7-ntsis qhev chaw nyob ntawm lub cuab yeej. Yog tias txuas nrog VCC ces nws tau nyeem raws li ib qho laj thawj thiab qhev qhov chaw nyob hloov pauv.

XCL: Pab Koom Tes Hauv Tus lej Tus lej pin. Tus pin no yog siv los txuas rau lwm I2C interface qhib lub cim xeeb SCL tus pin rau MPU-6050.

XDA: Cov Pab Pawg Pabcuam Cov Ntaub Ntawv tus lej. Tus pin no yog siv los txuas rau lwm I2C interface qhib lub cim xeeb SDA tus pin rau MPU-6050.

SCL: Tus lej xov tooj. Txuas tus pin no rau microcontrollers SCL tus pin. SDA: Serial Data pin. Txuas tus pin no rau microcontrollers SDA tus pin.

GND: Tus pin hauv av. Txuas tus pin no rau hauv av txuas.

VCC: Tus pin fais fab mov. Txuas tus pin no rau +5V DC khoom. MPU-6050 module muaj Slave chaw nyob (Thaum AD0 = 0, piv txwv li nws tsis txuas nrog Vcc) raws li, Qhib Sau chaw nyob (SLA+W): 0xD0

Qhib Nyeem qhov chaw nyob (SLA+R): 0xD1

Kauj Ruam 2: Kev suav

Xauv
Xauv

Gyroscope thiab Accelerometer sensor cov ntaub ntawv ntawm MPU6050 tus qauv muaj 16-ntsis cov ntaub ntawv nyoos hauv 2 daim ntawv ua tiav.

Cov ntaub ntawv ntsuas kub ntawm MPU6050 tus qauv muaj 16-ntsis cov ntaub ntawv (tsis yog hauv 2 daim ntawv ntxiv).

Tam sim no xav tias peb tau xaiv,

  • - Accelerometer ntsuas qhov ntsuas ntau ntawm +/- 2g nrog Qhov Ntsuas Qhov Ntsuas Qhov Ntsuas ntawm 16, 384 LSB (Suav)/g.
  • - Gyroscope tag nrho cov ntsuas ntau ntawm +/- 250 °/s nrog Qhov Ntsuas Qhov Ntsuas Qhov Ntsuas ntawm 131 LSB (Suav)/°/s. ces,

Txhawm rau kom tau txais cov ntaub ntawv nyoos, peb yuav tsum xub ua 2 qhov ua tiav ntawm cov ntaub ntawv ntsuas ntawm Accelerometer thiab gyroscope. Tom qab tau txais cov ntaub ntawv nyoos peb tuaj yeem suav qhov nrawm thiab nrawm nrawm los ntawm kev faib cov ntaub ntawv cov ntaub ntawv raw nrog lawv qhov ntsuas qhov ntsuas tau raws li hauv qab no-

Accelerometer qhov tseem ceeb hauv g (g quab yuam)

  • Ua kom nrawm raws X axis = (Accelerometer X axis raw data/16384) g.
  • Kev nrawm raws Y axis = (Accelerometer Y axis raw data/16384) g.
  • Kev nrawm raws Z axis = (Accelerometer Z axis raw data/16384) g.

Gyroscope qhov tseem ceeb hauv °/s (qib ib ob)

  • Kev nrawm nrawm raws X axis = (Gyroscope X axis raw data/131) °/s.
  • Kev nrawm nrawm raws Y axis = (Gyroscope Y axis raw data/131) °/s.
  • Kev nrawm nrawm raws Z axis = (Gyroscope Z axis cov ntaub ntawv nyoos/131) °/s.

Kub tus nqi hauv °/c (degree ib Celsius)

Kub hauv degrees C = ((cov ntaub ntawv ntsuas kub)/340 + 36.53) °/c.

Piv txwv li, Piv txwv tias, tom qab 2 'ua tiav peb tau txais kev ntsuas tus lej X axis nyoos tus nqi = +15454

Ces Ax = +15454/16384 = 0.94 g.

Ntau,

Yog li peb paub tias peb tab tom ua haujlwm ntawm +/- 2G thiab +/- 250deg/s tab sis peb qhov txiaj ntsig zoo li cas rau qhov nrawm/kaum.

Cov no yog ob kab ntawv ncaj thiab peb tuaj yeem ua haujlwm los ntawm lawv uas rau 1G peb yuav nyeem 16384 thiab rau 1degree/sec peb yuav nyeem 131.07 (Txawm hais tias. 07 yuav tsis quav ntsej vim binary) cov txiaj ntsig no tsuas yog ua haujlwm los ntawm kev kos duab ncaj kab teeb nrog 2G ntawm 32767 thiab -2G ntawm -32768 thiab 250/-250 ntawm tib qho txiaj ntsig.

Yog li tam sim no peb paub peb qhov kev nkag siab qhov tseem ceeb (16384 thiab 131.07) peb tsuas yog xav kom rho tawm cov offsets los ntawm peb qhov muaj txiaj ntsig thiab tom qab ntawd ua kom nkag siab zoo.

Cov no yuav ua haujlwm zoo rau X thiab Y qhov tseem ceeb tab sis raws li Z tau sau tseg ntawm 1G thiab tsis 0 peb yuav xav rho tawm 1G (16384) ua ntej peb faib los ntawm peb qhov kev nkag siab.

Kauj Ruam 3: MPU6050-Atmega328p Kev Sib Txuas

MPU6050-Atmega328p Kev Sib Txuas
MPU6050-Atmega328p Kev Sib Txuas
MPU6050-Atmega328p Kev Sib Txuas
MPU6050-Atmega328p Kev Sib Txuas
MPU6050-Atmega328p Kev Sib Txuas
MPU6050-Atmega328p Kev Sib Txuas

Tsuas yog Txuas txhua qhov raws li muab hauv daim duab…

Cov kev sib txuas tau muab raws li hauv qab no:-

MPU6050 Arduino Nano

VCC 5 v pin

GND Tus pin

SDA A4 pin // cov ntaub ntawv xov xwm

SCL A5 tus pin // serial moos

Pitch and Roll Calculation: Yob yog kev sib hloov ib puag ncig x-axis thiab suab yog kev sib hloov raws y-axis.

Qhov tshwm sim yog hauv radians. (hloov mus rau qib los ntawm kev sib npaug ntawm 180 thiab faib los ntawm pi)

Kauj Ruam 4: Cov Cai thiab Cov Lus Qhia

Cov Cai thiab Cov Lus Qhia
Cov Cai thiab Cov Lus Qhia

/*

Arduino thiab MPU6050 Accelerometer thiab Gyroscope Sensor Tutorial los ntawm Dejan, https://howtomechatronics.com */#include const int MPU = 0x68; // MPU6050 I2C chaw nyob ntab AccX, AccY, AccZ; ntab GyroX, GyroY, GyroZ; ntab accAngleX, accAngleY, gyroAngleX, gyroAngleY, gyroAngleZ; ntab ntab, suab, yaw; ntab AccErrorX, AccErrorY, GyroErrorX, GyroErrorY, GyroErrorZ; ntab elapsedTime, currentTime, timeTime; int c = 0; teeb tsa tsis muaj dab tsi () {Serial.begin (19200); Hlau.begin (); // Pib kev sib txuas lus Wire.beginTransmission (MPU); // Pib sib txuas lus nrog MPU6050 // MPU = 0x68 Wire.write (0x6B); // Tham nrog rau npe 6B Wire.write (0x00); // Rov pib dua - tso 0 rau hauv 6B sau npe Wire.endTransmission (muaj tseeb); // xaus qhov kev sib kis/* // Txheeb xyuas Accelerometer Sensitivity - Tag Nrho Cov Nplai (default +/- 2g) Wire.beginTransmission (MPU); Hlau.write (0x1C); // Tham nrog ACCEL_CONFIG npe (1C hex) Wire.write (0x10); // Teev npe cov khoom me me raws li 00010000 (+/- 8g qhov ntsuas tag nrho) Wire.endTransmission (muaj tseeb); // Kho Kho Mob Gyro Rhiab - Ntau Yam Nplai (default +/- 250deg/s) Wire.beginTransmission (MPU); Hlau.write (0x1B); // Tham nrog GYRO_CONFIG sau npe (1B hex) Wire.write (0x10); // Teev npe cov khoom me me raws li 00010000 (1000deg/s nplai) Wire.endTransmission (muaj tseeb); ncua (20); */ // Hu rau txoj haujlwm no yog tias koj xav tau txais IMU qhov yuam kev qhov tseem ceeb rau koj tus lej calcul_IMU_error (); ncua (20); } void loop () {// === Nyeem cov ntaub ntawv acceleromter === // Wire.beginTransmission (MPU); Hlau.write (0x3B); // Pib nrog sau npe 0x3B (ACCEL_XOUT_H) Wire.endTransmission (tsis tseeb); Wire.requestFrom (MPU, 6, muaj tseeb); // Nyeem 6 daim ntawv sau npe tag nrho, txhua tus lej tau muab khaws cia hauv 2 daim ntawv sau npe // Rau thaj tsam ntawm +-2g, peb yuav tsum faib cov nqi nyoos los ntawm 16384, raws li cov ntawv teev tseg AccX = (Wire.read () << 8 | Wire.read ()) / 16384.0; // X-axis value AccY = (Wire.read () << 8 | Wire.read ()) / 16384.0; // Y-axis tus nqi AccZ = (Wire.read () << 8 | Wire.read ()) / 16384.0; // Z -axis value // Calculating Roll and Pitch from the accelerometer data accAngleX = (atan (AccY / sqrt (pow (AccX, 2) + pow (AccZ, 2))) * 180 / PI) - 0.58; // AccErrorX ~ (0.58) Saib cov lej_IMU_error () kev cai ua haujlwm kom paub meej ntxiv accAngleY = (atan (-1 * AccX / sqrt (pow (AccY, 2) + pow (AccZ, 2))) * 180 / PI) + 1.58; // AccErrorY ~ (-1.58) // === Nyeem cov ntaub ntawv gyroscope === // previousTime = currentTime; // Lub sijhawm dhau los tau khaws ua ntej lub sijhawm tiag tiag nyeem tam sim no Time = millis (); // Lub sijhawm tam sim no lub sijhawm tiag tiag nyeem elapsedTime = (currentTime - yav dhau los Time) / 1000; // Sib faib los ntawm 1000 kom tau vib nas this Wire.beginTransmission (MPU); Hlau.write (0x43); // Gyro cov ntaub ntawv xub sau npe chaw nyob 0x43 Wire.endTransmission (tsis tseeb); Wire.requestFrom (MPU, 6, muaj tseeb); // Nyeem 4 daim ntawv sau npe tag nrho, txhua tus nqi axis tau khaws cia hauv 2 daim ntawv sau npe GyroX = (Wire.read () << 8 | Wire.read ()) / 131.0; // Rau qhov 250deg/ s peb yuav tsum faib ua ntej tus nqi nyoos los ntawm 131.0, raws li cov ntaub ntawv GyroY = (Wire.read () << 8 | Wire.read ())/ 131.0; GyroZ = (Wire.read () << 8 | Wire.read ()) / 131.0; // Kho qhov tawm nrog suav qhov yuam kev qhov tseem ceeb GyroX = GyroX + 0.56; // GyroErrorX ~ (-0.56) GyroY = GyroY - 2; // GyroErrorY ~ (2) GyroZ = GyroZ + 0.79; // GyroErrorZ ~ (-0.8) // Tam sim no tus nqi nyoos yog nyob rau qib ib vib nas this, deg/s, yog li peb yuav tsum tau sib npaug los ntawm cov xa ntawv (s) kom tau lub kaum sab xis hauv degrees gyroAngleX = gyroAngleX + GyroX * elapsedTime; // deg/s * s = deg gyroAngleY = gyroAngleY + GyroY * elapsedTime; yaw = yaw + GyroZ * elapsedTime; // Cov lim ntxiv - ua ke sib xyaw ua ke thiab ntsuas lub kaum sab xis qhov tseem ceeb yob = 0.96 * gyroAngleX + 0.04 * accAngleX; suab = 0.96 * gyroAngleY + 0.04 * accAngleY; // Luam qhov tseem ceeb ntawm tus saib xyuas Serial.print (yob); Serial.print ("/"); Serial.print (suab); Serial.print ("/"); Serial.println (yaw); } tsis muaj nuj nqis calcul_IMU_error () {// Peb tuaj yeem hu qhov haujlwm no hauv ntu teeb tsa los laij cov ntsuas qhov ntsuas thiab ntsuas cov ntaub ntawv tsis raug. Los ntawm no peb yuav tau txais qhov yuam kev qhov tseem ceeb siv hauv cov kab zauv saum toj no luam tawm ntawm Serial Monitor. // Nco ntsoov tias peb yuav tsum tso IMU tiaj thiaj li tau txais qhov txiaj ntsig tsim nyog, yog li peb tom qab ntawd tuaj yeem ua qhov raug qhov tseeb // Nyeem accelerometer qhov tseem ceeb 200 zaug thaum (c <200) {Wire.beginTransmission (MPU); Hlau.write (0x3B); Wire.endTransmission (tsis tseeb); Wire.requestFrom (MPU, 6, muaj tseeb); AccX = (Wire.read () << 8 | Wire.read ()) / 16384.0; AccY = (Wire.read () << 8 | Wire.read ()) / 16384.0; AccZ = (Wire.read () << 8 | Wire.read ()) / 16384.0; // Sum tag nrho cov nyeem AccErrorX = AccErrorX + ((atan ((AccY) / sqrt (pow ((AccX), 2) + pow ((AccZ), 2))) * 180 / PI)); AccErrorY = AccErrorY + ((atan (-1 * (AccX) / sqrt (pow ((AccY), 2) + pow ((AccZ), 2))) * 180 / PI)); c ++; } // Sib faib cov lej los ntawm 200 kom tau txais qhov yuam kev AccErrorX = AccErrorX /200; AccErrorY = AccErrorY / 200; c = 0; // Nyeem gyro qhov tseem ceeb 200 zaug thaum (c <200) {Wire.beginTransmission (MPU); Hlau.write (0x43); Wire.endTransmission (tsis tseeb); Wire.requestFrom (MPU, 6, muaj tseeb); GyroX = Wire.read () << 8 | Hlau.read (); GyroY = Wire.read () << 8 | Hlau.read (); GyroZ = Wire.read () << 8 | Hlau.read (); // Sau txhua qhov nyeem GyroErrorX = GyroErrorX + (GyroX / 131.0); GyroErrorY = GyroErrorY + (GyroY / 131.0); GyroErrorZ = GyroErrorZ + (GyroZ / 131.0); c ++; } // Sib faib cov lej los ntawm 200 kom tau txais tus nqi yuam kev GyroErrorX = GyroErrorX /200; GyroErrorY = GyroErrorY / 200; GyroErrorZ = GyroErrorZ / 200; // Luam qhov yuam kev qhov tseem ceeb ntawm Serial Monitor Serial.print ("AccErrorX:"); Serial.println (AccErrorX); Serial.print ("AccErrorY:"); Serial.println (AccErrorY); Serial.print ("GyroErrorX:"); Serial.println (GyroErrorX); Serial.print ("GyroErrorY:"); Serial.println (GyroErrorY); Serial.print ("GyroErrorZ:"); Serial.println (GyroErrorZ); } ------------------------------------------------------- ---------------------------------------------- Cov txiaj ntsig:-X = Y = Z = ----------------------------------------------- ----------------------------------------------- Lus ceeb toom tseem ceeb: -------------- thov

Hauv ntu ntu peb pib los ntawm kev nyeem cov ntaub ntawv ntsuas lub ntsuas. Cov ntaub ntawv rau txhua lub axis tau khaws cia hauv 2 bytes lossis sau npe thiab peb tuaj yeem pom cov chaw nyob ntawm cov npe no los ntawm cov ntawv teev tseg ntawm lub ntsuas.

Txhawm rau nyeem lawv txhua tus, peb pib nrog thawj zaug sau npe, thiab siv qhov xav tau los ntawm () muaj nuj nqi peb thov kom nyeem tag nrho 6 cov npe rau X, Y thiab Z axes. Tom qab ntawd peb nyeem cov ntaub ntawv los ntawm txhua tus ntawv sau npe, thiab vim tias cov txiaj ntsig tau yog ob qho ntxiv, peb ua ke lawv tsim nyog kom tau txais qhov txiaj ntsig raug.

Kauj Ruam 5: Nkag Siab Lub Qaij

Accelerometer

Lub ntiajteb txawj nqus yog qhov nrawm nrawm uas qhov quab yuam ib txwm taw mus rau nruab nrab ntawm Lub Ntiaj Teb.

Thaum lub ntsuas hluav taws xob sib npaug nrog lub ntiajteb txawj nqus, ntsuas qhov ntsuas yuav yog 1G, thaum ntsuas lub ntsuas hluav taws xob nyob ib puag ncig nrog lub ntiajteb txawj nqus, nws yuav ntsuas 0G.

Lub kaum sab xis tuaj yeem suav los ntawm kev ntsuas nrawm los ntawm kev siv qhov sib npaug no:

θ = kev txhaum-1 (Ntsuas Kev Ua Kom nrawm / Lub Cev Ua Haujlwm nrawm)

GyroGyro (aka rate sensor) yog siv los ntsuas qhov nrawm nrawm (ω).

Txhawm rau kom tau txais lub qaij kaum ntawm tus neeg hlau, peb yuav tsum muab cov ntaub ntawv los ntawm gyro raws li qhia hauv kab zauv hauv qab no:

ω = dθ / dt, θ = ω t dt tau

Tom qab kawm cov yam ntxwv ntawm gyro thiab accelerometer, peb paub tias lawv muaj lawv tus kheej lub zog thiab tsis muaj zog. Lub laij lub kaum sab xis los ntawm cov ntaub ntawv ntsuas ntsuas lub sijhawm tau teb qeeb, thaum lub kaum sab xis sib xyaw ua ke los ntawm cov ntaub ntawv gyro raug cuam tshuam los ntawm lub sijhawm. Hauv lwm lo lus, peb tuaj yeem hais tias cov ntaub ntawv ntsuas lub ntsuas cua muaj txiaj ntsig zoo rau lub sijhawm ntev thaum cov ntaub ntawv gyro muaj txiaj ntsig rau lub sijhawm luv.

Txuas kom nkag siab zoo dua: Nyem qhov no

Pom zoo: