| 
零知增强板I2C通信    本教程将指导您如何使用零知增强板与MPU6050六轴传感器模块进行交互。MPU6050是一款含有三轴加速度计和三轴陀螺仪的传感器,能够测量设备的倾斜情况和旋转运动。    通过本教程,您将学习如何读取并处理这些数据,为您的项目添加运动检测和姿态控制功能。  
  
一、硬件连接   在开始编程之前,首先需要正确连接MPU6050模块到零知增强板。 1.所需材料: 
 2.硬件连接示意图:   MPU6050模块的SCL和SDA分别连接到零知增强板的21、20号引脚 
 
零知增强版  | MPU6050  |  3.3V  | VCC  |  GND  | GND  |  21/SCL  | SCL  |  20/SDA  | SDA  |  
  
 
   完成以上步骤后,硬件连接就完成了。 
 
二、代码实现   接下来,我们将编写代码来读取MPU6050的数据。 
准备工作:1.打开零知开源平台,选择零知增强板开发板 2.选择电脑连接的串口,验证代码并上传 
 完整源代码: - /* I2C interface MPU6050 demo
 
 - * powered by www.lingzhilab.com
 
 - */
 
 - #include "MPU6050.h"
 
 -  
 
 - // 默认I2C地址为 0x68
 
 - // AD0 low = 0x68
 
 - // AD0 high = 0x69
 
 -  
 
 - MPU6050 accelgyro;
 
 -  
 
 - int16_t ax, ay, az;//三轴加速度值
 
 - int16_t gx, gy, gz;//三轴陀螺仪值
 
 -  
 
 - float nax,nay,naz;
 
 - float ngx,ngy,ngz;//转换后的实际值
 
 -  
 
 - #define LED_PIN LED_BUILTIN
 
 - bool blinkState = false;
 
 -  
 
 - void setup() {
 
 -  
 
 -     Serial.begin(9600);
 
 -  
 
 -     // MPU6050初始化设置
 
 -     Serial.println("Initializing I2C devices...");
 
 -     accelgyro.initialize();
 
 -  
 
 -     // verify connection
 
 -     Serial.println("Testing device connections...");
 
 -         if(accelgyro.testConnection()){
 
 -                 Serial.println("MPU6050 connection successful");
 
 -         }else{
 
 -                 Serial.println("MPU6050 connection failed");
 
 -         }
 
 -     
 
 -     //使用LED进行指示
 
 -     pinMode(LED_PIN, OUTPUT);
 
 -         
 
 - //        accelgyro.setFullScaleAccelRange(MPU6050_ACCEL_FS_16);//加速度参数
 
 - //        accelgyro.setFullScaleGyroRange(MPU6050_GYRO_FS_500);//陀螺仪
 
 - }
 
 -  
 
 - void loop() {
 
 -     // 获取原始的数值:三轴加速度值和三轴陀螺仪数值
 
 -     accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
 
 -  
 
 -     // 分别获取
 
 -     //accelgyro.getAcceleration(&ax, &ay, &az);
 
 -     //accelgyro.getRotation(&gx, &gy, &gz);
 
 -  
 
 -     // 显示打印
 
 -     Serial.print(" acc:\t");
 
 -     Serial.print(ax); Serial.print("\t");
 
 -     Serial.print(ay); Serial.print("\t");
 
 -     Serial.print(az); Serial.print("\t");
 
 -         Serial.print("\t gyro:\t");
 
 -     Serial.print(gx); Serial.print("\t");
 
 -     Serial.print(gy); Serial.print("\t");
 
 -     Serial.println(gz);
 
 -         
 
 -         //实际数值转换
 
 -         accelgyro.readNormalizeAccel(&nax,&nay,&naz);
 
 -         accelgyro.readNormalizeGyro(&ngx,&ngy,&ngz);
 
 -         Serial.print("Normalize acc:\t");
 
 -     Serial.print(nax); Serial.print("\t");
 
 -     Serial.print(nay); Serial.print("\t");
 
 -     Serial.print(naz); Serial.print("\t");
 
 -         Serial.print("\t Normalize gyro:\t");
 
 -     Serial.print(ngx); Serial.print("\t");
 
 -     Serial.print(ngy); Serial.print("\t");
 
 -     Serial.println(ngz);
 
 -  
 
 -     // blink LED to indicate activity
 
 -     blinkState = !blinkState;
 
 -     digitalWrite(LED_PIN, blinkState);
 
 -  
 
 -     delay(300);
 
 - }
 
  复制代码 
三、实验结果   将代码验证上传到零知增强板,打开串口监视器,设置波特率为9600。观察测量到的加速计和陀螺仪输出数据 
结果分析:   上传代码并打开串口监视器后,将看到加速度计和陀螺仪的原始数据以及归一化后的数据。 原始数据: 原始数据显示了MPU6050直接读取的数值,这些数值是传感器内部ADC转换后的数字量。 归一化数据: 归一化数据是将原始数据转换为实际的物理量(加速度单位为g,陀螺仪单位为度/秒)。这些数据更直观,便于进行后续的处理和分析。 
  
    通过本教程,您已经学会了如何使用零知增强板和MPU6050模块来读取运动数据。这些数据可以用于各种应用,如姿态控制、平衡机器人、运动跟踪等。您可以根据项目需求进一步处理和分析这些数据。  
完整工程参考:通过网盘分享的文件:MPU6050.rar 
链接: https://pan.baidu.com/s/1nHM_Uh29d-DEb4zKxlAoGQ 提取码: kyrc 
  
 |