零知开源——STM32F407VET6结合MPU6050六轴传感器模块实践教程,轻松实现运动检测

I2C通信

       本教程将指导您如何使用STM32F4与MPU6050六轴传感器模块进行交互。MPU6050是一款含有三轴加速度计和三轴陀螺仪的传感器,能够测量设备的倾斜情况和旋转运动。

通过本教程,您将学习如何读取并处理这些数据,为您的项目添加运动检测和姿态控制功能。

一、硬件连接

       在开始编程之前,首先需要正确连接MPU6050模块到零知增强板。

1.所需材料:

零知增强板

MPU6050六轴传感器模块

跳线若干

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值