用zigbee做无线网络森林火灾预防 有会的吗顺便求在zigbee为节点协调器,烟雾温度湿度传感器的驱动程序 谢

用zigbee做无线网络森林火灾预防 有会的吗顺便求在zigbee为节点协调器,烟雾温度湿度传感器的驱动程序 谢,第1张

我有温湿度的,/

V02 added PC-based binding 21/July/2006 RBR

V01 Initial Release 10/July/2006 RBR

/

/

This is a two node test, requires a Coordinator and an RFD

The coordinator and node simply ping-pong a packet back and forth, and print out the RSSI byte

The RFD waits before bouncing it back, while the coordinator responds immediately

Expects coordinator, and one RFD

The topology to test should be: Coordinator -> RFD1

Start the coordinator first, then RFD1 If a RFD1 fails to join the network, try again

The RFD1 will prompt the user to hit a key to start the ping-pong

You can connect multiple RFDs if desired

You can also ping-pong through a router; see the note in usrJoinVerifyCallback()

The topology for a router would be: coord -> router -> RFD1 -> RFD2 -> RFDn

This requires Virtual Boards to be running,

since a switch press is needed to start the pinging

/

#include "msstate_lrwpanh"

#define CLKSPD_1 (CLKCON & 0x01)

#define DATA P1_1

#define SCK P1_0

#define InfraredSensorBit 0x04

#define SmokeSensorBit 0x08

#define IENBIT 0x02

#define HAL_ENTER_CRITICAL_SECTION(x) st( x = EA; HAL_DISABLE_INTERRUPTS(); )

#define HAL_EXIT_CRITICAL_SECTION(x) st( EA = x; )

#define HAL_ENABLE_INTERRUPTS() st( EA = 1; )

#define HAL_DISABLE_INTERRUPTS() st( EA = 0; )

#define st(x) do { x } while (__LINE__ == -1)

typedef unsigned char halIntState_t;

/

@fn haltemp

@brief wait some time

@param none

@return none

/

//

byte halhumi(void)

{

byte i,j,k;

byte HI,LO,READ,HUMI;

byte status;

k = IEN0;

IEN0 = 0;

HI = 0;

LO = 0;

HUMI=0xff;//

status = 1;

P1SEL &= ~0X03;

P1DIR |= 0X03;

DATA = 0;

SCK = 0;

//初始化

halWait(20);

for(i=0;i<11;i++){

DATA = 1;

SCK = 1;

halWait(6);

SCK = 0;

halWait(2);

}

//准备传送

SCK = 1;

halWait(3);

DATA = 0;

halWait(3);

SCK = 0;

halWait(2);

SCK = 1;

halWait(3);

DATA = 1;

halWait(3);

//发送采集湿度命令

for(i=0;i<5;i++){

SCK = 0;

halWait(1);

DATA = 0;

halWait(1);

SCK = 1;

halWait(6);

}

SCK = 0;

halWait(1);

DATA = 1;

halWait(1);

SCK = 1;

halWait(6);

SCK = 0;

halWait(1);

DATA = 0;

halWait(1);

SCK = 1;

halWait(6);

SCK = 0;

halWait(1);

DATA = 1;

halWait(1);

SCK = 1;

halWait(6);

//将DATA改为输入

P1DIR &= ~0X02;

SCK = 0;

halWait(2);

/do{

SCK = 1;

halWait(4);

}

while(DATA!=0);/

for(i=0;i<10;i++)

{

if(DATA==0)break;

halWait(4);

}

if(DATA == 0)//表示收到ACK

{

SCK = 0;

halWait(2);

SCK = 1;

halWait(6);

SCK = 0;

halWait(2);

SCK = 1;

halWait(6);

SCK = 0;

halWait(88);//等待数据采集,最大精度要求的时间

//等待传感器提供的ACK

for(i=0;i<4;i++){

SCK = 1;

halWait(3);

j = DATA;

halWait(3);

if(j != 0)

{status=0;

break;}

else{

SCK = 0;

halWait(2);

}

}

if(status != 0)

{//接受前4个数据

SCK = 1;

halWait(1);

READ = DATA;

HI = HI|READ;

halWait(1);

SCK = 0;

halWait(2);

for(i=0;i<3;i++){

SCK = 1;

halWait(1);

READ = DATA;

HI = HI<<1;

HI = HI|READ;

halWait(1);

SCK = 0;

halWait(2);

}

//发送ACK给传感器

P1DIR |= 0X02;

DATA = 0;

SCK = 1;

halWait(2);

SCK = 0;

halWait(2);

P1DIR &= ~0X02;

//继续接受后八位的数据

SCK = 1;

halWait(1);

READ = DATA;

LO = LO|READ;

halWait(1);

SCK = 0;

halWait(2);

for(i=0;i<7;i++){

SCK = 1;

halWait(1);

READ = DATA;

LO = LO<<1;

LO = LO|READ;

halWait(1);

SCK = 0;

halWait(2);

}

HUMI = HI<<4|LO>>4;

}

}

//P1SEL = 0x01;

IEN0 = k;

return HUMI;

}

