PIR运动传感器的简介,PIR

概述

PIR传感器使您能够感知运动,几乎总是用于检测人类是否已移入或移出传感器范围。它们体积小,价格便宜,功耗低,易于使用且不会磨损。因此,它们通常在家庭或企业使用的电器和小工具中找到。它们通常被称为PIR,“被动红外”,“热电”或“ IR运动”传感器。

PIR基本上是由热释电传感器制成的(您可以在下面看到,这是圆形金属罐,中心带有矩形晶体) ),它可以检测红外辐射的水平。一切都散发出一些低水平的辐射,而东西越热,发射的辐射就越多。实际上,运动检测器中的传感器分为两半。这样做的原因是我们希望检测运动(变化)而不是平均IR水平。将两半连接起来,以便彼此抵消。如果有一半的红外辐射比另一半多,则输出将摆动得高或低。

与热释电传感器一起的是一堆支持电路,电阻器和电容器。似乎大多数小型爱好者传感器都使用BISS0001(“微功率PIR运动检测器IC”),这无疑是非常便宜的芯片。该芯片接收传感器的输出,并对其进行一些小的处理,以从模拟传感器发出数字输出脉冲。

我们的旧式PIR如下所示:

我们的新PIR具有更多可调设置,并且在3针中安装了接头地面/外部/电源垫

对于许多需要检测人员何时离开或进入该区域或接近该区域的基本项目或产品,PIR传感器非常有用。它们功耗低,成本低,坚固耐用,镜头范围广且易于接口。请注意,PIR不会告诉您周围有多少人或他们与传感器有多近,镜头通常固定在一定的范围和距离(尽管可以在某处砍死),有时还会被地毯掀起。实验是关键!

一些基本统计信息

这些统计信息用于Adafruit商店中的PIR传感器,该传感器非常类似于Parallax。尽管几乎所有PIR的工作原理相同,但几乎所有PIR的规格都会略有不同。如果有数据表,您将要参考它

尺寸:矩形

价格: 10.00美元在Adafruit商店

输出:触发时(检测到运动)数字脉冲为高电平(3V),闲置时(未检测到运动)为数字低。脉冲长度由PCB上的电阻和电容器确定,并且因传感器而异。

灵敏度范围:最多20英尺(6米)110°x 70°的检测范围

电源:大多数模块的5V-12V输入电压(它们具有3.3V稳压器),但如果稳压器规格不同,则5V是理想选择

BIS0001数据表(使用的解码器芯片)

RE200B数据表(最可能使用的PIR感应元件)

NL11NH数据表(使用了等效透镜)

视差数据表(传感器版本)

更多链接!

有关GLOLAB PIR传感器的精彩网页\\

PIR的工作方式

PIR传感器比本教程中介绍的许多其他传感器(例如光电管,FSR和倾斜开关)要复杂得多,因为其中有多个变量会影响传感器的输入和输出。为了开始解释基本传感器的工作原理,我们将使用此漂亮的图

PIR传感器本身具有两个插槽,每个插槽均由对IR敏感的特殊材料制成。这里使用的镜头并没有做太多事情,因此我们看到两个插槽可以“看到”某个距离(基本上是传感器的灵敏度)。当传感器闲置时,两个插槽都检测到相同量的IR,即从房间或墙壁或室外辐射的环境量。当像人或动物这样的温暖物体经过时,它首先会拦截PIR传感器的一半,这会导致两半之间的“正向差异”变化。当温暖的身体离开感应区域时,情况会发生相反的变化,从而使传感器产生负的差分变化。这些变化脉冲就是被检测到的。

PIR传感器 IR传感器本身被封装在一个密封的金属罐中,以提高抗噪声/温度/湿度的能力。有一个由红外透射材料制成的窗口(通常是涂覆硅,因为这样很容易获得),可以保护传感元件。窗口后面是两个平衡传感器。

Murata数据表的左图

RE200B数据表中的图像

您可以在图表上方看到显示元素窗口,两种传感材料

RE200B数据表中的图像

此图显示了内部原理图。实际上,内部存在一个JFET(一种晶体管),它的噪声非常低,并将传感器的极高阻抗缓冲到低成本芯片(如BIS0001)可以感知的东西中。

