0、结果
说明:先来看看串口调试助手显示的结果,没有人的时候,串口打印的是0,有人的时候会打印有人,此时串口打印的是1,当连续若干时间为0,也就是若干时间没有检测到人,则打印没人。如果是你想要的,可以接着往下看。
1、外观
说明:虽然hcsr501人体红外感应传感器形态各异,但是原理和代码都是适用的。
![](https://img-blog.csdnimg.cn/72fc2c939d194a51b1b97114ad374bb7.png)
2、连线
说明:只需要连接三根线。
uno————hcsr501人体红外感应传感器
3、源程序
说明:采用非阻塞方式编写,一定时间检测一次是否有人,并能判断是否有人离开,并将对应功能进行函数化,方便移植。
/*
这个传感器可以检测是否有人或者动物,就是红外热感应
注意:这个传感器输出的信号不是持续且稳定的,
第一个旋钮可以改变检测到有人的时候持续的时间最短1秒,最长应该有三分钟;
第二个旋钮可以改变反映的时间,也就是灵敏度。
所以调节最高的灵敏度,最低的持续时间,人一直在的时候,识别1秒,然后切换到了4到5秒识别不到,
所以当人出现的时候,变成1的时候,监测30秒之后是否还是1,如果还是1,那就是人还在,否则人离开。
接线:
VCC------VCC
GND------GND
7------OUT
*/
/****************************************hcsr501 part****************************************/
#define hcsr501Pin 7 //设置对应的引脚
#define hcsr501TimeInterval 1000 //检测一次的时间间隔
#define existTimeInterval 20000
unsigned long hcsr501Times = 0, existTimes = 0; //记录设备运行时间
int hcsr501Val = 0, existVal = 0;
/****************************************set up and loop part*********************************/
void setup() {
Serial.begin(9600); //设置串口波特率为9600
pinMode(hcsr501Pin, INPUT); //引脚设置成输入
Serial.println("设备上线!");
}
void loop() {
judgmentExist(); //判断人是否存在
}
/****************************************hcsr501 part****************************************/
/*获取传感器的数据数据*/
void getHcsrData() {
if (millis() - hcsr501Times >= hcsr501TimeInterval) {
hcsr501Times = millis(); //一定时间执行一次
hcsr501Val = digitalRead(hcsr501Pin);
Serial.println(hcsr501Val); //串口打印对应的值
}
}
/*判断人是否存在*/
void judgmentExist() {
getHcsrData() ; //获取传感器的数据数据
if (hcsr501Val == 1 && existVal == 0) { //检测到有人
existVal = 1;
Serial.println("有人!"); //串口打印对应的值
} if (hcsr501Val == 1 && existVal == 1) {
existTimes = millis();
}
if (millis() - existTimes >= existTimeInterval && existVal == 1) {
existVal = 0; //一定时间执行一次
Serial.println("没人!"); //串口打印对应的值
}
}
4、注意事项
说明:如果有什么问题可以评论@我,我将帮助你。该传感器有两个旋钮,分别用来调节灵敏度和有人时信号持续的时间长短,我建议调到最灵敏,最低持续时间。传感器上面白色的盖子拿下来可以看到引脚。白色盖子的作用是增强信号,拿下来就识别不到人了。
5、基本原理
HC-SR501人体红外感应传感器是一种基于被动红外技术(PIR)的人体探测器件。其原理是利用人体本身发出的红外辐射作为检测目标。
具体来说,HC-SR501传感器内部包含一组感知器件和信号处理电路。传感器的感知器件是一种特殊的红外线(IR)感知组件,可以检测周围环境中的红外线辐射强度。当一个人或者其他有温度的物体进入到传感器的监测范围内时,就会产生一个动态的红外辐射场,这个场会被感知器件所感应,并转化为电信号。然后,信号处理电路对这个电信号进行处理和分析,判断出是否有人体在传感器范围内活动。
由于人体的温度显著高于周围环境,因此人体就会产生相对强烈的红外辐射。这使得HCSR501传感器能够通过对红外辐射的检测实现对人体的探测。同时,HCSR501传感器通常还有灵敏度和延迟时间等参数可以调整,以便适应不同的使用环境和需求。