如何将PIR与Arduino集成

电子说

1.2w人已加入

描述

步骤1:什么是PIR传感器?

= 1》

被动红外传感器是一种对象检测传感器。物体检测传感器有两种类型

主动物体检测传感器

被动物体检测传感器

物体存在传感器和接近传感器需要磁场,超声或红外辐射的活动源。被动红外传感器不需要任何此类源,并且对从被检测物体辐射的热量做出被动响应。

步骤2:PIR有什么作用?

通常被称为PIR的被动红外运动传感器检测黑体辐射,所有物体都根据其相对于绝对零温度的温度发射黑体辐射。传感器对以10μm(10微米或10,000nm)为中心的红外辐射作出响应。这是人和动物的大概体温。

“被动红外” 一词中的“被动” 是指人体的行为。探测器,它被动地接收红外辐射。接近传感器必须主动产生自己的红外辐射,该红外辐射会被附近的物体干扰或反射。

步骤3:原理图符号

Arduino

步骤4:PIR的典型应用

1)对运动敏感的室外照明几乎总是基于PIR。类似地,当PIR指示人类活动时,安全系统可能会发出警报或激活摄像机。

2)野生动物监视系统使用PIR启动摄像机,然后摄像机可以运行预设的时间间隔。

3)已开发出使用后向PIR来检测行人的汽车警告系统。

4)工业室内照明可能会使用PIR,当人们进入时自动将灯打开房间,然后在房间中不再检测到人时关闭灯光(经过一定时间延迟后)。目标是防止因员工忘记关灯而浪费能源。

步骤5:PIR的工作原理

Arduino

PIR模块包含多个组件。最可见的是至少15个小透镜的阵列,这些透镜将来自环境区域的红外光聚焦到热电探测器上,也称为热电传感器。检测器的响应由放大器处理,以便信号可以触发机电继电器或固态继电器。该继电器操作外部设备,例如灯光或警报器。

可能需要附加电路允许用户控制PIR模块的灵敏度以及继电器保持闭合状态的时间。用户还可以设置PIR处于活动状态的时间,或者另外的光电晶体管可以在白天关闭PIR。如果包含光电晶体管,则其灵敏度是可调的。

步骤6:热释电传感器简介

热释电探测器实际上是一种压电器件。它基于钽酸锂晶片,该晶片会响应入射的热辐射而产生较小的电压。

但是,与其他压电元件一样,它对稳态输入也没有响应,因此必须由过渡激活。这与其他类型的光传感器(例如红外光电二极管)不同,后者的响应与温度输入始终相关

步骤7:热释电传感器在一段时间内的响应

Arduino

热释电传感器的响应如上图所示

步骤8:PIR传感器内部的元件

div》 PIR模块中的热释电检测器安装在密封的金属容器中,如上图A所示。检测器中的矩形窗口通常由硅制成,它对可见波长不透明,但对长波红外辐射透明。

PIR中使用的热释电检测器至少包含两个极性相反的元素,串联连接。如果温度的突然变化对两个元素都产生同等影响,则它们的响应将相互抵消。因此,检测器忽略了环境温度的变化。但是,如果适当波段中的红外辐射源先影响一个元素,则检测器将发出两个极性相反的脉冲

下一步是当辐射落在两个元素上时显示输出效果

步骤9:辐射落在两个热电元件上时输出的影响

Arduino

顶部:在热释电探测器中,如果温度变化同时影响到两个极性相反的元件,则它们的电压会相互抵消。

底部:如果一个元素先于另一个元素被触发,则检测器会发出信号

步骤10:PIR的变体

PIR传感器模块可安装在小板上,例如上图所示。检测范围是5到10米,由板上的跳线选择。照片中可见的三个引脚分别用于电源(3VDC至6VDC),接地和输出。使用5VDC电源时,输出可提供高达23mA的电流。该模块在空闲状态下的功耗仅为130μA,在活动状态但没有负载时其功耗为3mA。

这种类型的电路板仍需要额外的组件来设置灯的“开启”时间或警报,并在白天关闭PIR。可以将PIR作为包含两个元件和FET晶体管的单个组件来购买,以放大信号。提供表面安装和通孔版本,需要3VDC至15VDC的典型电源。但是,作为“裸机”组件购买的PIR需要使用比较器或运算放大器的大量外部电路。电路设计并非易事,会带来一些实际问题,例如运算放大器对由激活共享相同电源的继电器引起的电压尖峰敏感。

步骤11:测量过程中可能出现的问题

温度敏感性

在温暖的天气中,PIR视场中的物体将趋向于温暖,它们与人体皮肤之间的温差将减小。这会降低PIR的性能。

检测器窗口漏洞

检测器上的硅窗口易受污物的影响或油脂。如果没有镜片保护,请避免触摸该组件。

水分易感性

水吸收远红外光。因此,镜头或检测器上的凝结会降低性能,并且PIR在大雨或大雪中可能无法正常工作。

步骤12:Arduino和PIR接口电路用于继电器触发

Arduino

上图显示了用于继电器触发的Ardunio和PIR接口电路。

步骤13:Arduino代码集成PIR和触发继电器。

int Relay_PIN = 9; // choose the pin for the LED

int Sensor_Pin = 2; // choose the input pin (for PIR sensor)

int pirState = LOW; // we start, assuming no motion detected

int val = 0; // variable for reading the pin status

void setup()

{

pinMode(Relay_PIN, OUTPUT); // declare LED as output

pinMode(inputPin, INPUT); // declare sensor as input

Serial.begin(115200);

}

void loop()

{

val = digitalRead(Sensor_Pin); // read input value

if (val == HIGH) // check if the input is HIGH

{

digitalWrite(Relay_PIN, LOW); // turn Relay ON, Relay is low level triggered

if (pirState == LOW) // we have just turned on

{

Serial.println(“Hey We found you moving!”); // We only want to print on the output change, not state

pirState = HIGH;

}

}

else

{

digitalWrite(Relay_PIN, HIGH); // turn Relay OFF

if (pirState == HIGH)

{

// we have just turned of

Serial.println(“Please stop”);

// We only want to print on the output change, not state

pirState = LOW;

}

}

}
       责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分