当前位置:   article > 正文

第十五篇、基于Arduino uno,获取mpu6050三轴加速度、角速度、温度的数据——结果导向_adruino使用mpu6050

adruino使用mpu6050

0、结果

 说明:先来看看串口调试助手显示的结果,第一个值是温度值,第二个值是X轴的加速度,第三个值是Y轴的加速度,第四个值是Z轴的加速度,第五个值是X轴的角速度,第六个值是Y轴的角速度,第七个值是Z轴的角速度,如果是你想要的,可以接着往下看。


1、外观

 说明:虽然mpu6050传感器形态各异,但是原理和代码都是适用的。


2、连线

 说明:只需要连接四根线。

  • uno————mpu6050传感器
  •   3.3V------VCC
  •   GND------GND
  •   SCL------SCL
  •   SDA------SDA

3、源程序

说明:采用非阻塞方式编写,一定时间获取一次数据,并将对应功能进行函数化,方便移植。

  1. /****************************************mpu6050 part****************************************/
  2. /*
  3. 接线:
  4. VCC------VCC
  5. GND------GND
  6. SCL------SCL
  7. SDA------SDA
  8. */
  9. #include <Adafruit_MPU6050.h> //include library
  10. #include <Adafruit_Sensor.h> //include library
  11. #include <Wire.h> //include library
  12. Adafruit_MPU6050 mpu; //Instantiate object
  13. #define mpu6050TimeInterval 100 //Detect the time interval of a trip
  14. unsigned long mpu6050Times = 0; //Record the device running time
  15. float mpu6050Temp = 0; //Define a variable
  16. float xAcceleration , yAcceleration , zAcceleration ; //Define three variables
  17. float xAccele , yAccele , zAccele ; //Define three variables
  18. float xGyro = 0, yGyro = 0, zGyro = 0; //Define three variables
  19. float gravity = 9.8; //Define a variable
  20. /****************************************set up and loop part*********************************/
  21. void setup(void) {
  22. Serial.begin(9600); //Example Set the baud rate of the serial port to 9600
  23. if (!mpu.begin()) { // Try to initialize!
  24. while (millis() - 1000) { //Wait for the device to come online
  25. Serial.println("Failed to find MPU6050 chip");
  26. }
  27. }
  28. mpu.setAccelerometerRange(MPU6050_RANGE_16_G); //Set the accelerometer range
  29. mpu.setGyroRange(MPU6050_RANGE_250_DEG); //Set the gyroscope range
  30. mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); //Set filtering bandwidth
  31. Serial.println("Go online!");
  32. }
  33. void loop() {
  34. getMpu6050Data(); //Obtain data about the mpu6050
  35. }
  36. /****************************************mpu6050 part****************************************/
  37. /*Obtain data about the mpu6050*/
  38. void getMpu6050Data() {
  39. if (millis() - mpu6050Times >= mpu6050TimeInterval) { //This command is executed once in a while
  40. mpu6050Times = millis();
  41. sensors_event_t a, g, temp; //Set three variables
  42. mpu.getEvent(&a, &g, &temp); //Read the corresponding three values
  43. mpu6050Temp = temp.temperature; //Acquired temperature
  44. xAcceleration = a.acceleration.x ; //Acquired acceleration
  45. yAcceleration = a.acceleration.y ; //Acquired acceleration
  46. zAcceleration = a.acceleration.z ; //Acquired acceleration
  47. xAccele = xAcceleration / gravity; //Convert the units of acceleration into g
  48. yAccele = yAcceleration / gravity; //Convert the units of acceleration into g
  49. zAccele = zAcceleration / gravity; //Convert the units of acceleration into g
  50. xGyro = g.gyro.x; //Acquired angular velocity
  51. yGyro = g.gyro.y; //Acquired angular velocity
  52. zGyro = g.gyro.z; //Acquired angular velocity
  53. Serial.print("Temp: ");
  54. Serial.print(mpu6050Temp); //Serial print temperature
  55. Serial.print(" , x-accele: ");
  56. Serial.print(xAccele); //Serial print acceleration
  57. Serial.print(" , y-accele: ");
  58. Serial.print(yAccele); //Serial print acceleration
  59. Serial.print(" , z-accele: ");
  60. Serial.print(zAccele); //Serial print acceleration
  61. Serial.print(" , x-gyro:");
  62. Serial.print(xGyro); //Serial port print angular speed
  63. Serial.print(" , y-gyro:");
  64. Serial.print(yGyro); //Serial port print angular speed
  65. Serial.print(" , z-gyro:");
  66. Serial.println(zGyro); //Serial port print angular speed
  67. }
  68. }

4、注意事项

说明:需要下载对应的库文件才不会编译报错。建议使用2.5V~3.6V的电源。实际使用过程中温度数据和加速度可能会有一些些误差,在MPU6050使用的过程中,需要确保其固定稳定,避免因振动或者位移导致读数不准确

5、基本原理

        MPU6050是一种常用的带有三轴加速度计和三轴陀螺仪的MEMS传感器,可以通过I2C总线与Arduino进行通信,在Arduino中使用MPU6050传感器需要注意一些细节和性能参数。
        工作原理方面,MPU6050的加速度计基于微机电系统(MEMS)技术,使用微小的机械结构和电子元件来测量物体在三个方向(X、Y、Z轴)上的加速度,通过自身的电路进行处理和放大后,输出测量到的加速度值。
        陀螺仪则利用了光电陀螺的原理,通过测量振动捕捉器或旋转体在三轴方向上的震荡运动,来记录物体在三个方向上的角速度,同样也是X、Y和Z轴方向上的角速度值。通常,陀螺仪的精度比加速度计高,但是更容易受到噪声和温度的影响。
        在Arduino中使用MPU6050传感器,我们需要先将其正确连接到Arduino板上,并设置相应的采样参数和滤波带宽参数。通过读取MPU6050传感器测量到的X、Y、Z轴方向上的加速度和角速度值,我们可以根据这些数据计算和分析物体的倾斜角度、运动方式等信息,以应用于各种实际应用场景中。
        需要注意的是,由于MPU6050传感器的测量精度和稳定性受到多种因素的影响,如传感器的校准、采样频率、运动状态等,因此在使用时还需要进行相应的校准和优化,以提高数据的准确性和可靠性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/467126
推荐阅读
相关标签
  

闽ICP备14008679号