一、相关介绍
该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(低电平信号),可通过电位器旋钮调节检测距离,有效距离范围2~30cm,工作电压为3.3V-5V。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避障小车、流水线计数及黑白线循迹等众多场合。
接线
VCC----3.3V
GND----GND
OUT----IO口(检测输出电平用)
电路图
测试
- 测试探头
移开探头前面所有物体,且探头不要指向有阳光的地方(光线对探头有较大干扰),将探头板接上电源后用万用表测量 OUT 和 GND之间的电压,正常范围应该在 0.6v-2.5v 之间,用白纸挡在探头前,用万用表测量 OUT 和 GND之间的电压,正常范围应该接近0V.简单的说,就是用白纸挡住探头后,OUT 和GND 之间的电压会有一个明显的降低,这样就算正常。 - 联机测试
按照要求将探头与中控板连接好,移开探头前面所有物体,且探头不要指向有阳光的地方(光线对探头有较大干扰),调节每一路的电位器,直到灯刚灭掉,然后用白纸遮挡探头,会发现led 会点亮,这样就算测试成功了,然后我们就可以将中控板的输出信号传入单片机进行高低电平检测了。
二、代码段
关于避障模块被障碍物遮挡时led灯点亮的小实验
tracking.c
#include "tracking.h"
void tracking_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(tracking_GPIO_CLK,ENABLE);
GPIO_InitStructure.GPIO_Pin=tracking_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(tracking_GPIO_PORT, &GPIO_InitStructure);
}
uint8_t tracking_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==tracking_Low)
return tracking_Low;
else
return tracking_High;
}
tracking.h
#ifndef __TRAKING_H
#define __TRAKING_H
#include "stm32f10x.h"
#define tracking_GPIO_CLK RCC_APB2Periph_GPIOC
#define tracking_GPIO_PIN GPIO_Pin_6
#define tracking_GPIO_PORT GPIOC
#define tracking_High 1
#define tracking_Low 0
void tracking_GPIO_Config(void);
uint8_t tracking_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);
#endif /* __TRAKING_H */
main.c
#define digitalHi(p,i) {p->BSRR=i;} //输出高电平
#define digitalLo(p,i) {p->BRR=i;} //输出低电平
#define LED1_OFF digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_ON digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define SOFT_DELAY Delay(0x0FFFF);
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
int main(void)
{
LED_GPIO_Config();
tracking_GPIO_Config();
while (1)
{
if(tracking_Scan(tracking_GPIO_PORT,tracking_GPIO_PIN) == tracking_Low)
{
LED1_ON;
SOFT_DELAY;
LED1_OFF;
}
}
}
多路代码参考:红外循迹模块