两轮自平衡小车arduino控制代码开源分享

需积分: 46 16 下载量 139 浏览量 更新于2024-09-10 3 收藏 7KB TXT 举报
"这篇资源是关于两轮自平衡小车的开源代码,使用Arduino平台实现。作者autopopo在2010年分享了这个项目,提供了相关代码链接。代码中包含了对陀螺仪数据的处理,以及卡尔曼滤波算法用于角度估计,还有电机控制和平衡算法的实现。" 这篇开源代码是为了实现一个基于Arduino的两轮自平衡小车。代码的核心部分涉及到传感器数据处理、运动控制以及平衡算法。以下是关键知识点的详细说明: 1. **陀螺仪数据处理**: - 代码中定义了一个常量`GYRO_OPERATOR`,用于将陀螺仪的AD读数转换成弧度/秒的角速度。根据IDG330手册,2mv对应1度/s的角速率,因此每读数的物理意义是3.223弧度/秒。 2. **卡尔曼滤波(Kalman Filter)**: - Kalman滤波是一种优化传感器数据融合的算法,用于减少噪声并提高角度估计的准确性。在代码中,定义了滤波相关的矩阵和参数,如`C_0`, `Q_angle`, `Q_gyro`, `R_angle`, `dt`等。滤波过程中涉及了误差校正、状态预测和更新。 3. **电机控制**: - 代码中定义了电机引脚如`E1`, `E2`, `M1`, `M2`,这些是Arduino连接电机的数字输出引脚。`deadAreaCompensation1`和`deadAreaCompensation2`是电机死区补偿值,用于避免电机在低速时的抖动。 4. **传感器接口**: - 传感器地址存储在数组`sensorPort`中,包括加速度计的Z轴和陀螺仪的X轴,以及几个模拟输入(可能用于调节平衡参数)。读取的传感器值存储在`sensorValue`数组中,并通过`sensorZero`进行零点校准。 5. **平衡算法**: - 代码中的`do_balance()`函数是实现平衡的关键。它读取传感器数据,通过`Kalman_Filter()`进行滤波,然后计算出小车的姿态速率`RATE`。`K`和`K_AD`是平衡算法中的常数,用于调整对不同传感器信号的响应。 6. **编码器和位移计算**: - `wheel_ls`和`wheel_rs`数组记录了左右轮的编码器值、位移、速度等信息,用于追踪小车的实际运动状态,并据此调整电机扭矩。 7. **安全机制**: - 变量`OK`作为系统状态的标志,当小车倾斜超过一定阈值时会设置为`false`,停止电机防止进一步翻倒。 整体来看,这个项目展示了如何使用Arduino和传感器来构建一个基本的自平衡小车系统,涉及到硬件接口、数据处理、动态控制等多个方面的知识。开发者可以通过学习和修改这段代码,实现自己的自平衡小车项目。