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

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.lqws.cn/news/167869.html

相关文章:

  • 【学习笔记】Lamba表达式[匿名函数]
  • Linux进程替换以及exec六大函数运用
  • MATLAB | 绘图复刻(十九)| 轻松拿捏 Nature Communications 绘图
  • 在Coze平台中 API是什么?插件是什么?它们是一类吗?
  • 如何通过ETLCloud实现跨系统数据同步?
  • 矩形相交的面积 - 华为OD机试真题(JavaScript题解)
  • PyTorch中matmul函数使用详解和示例代码
  • 【Hot 100】322. 零钱兑换
  • 基于SSM框架的医院电子病历管理系统,分为用户网页和管理后台,包括科室模块、医生模块、预约挂号模块、就诊记录模块、就诊评价模块、轮播图模块和系统基础模块
  • HZOJ新手村前段时间的刷题的笔记
  • C++类二
  • 使用 Zabbix 官方 Nginx 模板的详细指南
  • Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合
  • Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
  • ArcGIS Maps SDK for JavaScript:使用图层过滤器只显示FeatureLayer的部分要素
  • B+树知识点总结
  • ArcGIS Pro 3.4 二次开发 - 宗地
  • TDengine 开发指南—— UDF函数
  • 小白升级的路-电子电路
  • 物流瘫痪预警:亚马逊多仓爆仓,卖家如何抢占夏季性价比市场?
  • halcon c# 自带examples报错 Matching
  • Offline Transition Modeling via Contrastive Energy Learning
  • 6月生效!亚马逊FBA入库运费调整,尺寸不符自动补差
  • springcloud openfeign 偶现 Caused by: java.net.UnknownHostException
  • 图像测试点列表
  • 60天python训练计划----day45
  • 数据分析Agent构建
  • 图简记。。
  • 线段树~~~
  • sockaddr结构体详解