Wa Koodu

Bí ọ̀ ṣe máa ṣe àmúlò MPU-6050 Accelerometer àti Gyroscope Module

Bí ọ̀ ṣe máa ṣe àmúlò MPU-6050 Accelerometer àti Gyroscope Module

MPU-6050 jẹ́ ẹ̀rọ̀ tó wúlò tó darapọ̀ mọ́ ẹ̀rọ̀ amúṣewọ́n ìyára (3-axis accelerometer) àti ẹ̀rọ̀ amúṣewọ́n yíyí (3-axis gyroscope) nínú àpótí kan ṣoṣo. Nínú ẹ̀kọ́ yìí, a óò ṣàwárí bí a ṣe lè so ẹ̀rọ̀ yìí pọ̀ mọ́ Arduino láti wọn ìyára àti ìyára yíyí. Àbájáde rẹ̀ yóò jẹ́ ètò tó rọrùn tó máa ṣàfihàn àwọn ìsọfúnni tó ń yí padà láti inú ẹ̀rọ̀, tó máa jẹ́ kí o ṣèmójútó ìyára àti ìṣísẹ̀ ẹ̀rọ̀ rẹ.

Nípa títẹ̀lé ìtọ́sọ́nà yìí, o óò kọ́ bí a ṣe ń ṣètò ẹ̀rọ̀, bí a ṣe ń so àwọn ẹ̀yà pọ̀ dáradára, àti bí a ṣe ń kọ kóòdù tó pọn dandan láti mú MPU-6050 ṣiṣẹ́. Èyí yóò fún ọ ní ìpìlẹ̀ fún àwọn iṣẹ́ mìíràn tó ní í ṣe pẹ̀lú ìmọ̀ ìyára àti ìdámọ̀ ìṣísẹ̀. Fún àlàyé síwájú sí i, rí i pé o wo fídíò tó bá ẹ̀kọ́ yìí lọ (nínú fídíò ní 00:00).

Àlàyé Ẹ̀rọ̀

Ẹ̀yà pàtàkì nínú iṣẹ́ yìí ni ẹ̀rọ̀ MPU-6050, tó ń pèsè ìsọfúnni accelerometer àti gyroscope. Ẹ̀rọ̀ amúṣewọ́n ìyára ń wọn ìyára tó ń lọ ní ọ̀nà títọ́ (linear acceleration) lórí àwọn ẹ̀gbẹ́ X, Y, àti Z, nígbà tí ẹ̀rọ̀ amúṣewọ́n yíyí ń wọn ìwọ̀n yíyí ní àyíká àwọn ẹ̀gbẹ́ kan náà. Ìdarapọ̀ yìí mú MPU-6050 di yíyan tó dára jùlọ fún àwọn ohun èlò tó nílò ìtọ́pa ìyára.

Pẹ̀lúpẹ̀, ẹ̀rọ̀ náà ń lo ìbánisọ̀rọ̀ I2C fún ìkórè, èyí tó rọrùn láti so pọ̀ àti tó jẹ́ kí ọ̀pọ̀lọpọ̀ ẹ̀rọ̀ lè so pọ̀ mọ́ ọ̀nà kan náà. A ń fi agbára pèsè fún ẹ̀rọ̀ náà nípasẹ̀ ẹ̀yà VCC, tó sábà máa ń nílò foltiège láàárín 3.3V àti 5V. A so ilẹ̀ (ground) pọ̀ mọ́ ilẹ̀ tó wọ́pọ̀ ti Arduino.

Àwọn Àlàyé Láti Inú Datasheet

OlùṣeInvenSense
Nọ́mbà ẹ̀yàMPU-6050
Foltiège Logic/IO3.3 – 5 V
Foltiège ìpèsè3.3 – 5 V
Ìwọ̀n ìjàde (fún ikanni)
Ìwọ̀n tó ga jùlọ (fún ikanni)
Ìtọ́sọ́nà ìgbohùnsáfẹ́fẹ́ PWM
Àwọn ìpele ìwọ̀n ìkórè
Ìdínkù foltiège / RDS(on) / ìkún
Àwọn ìwọ̀n ooru
ÀpótíQFN
Àwọn àkíyèsí / àwọn oríṣiríṣi

  • So ẹ̀yà VCC pọ̀ mọ́ 3.3V tàbí 5V.
  • So ẹ̀yà GND pọ̀ mọ́ ilẹ̀.
  • Lo ìbánisọ̀rọ̀ I2C nípasẹ̀ SDA (ìsọfúnni) àti SCL (aago).
  • Rí i pé àwọn resistor ìfà (pull-up) wà lórí àwọn ọ̀nà SDA àti SCL.
  • Ṣàyẹ̀wò àwọn ìpele foltiège láti yẹra fún ìbàjẹ́ ẹ̀rọ̀.

Àwọn Ìtọ́sọ́nà Ìsopọ̀

arduino_wiring_MPU-6050

Láti so MPU-6050 pọ̀ mọ́ Arduino rẹ, bẹ̀rẹ̀ nípa sísopọ̀ ẹ̀yà VCC ti MPU-6050 pọ̀ mọ́ ẹ̀yà 5V lórí Arduino. Lẹ́yìn náà, so ẹ̀yà GND ti MPU-6050 pọ̀ mọ́ ọ̀kan lára àwọn ẹ̀yà GND lórí Arduino. Fún ìbánisọ̀rọ̀ I2C, so ẹ̀yà SDA ti MPU-6050 pọ̀ mọ́ ẹ̀yà A4 ti Arduino, àti ẹ̀yà SCL pọ̀ mọ́ ẹ̀yà A5. Rí i pé Arduino rẹ ti ṣètò láti lo ìbánisọ̀rọ̀ I2C nípa fífi àwọn àkójọpọ̀ (libraries) tó yẹ sínú kóòdù rẹ.

