目录
1. 循迹模块介绍
- TCRT5000传感器的红外发射二极管不断发射红外线
- 当发射出的红外线没有被反射回来或被反射回来但强度不够大时
- 红外接收管一直处于关断状态,此时模块的输出端为高电平,指示二极管一直处于熄灭状态
- 被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管饱和
- 此时模块的输出端为低电平,指示二极管被点亮
- 总结就是一句话,没反射回来,D0输出高电平,灭灯
接线方式
- VCC:接电源正极(3-5V)
- GND:接电源负极 DO:TTL开关信号输出0、1
- AO:模拟信号输出(不同距离输出不同的电压,此脚一般可以不接)
2. 循迹小车原理
由于黑色具有较强的吸收能力,当循迹模块发射的红外线照射到黑线时,红外线将会被黑线吸收,导致 循迹模块上光敏三极管处于关闭状态,此时模块上一个LED熄灭。在没有检测到黑线时,模块上两个LED常亮
总结就是一句话,有感应到黑线,D0输出高电平 ,灭灯
3. 循迹小车核心代码
硬件接线
- B-1A — PA0
- B-1B — PB1
- A-1A — PA1
- A-1B — PB10
- 循迹模块(左)– PB3
- 循迹模块(右) — PB4
代码示例:
#define LeftWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)
#define RightWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)
// main函数里
while (1)
{
if (LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_RESET)
goForward();
if (LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_RESET)
goLeft();
if (LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_SET)
goRight();
if (LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_SET)
stop();
}
4. 循迹小车解决转弯平滑问题
原理:
两轮都有速度且一轮速度大于另一轮
代码实现:
#define LeftWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)
#define RightWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)
// main函数里
while (1)
{
if(LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_RESET)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,19);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,19);
}
if(LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_RESET)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,15);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,8);
}
if(LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_SET)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,8);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,15);
}
if(LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_SET)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,0);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,0);
}
}
转自:
https://blog.csdn.net/m0_74712453/article/details/134116750