当前位置:   article > 正文

STM32循迹小车原理介绍和代码示例_stm32小车寻迹代码

stm32小车寻迹代码

目录

1. 循迹模块介绍

2. 循迹小车原理

3. 循迹小车核心代码

4. 循迹小车解决转弯平滑问题


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

代码示例:

  1. #define LeftWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)
  2. #define RightWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)
  3. // main函数里
  4. while (1)
  5. {
  6. if (LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_RESET)
  7. goForward();
  8. if (LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_RESET)
  9. goLeft();
  10. if (LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_SET)
  11. goRight();
  12. if (LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_SET)
  13. stop();
  14. }

4. 循迹小车解决转弯平滑问题

原理:

两轮都有速度且一轮速度大于另一轮

代码实现:

  1. #define LeftWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)
  2. #define RightWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)
  3. // main函数里
  4. while (1)
  5. {
  6. if(LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_RESET)
  7. {
  8. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,19);
  9. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,19);
  10. }
  11. if(LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_RESET)
  12. {
  13. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,15);
  14. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,8);
  15. }
  16. if(LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_SET)
  17. {
  18. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,8);
  19. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,15);
  20. }
  21. if(LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_SET)
  22. {
  23. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,0);
  24. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,0);
  25. }
  26. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/320928
推荐阅读
相关标签
  

闽ICP备14008679号