您的位置:

使用Arduino MPU6050打造平衡车

一、Arduino MPU6050舵机

Arduino是一款基于开放式硬件和软件的物联网开发平台,拥有强大的社区支持,可以在系统上运行无数种不同的模块和传感器。

其中,MPU6050是一种集成了三轴陀螺仪、三轴加速度计和温度传感器的数字传感器,可用于控制各种机械和机器人,如平衡车。而舵机则是一种广泛用于控制运动方向的机械设备,两者的配合能够实现平衡车的控制和移动。

以下是将MPU6050和舵机结合的一些基本示例代码。

#include 
#include 
   
#include 
    

Servo myservo;  
MPU6050 mpu;  

int16_t ax, ay, az, gx, gy, gz;  // 存储MPU6050传回的值

void setup() 
{
  myservo.attach(9);  // 建立舵机信号与Arduino D9的连接
  Serial.begin(115200);  // 初始化串口
  while (!Serial);  // 等待串口连接成功后再执行后续代码
  Serial.println("Initializing I2C devices...");
  mpu.initialize();  // 初始化MPU6050
  Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");
}

void loop() 
{
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);  // 获取MPU6050的运动值

  // 将在X轴上的运动值映射到舵机的角度范围
  int servo_angle = map(ax, -17000, 17000, 0, 180);  
  myservo.write(servo_angle);  //将当前的舵机位置设为映射到的角度值
  
  Serial.print(servo_angle);
  Serial.write('\t');
  Serial.print(ax);
  Serial.write('\t');
  Serial.print(ay);
  Serial.write('\t');
  Serial.print(az);
  Serial.write('\t');
  Serial.print(gx);
  Serial.write('\t');
  Serial.print(gy);
  Serial.write('\t');
  Serial.println(gz);
  
  delay(10);
}

    
   
  

二、Arduino MPU6050读取数据

MPU6050可以通过I2C带宽与Arduino通讯,并将其读取的数据转换为设备的姿态信息。以下是由MPU6050获取姿态数据的基本示例代码:

#include 
#include 
   

MPU6050 mpu;  

int16_t ax, ay, az, gx, gy, gz;  // 存储MPU6050传回的值

void setup() 
{
  Serial.begin(115200);  // 初始化串口

  while (!Serial);  // 等待串口连接成功后再执行后续代码
  Serial.println("Initializing I2C devices...");
  mpu.initialize();  // 初始化MPU6050
  Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");
}

void loop() 
{
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);  // 获取MPU6050的运动值

  Serial.print(ax);  // 记录X轴上的加速度计数值
  Serial.write('\t');
  Serial.print(ay);  // 记录Y轴上的加速度计数值
  Serial.write('\t');
  Serial.print(az);  // 记录Z轴上的加速度计数值
  Serial.write('\t');
  Serial.print(gx);  // 记录X轴上的陀螺仪计数值
  Serial.write('\t');
  Serial.print(gy);  // 记录Y轴上的陀螺仪计数值
  Serial.write('\t');
  Serial.println(gz);  // 记录Z轴上的陀螺仪计数值
  
  delay(10);
}

   
  

三、Arduino MPU6050平衡车

使用MPU6050和舵机,可以制作一个基于Arduino的平衡车。以下是这个项目的基本示例代码:

#include 
#include 
   
#include 
    

Servo servoL;  // 左边的舵机对象
Servo servoR;  // 右边的舵机对象
MPU6050 mpu;  

int16_t ax, ay, az, gx, gy, gz;  // 存储MPU6050传回的值

void setup() 
{
  servoL.attach(9);  //将左舵机信号与Arduino D9的连接建立
  servoR.attach(10);  //将右舵机信号与Arduino D10的连接建立
  Serial.begin(115200);  // 初始化串口
  while (!Serial);  // 等待串口连接成功后再执行后续代码
  Serial.println("Initializing I2C devices...");
  mpu.initialize();  // 初始化MPU6050
  Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");
}

void loop() 
{
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);  // 获取MPU6050的运动值

  int servo_adjustment; 

  if (ay < -9800)  // 当前的加速度计测量值向前
  {
    servo_adjustment = map(ay, -17000, -9800, 45, 60);
    servoL.write(90 + servo_adjustment);
    servoR.write(90 - servo_adjustment);
  }
  else if (ay > 9800)  //当前的加速度计测量值向后
  {
    servo_adjustment = map(ay, 9800, 17000, 45, 60);
    servoL.write(90 - servo_adjustment);
    servoR.write(90 + servo_adjustment);
  }
  else  // 静止状态,向前或向后
  {
    servoL.write(90);
    servoR.write(90);
  }
  
  Serial.print(ax);  // 记录X轴上的加速度计数值
  Serial.write('\t');
  Serial.print(ay);  // 记录Y轴上的加速度计数值
  Serial.write('\t');
  Serial.println(servo_adjustment);  // 记录左右舵机的调整程度
  
  delay(10);
}

    
   
  

四、总结

通过该文章的解读,我们了解到了如何使用Arduino MPU6050来控制舵机和平衡车,这为我们制作更加复杂的设备提供了基础。