人体感应器原理 红外线人体感应器的工作原理和应用
红外线人体传感器的核心原件是热释电传感器,通过探测来自环境的人体或动物红外辐射,来判断检测范围内是否有人或动物,常用于智能家居中用于判断是否有人经过,或在智能安防中用于判断是否有可疑人员侵入防区。以领普人体红外传感器来给大家举例具体的应用场景,将它放置在床下方的一角,通过网关联动智能开关,设置执行条件晚上10点-早上6点,当感知到有人起床移动时,开启床头灯,并自动调节光线,夜晚也不用摸黑找开关了。
人体感应开关的工作原理是什么?
人体红外感应开关的工作原理
人体是一特定波长红外线的发射体,由红外传感器检测到这种红外线的变化并予以放大选频处理后,可以推动适当的负载,此乃人体红外自动开关。这一检测技术较之超声、哑声、微波方式更为灵敏与准确。它要求PIR热释电人体红外传感器的信号放大处理电路有很高的灵敏度并要能准确鉴别生物体与非生物体的运动,使误动作率降到最低。且体积小,自耗电微少。采用热释电红外传感器及专用单片集成电路构成的这种开关能成为人到灯亮、人走灯灭。它安装方便,可直接替换86型面板式开关,无需改动市电线路。
PIR(HWTT)热释电红外传感器的输出信号幅度较小(小于1mV),频率低(约0.1~0.8Hz),检测距离短,为此在PIR前加用一块半球面菲涅尔透镜,使范围扩展成90度圆锥型距离大于5米的检测面。集成电路内部含有二级运放、比较器、定时器、过零检测、控制电路、系统时钟等电路。PIR传感器检测到人体移动引起的红外热能之变化并将它转换为电压量,通过二级选频放大比较输入到控制电路中,由控制电路输出过零脉冲触发双向可控硅导通。采用交流过零触发能消除可控硅导通时浪涌电流,延长灯具的使用寿命。同时控制电路启动了定时器,直至PIR传感器在接收到信号后,触发可控硅的信号到设定的时间后关断可控硅,做到自动关闭。改变R5阻值或C4容量可控制定时器的时间。IC电路的9脚为光控输入端,由光敏电阻串联R8接地,白天亮阻小9脚为低电平,封锁控制电路输出,待天暗时亮阻增大9脚转为高电平,并解除控制电路,因此能自动做到天暗时自动开关进入工作。调整R8电阻可适应不同的感光度。要将其改为日夜均能工作时,只需将光敏电阻或R8拆下即可。探测灵敏度的调整也十分方便,增大R9电阻阻值提高放大器的增益,它能使检测距离加远,反之则可缩短检测距离,一般可在2~8米之间调整。该电路只要选择元件无误及接焊无错均可一次成功。
PIR(HWTT)热释电红外传感器的输出信号幅度较小(小于1mV),频率低(约0.1~0.8Hz),检测距离短,为此在PIR前加用一块半球面菲涅尔透镜,使范围扩展成90度圆锥型距离大于5米的检测面。集成电路内部含有二级运放、比较器、定时器、过零检测、控制电路、系统时钟等电路。PIR传感器检测到人体移动引起的红外热能之变化并将它转换为电压量,通过二级选频放大比较输入到控制电路中,由控制电路输出过零脉冲触发双向可控硅导通。采用交流过零触发能消除可控硅导通时浪涌电流,延长灯具的使用寿命。同时控制电路启动了定时器,直至PIR传感器在
如果人体不动的话,热释电红外传感器可以检测的到么?
主要看红外传感器是否含有周期性的遮挡装置。1、红外传感器有遮挡装置,可以检测出不动的人体。2、红外传感器没有遮挡装置,不能检测出不动的人体。红外传感器利用红外线的物理性质来进行测量的传感器。按探测机理可分成为光子探测器和热探测器。 红外传感技术已经在现代科技、国防和工农业等领域获得了广泛的应用。扩展资料:红外辐射的本质是热辐射。以波的形式在空间直线传播,真空中以光速传播当物体温度低于1000℃时,向外辐射的不再是可见光,而是红外光红外线在通过大气层时,有三个波段透过率高。红外探测器分为热探测器和光子探测器两种:1、光子探测器:利用入射光辐射的光子流与探测器材料中的电子互相作用,从而改变电子的能量状态,引起各种电学现象。2、热探测器:利用红外辐射的热效应,探测器的敏感元件吸收辐射能后引起温度升高,进而使某些有关物理参数发生变化,通过测量物理参数的变化来确定探测器所吸收的红外辐射。参考资料来源:百度百科-红外传感器
请教高手,基于单片机的人体温度测量
/********************************************************
* DS18B20温度传感器 *
* C51 *
* yajou 2008-06-28 无CRC *
********************************************************/
#include "reg51.h"
#include "intrins.h"
#include "DS18B20.h"
/********************************************************
* us延时程序 *
********************************************************/
void Delayus(uchar us)
{
while(us--); //12M,一次6us,加进入退出14us(8M晶振,一次9us)
}
/********************************************************
* DS18B20初始化 *
********************************************************/
bit Ds18b20_Init(void) //存在返0,否则返1
{
bit temp = 1;
uchar outtime = ReDetectTime; //超时时间
while(outtime-- && temp)
{
Delayus(10); //(250)1514us时间可以减小吗
ReleaseDQ();
Delay2us();
PullDownDQ();
Delayus(100); //614us(480-960)
ReleaseDQ();
Delayus(10); //73us(>60)
temp = dq;
Delayus(70); //us
}
return temp;
}
/********************************************************
* 写bit2DS18B20 *
********************************************************/
void Ds18b20_WriteBit(bit bitdata)
{
if(bitdata)
{
PullDownDQ();
Delay2us(); //2us(>1us)
ReleaseDQ(); //(上述1-15)
Delayus(12); //86us(45- x,总时间>60)
}else
{
PullDownDQ();
Delayus(12); //86us(60-120)
}
ReleaseDQ();
Delay2us(); //2us(>1us)
}
/********************************************************
* 写Byte DS18B20 *
********************************************************/
void Ds18b20_WriteByte(uchar chrdata)
{
uchar ii;
for(ii = 0; ii < 8; ii++)
{
Ds18b20_WriteBit(chrdata & 0x01);
chrdata >>= 1;
}
}
/********************************************************
* 写 DS18B20 *
********************************************************/
//void Ds18b20_Write(uchar *p_readdata, uchar bytes)
//{
// while(bytes--)
// {
// Ds18b20_WriteByte(*p_readdata);
// p_readdata++;
// }
//}
/********************************************************
* 读bit From DS18B20 *
********************************************************/
bit Ds18b20_ReadBit(void)
{
bit bitdata;
PullDownDQ();
Delay2us(); //2us( >1us)
ReleaseDQ();
Delay8us(); //8us( <15us)
bitdata = dq;
Delayus(7); //86us(上述总时间要>60us)
return bitdata;
}
/********************************************************
* 读Byte DS18B20 *
********************************************************/
uchar Ds18b20_ReadByte(void)
{
uchar ii,chardata;
for(ii = 0; ii < 8; ii++)
{
chardata >>= 1;
if(Ds18b20_ReadBit()) chardata |= 0x80;
}
return chardata;
}
/********************************************************
* 读 DS18B20 ROM *
********************************************************/
bit Ds18b20_ReadRom(uchar *p_readdata) //成功返0,失败返1
{
uchar ii = 8;
if(Ds18b20_Init()) return 1;
Ds18b20_WriteByte(ReadROM);
while(ii--)
{
*p_readdata = Ds18b20_ReadByte();
p_readdata++;
}
return 0;
}
/********************************************************
* 读 DS18B20 EE *
********************************************************/
bit Ds18b20_ReadEE(uchar *p_readdata) //成功返0,失败返1
{
uchar ii = 2;
if(Ds18b20_Init()) return 1;
Ds18b20_WriteByte(SkipROM);
Ds18b20_WriteByte(ReadScr);
while(ii--)
{
*p_readdata = Ds18b20_ReadByte();
p_readdata++;
}
return 0;
}
/********************************************************
* 温度采集计算 *
********************************************************/
bit TempCal(float *p_wendu) //成功返0,失败返1 (温度范围-55 --- +128)
{
uchar temp[9],ii;
uint tmp;
float tmpwendu;
TR1 = 0;
TR0 = 0;
//读暂存器和CRC值-----------------------
if(Ds18b20_ReadEE(temp))
{
TR1 = 1;
TR0 = 1;
return 1;
}
//-------------------------------------
//CRC校验------------------------------
//
//此处应加入CRC校验等
//
//
//-------------------------------------
//使温度值写入相应的wendu[i]数组中-----
for(ii = i; ii > 0; ii--)
{
p_wendu++;
}
i++;
if(i > 4) i = 0;
//-------------------------------------
//温度正负数处理-----------------------
//
//-------------------------------------
//温度计算-----------------------------
tmp = temp[1]; //
tmp <<= 8; //
tmp |= temp[0]; //组成温度的两字节合并
tmpwendu = tmp;
*p_wendu = tmpwendu / 16;
//-------------------------------------
//开始温度转换-------------------------
if(Ds18b20_Init())
{
TR1 = 1;
TR0 = 1;
return 1;
}
Ds18b20_WriteByte(SkipROM);
Ds18b20_WriteByte(Convert);
ReleaseDQ(); //寄生电源时要拉高DQ
//------------------------------------
TR1 = 1;
TR0 = 1;
return 0;
}
//////////DS18B20.h/////////////////////////
/********************************************************
* I/O口定义 *
********************************************************/
sbit dq = P1^3;
sbit dv = P1^4; //DS18B20强上拉电源
/********************************************************
* 命令字定义 *
********************************************************/
#define uchar unsigned char
#define uint unsigned int
#define ReleaseDQ() dq = 1; //上拉/释放总线
#define PullDownDQ() dq = 0; //下拉总线
#define Delay2us() _nop_();_nop_(); //延时2us,每nop 1us
#define Delay8us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//设置重复检测次次数,超出次数则超时
#define ReDetectTime 20
//ds18b20命令
#define SkipROM 0xCC
#define MatchROM 0x55
#define ReadROM 0x33
#define SearchROM 0xF0
#define AlarmSearch 0xEC
#define Convert 0x44
#define WriteScr 0x4E
#define ReadScr 0xBE
#define CopyScr 0x48
#define RecallEE 0xB8
#define ReadPower 0xB4
/********************************************************
* 函数 *
********************************************************/
void Delayus(uchar us);
//void Dog(void);
bit Ds18b20_Init(void); //DS18B20初始化,存在返0,否则返1
void Ds18b20_WriteBit(bit bitdata); //写bit2DS18B20
void Ds18b20_WriteByte(uchar chrdata); //写Byte DS18B20
void Ds18b20_Write(uchar *p_readdata, uchar bytes); //写 DS18B20
bit Ds18b20_ReadBit(void); //读bit From DS18B20
uchar Ds18b20_ReadByte(void); //读Byte DS18B20
bit Ds18b20_ReadRom(uchar *p_readdata); //读 DS18B20 ROM:成功返0,失败返1
bit Ds18b20_ReadEE(uchar *p_readdata); //读 DS18B20 EE :成功返0,失败返1
bit TempCal(float *p_wendu); //成功返0,失败返1 (温度范围-55 --- +128)