Skip to content

CQUPT-B311lab/Infrared_Bluetooth_remote_tracking_car

Repository files navigation

STM32F103 红外寻迹蓝牙小车项目

项目简介

这是一个基于STM32F103C8T6微控制器的智能循迹小车项目,集成了红外寻迹、姿态感知、电机闭环控制和蓝牙通信等功能。小车能够自主循迹行驶,同时支持蓝牙遥控和状态监控。

主要功能

1. 核心控制

  • 双电机PID速度闭环控制
  • 陀螺仪辅助角度控制
  • 四路红外寻迹传感器
  • 状态机控制的循迹算法

2. 传感器模块

  • MPU6500:六轴姿态传感器(I2C接口)
    • 实时获取姿态角(Yaw、Pitch、Roll)
    • 加速度和角速度数据
    • 互补滤波姿态解算
  • 红外寻迹传感器:4路ADC采样
    • 加权误差计算
    • 黑线检测与状态判断
    • 十字路口/弯道识别

3. 通信接口

  • 蓝牙通信(USART2,38400bps)
    • 支持上位机指令控制
    • 实时数据回传
    • 参数远程配置

4. 控制模式

  • 循迹模式:自动跟随黑线行驶
  • 遥控模式:蓝牙指令控制
  • 定点行驶:设置目标距离自动停止
  • 角度保持:设定偏航角自动维持

硬件配置

MCU

  • STM32F103C8T6
  • 配置详见.ioc文件

电机驱动

  • TB6612FNG双路电机驱动
  • 左轮:TIM4_CH4(PB9),方向控制BIN1/BIN2
  • 右轮:TIM1_CH1(PA8),方向控制AIN1/AIN2
  • 编码器:TIM2(右轮),TIM3(左轮)

传感器接口

  • MPU6500:I2C1(PB10-SCL,PB11-SDA)
  • 红外传感器:ADC1通道6-9(PA6-PA7,PB0-PB1)

通信接口

  • 蓝牙模块:USART2(PA2-TX,PA3-RX),38400bps
  • DMA传输:双缓冲区接收,避免数据丢失

编译与烧录

开发环境

  • IDE:STM32CubeIDE
  • 编译器:arm-none-eabi-gcc
  • 固件库:STM32 HAL库

编译步骤

  1. 打开STM32CubeIDE
  2. 导入项目文件夹
  3. 配置正确的芯片型号(STM32F103C8T6)
  4. 编译项目

烧录方法

  • ST-Link V2编程器
  • SWD接口连接
    • SWDIO:PA13
    • SWCLK:PA14
    • GND
    • 3.3V

蓝牙通信协议

指令格式

#<指令ID>:<参数>

#<指令ID>

常用指令示例

指令ID 功能 参数示例 说明
1 设置速度 30 或 30,28 设置左右轮速度
2 直行 30 设置直行速度
3 左转 开始左转
4 右转 开始右转
5 停止转向 停止转向
10 停止 停止所有电机
11 启动 启动电机控制
12 设置PID L,10,0,1 设置左轮PID参数
17 设置偏航角 45.0 设置目标偏航角
19 切换循迹模式 开启/关闭循迹

数据上报格式

#<消息ID>|<长度>:<内容>

消息类型

消息ID 类型 说明
0 LOG 普通日志信息
1 DEBUG 调试信息
2 ERROR 错误信息
4 SPEED 速度数据
5 GYROSCOPE 陀螺仪数据

使用方法

1. 初始校准

上电后小车会自动:

  • 初始化MPU6500并进行陀螺仪校准
  • 启动红外传感器ADC采样
  • 初始化PID控制器

2. 循迹模式

  1. 发送指令 #19 进入循迹模式
  2. 将小车放在循迹赛道上
  3. 小车会自动检测黑线并跟随

3. 遥控模式

  1. 使用蓝牙发送速度指令,如 #1:30
  2. 发送转向指令,如 #3 左转
  3. 发送 #10 停止

4. 参数调整

  • PID参数:#12:L,10,0,1(设置左轮PID)
  • 寻迹阈值:#18:3800(设置黑线检测阈值)

关键参数配置

电机参数

#define PLUS_PER_CYC 830      // 编码器每圈脉冲数
#define R_TIRE 0.0325f        // 轮胎半径(米)
#define PWM_MAX 999           // PWM最大值

PID参数

// 速度环PID
PID_Init(&pid_L, 10.0f, 10.0f, 3.0f, 999.0f, -999.0f, 400.0f);
PID_Init(&pid_R, 10.0f, 10.0f, 3.0f, 999.0f, -999.0f, 400.0f);

// 偏航角PID
PID_Init(&pid_yaw, 1.0f, 0.0f, 0.0f, 10.0f, -10.0f, 400.0f);

// 循迹PID
PID_Init(&pid_trace, 0.5f, 0.0f, 0.05f, 10.0f, -10.0f, 400.0f);

循迹参数

#define TRACE_CHANNELS 4      // 传感器数量
uint16_t black_threshold = 3790;  // 黑线检测阈值

🔄 状态机说明

小车循迹采用4状态状态机:

状态 说明 行为
STATE_INIT 初始化状态 等待检测到黑线
STATE_TRACKING 正常跟踪 PID控制循迹
STATE_GAP 空白段 保持直线行驶
STATE_TRANSITION 过渡状态 旋转寻找黑线

🐛 故障排除

常见问题

  1. 小车不移动

    • 检查电机驱动芯片STBY引脚
    • 确认PWM输出正常
    • 检查编码器接线
  2. MPU6500无法读取数据

    • 检查I2C接线(SCL/SDA)
    • 确认MPU6500电源正常
    • 检查I2C地址设置
  3. 蓝牙无法连接

    • 检查串口波特率设置(38400)
    • 确认蓝牙模块供电正常
    • 检查USART2引脚配置
  4. 循迹不准确

    • 调整黑线检测阈值
    • 优化PID参数
    • 检查传感器安装高度

调试信息

  • LED灯:用于状态指示
  • 蜂鸣器:用于报警提示
  • 串口调试:实时输出传感器数据

📈 性能指标

  • 控制周期:10ms
  • 速度范围:0-150 脉冲/10ms
  • 角度控制精度:±1°
  • 循迹速度:可调,典型值8-12脉冲/10ms
  • 通信延迟:<50ms

📄 许可证

本项目基于STM32 HAL库开发,遵循相应的开源协议。具体使用请参考各模块的许可证声明。

🙏 致谢

  • STMicroelectronics 提供STM32系列芯片和HAL库
  • 所有开源社区贡献者
  • 项目参考了多篇技术博客和开源项目

📧 联系与支持

如有问题或建议,请通过项目仓库的Issues页面提交。


版本:v1.0
最后更新:2025年
维护者:项目开发者

About

基于STM32F103C8T6的红外蓝牙遥控寻迹小车,模拟量4通道寻迹模块

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors