四路红外避障模块使用
模块介绍
- 红外传感器:该部分有四对红外发射和接收管,当检测到前方有障碍物时会返回一个低电平(地电平),而没有障碍物时则会返回一个0.6V~2.5V的电平。
- 主控板:该部分集成了一块四路差动比较器LM339,LM339内部是四个独立的电压比较器。
IN-是参考电压,可通过电位器调节。
当IN+大于IN-时输出高电平,IN+小于IN-时输出低电平。
3. 连接和使用:每路的VCC和GND相互连接,红外传感器的OUT端连接到主控板的IN端,提供比较电压IN+。主控板上的VCC和GND分别连接到单片机的5V(或3.3.V)和地端,此时电源指示灯D5亮。四路输出IN连接到单片机的IO口,每路输出都接有一个LED灯显示状态。当检测到障碍物时比较电压小于参考电压,输出低电平,LED指示灯亮;没有障碍物时比较电压大于参考电压,输出高电平,指示灯不亮。
模块测试和调节
- 红外传感器测试:依次给每路接上VCC和GND,然后移开前方障碍物(不要对着光线),用万用表测OUT端对地电压,若在0.6V~2.5V范围内则正常。在探头前方放置障碍物,用万用表测OUT端对地电压,若为0V左右则正常。
- 中控板测试:给中控板接上VCC和GND,然后依次给每路的IN端接5V和地,若接5V时LED指示灯不亮,接0V时LED指示灯亮则正常。
- 联合测试与调节:将红外传感器和中控板连接,提供VCC和GND,然后在前方合适的距离处放置障碍物,调节每路的电位器使红色指示灯恰好亮起,则该距离为可检测最大距离。
代码说明
由于检测到障碍物时会返回低电平,未检测到时会返回高电平,故主要思路为检测输入电平。网上使用较多的方法为轮询,即if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET)
,考虑到该方法效率较低,此处采用外部中断检测下降沿。
- 图形配置
四个外部中断均采用上拉,下降沿检测。
- 代码说明
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin, RESET);
ms_Delay(600);
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin, SET);
}
void ms_Delay(uint16_t t_ms)
{
uint32_t t=t_ms*3127;
while(t--);
}
检测周期为600ms(可适当取值避免重复触发),也可在中断里加上延时判断消除误触发现象。
中断里加延时:https://app.yinxiang.com/shard/s6/nl/42267153/7f4669a2-3970-4625-981d-702adbb48b4c