Ṣàyẹ̀wò àwọn ìsopọ̀ rẹ lẹ́ẹ̀mejì kí o tó dá agbára sí i. Bí o bá ń lo breadboard, rí i pé àwọn ìsopọ̀ ṣinṣin àti pé kò sí ìsopọ̀ kúkúrú (short circuits). Bí ẹ̀rọ̀ náà kò bá dáhùn bí o ṣe retí, ṣàyẹ̀wò ìsopọ̀ náà kí o sì ṣàyẹ̀wò àdírẹ́ẹ̀sì I2C ti MPU-6050 nínú kóòdù rẹ.

Àwọn Àpẹẹrẹ Kóòdù & Ìtọ́sọ́nà

Ìsopọ̀ kóòdù tó tẹ̀le yìí ń bẹ̀rẹ̀ MPU-6050 ó sì ń bẹ̀rẹ̀ sí í ka ìsọfúnni láti inú rẹ̀. Àwọn ìdámọ̀ pàtàkì ní mpu6050, tó jẹ́ àpẹẹrẹ ti ẹ̀ka MPU6050, àti timer, tí a ń lò láti ṣàkóso àkókò ìjàde ìsọfúnni.

MPU6050 mpu6050(Wire);
long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

Nínú ìṣiṣẹ́ ìṣètò yìí, a ń bẹ̀rẹ̀ ìbánisọ̀rọ̀ serial àti ẹ̀rọ̀ MPU-6050. Ìpè mpu6050.calcGyroOffsets(true) ṣe pàtàkì gan-an níwọ̀n bí ó ti ń ṣàtúnṣe àwọn àìpé gyroscope, tó ń rí i pé àwọn ìwọ̀n náà péye.

Nínú ìṣiṣẹ́ loop, a ń ṣàtúnṣe ìsọfúnni ẹ̀rọ̀ nígbà gbogbo a sì ń tẹ̀ ẹ́ jáde sí ibi ìṣàmì serial. Ìsopọ̀ kóòdù tó tẹ̀le yìí fi hàn bí a ṣe ń ka àti tẹ̀ ìwọ̀n ooru àti ìyára jáde:

if(millis() - timer > 1000){
  Serial.print("temp : ");Serial.println(mpu6050.getTemp());
  Serial.print("accX : ");Serial.print(mpu6050.getAccX());
  Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
  Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
}

Àkọsílẹ̀ yìí ń ṣàyẹ̀wò bí ìṣẹ́jú ààyè kan bá ti kọjá láti ìgbà tí a kẹ́yìn jáde. Lẹ́yìn náà, ó ń gba àwọn iye ooru àti ìyára láti inú MPU-6050 ó sì ń tẹ̀ wọ́n jáde sí ibi ìṣàmì serial. O lè ṣàkíyèsí àwọn iye wọ̀nyí tí ń yí padà ní àkókò gidi.

Ìfihàn / Ohun Tó O Lè Retí

Nígbà tí gbogbo nǹkan bá ti sopọ̀ tán tí a sì ti gbé kóòdù náà sílẹ̀, o lè retí láti rí ìwọ̀n ooru àti ìyára tí ń jáde ní ibi ìṣàmì serial ní gbogbo ìṣẹ́jú ààyè. Bí o bá tẹ̀ ẹ́ sílẹ̀ tàbí gbé MPU-6050, àwọn iye ìyára yóò yí padà ní ìbámu. Ṣọ́ra kí o mọ̀ pé ìsopọ̀ tí kò tọ́ tàbí ìpèsè agbára tí kò tó lè yọrí sí àwọn ìwọ̀n tí kò dúró ṣinṣin tàbí kò sí ìsọfúnni rárá (nínú fídíò ní 01:30).

Aworan

arduino_wiring_MPU-6050
arduino_wiring_MPU-6050
MPU-6050-module-1
MPU-6050-module-1
MPU-6050-module-2
MPU-6050-module-2
MPU-6050-module-schematic
MPU-6050-module-schematic
MPU-6050-module-1
MPU-6050-module-1
116-Arduino code for the MPU-6050 accelerometer and gyroscope sensor (all data)
Ede: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays all data:
 * -Gyroscope X, Gyroscope Y, Gyroscope Z
 * -Gyroscope Angle X, Gyroscope Angle Y, Gyroscope Angle Z 
 * -Accel X, Accel Y, Accel Z
 * -Accel Angle X, Accel Angle Y, Accel Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();

  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
    
  }

}
117-Arduino code for an MPU-6050 accelerometer and gyroscope sensor (just angle)
Ede: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays:
 * - Angle X, Angle Y, Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();

  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
    
  }

}

Ohun ti o le nilo

Orisun & itọkasi

Fáìlìs📁

Awọn ile-ikawe Arduino (zip)

Awọn faili miiran

  • MPU6050_tockn-master
    Arduino library for the MPU6050 accelerometer and gyroscope module. Provides functions to read acceleration, gyro, and temperature data, with calibration and angle calculation. Designed for easy integration into motion-sensing projects.
    robojax-MPU6050_tockn-master.zip