镜头 PIR传感器相当通用,并且在很大程度上有所不同仅在价格和敏感性上。大多数真正的魔术都发生在光学器件上。这是一个非常好的制造想法:PIR传感器和电路是固定的,花费几美元。镜头仅需几美分,并且可以很容易地改变宽度,范围和感应模式。

在上图中,镜头只是一块塑料,但这意味着检测区域只有两个矩形。通常,我们希望检测区域更大。为此,我们使用一个简单的镜头(例如在相机中找到的镜头):它们将大面积(例如风景)凝结成一个很小的镜头(在胶片或CCD传感器上)。出于很快就会明白的原因,我们希望将PIR透镜做得又小又薄,并且可以用便宜的塑料成型,尽管它可能会增加变形。因此,传感器实际上是菲涅耳透镜:

来自传感器杂志的图像

菲涅耳透镜会聚光,从而为传感器提供更大的红外范围。

来自BHlens.com

来自赛普拉斯应用笔记2105的图像

确定,所以现在我们可以使用的范围更大。但是,请记住,我们实际上有两个传感器,更重要的是,我们不希望有两个非常大的感应区域矩形,而是要分散多个小区域。因此,我们要做的是将镜头分成多个部分,每个部分都是菲涅耳透镜。

在这里您可以看到多个构面部分

此微距照片显示了每个小面上不同的菲涅耳透镜!

不同的刻面和子透镜创建了一系列相互交错的检测区域。这就是为什么上面各面的镜头中心“不一致”的原因-每隔一个指向PIR感应元件的另一半

来自NL11NH数据表的图像

这里是另一幅图像,更具定性,但不定量。 (请注意,Adafruit商店中的传感器是110°而不是90°)

来自IR-TEC的图像

连接到PIR

大多数PIR模块的侧面或底部都有3针连接。模块之间的引脚排列可能有所不同,因此请仔细检查引脚排列!通常在连接旁边就进行丝网印刷(至少是我们的!)。一个引脚将接地,另一个引脚将是信号,最后一个引脚将是电源。电源通常为3-5VDC输入,但可能高达12V。有时,较大的模块没有直接输出,而是只操作一个继电器,在这种情况下,有接地,电源和两个开关连接。

某些继电器的输出可能是“集电极开路”-这意味着它需要一个上拉电阻。如果您没有获得可变的输出,请确保尝试在信号和电源引脚之间连接一个10K上拉电阻。

使用PIR传感器进行原型制作的一种简单方法是将其连接到面包板上,因为有连接端口间距为0.1英寸。一些PIR上已经带有插头,adafruit的插头上有一个直的3针插头,用于连接电缆

对于我们的PIR,红色电缆是+电压电源,黑色电缆是-接地电源,黄色是电缆

测试PIR

现在,当PIR检测到运动时,输出引脚将“高”到3.3V并点亮LED!

一旦连接好面包板,插入电池并等待30-60秒,使PIR达到“稳定”状态。在此期间,LED可能会闪烁一点。等到LED熄灭后,再挥动手等在其前面移动,以查看LED点亮!

重新触发您的PIR可能有几个选项。首先,我们将探讨“重新触发”选项。

一旦LED闪烁,请看一下PIR传感器的背面,并确保将跳线置于 L 位置,如下所示。

现在再次设置测试板。您可能会注意到,当按上述方式连接PIR传感器时,LED在其前面移动时并不会保持点亮状态,而是实际上每隔一秒钟左右就会打开和关闭一次。这就是所谓的“非触发”。

现在更改跳线,使其位于 H 位置。如果设置测试,您会发现现在LED 会一直停留在移动的整个过程中。称为“重新触发”。

(上面的图来自BISS0001数据表,它们有点烂)

对于大多数应用程序,“重新触发”(如下所示处于H位置的跳线)模式要好一些。

如果您需要将传感器连接到边缘触发的物体上,然后将其设置为“非触发”(跳线处于L位置)。

更改灵敏度

Adafruit PIR的背面有一个调整电位器,用于调节灵敏度。如果您的PIR太敏感或不够敏感,则可以调整此值-顺时针使其更敏感。

脉冲时间和超时长度。PIR传感器有两个“超时”。其中之一是“ Tx ”超时:检测到移动后LED点亮的时间-由于有电位计,因此在Adafruit PIR上很容易进行调整。

第二个是“ Ti ”超时,该超时是指在不移动的情况下保证关闭LED的时间。这不是容易更改的,但是如果您方便使用烙铁,这是可以的。

