当前位置: 首页 > java >正文

STM32 智能小车项目 两路红外循迹模块原理与实战应用详解

在嵌入式系统、机器人、智能设备等场景中,红外反射型光电传感器 被广泛应用于黑白识别、障碍检测、物体计数、位置判断等任务。其中,RPR220 是一款性能稳定、体积小巧的红外光电收发管,本文将详细介绍其工作原理、引脚参数、接线说明以及典型应用场景与代码示例

常用型号:TCRT5000、RPR220

图片

一、什么是两路红外循迹模块?

“两路”意味着模块上集成了两组红外对管,每组包含一个红外发射管和一个红外接收管。

原理:

  • 红外发射管不断发出一定波长的红外线;

  • 当检测面是白色或反光物体时,红外线被反射回来,红外接收管接收到强烈反射信号;

  • 当检测面是黑线或非反光表面时,红外线被吸收,接收管接收不到信号;

  • 模块根据接收管的接收强度输出高低电平。

常用于:

  • 黑白线循迹

  • 边界检测

  • 简易障碍检测

二、模块结构与引脚说明

常见的两路红外循迹模块如下图(略):

引脚名

功能

VCC

电源正极(3.3V 或 5V)

GND

电源负极

OUT1

左边红外信号输出(数字电平)

OUT2

右边红外信号输出(数字电平)

注意:部分模块还有两个电位器,对应调节左/右两个传感器的灵敏度。

三、工作原理详解

红外对管的工作依赖于表面反射率的差异。以下是两种典型情况:

  • 白色面(高反射率):

    • 红外线反射回接收管

    • 模块判定为“非线” → 输出低电平(有些模块反过来)

  • 黑色线(低反射率):

    • 红外线吸收或散射

    • 模块判定为“识别到黑线” → 输出高电平(或低)

模块内部常见使用 LM393 比较器将接收管模拟电压信号转换为清晰的数字高低电平,方便 MCU 读取。

四、与STM32连接方式

以STM32F103C8T6为例:

模块引脚

STM32 引脚

说明

VCC

5V

电源供电

GND

GND

电源地

OUT1

PA0(或其他中断口)

左边传感器信号

OUT2

PA1(或其他中断口)

右边传感器信号

五、STM32 驱动代码示例void Infrared_Init(void)

{    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    GPIO_InitTypeDef GPIO_InitStruct;    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  // 上拉输入    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOA, &GPIO_InitStruct);}
uint8_t Get_TrackStatus(void){    uint8_t left = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);    uint8_t right = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);
    if (left == 0 && right == 0) return 0;  // 中间    else if (left == 1 && right == 0) return 1;  // 左偏    else if (left == 0 && right == 1) return 2;  // 右偏    else return 3; // 停止或离线}

六、典型应用:智能小车循迹控制

核心思想是依据红外传感器状态判断小车如何转向或前进:

状态

左红外

右红外

控制策略

0

0

0

前进

1

1

0

右转(左偏)

2

0

1

左转(右偏)

3

1

1

停止/掉线

结合 PWM 控制电机速度,即可构建出完整的循迹小车系统。

http://www.xdnf.cn/news/12274.html

相关文章:

  • HTV 3.3 | 秒播无卡顿 直播源每天维护更新
  • Q: 数据库增删改查的逻辑如何实现?
  • 996引擎-自定义装备/道具:限时装备、限时道具
  • 如何通过requests和time模块限制爬虫请求速率?
  • 算法题(162):火烧赤壁
  • React状态管理Context API + useReducer
  • Flyway
  • vue3+js示例
  • delphi7 链表 使用方法
  • 基于STM32单片机的电子秤系统设计(原理图+PCB+程序+仿真+文章)
  • SpringCloud——OpenFeign
  • web第十次课后作业--Mybatis的增删改查
  • 微服务架构——配置管理与配置中心
  • 【Java】RxJava解析
  • 麒麟信安系统下修改系统默认记录日志大小
  • 上传、下载功能 巧实现
  • 如何修改项目在浏览器中的小图标
  • 【MATLAB去噪算法】基于CEEMDAN联合小波阈值去噪算法(第四期)
  • 轨道交通可视化,赋能智慧车站运维
  • C++034(一维数组)
  • 基于WSL搭建Ubnutu 20.04.6 LTS(二)-部署Docker环境
  • LoRA:大模型高效微调的低秩之道——原理解析与技术实现
  • 检测到 #include 错误。请更新 includePath。已为此翻译单元(D:\软件\vscode\test.c)禁用波形曲线
  • 力扣面试150题--被围绕的区域
  • std__map,std__unordered_map,protobuf__map之间的性能比较
  • 网页显示:嗯…无法访问此页面,的解决办法和原理
  • 大模型学习
  • 家政维修平台实战14登录验证
  • 如何用 SD-WAN 打破 ERP 内网限制,实现随时随地高效访问?
  • 总结HTML中的文本标签