/

@fn haltemp

@brief collect the temperature

@param none

@return the temperature

/

//

byte haltemp(void)

{

byte i,j,k;

byte HI,LO,READ,TEMP;

byte status;

TEMP=0xFF;

k = IEN0;

IEN0 = 0;

HI = 0;

LO = 0;

status = 1;

P1SEL &= ~0X03;

P1DIR |= 0X03;

DATA = 0;

SCK = 0;

//初始化

halWait(20);

for(i=0;i<9;i++){

SCK = 1;

halWait(6);

SCK = 0;

halWait(2);

}

for(i=0;i<11;i++){

DATA = 1;

SCK = 1;

halWait(6);

SCK = 0;

halWait(2);

}

//准备传送

SCK = 1;

halWait(3);

DATA = 0;

halWait(3);

SCK = 0;

halWait(2);

SCK = 1;

halWait(3);

DATA = 1;

halWait(3);

//发送采集温度命令00000011

for(i=0;i<6;i++){

SCK = 0;

halWait(1);

DATA = 0;

halWait(1);

SCK = 1;

halWait(6);

}

for(i=0;i<2;i++){

SCK = 0;

halWait(1);

DATA = 1;

halWait(1);

SCK = 1;

halWait(6);

}

//将DATA改为输入

P1DIR &= ~0X02;

SCK = 0;

halWait(2);

/do{

SCK = 1;

halWait(4);

}

while(DATA!=0);/

for(i=0;i<10;i++)

{

if(DATA==0)break;

halWait(4);

}

if(DATA == 0)//表示收到ACK

{

SCK = 0;

halWait(2);

SCK = 1;

halWait(6);

SCK = 0;

halWait(2);

SCK = 1;

halWait(6);

SCK = 0;

halWait(250);//等待数据采集,最大精度要求的时间

//等待传感器提供的ACK

for(i=0;i<2;i++){

SCK = 1;

halWait(3);

j = DATA;

halWait(3);

if(j != 0)

{status=0;

break;}

else{

SCK = 0;

halWait(2);

}

}

if(status != 0)

{//接受前6个数据

SCK = 1;

halWait(1);

READ = DATA;

HI = HI|READ;

halWait(1);

SCK = 0;

halWait(2);

for(i=0;i<5;i++){

SCK = 1;

halWait(1);

READ = DATA;

HI = HI<<1;

HI = HI|READ;

halWait(1);

SCK = 0;

halWait(2);

}

//发送ACK给传感器

P1DIR |= 0X02;

DATA = 0;

SCK = 1;

halWait(2);

SCK = 0;

halWait(2);

P1DIR &= ~0X02;

//继续接受后八位的数据

SCK = 1;

halWait(1);

READ = DATA;

LO = LO|READ;

halWait(1);

SCK = 0;

halWait(2);

for(i=0;i<7;i++){

SCK = 1;

halWait(1);

READ = DATA;

LO = LO<<1;

LO = LO|READ;

halWait(1);

SCK = 0;

halWait(2);

}

TEMP = HI<<2|LO>>6;

}

}

IEN0 = k;

return TEMP;

}

#define huoerBit 0x20

//#define SmokeSensorBit 0x08

