第3-5讲:人体红外感应传感器
-
- 学习目的
- 了解人体红外感应传感器的功能。
- 掌握单片机编程读取人体红外感应传感器数字输出状态,从而判断有没有人。
- 人体红外感应传感器简介
HC-SR501是基于红外线技术的自动控制模块,采用LHl788探头设计,灵敏度高,可靠性强,低电压工作模式,广泛应用于各类自动感应电器设备,尤其是干电池供电的自动控制产品。
HC-SR501能检测到人体身上发出的红外线,并根据检测结果输出高低电平,由此我们可以使用HC-SR501人体红外检测模块来检测是否有人。当有人进入感应范围时,HC-SR501模块输出高电平,人不离开感应范围,将持续输出高电平,人离开后,HC-SR501模块关闭高电平,输出低电平。
图1:人体红外感应传感器
- 选择触发(通过跳线选择)
- L:不可重复,默认为L(图1中跳线连接的方式即为L)。感应输出高电平后,延时时间一结束,输出将自动从高电平变为低电平。
- H:可重复。感应输出高电平后,在延时时间段内,如果有人体在其感应范围内活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平。
- 调节灵敏度和感应延时
- 调节灵敏度电位器顺时针旋转,灵敏度增加,反之,灵敏度降低。
- 调节延时电位器顺时针旋转,感应延时加长,反之,感应延时减短。
- HC-SR501人体感应模块参数
- 工作电压范围:直流电压(4.5-20)V。
- 静态电流:<50uA。
- 电平输出:高电平3.3 V ,低电平0V。
- 触发方式:L不可重复触发,H重复触发(默认不可重复触发)。
- 延时时间:0.5-200S(可调)可制作范围零点几秒-几十分钟。
- 封锁时间:2.5S(默认)可制作范围零点几秒-几十秒。
- 感应角度:<100度锥角。
- 工作温度:-15~+70度。
- 感应透镜尺寸:直径:23mm。
- 电路板外形尺寸:32mm*24mm
- 传感器应用范围
人体感应灯具 ,人体感应玩具,安防产品,工业自动化控制,自动感应电器设备,电池供电自动控制等。
- 引脚说明
HC-SR501人体红外检测模块的引脚如下图所示。
图2:人体红外感应传感器引脚
-
- 软件设计
- 雨滴传感器实验
- 软件设计
- 注:本节的实验是在“实验2-6-1:串口1数据收发实验”的基础上修改,本节对应的实验源码是:“实验3-5-1:HC-SR501人体红外感应实验”。
-
-
- 实验内容
-
-
单片机实时读取HC-SR501人体红外感应模块输出引脚的状态,以此判断有没有人经过,并通过串口输出检测结果。
- 高电平:检测到有人经过,指示灯D1点亮,串口输出提示信息。
- 低电平:没有检测到有人经过,指示灯D1熄灭。
-
-
- 代码编写
-
-
本节的代码比较简单,我们直接在“main.c”文件中编写相关的代码。
- 定义引脚
首先,定义连接HC-SR501人体红外感应模块输出的引脚,本例中,我们用P5.1连接雨滴传感器的数字输出引脚,定义如下。
代码清单:引用头文件
- sbit sensor_in = P5^1; //用于读取HC-SR501人体红外感应模块输出引脚状态
- 读取引脚状态
程序初始化时将P5.1引脚配置为准双向,主循环中不断读取该引脚状态,如为高电平,则认为有人经过,代码清单如下。
代码清单:主函数
- /**************************************************************************
- 功能描述:主函数
- 入口参数:无
- 返 回 值:int类型
- **************************************************************************/
- int main(void)
- {
- P2M1 &= 0xBF; P2M0 &= 0xBF; //设置P2.6为准双向口(LED1)
- P3M1 &= 0xFE; P3M0 &= 0xFE; //设置P3.0为准双向口(串口1的RxD)
- P3M1 &= 0xFD; P3M0 |= 0x02; //设置P3.1为推挽输出(串口1的TxD)
- P5M1 &= 0xFD; P5M0 &= 0xFD; //设置P5.1为准双向口 (HC-SR501人体红外感应模块输出)
- uart1_init(); //串口1初始化
- while(1)
- {
- if(sensor_in == 1) //感应到有人经过,HC-SR501数据引脚输出高电平
- {
- led_on(LED_1); //点亮用户指示灯D1
- printf("Detected someone passing by \r\n"); //串口输出提示信息
- }
- else
- {
- led_off(LED_1); //熄灭用户指示灯D1
- }
- delay_ms(100); //延时100ms,方便在串口调试助手中观察实验数据
- }
- }
-
-
- 硬件连接
-
-
如下图所示,用杜邦线将HC-SR501人体红外感应模块的VCC和GND分别连接到开发板J19端子的3V3和GND上,输出引脚连接到J14端子的P51上。
图3:硬件连接
-
-
-
- 实验步骤
-
-
- 解压“…\第3部分:配套例程源码”目录下的压缩文件“实验3-5-1:HC-SR501人体红外感应实验”,将解压后得到的文件夹拷贝到合适的目录,如“D\STC8”(这样做的目的是为了防止中文路径或者工程存放的路径过深导致打开工程出现问题)。
- 双击“…\HC-SR501\project”目录下的工程文件“HC-SR501.uvproj”。
- 点击编译按钮编译工程,编译成功后生成的HEX文件“HC-SR501.hex”位于工程的“…\HC-SR501\Project\Object”目录下。
- 打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。
- 电脑上打开串口调试助手,选择开发板对应的串口号,将波特率设置为9600bps。
- 程序运行后,当HC-SR501人体红外感应模块检测到有人经过时,指示灯D1点亮,并通过串口输出提示信息。