实验6传感器之火焰篇.doc
传感器实验六火焰传感器6.1 实验简介火焰是由各种燃烧生成物、中间物、高温气体、碳氢物质以及无机物质为主体的高温固体微粒构成的。火焰的热辐射具有离散光谱的气体辐射和连续光谱的固体辐射。不同燃烧物的火焰辐射强度、波长分布有所差异,但总体来说,其对应火焰温度的 1 2 m 近红外波长域具有最大的辐射强度。例如汽油燃烧时的火焰辐射强度的波长。火焰传感器是机器人专门用来搜寻火源的传感器,当然火焰传感器也可以用来检测光线的亮度,只是本传感器对火焰特别灵敏。火焰传感器利用红外线对对火焰非常敏感的特点,使用特制的红外线承受管来检测火焰,然后把火焰的亮度转化为上下变化的电平信号,输入到中央处理器中,中央处理器根据信号的变化做出相应的程序处理。火焰传感器是探测在物质燃烧时,产生烟雾和放出热量的同时,也产生可见的或大气中没有的不可见的光辐射。 火焰传感器又称感光式火灾传感器,它是用于响应火灾的光特性,即探测火焰燃烧的光照强度和火焰的闪烁频率的一种火灾传感器。 6.2 实验目的1、 通过该实验工程,学生能够了解火焰传感器的硬件电路和工作原理;2、 通过该实验工程,学生能够学会编写火焰传感器的程序。6.3 实验内容1、 编写一个读取火焰传感器输出电平信号的程序;2、 将火焰检测状态做简单的处理显示,正常无火焰状态为0,检测到火焰状态为1;3、 用按键KEY1控制ZIGBEEN是否发送数据。6.4 实验设备6.4.1 硬件局部1、 ZIGBEE调试底板一个;电源开关电源传感器C端口指示灯 2J-LINK接口ZigBee_DEBUG复位键节点按键拨码开关ZigBe按键红外发射指示灯1ZigBee复位键可调电阻传感器A端口传感器B端口图6-1 ZIGBEE调试底板2、 20PIN转接线一条和带USB的J-Link仿真器一个;20PIN转接线,另一端接转接板方口USB线,另一端连接电脑上电指示灯图6-2 J-Link仿真器10PIN转接线接口3、 转接板一个;20PIN转接线接口串口接口图 6-3 转接板4、 912V电源适配器2个;图6-4 电源适配器5、 带普通USB线的ZIGBEE仿真器一个; 10PIN转接线普通USB线电源上和状态指示灯图6-5 ZIGBEE仿真器6、 智能网关一台;ZigBee模块组合接口USB下载数据线显示屏SD卡电源及开关开关按钮图6-6 智能网关7、 ZIGBEE模块两个;图 5-7 ZIGBEE 模块8、 火焰传感器一个;灵敏度调节旋钮,顺时针增大火焰感应探头输出信号指示灯,低有效TTL信号输出+5V输入模拟信号输出GND输入图6-8 火焰传感器9、 10PIN转接线和传感器连接线各一条。图6-9 转接线与传感器连接线6.4.2 软件局部1、 Keil uVision4集成开发环境;2、 JLINK仿真器驱动;6.5 实验知识6.5.1 火焰传感器火焰传感器:由各种燃烧生成物、中间物、高温气体、碳氢物质以及无机物质为主体的高温固体微粒构成的。火焰的热辐射具有离散光谱的气体辐射和连续光谱的固体辐射。不同燃烧物的火焰辐射强度、波长分布有所差异,但总体来说,其对应火焰温度的近红外波长域及紫外光域具有很大的辐射强度,根据这种特性可制成火焰传感器。根据火焰的光特性,目前使用的火焰传感器有三种:一种是对火焰中波长较短的紫外光辐射敏感的紫外传感器;另一种是对火焰中波长较长的红外光辐射敏感的红外传感器;第三种是同时探测火焰中波长较短的紫外线和波长较长的红外线的紫外/红外混合传感器。 具体根据探测波段可分为:单紫外、单红外、双红外、三重红外、红外紫外、附加视频等火焰传感器; 根据防爆类型可分为:隔爆型、本安型 。6.5.2 模块介绍,如图6-8所示1、 尺寸:35mm X宽11mm X高14mm2、 主要芯片:LM393、火焰检测探头3、 工作电压围:DC 3-12V 默认5V4、 工作电流:<1.6mA5V5、 特点:a、 具有信号输出指示灯;b、 单路信号输出,输出信号可以直接接单片机IO口;c、 OUT口输出上下电平信号,高电平为3.8V,低电平为0V;d、 灵敏度可调精调,调节火焰检测围;e、 带固定安装孔,方便安装调试;f、 电路板输出OUT标识为开关量,可直接接单片机IO口,无火焰时输出高电平指示灯灭,有火焰时输出低电平,指示灯亮,响应时间<2s;g、 用于火焰检测,可检测760纳米1100纳米围的热源,火焰探测角度为45°围;6.5.3 火焰传感器工作原理电路中用到,火焰传感器电路、信号放大电路、单片机系统、状态显示系统构成。其根本工作原理:经过信号放大电路,火焰传感器电路将感受到红外光程度以上下电平形式输出至单片机系统, 由状态显示系统进展显示。火焰传感器工作框图如图6-10:火焰传感器电路信号放大电路单片机系统状态显示系统图6-10 电路工作框图6.5.4 火焰传感器的硬件电路图电路中,火焰传感器电路如图6-11:图6-11 火焰传感器硬件图6.6 实验步骤6.6 实验步骤1、 烧好ZIGBEE和智能网关程序。如果没有动传感器ZIGBEE和网关的程序,那么此步骤可以跳过;如果动了,详细下载过程可参考"传感器实验之环境搭建.doc文档,这里恕不赘述。2、 将火焰传感器接到传感器A端口。可以在图6-1所示中找到传感器A端口的位置,对应原理图上的J4,如图6-11所示,切勿把传感器位置装错了3、 连接好外围硬件电路,如图6-12所示。这个连接过程当中很多的卡槽,千万别把卡槽卡装反了,不然很容易烧坏J-Link。J-Link,左边直接用USB线连接电脑20PIN连接线10PIN连接线传感器ZIGBEEN调试底板和ZIGBEEN模块转接板,这样类似的卡槽千万别装反了,不然可能烧坏J-Link电源图 6-12 外围硬件连接示意图4、 将仿真器USB连接入PC 机,插好电源,并翻开开发实验箱上的电源开关和启动按钮,跳到网关显示界面,然后点击功能键进入,如6-13图所示。 点击这进入功能界面图 6-13 网关显示界面5、 找到传感器实验图标如图6-14所示,点击进入传感器实验显示界面如6-15图所示。图6-14 传感器实验显示程序图6-15 网关传感器显示界面6、 新建一个文件夹命名为"火焰传感器,并在该文件夹下创立一个"RVMDK"文件夹(存放工程用);7、 然后在"RVMDK文件夹下新建一个"OBJ文件夹用来存放编译输出信息; 8、 在"传感器实验/实验例程/实验6 传感器之火焰篇/code文件夹下找到"rsc文件夹,把它复制到到"火焰传感器文件夹下,即与"RVMDK文件夹并列;9、 启动Keil Vision4;10、 单击菜单栏的"Project,选择"New uVision Project,新建一个工程,命名为"FALME;11、 保它存在刚建立好的"火焰传感器里面的"RVMDK"文件夹下;12、 右键"Target 1,选择"Manage ponents选项;13、 把"Target 1修改为"FALME,把Source Group1改命为"Starup并创立六个Groups,分别是"user"usart"lib"led"sensor"key。如图6-16所示;14、 然后给每个Group分别在添加好对应的.c文件,.c文件在刚刚复制过来的"rsc文件夹里面,添加完成图6-16所示;图6-16 文件示意图15、 单击工具栏的"Rebuid图标,直到编译没有警告和错误,如果有就根据警告和错位,进展修改程序;16、 点击工具栏的"Target Options,选择"Output,把输出文件位置设置在"OBJ下,并且设置有hex输出;17、 点击工具栏的"Target Options配置好J-Link;18、 翻开ZIGBEE地板上的电源开关,点击"LOAD进展程序烧写验证;以上建工程详细过程可以参考实验二19、 验证:用打火机打燃放在火焰传感器探测头前,观察显示屏上状态的变化;20、 验证完毕后,退出J-Link仿真界面,关闭Keil Vision4软件;关闭硬件电源,捡收好硬件设备,并整理桌面;21、 实验完毕。6.7 实验验证6.7.1 程序是否能运行和编译成功如图6-17所示为编译生成hex输出文件成功图:图 6-17编译通过截图6.7.2 用打火机打燃置于火焰传感器探测头前,观察显示屏上显示的状态是否发生变化1、 图6-18所示为火焰传感器未感应到火焰时网关上所显示:图6-18未感应火焰时的显示2、 图6-19所示为火焰传感器感应到火焰时网关上所显示:图 6-19 感应到火焰时的显示6.8 实验局部参考程序解析完整程序见源程序文件6.8.1 采集数据函数协议介绍:整个数据位其实一共是10个字节,除去2个字节的头和2个字节的校验,所以一共要采集的是数据其实有6个字节。(可以参照"传感器通信协议.doc文档)sensor_get_data(senser_type,&sensordata2) ;是采集函数,它首先保存了两个字节作头。然后调用u8 sensor_get_data(u8 type,u8* data1)函数。u8 sensor_get_data(u8 type,u8* data1) u8* data = &data11; u8 no_sensor = 1; /有无传感器判断标志 *data1 = type; /传感器类型 /* 传感器采集数据 */ switch(type) case SENSOR_FLAME: /判断火焰传感器GetSensorData(data); /采集数据break; default: no_sensor = 0;break; return no_sensor; 分析:从这个函数不难看出,这里有1个字节的传感器型号。所以传感器还要获取只有五个字节的数据,其中包括一个字节的符号。void GetSensorData(u8* data) data0 = 0; data1 = 0;data2 = !SENSOR2_IN(); /读取传感器输出值 data3 = 0; data4 = 0; 分析:这便是传感器采集的五个字节的数据。从图6-20不难看出,当火焰靠近传感器的时候,STM32采集进来的是低电平信号,此时LED被点亮。这里特别需要注意的是,这里我们为了保持网关平台采集信号的一致性,也就是高电平触发报警,所以这里的信号必须进展取反处理;所以火焰传感器使用data2 = !SENSOR2_IN(),进展数据采集,其中SENSOR2_IN();的宏定义为(Sensor_IO_PORT->IDR&Sensor_IO_PIN2)>>Sensor_IO_NUM2);其本质也就是采集PB7口的电平变化情况来判断火焰检测的状态。TTL输出图6-20火焰传感器的原理图6.8.2 串口发送数据函数void USART2_Senddata(u8* str)u8 i,checksun_xor=0,checksun_add=0;u8 ct = 10;str0 = 0xff;/数据接头1str1 = 0x55;/数据接头2/*数据校验*/for(i=0;i<ct-2;i+)checksun_xor =stri;checksun_add +=stri; str8 = checksun_xor;str9 = checksun_add;/* 数据发送 */ while( ct- != 0) USART_SendData(USART2, *str+); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) = RESET); 分析:这里发送的数据一共是10个字节,前面两个字节是FF、55,这两个字节是ZIGBEE与网关数据传送的接头,第三个字节是传感器的类型,然后就是传感器采集函数的那五个字节的数据,最后两个字节就是校验。思考题:修改程序,当检测到火焰时使用D5亮来指示火焰的发生。