#define VibrationSensorBit 0x08

void HalSensorConfig ( )

{

halIntState_t intState;

HAL_ENTER_CRITICAL_SECTION(intState);

P2INP |= 0x40; / config the input mode to poll_down /

P1SEL &= ~( InfraredSensorBit ); / Set pin function to GPIO /

P1DIR &= ~( InfraredSensorBit ); / Set pin direction to Input /

PICTL &= ~( IENBIT ); / rising edge on input give interrupt /

IEN2 |= 0x10; /enabled interrupt/

// P1IEN |= InfraredSensorBit; /enabled interrupt/

P1IFG &= ~(InfraredSensorBit);

//HONGWAI SENSOR>

//YANWU SENSOR<<P1_3

P1SEL &= ~( SmokeSensorBit ); / Set pin function to GPIO /

P1DIR &= ~( SmokeSensorBit ); / Set pin direction to Input /

IEN2 |= 0x10; /enabled interrupt/

//P1IEN |= SmokeSensorBit; /enabled interrupt/

P1IFG &= ~(SmokeSensorBit);

//YANWU SENSOR>

P1SEL &= ~(0x80); / Set pin P1_7 function to GPIO /

P1DIR |= ( 0x80 ); / Set pin direction to Output /

P1_7=1;

HAL_EXIT_CRITICAL_SECTION(intState);

}

UINT16 halAdcSamplevoltage() {//added by zlz//sample voltage

BYTE volatile temp;

INT16 value;

//reading out any old conversion value

temp = ADCH;

temp = ADCL;

// ADCCFG |= 0x03;

ADCCON1 |= 0x3F;

ADCCON3 =0x30|0x0F; //reference voltage 125v 14 bits resolution // 1/3VDD input

while (!(ADCCON1 & 0x80));

//ADCCFG &= ~(0x03);

value = (((INT16)ADCH) << 8);

value |= (INT16)ADCL;

value>>=2; //the last 2bits is invalid

return (UINT16)value ;

}

UINT16 halAdcSampleillumination() {//added by zlz

BYTE volatile temp;

INT16 value;

//reading out any old conversion value

temp = ADCH;

temp = ADCL;

ADCCFG |= 0x01;

ADCCON1 |= 0x3F;

ADCCON3 =0xB0 |0x00; //reference voltage 33v 14 bits resolution //AIN0 input

while (!(ADCCON1 & 0x80));

ADCCFG &= ~(0x01);

value = (((INT16)ADCH) << 8);

value |= (INT16)ADCL;

value>>=2; //the last 2bits is invalid

return (UINT16)value ;

}

UINT8 halAdcSampletemperature() {//added by zlz

BYTE volatile temp;

INT8 value;

//reading out any old conversion value

temp = ADCH;

temp = ADCL;

ADCCFG |= 0x02;

ADCCON1 |= 0x3F;

ADCCON3 =0x80 |0x01; //reference voltage 33v 8 bits resolution //AIN1 input

while (!(ADCCON1 & 0x80));

ADCCFG &= ~(0x02);

value = ADCH;

return (INT8)value ;

}

维也纳酒店的烟雾报警器设定温度7℃到65℃之间。维也纳酒店的烟雾报警器设定温度一般是在57℃到65℃之间。这是因为当房间内出现烟雾时,温度会迅速升高,超过一定温度范围后,烟雾报警器会自动启动,发出警报声,提醒人们注意火灾的可能性,以便及时采取应对措施。

首先区分一下探测器的类型:

1)定温探测器 一般厂家按照规范的规定54摄氏度----85摄氏度不等,灵敏度可以调整

2)差温探测器 无定温报警功能,环境温度瞬间攀升后报警

3)感烟探测器 探测环境烟雾浓度报警

4)差定温探测器 兼有差温和定温性能,但出厂一般为差温类型

喷淋上用的喷淋头一般颜色不同,破裂温度不同

