STM32循迹,避障,蓝牙hc05小车
时间: 2025-06-10 21:04:17 浏览: 13
### STM32循迹避障小车蓝牙HC05代码实现
#### 小车硬件配置
为了完成一个基于STM32的循迹避障小车项目,需要准备如下硬件设备:小车底盘、面包板、STM32F103C8T6单片机、TB6612电机驱动模块、HC05蓝牙模块、HC-SR04超声波测距模块、TCRT5000红外寻迹传感器以及其他辅助材料如杜邦线和电源模块[^3]。
#### 软件初始化设置
在软件部分,需先对定时器进行初始化以便生成PWM信号来控制直流电机的速度与方向。具体操作包括使能TIM4通道1和通道3上的预装载寄存器功能,这有助于平滑调整速度变化过程中的电流波动从而保护电机寿命并提升运行稳定性[^2]。
```c
// 定时器初始化函数片段
void TIM_Config(void){
...
TIM_OCInitStructure.TIM_OCMode = TIM_OCMODE_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
...
}
```
#### 循迹逻辑设计
对于简单的两轮差速驱动结构的小车而言,可以通过两个独立工作的DC马达分别连接至左右两侧轮子上并通过改变各自输入电压大小即占空比比例达到转弯目的;当检测到偏离目标路径情况发生时,则相应减少对应侧动力直至重新回到正确轨道为止[^1]。
以下是简化版循迹算法伪代码:
```pseudo
if (left_sensor == LOW && right_sensor == HIGH):
turn_right(); // 左边感应黑线,右边未感应 -> 右转
elif (left_sensor == HIGH && right_sensor == LOW):
turn_left(); // 右边感应黑线,左边未感应 -> 左转
else if (left_sensor == HIGH && right_sensor == HIGH):
go_straight(); // 两边都感应到了黑线 -> 前进
else :
stop_car(); // 都没感应到或者全感应回去原位停止动作
```
#### 避障机制构建
利用HC-SR04超声波距离测量装置获取前方障碍物的距离信息,在程序中设定阈值判断是否接近物体如果小于安全范围则立即执行倒退加旋转的动作组合避开碰撞风险[^3]。
```c
float get_distance(){
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
duration = pulseIn(echoPin,HIGH)*0.034/2; // 计算往返时间除以二得到实际单程所需毫秒数再乘音速得出厘米单位下的直线长度数值
return distance_cm=duration ;
}
if(distance<SAFE_DISTANCE){
reverse_and_spin();
}
```
#### 蓝牙通信集成
通过串口接收来自手机端发送过来的数据包解析指令进而远程操控车辆移动状态比如前进后退左拐右弯等功能都可以经由APP界面按钮触发传递给MCU处理最终反映成实物行为表现形式出来[^2]。
```c
while(Serial.available() > 0){
char cmd = Serial.read();
switch(cmd){
case 'W': forward(); break;
case 'S': backward();break;
case 'A': spin_left();break;
case 'D':spin_right();break;
default: brake();break;
}
}
```
阅读全文
相关推荐

















