秒懂HC-SR501红外感测器Arduino UNO实作
HC-SR501是怎么运作的?
这个模块的核心实际上是由一个 热电感测器 组成,当这个感测器 暴露在热量下 的时候会 生成能量 ,并转化成电讯号。那么,也就是说,当一个人走进他的感测范围之后,他的移动将被HC-SR501感测到,因为 人体 会不断地 以红外线的形式散发出热量。所以,HC-SR501也称为 被动式 红外传感器,其本身并 不会主动探测任何目标
除了热点感测器之外,还有一个重要的组成部分叫 菲涅尔透镜 ,这个东西就是用来把红外线 聚焦 到热电感测器,所以理论上来说,没有它应该也能正常运作,不过肯定效能显著下降
HC-SR501模组
如上图所示,这个模组只有三只引脚,除了基本的VCC和GND外,有一个 OUT 引脚,在 侦测 到一个对象时,提供 高逻辑电平
下面两个 橙色 的东西,是 电位器 ,其中一个用来 调整感测器的灵敏度 ,另一个用来 调整在对象被侦测到时,输出信号保持高电位的时间(可调范围0.3s~5min)
另外,左边还有三个引脚可以两两组成跳线(有些类型不会有跳帽让你接),用来选择 trigger (触发,相当于一种输入信号,用来刺激传感器工作)的 模式 ,接下面两个表示 执行不可重复的trigger模式 ,也就是说在感测器输出高电位的延迟时间过了之后,输出会自动从高位拉低;接 上面两个 表示 执行可重复的trigger模式 ,也就是说它会让感测器的输出保持高电位直到被侦测物出现在感测器的感测范围
电气参数
详细说明书请参考[HC-SR501 人体感应模块说明书]
需要的器材
- HC-SR501人体红外模组
- LED灯,10欧电阻
- Arduinoj UNO板子(其他也可以,本文用这个)
- 面包板和跳线
- 杜邦线,电源
电路原理图
源代码
实作比较简单,把感测器感测值输入设置为5号脚,输出LED灯为6号脚
#define pirIn 5
#define ledOut 6
void setup() {
Serial.begin(9600);
pinMode(pirIn, INPUT);//感测器的输出为Arduino的输入
pinMode(ledOut, OUTPUT);//灯的输入为Arduino的输出
}
void loop() {
//读取感测器的数值
int sensorValue = digitalRead(pirIn);
Serial.println(sensorValue);
//感测到了就亮灯,没感测到就灭灯
if(sensorValue == 1){
digitalWrite(ledOut, HIGH);
}else{
digitalWrite(ledOut, LOW);
}
}
注意事项
请注意,在为传感器模块供电后,大约需要20 - 60秒来“预热”,以便正常工作,在此等待时间内,请不要试图改变它的感测状态,并且在每次感测完之后需要有3s左右的冷却时间,才能再次感测
另:如果感测器返回的结果一直为HIGH,可以适当调整灵敏度和延迟时间旋钮,以让你的HC-SR501处于最佳状态,如果你确认以上所有过程没有出错,并且仍然一直为HIGH,那么基本可以判断这是一个bad sensor
参考文献
[ https://howtomechatronics.com/tutorials/arduino/how-pir-sensor-works-and-how-to-use-it-with-arduino/ ]
来源:CSDN
作者:Airym
链接:https://blog.csdn.net/weixin_40511114/article/details/103755688