民用一般红色为68摄氏度,厨房一般为93摄氏度,当然还有更高温度的喷头可应用到不同环境!

 要:介绍了一种车载烟雾报警系统的设计方案,包含一个带触摸屏液晶的主机和多个分布式安装的探测器,通过RS485总线连接。方案采用半导体气体传感器实现,灵敏度高、成本低、寿命长,通过基准电压自动标定、自动校正和测量值温度补偿,解决了半导体气体传感器漂移和受温度影响大的问题,实现了烟雾的可靠检测,为汽车火灾早期预警提供了可靠保障,具有较强的实用性。

关键词:半导体气体传感器;RS485;自动校正;自动标定;温度补偿

近年来,汽车火灾事故时有发生,给国家和人民的生命财产造成了巨大的损失,教训是深刻的,目前汽车火灾事故已经成为媒体舆论的焦点,社会各界对此广泛关注。特别是城市公交车和长途大巴车由于采用空调系统使得人们处于一个相对封闭的环境,给火灾处理和人员逃离都带来了很多的不便,控制火灾的发生和先期的预警就显得尤为重要。因此,抓好火灾预防必须借助于高科技防火灾产品在其汽车领域上的运用,将其灾情早期发现并控制消灭在隐患萌芽中。

1 烟雾检测原理

对于火灾烟雾方面的监测,通常主要采用烟雾传感器与温度传感器,其中烟雾传感器主要有离子式、光电式和气敏式等几类。它们的工作原理就决定了其监测方式只有在火灾达到一定程度后才能进行报警工作,而且存在对部分特殊火焰的燃烧无法识别的现象,这种监测的方式是无法对于早期发生的火灾进行报警的,其监测也是不全面的,如果待火灾达到一定程度报警,势必无形中给财产与生命安全造成更大损失。

近年来,随着气体传感技术的发展,气体传感器和传统火灾探测器相结合的探测技术,已广泛应用于汽车火灾烟雾探测领域。在火灾过程中,几乎每种物质均要产生不充分燃烧的CO和烟雾,特别是阴燃阶段的火灾更是如此,由火灾孕育到剧烈燃烧CO和烟雾经历由无到有,由小到大,然后逐渐减小的规律性变化过程,而且CO和烟雾比空气密度小,更容易更早漂浮实现早期预警。因此检测CO和烟雾适合于火灾早期探测,这对于较早的时间捕捉到火灾发生信息非常重要。

半导体气体传感器是利用气体在半导体表面的氧化还原反应导致敏感元件组织发生变化而制成的,它的优点是成本低廉、制作简单、灵敏度高、响应速度快、寿命长、对湿度敏感度低;它的缺点是对气体选择性差、输出非线性、稳定性不理想,适用于单点或少量检测点报警,不适合于定量检测使用。对于汽车使用环境来说,是比较合适的一种气体传感器,但是在使用中要解决稳定性不够的问题。

2 车载烟雾报警器系统设计

整个车载烟雾报警系统分为两个部分:安装于驾驶员侧的主机和分布安装在车厢各处的探测器,主机和探测器通过RS485总线连接在一起。其安装分布如图1所示。

3 车载烟雾报警器主机设计

车载报警器主机用于轮询探测器状态并根据读取数据在液晶屏上显示个探测器的状态,如果探测器未连接,相应探测器状态显示灰色,如果状态正常显示绿色,如果超出报警值则根据超出程度显示**或红色。

车载报警器主机系统组成如图2所示。

4 车载报警器烟雾探测器设计

车载报警器探测器用于检测烟雾浓度,并根据烟雾浓度确定当前是否存在火灾隐患,根据烟雾浓度把当前状态判断为正常、轻度污染或者重度污染。其系统组成入图3所示。

图中,电源电路采用开关降压芯片XL2596把汽车电源12 V或24 V转换成5 V供探测器其他电路使用;风扇为5 V直流风扇,用于构成将车箱内气体吸入探测器内部进行检测,提供比自然扩散型结构更快的检测速度;半导体气体传感器经过比较郑州炜盛公司的MP503、MP801、MP901、日本费加罗公司的TGS2602、TGS2602在使用中的稳定性、稳定时间、信号灵敏度,最终选择了MP801,可以在开机2 min内达到稳定,且灵敏度较高、稳定性不错;温度传感器使用热敏电阻检测半导体气体传感器工作环境温度,然后单片机通过算法进行温度补偿;LED只是电路采用红绿双色LED,可以实现绿色、橙色和红色3种状态的显示;RS485转换电路实现和主机的总线连接。