首先,让我们再次看一下BISS数据表

在Adafruit PIR传感器上,有一个微调电位器标有 TIME。 这是一个1兆欧可调电阻,已添加到10K串联电阻中。并且 C6 为0.01uF,因此

Tx = 24576 x(10K + Rtime)x 0.01uF

如果Rtime电位计为完全逆时针旋转(至0欧姆),然后

Tx = 24576 x(10K)x 0.01uF = 2.5 秒(大约)

如果Rtime电位计一直沿顺时针方向一直调至1兆欧,然后

Tx = 24576 x(1010K)x 0.01uF = 250 秒(大约)

如果RTime在中间,大约需要120秒(两分钟),因此您可以根据需要进行调整。例如,如果您想让某人运动至少打开风扇1分钟,则将Rtime电位计设置为大约1/4。

用于较旧/其他PIR传感器

如果其他地方的PIR传感器没有电位器调节,则可以通过以下方式找出调节电阻:

确定R10和R9并不难。不幸的是,这个PIR传感器贴错了标签(看起来好像他们交换了R9 R17)。您可以通过查看BISS001数据表并找出它们是什么引脚来跟踪这些引脚-R10连接到引脚3,R9连接到引脚7。确定电容的难度稍大一些,但是您可以根据时序对其进行“反向工程”传感器并求解!

例如:

Tx = 24576 * R10 * C6 =〜1.2秒

R10 = 4.7K和 C6 = 10nF

类似,

Ti = 24 * R9 * C7 =〜1.2秒

R9 = 470K和 C7 = 0.1uF

您可以通过交换不同的电阻器或电容器来更改时序。有关此内容的不错的教程,请参见Keith的PIR骇客页面。

使用带Arduino的PIR

读取PIR传感器

将PIR传感器连接到微控制器非常简单。 PIR充当数字输出,可以是高电压或低电压,因此您需要做的就是通过监听Arduino上的数字输入来监听引脚变为高电平(检测到)或低电平翻转(未检测到)

可能需要重新触发,因此请确保将跳线置于 H 位置!

为PIR供电5V,并将地线连接到地面。然后将输出连接到数字引脚。在此示例中,我们将使用引脚2。

代码非常简单,基本上只是跟踪引脚2的输入是高还是低。它还跟踪销的 状态 ,以便在运动开始和停止时打印出一条消息。

下载:文件

复制代码

/*

* PIR sensor tester

*/

int ledPin = 13; // choose the pin for the LED

int inputPin = 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(ledPin, OUTPUT); // declare LED as output

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

Serial.begin(9600);

}

void loop(){

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

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

digitalWrite(ledPin, HIGH); // turn LED ON

if (pirState == LOW) {

// we have just turned on

Serial.println(“Motion detected!”);

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

pirState = HIGH;

}

} else {

digitalWrite(ledPin, LOW); // turn LED OFF

if (pirState == HIGH){

// we have just turned of

Serial.println(“Motion ended!”);

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

pirState = LOW;

}

}

} /*

* PIR sensor tester

*/

int ledPin = 13; // choose the pin for the LED

int inputPin = 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(ledPin, OUTPUT); // declare LED as output

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

Serial.begin(9600);

}

void loop(){

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

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

digitalWrite(ledPin, HIGH); // turn LED ON

if (pirState == LOW) {

// we have just turned on

Serial.println(“Motion detected!”);

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

pirState = HIGH;

}

} else {

digitalWrite(ledPin, LOW); // turn LED OFF

if (pirState == HIGH){

// we have just turned of

Serial.println(“Motion ended!”);

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

pirState = LOW;

}

}

}

别忘了有时候您不需要微控制器。 PIR传感器可以连接到继电器(可能带有晶体管缓冲器),而无需使用微型传感器!

CircuitPython代码

在带有简单数字输入的CircuitPython中使用PIR传感器很容易。 PIR传感器的外观和行为有点像按钮或开关,即它只有高或低逻辑级别,因此您不需要任何特殊的库或其他代码即可从Python读取一个。继续之前,先熟悉CircuitPython数字输入和输出!

首先请确保您的PIR传感器已连接到板上,如上一页所示。将PIR传感器连接到Arduino和CircuitPython板没有什么区别。您必须将电源,接地和传感器输出连接到板上。传感器输出应连接到板上的任何数字I/O线。在此示例中,我们将在TrinketM0上使用引脚D2。

