零知开源模块使用-MPU6050六轴 加速度+陀螺仪

本次演示MPU6050模块在我们零知平台上的应用,使用该模块测量三轴加速度和三轴陀螺仪数据。

一、接线

模块的SCL和SDA分别与零知标准板的I2C接口连接即可,供电连接3.3v,其他脚默认。

二、代码


							
   /* I2C interface MPU6050 demo
   * powered by [url=http://www.lingzhilab.com]www.lingzhilab.com[/url]
   */
   #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);
   }
						
						

当我们读取到原始数值后需要进行转换才能得到实际的值,在上面代码已经做了转换,结果如下:

三、完整工程参考


MPU6050-DEMO1.zip(点击下载)