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 控制电机速度,即可构建出完整的循迹小车系统。