无论您是想构建家庭防盗警报器或追踪摄像机,还是想在“不给糖就捣蛋”的人上门时唤醒动画万圣节道具,那么您绝对应该考虑购买 HC-SR501 被动红外 (PIR)自己的传感器。
PIR 传感器可让您检测人或动物何时移入或移出传感器范围。您可以在大多数现代安全系统、自动灯开关、车库门开启器以及我们想要对运动做出反应的类似应用中找到这种传感器。
在深入讨论之前,我们首先了解一下 PIR 传感器的实际工作原理。
所有物体,包括人体,在温度高于绝对零度(0 /-273.15 °C)时都会以红外辐射的形式散发热能。物体越热,发出的辐射就越多。这种辐射是人眼不可见的,因为它以红外波长发射。PIR 传感器专门设计用于检测此类红外辐射水平。
PIR 传感器由两个主要部分组成:
热释电传感器由带有两个矩形槽的窗口组成,由允许红外辐射穿过的材料(通常是涂层硅)制成。窗口后面有两个独立的红外传感器电极,一个负责产生正输出,另一个负责产生负输出。
两个电极的接线使得它们相互抵消。这是因为我们正在寻找 IR 级别的变化,而不是环境 IR 级别的变化。这就是为什么当一半人看到的红外辐射比另一半多或少时,我们就会得到输出。
但是当像人或动物这样的温暖物体经过时,它首先会拦截一半的传感器。这会导致两半之间出现正的差异变化。当温热体拦截传感器的另一半(离开传感区域)时,会发生相反的情况,传感器产生负微分变化。通过读取电压的变化,可以检测到运动。
对于我们大多数需要检测是否有人离开或进入该区域的 Arduino 项目来说,HC-SR501 PIR 传感器是一个不错的选择。它功耗低、成本低、易于连接,非常受爱好者欢迎。
该 PIR 传感器本身非常简单,开箱即用。只需施加 5V – 12V 电源和接地即可。当检测到运动时,传感器输出变为高电平;当空闲时(未检测到运动),传感器输出变为低电平。
通过将此输出连接到微控制器,您可以通过打开/关闭灯、启用风扇、启用万圣节道具或拍摄入侵者的照片来对运动做出反应。
最好的部分是它消耗的电流不到 2mA,并且可以通过灵敏度控制检测长达 7 米的运动。
该模块的核心是被动红外 (PIR) 控制器 IC – BISS0001。由于其具有抗噪性,BISS0001 成为最稳定的 PIR 控制器之一。
该芯片获取热释电传感器的输出,并对其进行一些细微的处理以发出数字输出脉冲。
该模块配有 3.3V 精密稳压器,因此可以由 4.5 至 12 伏的任何直流电压供电,但通常使用 5V。
模块自带保护二极管(也称为安全二极管),用于保护模块免受反向电压和电流的影响。因此,即使您不小心将电源极性连接错误,您的模块也不会损坏。
PIR传感器背面有一个电位器,用于调节灵敏度。
该电位器设置最大检测范围。灵敏度可在大约 3 米至 7 米(9 至 21 英尺)的范围内调节。然而,您房间的结构可能会影响您获得的实际范围。顺时针旋转旋钮将增加灵敏度,从而扩大范围,反之亦然。
PIR 传感器背面还有另一个电位器,用于调节时间延迟。
该电位器设置检测到运动后,输出保持高电平的时间。可在1秒至3分钟左右调节。顺时针旋转电位器会增加延迟,而逆时针旋转电位器则会减少延迟。
有两种触发模式决定传感器在检测到运动时将如何反应。
单次触发模式L:持续运动将引起单次触发。
多重触发模式H:持续运动会引起一系列触发。
L – 选择此项将设置单次触发模式。
在此模式下,一旦检测到运动,输出就会变为高电平,并在延时电位计确定的时间内保持高电平。不再检测是否有运动发生,直到输出在时间延迟结束时返回到低电平。再次检测是否有运动,如果有运动输出将再次变为高电平。简单说就是单次触发模式状态下,只有低电平状态才检测是否有运动发生,高电平状态不检测。
H – 选择此项将设置多重触发模式。
在此模式下,一旦检测到运动,输出就会变为高电平,并在延时电位计确定的时间内保持高电平。与单触发模式不同,进一步的检测不会被阻止,因此每次检测到运动时都会重置时间延迟,例如,延迟时间为1分钟,如果第一次运动触发了高电平,然后在20秒后又发现运动,则延迟时间再次延长至1分钟。一旦运动停止,输出仅在一段时间延迟后返回低电平。高电平时也在检测是否有运动,因此称为多重触发模式。
HC-SR501 模块具有用于两个附加组件的焊盘。这些通常标记为“RT”和“RL”。请注意,在某些板上,标签可能会被组件另一侧的菲涅尔透镜覆盖。
RT – 此连接用于热敏电阻或温度敏感电阻。添加此功能使得 HC-SR501 可以在极端温度下使用。这也在一定程度上提高了探测器的精度。
RL – 此连接用于光敏电阻 (LDR) 或光敏电阻。添加该组件可以使 HC-SR501 在黑暗中运行。这对于构建运动敏感的照明系统非常有用。
这些附加组件可以直接焊接到模块上,也可以使用电线和连接器延伸到远程位置。
以下是规格:
HC-SR501 有一个 3 针连接器。标记被菲涅耳透镜覆盖,取下透镜可以看到引脚的标记。
vcc是传感器的电源。尽管通常使用 5V,但您可以将 5 至 12V 之间的任何输入电压连接到该引脚。
OUT引脚是3.3V TTL逻辑输出。当检测到运动时它变为高电平,当空闲时(未检测到运动)它变为低电平。
GND是接地引脚。
HC-SR501 PIR 传感器非常受欢迎的原因之一是 HC-SR501 是一款用途非常广泛的传感器,其本身的功能也非常强大。您可以通过将其连接到 Arduino 等微控制器来进一步提高其多功能性。
对于我们的第一个实验,我们将使用 HC-SR501 来展示它本身的用途。
该实验的接线非常简单。将电池连接到传感器的 VCC 和 GND,并通过 220Ω 限流电阻将红色小 LED 连接到输出引脚。就这样!
现在,当 PIR 检测到运动时,输出引脚将变为“高电平”并点亮 LED!
请记住,一旦给电路通电,您需要等待 30-60 秒,让 PIR 适应房间内的红外能量。在此期间 LED 可能会稍微闪烁。等到 LED 完全关闭,然后在它前面走动或挥手,观察 LED 相应地亮起。
如果您想根据运动打开/关闭某些功能,可以将此 PIR 输出直接连接到继电器模块。
现在我们已经完全了解了 PIR 传感器的工作原理,我们可以开始将其连接到 Arduino!
将 PIR 传感器连接到 Arduino 非常简单。使用 5V 为 PIR 供电并将地线接地。PIR 充当数字输出,因此您所要做的就是监听输出引脚。下面将输出连接到 Arduino 的数字引脚 #8。
为了使 HC-SR501 正常工作,请将跳线设置到 H(多重触发模式)位置。您还需要将时间延迟设置为至少 3 秒,逆时针旋转时间延迟电位计到底。最后将灵敏度电位器设置到您喜欢的任何位置,或者,如果您不确定,请将其设置到中点。
下表列出了引脚连接:
HC-SR501 被动红外传感器 | Arduino | |
VCC | 5V | |
GND | 接地 | |
OUT | 8 |
将 PIR 传感器连接到 Arduino UNO
现在您可以将以下代码上传到Arduino,并使 PIR 正常工作。
代码非常简单。它基本上只是跟踪引脚 #8 的输入是高电平还是低电平。
int ledPin = 13;
int inputPin = 8;
int pirState = LOW;
int val = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin);
if (val == HIGH)
{
digitalWrite(ledPin, HIGH);
if (pirState == LOW)
{
Serial.println("运动被检测!");
pirState = HIGH;
}
}
else
{
digitalWrite(ledPin, LOW);
if (pirState == HIGH)
{
Serial.println("运动被监测!");
pirState = LOW;
}
}
}
将传感器朝上,将手滑过传感器。您应该会在串行终端上看到“检测到运动”消息。
设计基于 HC-SR501 的系统时,您需要牢记以下延迟周期。
当传感器输出变为低电平时,它将保持低电平约 2 秒。在此期间,运动感测被锁定。
例如,假设您将传感器设置为 4 秒的延时并将跳线设置为“L”。因此,当您在传感器前挥手时,输出将变为高电平 4 秒,然后变为低电平约 2 秒。在此期间的任何动议都将被完全忽略。
与大多数 PIR 传感器一样,HC-SR501 在打开后大约需要 30 到 60 秒才能完成初始化序列。此时它会了解环境的周围红外特征。基本上,它会根据环境进行自我校准,以确定运动的构成。
在此校准时间内可能会发生错误触发,因此应忽略该时间内的任何触发。还要确保在进行自校准时传感器前面没有太多移动,因为这可能会干扰校准过程。