topic
-
-
- 11.1 PIR简介
-
- 11.1.1 产品参数
- 11.1.2应用
- 11.2 PIR详细说明
-
- 11.2.1 组成
- 11.2.2 引脚说明
- 11.2.3 探头概述
- 11.2.4 触发模式
- 11.2.5 调整延迟
- 11.2.6 可调设置
- 11.3 动手做一
- 11.4 动手做二
-
11.1 PIR简介
热释电红外运动传感器可以检测运动人体或动物发出的红外线,输出开关信号,可用于各种需要检测运动人体的场合。PIR传感器可以让你感知运动。它们用于检测人是否进入或离开传感器。通常出现在家庭或企业使用的电器和小工具中。它们通常被称为PIR,被动红外IR运动传感器。
11.1.1 产品参数
名称 | 参数 |
---|---|
输入电压: | 3.3~5V,最大6V |
工作电流: | 15uA |
工作温度: | -20~85℃ |
输出电压: | 高电平3V,低电平0V |
输出延迟时间(高电平): | 2.3~3秒左右 |
感应角度: | 100° |
感应距离: | 7米 |
输出指示灯: | 高电平点亮 |
输出引脚极限电流: | 100mA |
连线接口: | PH2.0-3 |
模块尺寸: | 30mm×22mm |
11.1.2应用
- 入侵报警器
- 非接触红外自动开关
11.2 PIR详细说明
11.2.1 组成
PIR由热电传感器制成,圆形金属罐中央有一个矩形晶体,可以检测红外辐射的水平。一切都发出低水平的辐射,越热,辐射就越多。运动探测器中的传感器分为两半。这是为了检测运动(变化),而不是平均IR水平。
11.2.2 引脚说明
11.2.3 探头概述
这种热释电红外运动传感器是一种热释电红外探头,将数字智能控制电路和人体探测敏感元集成到电磁屏蔽中。人体探测敏感元通过高阻抗差输入电路将感应到的人体移动信号耦合到数字智能集成电路芯片上,数字智能集成电路将信号转换为15位ADC数字信号,当PIR当信号超过选定的数字阀值时,会有延迟的高电平输出。所有的信号处理都在芯片上完成。
11.2.4 触发模式
在检测范围内,当探头接收到的热释电红外信号超过探头内的触发阈值时,内部会产生计数脉冲。当探头再次接收到这样的信号时,它认为是第二个脉冲,一旦在4 接收2秒内 脉冲后,探头产生报警信号,输出引脚输出高电平。此外,只要接收到的信号幅值超过触发阈值的5 超过一倍,只需一个脉冲就能触发输出端的高电平输出。下图为触发逻辑图示例。输出高电平的维持时间从最后一次有效脉冲开始计时。
11.2.5 调整延迟
红外热释电运动传感器默认高电平延迟时间为2.3~3秒左右,取AM412最短的延迟时间,但保留了修改延迟时间的设计。如图所示: 在右下角,修改R延迟时间可以修改电阻的电阻值。默认情况下R1=1MΩ,R2=0Ω。请参考数字热释电传感器的具体电阻值AM412数据手册第4页。电阻封装为0603。
11.2.6 可调设置
PIR可调设置和3引脚ground/out/power板上安装了接头。 对于许多需要在人们离开或进入该地区进行测试的基本项目或产品,PIR传感器是非常有用的。请注意,PIR不要告诉你周围的人数或与传感器的距离。镜头通常固定在一定距离的扫描范围内,有时会被房子里的宠物带走。 可以通过位于传感器板底部的两个可变电阻器来调节传感器灵敏度和延迟时间
11.3 动手做一
- 必需的组件
- 1 × Breadboard 面包板
- 1 × Arduino Uno R3
- 1 × PIR传感器(MQ3)
- 电路图 PIR传感器有三个端子:Vcc,OUT和GND。连接传感器如下:
- 将 Vcc连接到Arduino板上的 5v。
- 将OUT连接到Arduino板上的数字引脚2。
- 将GND连接到Arduino上的GND。
3. 程序
#define pirPin 2 int calibrationTime = 30;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int PIRValue = 0;
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
}
void loop() {
PIRSensor();
}
void PIRSensor() {
if (digitalRead(pirPin) == HIGH) {
if (lockLow) {
PIRValue = 1;
lockLow = false;
Serial.println("Motion detected.");
delay(50);
}
takeLowTime = true;
}
if (digitalRead(pirPin) == LOW) {
if (takeLowTime) {
lowIn = millis(); takeLowTime = false;
}
if (!lockLow && millis() - lowIn > pause) {
PIRValue = 0;
lockLow = true;
Serial.println("Motion ended.");
delay(50);
}
}
}
- 说明 一旦传感器检测到任何运动,Arduino将通过串口发送一条消息,表示检测到运动。PIR感测运动将延迟一定时间以检查是否存有新的运动。如果没有检测到运动,Arduino将发送一条新消息,说明运动已经结束。
11.4 动手做二
byte sensorPin = 2;
byte indicator = 13;
void setup()
{
pinMode(sensorPin, INPUT);
pinMode(indicator, OUTPUT);
Serial.begin(9600);
}
void loop()
{
byte state = digitalRead(sensorPin);
digitalWrite(indicator, state);
if (state == 1)Serial.println("Somebody is in this area!");
else if (state == 0)Serial.println("No one!");
delay(500);
}