无源红外传感器
1. 什么是无源红外传感器?
PIR全称为Passive Infra-Red,称作被动红外传感器(又被称为Pyroelectric Infrared——热释电红外线传感器)是近年来发展起来的一种新型高灵敏度探测元件,是一种能检测人体发射的红外线而输出电信号的传感器。它能组成防入侵报警器或各种自动化节能装置。它能以非接触形式检测出人体辐射的红外线能量的变化,并将其转换成电压信号输出。将这个电压信号加以放大,便可驱动各种控制电路,如作电源开关控制、防盗防火报警等。 红外线传感器是将红外辐射能转换成电能的一种光敏元件,通常将红外线传感器分为热型和光子型两种。热释电红外传感器是利用红外辐射的热辐射作用引起元件本身的温度变化,其探测率、响应速度都不如光子型传感器。但由于热释电型传感器可在室温下使用,灵敏度与波长无关,所以应用领域广。通用性好的热型传感器有热电堆、热敏电阻测辐射热计、高莱管等。其中,利用铁电体热释电效应的热释电型红外传感器(PIR)灵敏度高,可以广泛地用于民用领域。
2. 无源红外传感器是如何工作的?
PIR传感器的工作原理是热释电效应。当一些晶体受热时,在晶体两端将会产生数量相等而符号相反的电荷,这种由于热变化产生的电极化现象,被称为热释电效应。通常,晶体自发极化所产生的束缚电荷被来自空气中附着在晶体表面的自由电子所中和,其自发极化电矩不能表现出来。当温度变化时,晶体结构中的正负电荷重心相对移位,自发极化发生变化,晶体表面就会产生电荷耗尽,电荷耗尽的状况正比于极化程度。下图表示了热释电效应形成的原理。 热释电传感器利用的正是热释电效应,是一种温度敏感传感器。它由陶瓷氧化物或压电晶体元件组成,元件两个表面做成电极,当传感器监测范围内温度有ΔT的变化时,热释电效应会在两个电极上会产生电荷ΔQ,即在两电极之间产生一微弱电压ΔV。由于它的输出阻抗极高,所以传感器中有一个场效应管进行阻抗变换。热释电效应所产生的电荷ΔQ会跟空气中的离子所结合而消失,当环境温度稳定不变时,ΔT=0,传感器无输出。当人体进入检测区时,因人体温度与环境温度有差别,产生ΔT,则有信号输出;若人体进入检测区后不动,则温度没有变化,传感器也没有输出,所以这种传感器能检测人体或者动物的活动。 人体温度大约为36°-37°,辐射出的波长在一定范围。滤光片可以只让这个波长范围的红外线通过,使得 PIR传感器只对人体敏感,而不受太阳、灯光等其它热源影响,上图2为PIR传感器结构与简易内部电路。
由于PIR只能检测到距离有限。如果在外面加上一个菲涅尔透镜(下图),把外部的光线会聚到 PIR 上,增加进光量,则可大大增加 PIR 的检测距离和角度。同时,通过控制菲涅耳透鏡内部的角度,可以控制焦距,制作出检测距离不同.的 PIR。做完这些工作之后,有了一定的检测距离和角度。但是人体必须经过整个检测区域才能产生两次变化(进入检测区和离开检测区)。我们希望能够检测到更小幅度的移动,捕获更多的变化信号。在菲涅尔透镜上做点变化,把检测区分成若干个小格,间隔的区域会把光反射出去。这样整个检测区就变成若干个相邻的灵敏区和盲区。当人体移动时,会经过一个灵敏区,又进入一个盲区…… 最后产生连续的脉冲信号。 菲涅尔透镜可以聚光,为传感器提供更大范围的红外光。 好了,现在我们有了一个更大的范围。但是实际上我们有两个传感器,更重要的是,我们不需要两个非常大的感应区域矩形,而是需要分散的多个小区域。因此,我们要做的是将透镜分成多个部分,每个部分都是菲涅尔透镜。 上面这张微距照片展示了每个切面上不同的菲涅尔透镜; 由上文可知,人体都有恒定的体温,一般在37°C左右,会发出10 um左右特定波长的红外线,被动式红外探头就是靠探测人体发射的红外线而进行工作的。红外线通过菲涅耳滤光片增强后聚集到热释电元件,这种元件在接收到人体红外辐射变化时就会失去电荷平衡,向外释放电荷,后经检测处理后就能产生报警信号。被动红外探头,其传感器包含两个互相串联或并联的热释电元件,而且制成的两个电极化方向正好相反(如下图所示),环境背景辐射对两个热释元件几乎具有相同的作用,使其产生释电效应相互抵消,于是探测器无信号输出。
3. 如何应用无源红外传感器?
由于PIR传感器收集到的数据经过电路的输出的电压信号太微弱,需经过放大电路,过滤掉噪声干扰,提取有用的信号放大。后级放大电路包括:带通滤波、两级高增益放大、比较电路。下图为PIR前置放大电路设计图 上图中热释电传感器D端和5V电源间串联10kΩ电阻,用于降低射频干扰,G端接地,S端接47 kΩ负载电阻,偏置电压约为1 V。传感器输出直接耦合到低噪声运放(LM324构成的带通滤波和第一级放大电路的反向输入端,再由电阻R6、电容C8耦合到第二级反向放大电路进行进一步滤波、放大。 热释电红外传感器的应用很广,大体可分为定性测量和定量测量两类。 定量测量是测量红外光源的温度T,是一种非接触的测定温度的方法。它的基本依据如下,首先辐射能流密度ωλ可表示为: 式中, ωλ为辐射率,相当于对绝对黑体的修正,是一个小于等于1的数;h为普朗克常数;λ为波长,c为光速;k为波尔兹曼常数;T为绝对温度。 由上图可知,无源红外报警器装置的工作流程是:物体射出的红外线先通过菲涅尔透镜,然后到达热释电红外探测器。这时,热释电红外探测器将输出脉冲信号,脉冲信号经放大和滤波后,由电压比较器将其与基准值进行比较,当输出信号达到一定值时,报警电路发出警报。 热释电红外传感器和少量外接元器件构成被动式的热释电红外开关。在民用领域中可广泛应用。可做为白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自动洗手池等装置的自动快速开启的自动感应开关,特别适用于企业、宾馆、商场、库房及家庭的过道、走廊等敏感区域,或用于安全区域的自动灯光、照明和报警系统。
TCRT1000是一种常见的红外反射传感器,它由发射装置和接收装置组成。以下是TCRT1000传感器的具体介绍:
工作原理: 当发射装置发送红外光束时,如果有物体遮挡在传感器前方,红外光束会被物体反射回传感器的接收装置。接收装置接收到反射的红外光信号后会产生电信号输出。
功能特点:
- 普通列表项目适用于检测物体是否存在、计数和跟踪物体等应用场景;
- 普通列表项目灵敏度调节:通过调整传感器上的灵敏度调节旋钮,可以根据需要调整灵敏度;
- 普通列表项目可以在室内和室外环境中使用;
- 普通列表项目采用数字输出方式,方便与其他电路连接和集成。
技术参数:
- 普通列表项目工作电压:3.3V - 5V;
- 普通列表项目工作电流:≤25mA;
- 普通列表项目工作温度:-25℃ to +85℃;
- 普通列表项目探测范围:最大可达10mm。
目前PIR传感器有以下的用处:
- 安防系统:PIR传感器常用于安防系统,例如家庭安全系统或办公室安全系统。当有人进入被监控的区域时,PIR传感器会检测到其体温所产生的红外辐射变化,并触发警报或其他相应的安全措施。
- 照明控制:PIR传感器可用于自动控制照明系统。通过检测房间内是否有人活动,PIR传感器可以向控制器发送信号,从而控制灯光的开关和亮度,实现智能节能的照明系统。
- 自动化系统:PIR传感器也广泛应用于建筑自动化系统,如自动门、自动电梯和自动洗手间等。当有人接近时,PIR传感器可以检测到并触发相应的自动化操作,提供方便性和舒适性。
- 能源管理:PIR传感器可用于能源管理系统,例如管理办公室或商店中的空调和供暖系统。当检测到没有人活动时,传感器可以自动降低或关闭能源消耗较高的设备,以节省能源。
- 应用于健康监测:在医疗领域,PIR传感器可用于监测人体的运动和活动,例如睡眠监测、老年人护理等。通过检测身体的微小运动,传感器可以提供有关人体活动模式和健康状况的信息。
4. 主要的无源红外传感器供应商
- 意法半导体(STMicroelectronics):作为全球领先的半导体公司之一,意法半导体提供了多种无源红外传感器产品,包括接近传感器、手势识别传感器和红外遥控解码器。
- 美国电气(Vishay):美国电气是一家专注于电子元件制造的公司,其产品线包括多种无源红外传感器,如红外接收器、红外发射器和红外光栅。
- 希捷科技(Seagate Technology):希捷科技是一家专注于硬盘驱动器和存储解决方案的公司,其产品中也包含无源红外传感器,用于硬盘驱动器的故障诊断和校准等功能。
- 森霸传感:森霸传感科技是国内热释电红外传感器龙头厂商,有19年传感器自主研发经验,是国产中红外传感器厂商的中流砥柱。
5. 参考案列
针对与本次无源红外传感器,我们采用了GY——906无源红外温度传感器(基本原理与PIR传感器没有太大差别)与基于RP2040的逻辑/协议/信号调试助手——十二指神探进行联接,通过micropython语言来编译相关代码,实现其功能: 代码如下:
from machine import Pin, I2C import time
i2c = I2C(1, scl=Pin(23), sda=Pin(22)) address = 0x5A
while True:
i2c.writeto(address, bytearray([0x07]) time.sleep_ms(500) # 读取温度数据 data = i2c.readfrom(address, 3) temp_raw = (data[0] << 8) + data[1] temp_celsius = (temp_raw * 0.02) - 273.15 temp_fahrenheit = (temp_celsius * 9 / 5) + 32 print("Temperature: {:.2f}°C / {:.2f}°F".format(temp_celsius, temp_fahrenheit)) time.sleep(1)