Fritzing Source

下一步连接到开发板的串行REPL,因此您位于CircuitPython的》》》 提示符下。

运行以下代码以导入 board 和 digitalio 模块,这些模块可让您读取数字输入:

下载:文件

复制代码

import board

import digitalio import board

import digitalio

然后为PIR创建简单的数字输入。请记住,使用正确的板针来将传感器连接到板上。此示例在饰条M0上使用引脚D2:

下载:文件

复制代码

pir = digitalio.DigitalInOut(board.D2)

pir.direction = digitalio.Direction.INPUT pir = digitalio.DigitalInOut(board.D2)

pir.direction = digitalio.Direction.INPUT

此时,您可以通过读取value属性来读取传感器的状态。如果该值处于低逻辑电平或为False,则传感器看不到任何运动。如果它处于逻辑高电平或True,则传感器正在检测运动!

请注意,您可能希望传感器的跳线处于H位置,以进行重新触发模式,如上一页所述。

例如,传感器前没有移动,您可能会看到:

下载:文件

复制代码

pir.value pir.value

然后将手在传感器前面挥动,并在挥动它时再次运行相同的命令。注意,您得到的结果是真实的!

下载:文件

复制代码

pir.value pir.value

这是在CircuitPython中使用PIR传感器的全部内容!

这是一个完整的示例,就像上一页一样,从PIR传感器开始的移动将打开板上的LED并打印一条消息。这是上一页Arduino示例到CircuitPython的直接端口。尝试将其另存为板上的 main.py 并连接到串行终端,以查看运行时的输出! (请确保将板针号更改为传感器和LED布线!)

下载:文件

复制代码

import board

import digitalio

LED_PIN = board.D13 # Pin number for the board‘s built in LED.

PIR_PIN = board.D2 # Pin number connected to PIR sensor output wire.

# Setup digital input for PIR sensor:

pir = digitalio.DigitalInOut(PIR_PIN)

pir.direction = digitalio.Direction.INPUT

# Setup digital output for LED:

led = digitalio.DigitalInOut(LED_PIN)

led.direction = digitalio.Direction.OUTPUT

# Main loop that will run forever:

old_value = pir.value

while True:

pir_value = pir.value

if pir_value:

# PIR is detecting movement! Turn on LED.

led.value = True

# Check if this is the first time movement was

# detected and print a message!

if not old_value:

print(’Motion detected!‘)

else:

# PIR is not detecting movement. Turn off LED.

led.value = False

# Again check if this is the first time movement

# stopped and print a message.

if old_value:

print(’Motion ended!‘)

old_value = pir_value import board

import digitalio

LED_PIN = board.D13 # Pin number for the board’s built in LED.

PIR_PIN = board.D2 # Pin number connected to PIR sensor output wire.

# Setup digital input for PIR sensor:

pir = digitalio.DigitalInOut(PIR_PIN)

pir.direction = digitalio.Direction.INPUT

# Setup digital output for LED:

led = digitalio.DigitalInOut(LED_PIN)

led.direction = digitalio.Direction.OUTPUT

# Main loop that will run forever:

old_value = pir.value

while True:

pir_value = pir.value

if pir_value:

# PIR is detecting movement! Turn on LED.

led.value = True

# Check if this is the first time movement was

# detected and print a message!

if not old_value:

print(‘Motion detected!’)

else:

# PIR is not detecting movement. Turn off LED.

led.value = False

# Again check if this is the first time movement

# stopped and print a message.

if old_value:

print(‘Motion ended!’)

old_value = pir_value

示例项目

一个简单的房间迎宾员,当被入侵的airwick清新剂单元中的PIR触发时,播放超级马里奥兄弟主题音乐。/em》

USB供电的唱歌和眨眼的马里奥蘑菇(网站上有视频!)

雨伞

使用PIR传感器(内置在Start Trek面板中!)的自制安全系统

PIR传感器+ Arduino +伺服=自动猫门!

Lucky Larry的2-PIR运动跟踪器

基于PIR的远程摄像机触发器(也是Lucky Larry的作品)

使用PIR传感器“原始”跟踪运动的有趣技巧。
责任编辑:wv

相关推荐

相关文章