5 基准电压值自动标定和自动校正

车载烟雾探测器使用MP801半导体传感器进行烟雾检测。其基本电路如图4所示。

图中,传感器MP801的1脚和4脚之间为加热体,额定工作电压5 V,用于保证2、3脚之间的检测体的正常工作。刚上电时,检测体的阻值很小,导致输出电压VR比较大,需要经过一段时间的预热以后,检测体的阻值才会稳定下来,此时VR输出一个稳定的值,这个值才可以作为基准电压来进行烟雾的判断。

在程序设计中,考虑到了上电预热稳定的过程,其自动标定基准电压的流程如图5所示。

当车厢内有烟雾时,传感器检测体阻值下降,VR输出电压上升,通过比较测量到的VR电压值和基准电压比较就可以判断得到当前车厢内烟雾的状态。但是,在实际使用中,半导体传感器存在着漂移的现象。在没有烟雾的状态下,传感器检测体的阻值也会发生缓慢变化,如果时间足够长,则这种漂移会足够大,从而导致判断的错误。所以在使用中必须对基准电压进行自动校正。基准电压自动校正算法如下:

1)每10 s计算VR输出平均电压,并和基准电压比较。如果差值小于限值,则进入步骤2;如果差值大于限值,则计时清零,返回步骤1。

2)和上一次测量平均值比较,如果差值小于限值,则进入步骤3;如果差值大于限值,则计时清零,返回步骤1。

3)计时值加1,如果计时值达到设定值,则保存新的基准电压,并清零计时值,返回步骤1。

6 测量值温度补偿

半导体气体传感器的性能受温度的影响比较大,所以在使用时需要根据温度对测量电压值进行补偿。传感器输出电压温度补偿曲线如图6所示。

7 结论

实际制作的样机,经过使用检验,能够满足实际使用的需要,灵敏度较高,稳定性满足要求,能可靠地进行烟雾检测,实现火灾的早期预警。

参考文献

[1] MP801气体传感器数据手册郑州炜盛电子科技有限公司

[2] MP901气体传感器数据手册郑州炜盛电子科技有限公司

[3] MP503气体传感器数据手册郑州炜盛电子科技有限公司

[4] TGS2603用于异味与空气污染物检测的气体传感器深圳市新世联科技有限公司

[5] DC80480F070_1000_0T 数据手册 V10广州大彩光电科技有限公司

本文来源于科技期刊《电子产品世界》2020年第01期第81页,欢迎您写论文时引用,并注明出处。

烟感器在以下条件下会报警:

1、产生可燃性气体:可燃物在燃烧的初始阶段,首先释放出来的是可燃性气体,如钴等;

2、产生烟雾:烟雾是人们肉眼能见到的微小悬浮颗粒。其粒子直径大于10nm。烟雾有很大的流动性,可潜入烟雾传感器中,是较有效的检测火灾的手段;

3、产生火焰:火焰是物质产生灼烧气体而发出的光,是一种辐射能量;

4、产生热量:使环境温度升高,物质剧烈燃烧时会释放出大量的热量,这时可以用各种温度传感器来测量。

《中华人民共和国消防法》

第二十八条

任何单位、个人不得损坏、挪用或者擅自拆除、停用消防设施、器材,不得埋压、圈占、遮挡消火栓或者占用防火间距,不得占用、堵塞、封闭疏散通道、安全出口、消防车通道。人员密集场所的门窗不得设置影响逃生和灭火救援的障碍物。

以上就是关于用zigbee做无线网络森林火灾预防 有会的吗顺便求在zigbee为节点协调器,烟雾温度湿度传感器的驱动程序 谢全部的内容,包括:用zigbee做无线网络森林火灾预防 有会的吗顺便求在zigbee为节点协调器,烟雾温度湿度传感器的驱动程序 谢、维也纳酒店的烟雾报警器设定温度、火灾中差定温烟感多少度报警还有喷淋多少度破裂喷水等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9612588.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存