STM32循迹小车原理及代码示例详解
目录
1. 循迹模块介绍
2. 循迹小车原理
3. 循迹小车核心代码
4. 循迹小车解决转弯平滑问题
1. 循迹模块介绍
接线方式
2. 循迹小车原理
由于黑色具有较强的吸收能力,当循迹模块发射的红外线照射到黑线时,红外线将会被黑线吸收,导致 循迹模块上光敏三极管处于关闭状态,此时模块上一个LED熄灭。在没有检测到黑线时,模块上两个LED常亮
总结就是一句话,有感应到黑线,D0输出高电平 ,灭灯
3. 循迹小车核心代码
硬件接线
代码示例:
#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);
}
}