1、A/D转换模块:ADC0809;显示模块:LCD1602;无线模块:NRF2401。方案一的系统设计结构图如图2.2所示。 图2.2 方案一设计结构图2.2.2方案一的设计方法设计系统主要分为两大部分。矿井下,温湿度传感器和甲烷浓度传感器进行数据采集,之后将采集到的数据通过模数转换电路并送入单片机(监测系统)中进行处理,在矿井下显示实时监测的结果,并将处理后的数据通过无线发射装置发送至地面的控制中心。地面控制中心通过无线接收装置收到处理后的实时监测数据。通过控制系统实时显示矿井下各项数据指标之外,还将数据与设定的安全值进行比较,超出或者低于安全值范围,报警模块发出相应的声光报警。信息采集模块主
2、要采集温度、湿度以及甲烷浓度三个指标,分别通过DHT11温湿度传感器、MQ-4甲烷浓度传感器实现。温湿度传感器DHT11采集到矿井下空气温湿度,向单片机输出一组数字信号,经单片机处理。MQ-4通过对甲烷等气体的浓度感应输出模拟信号,经模数转换芯片转换成8位数字信号输入单片机。单片机将采集到的信号还原摄氏温度、相对湿度以及甲烷体积浓度,通过LCD1602显示屏进行显示,同时通过无线射频芯片NRF2401发送和接收数据。2.2.3方案一的优缺点方案一的设计思路具有廉价、易于实现的优点。传感器DHT11、MQ-4,显示屏LCD1602以及无线模NRF2401都是市面上常见而且价格低廉的器件。缺点在于
3、传感器精度不高,显示屏显示空间有限,无线传输距离较短。2.3方案二的论述2.3.1方案二的设计结构图系统由数据采集模块、模拟/数字转换模块、显示模块、报警模块、无线模块以及无线中继模块组成。温湿度传感器DHT21(又名AMS2301)、甲烷浓度传感器MQ-4;OLED;NRF905;无线中继模块:NRF905。方案二的设计结构图如图2.3所示。图2.3方案二设计结构图2.3.2方案二的设计方法设计系统主要分为三大部分。矿井下,与方案一类似。单片机(监测系统)中进行处理,在矿井下显示实时监测的结果,并将处理后的数据通过无线发射装置发送至中继系统。根据矿井下环境复杂程度,设置N个中继器用来接继无线
4、信号,直至发送到地面控制中心。各器件的工作方式同方案一。温湿度传感器改采用DHT11的升级芯片DHT21;显示模块使用OLED屏幕;无线模块改使用NRF905芯片。2.3.3方案二的优缺点方案二针对方案一的缺点进行了改进。方案二的设计思路对于温湿度的采集精度更高,在显示模块显示空间更大,并且无线传输距离大大增长。增加的中继系统更加符合复杂矿井环境下的无线传输要求。方案二相比方案一,制造成本高。2.4方案的选择将方案一与方案二进行如下对比。方案二比方案一更加精确和适用。在无线模块的选择上。NRF2401更适应于室内短距离传输。905系列具有NRF905B、NRF905SE、NRF905RD、RF
5、C-30系列等模块,可以达到最低100米,最远3000米的直线可视传输距离。因此选用方案二来实现本系统的设计。这里选用NRF905芯片进行无线传输,根据不同的复杂矿井环境,可以选择不同的905模块。该系统目前以NRF905SE模块进行设计,可以达到300米的直线可视距离。下表2.1为两种方案的比较。表2.1两种方案的详细比较对比项目方案一方案二温度DHT11精确度1;有效量程050DHT21精确度0.1;有效量程 -4080湿度DHT11精确度1RH%DHT21精确度0.1RH%甲烷浓度MQ-4经ADC0809转换成8位数字信号,精确度40ppm;有效量程010000ppm显示屏LCD1602
6、显示2行16列;需要11个I/O口OLED显示4行;需要4个I/O口无线传输NRF2401工作在2.4Ghz,1Mkbps,短距传输NRF905工作在433Mhz,50kbps,传输距离长中继器无延长传输距离器件成本以上传感器各取一件和20元左右以上传感器各取一件和65元左右3.系统软件设计程序分为三主体:监测系统、中继系统、控制系统。监测系统由OLED显示程序,DHT21温湿度读取程序,A/D转换程序,NRF905无线发送程序以及主程序组成。中继系统由OLED显示程序,NRF905接收和发送程序以及主程序组成。控制系统由OLED显示程序,NRF905接收程序,报警程序,键盘控制程序以及主程序
7、组成。3.1系统流程分析单片机通过主程序的逻辑顺序调用各个其他程序。首先,单片机进行初始化。各系统中OLED模块、A/D转换模块,NRF905模块完成初始化。之后,DHT21采集温湿度信号,MQ-4输出模拟信号经由ADC0809转换输入单片机,OLED将单片机处理后的温湿度和甲烷浓度进行显示。由无线模块发送到中继系统再发送到控制系统,由控制系统单片机进行处理,若超出限额则启动声光报警,若未超出限额则返回等待无线模块接收新的数据,重新进行比较。监控系统主程序解析:void main() LCD_Init(); /OLED初始化 init(); /ADC0809初始化,其中包括开中断和定时器 LC
8、D_P8x16Str(10,0,Being warm up); /显示“正在预热” delayqidong(600); /MQ-4需要30秒预热,其中包括预热读秒的显示程序 LCD_CLS(); /OLED清屏CSH905(); /这里是对905进行了配置Peizhi905(); /单片机对905的配置寄存器进行配置SetTxMode(); LCD_P8x16Str(98,0,N /在屏幕上显示尚未发送标志while(1) /无限循环RH(); /从DHT21读取温湿度数据并处理 AD(); /从ADC0809读取模数转换后的甲烷浓度 TxPacket(); /通过905发送数据TxBuf0
9、= DHT2shishu; /发送五组数组:分别为温度整数部分TxBuf1 = DHT2xiaoshu; /温度小数部分TxBuf2 = DHT1shishu; /湿度整数部分TxBuf3 = DHT1xiaoshu; /湿度小数部分TxBuf4 = AD_DATA0; /未经过处理的甲烷数字信号Delay905(500); /延时函数等待发送完毕S /在屏幕上显示发送成功标志 display(); /OLED显示程序中继系统主程序解析:TxBuf0 = RxBuf0; /将接收到的五组数据发送出去TxBuf1 = RxBuf1;TxBuf2 = RxBuf2;TxBuf3 = RxBuf3;
10、TxBuf4 = RxBuf4;SetRxMode(); / if (DR) /如果DR管脚收到高电平,说明发射完毕 RxPacket(); / 905开始接收数据beep_LED(); /声光报警程序3.2温湿度采集及处理函数温湿度采集模块使用传感器DHT21。这是一款通过对空气中温湿度采样并输出数字信号的传感器。DHT21模块具有三个管脚,分别接5V直流电源,接地以及数据输出口。数据输出口采用单总线数据格式与单片机进行通讯。通过输出四十位的高低电平信号来传输温湿度数据,每一位响应时间在80-100微秒左右。数据格式:40bit数据=16bit湿度数据+16bit温度数据+8bit校验码温湿
11、度数据分高8位数据和低8位数据组成。校验码是前32位数据之和。单片机将DHT21总线拉低500us并拉高后,DHT21会立即响应。下图为单片机向DHT21发送开始信号,DHT21响应的工作过程。 图3.2 DHT21响应单片机开始信号的工作过程对应程序解析:void RH(void) /定义读取温湿度函数DHT=0; /单片机拉低,对应上图“主机拉低500us”Delay905(5); /保持拉低状态,这里采用模糊延时,不一定需要精准DHT=1; /拉高主线yanshijingque_10us(); /以下为保持拉高状态。这里需要精确延时if(!DHT) /判断DHT21是否响应,对应上图“D
12、HT21响应信号80us”U8FLAG=2;while(!DHT)&U8FLAG+); /等待响应 while(DHT)& /等待响应COM(); /运行数据接收函数 Shidu_gao=U8comdata; /读出湿度高8位Shidu_di =U8comdata; /读出湿度低8位wendu_gao =U8comdata; /读出温度高8位wendu_di p=U8comdata; /读出温度低8位Xiaoyanma=U8comdata; /读出8为校验码Xiaoyanma=( Shidu_gao + Shidu_di+ wendu_gao + wendu_di);/校验if(U8temp=
13、U8checkdata_temp) /核对校验码 if(1) DHT1shishu= Wendu_gao; /导出湿度,方便后面显示模块调用 DHT1xiaoshu= Wendu_di;U8T_data_H = Wendu_gao;Wendu_di = Wendu_di; DHTData2 = wendu_gao; DHTData2=8; DHTData2 |= Wendu_di; /获得完整的温度 if(DHTData2&0x8000) /判断温度是否为负值 flagtemp=1; DHTData2&=0x7FFF; DHT2shishu=DHTData2/10; /导出温度,方便后面显示模
14、块调用DHT2xiaoshu=DHTData2%10;U8checkdata=U8checkdata_temp;DHT21开始传输数据后,梅1bit数据都是由一个低电平间隙和一个高电平组成。共40bit数据,当最后1bit传输完毕时,单总线将被再次拉低50us,随后释放被拉高。void COM(void) /定义数据接收函数 unsigned char i; for(i=0;i8;i+) /循环八次,接收一组数据 U8FLAG=2; while(! /等待低电平间隙,对应上图“1bit开始” Delay_10us(); /等到30us,这里需要精确延时 U8temp=0; /等待30us后我们
15、预设值为0 if(DHT)U8temp=1; /如果依然为高电平,可以确定数据值为1 while(DHT)& /等待拉高结束 if(U8FLAG=1)break; U8comdata=1; /保存读到的数值,并移位 U8comdata|=U8temp; 3.3 MQ-4甲烷浓度传感器以及A/D转换程序MQ-4气体传感器适用与对甲烷、氢气、一氧化碳、烟雾等可燃气体的检测,对不同气体有不同的灵敏特性。MQ-4传感器通过对不同浓度气体的感应输出不同的电压值。经过模数转换输入单片机。这里采用ADC0809模数转换芯片。芯片能将05V的模拟信号转换为8位的数字信号。D0D7管脚连接单片机I/O口输出数字
16、信号。START启动转换,高电平有效。EOC可以查看芯片转换状态,用于单片机查询转换状态。OE管脚向单片机发出读取数据的请求,高电平有效。CLK管脚输入500Khz脉冲的时钟信号,每一次脉冲完成一个转换。ADDA管脚用来选择通道。相关程序解析:void csh() EA = 1; /开总中断TMOD = 0x02; /读TMOD进行设定 TH0=216; /利用T0中断产生CLK信号 (256-T)TL0=216;TR0=1; /启动定时器T0ET0=1;ST=0; /先将ADC0809的ST和OE端口拉低OE=0;void t0(void) interrupt 1 using 0 /利用定时
17、器T0产生中断CLK=CLK; /生成脉冲信号void AD() /定义AD转换程序ADDCS=0; /选择通道IN0 delay2(10);ST=1; /启动AD转换while(EOC=0); /等模数转换过程结束OE=1; /OE管脚向单片机发送读取数据请求CH4=P3; /保存读取到的值,范围(0256)单片机读取到转换后的数字信号之后,根据MQ-4气体传感器对甲烷气体的灵敏特性,还原甲烷气体浓度。下图为灵敏度特性曲线。由图可见,甲烷气体在纯净空气中的浓度在1000ppm左右。根据特性曲线,我们粗略的认为单片机读取到的数字信号乘以系数40就是空气中的实际甲烷浓度。LCD_P8x16Str
18、(0,6,CH4: /显示“CH4”Dis_Num(60,6,AD_DATA0*40,4) ; /显示数字,这里对数字信号乘系数变成实际浓度LCD_P8x16Str(92,6,ppm /显示单位字符串“ppm”3.4 NRF905无线发送/中继/接收程序NRF905芯片具有较强的抗干扰能力,适合工业控制场合。工作在频段433Mhz。NRF905通过TRX_CE和TX_EN管脚,配置芯片掉电模式(低功耗)、Standby模式、RX(接收)模式和TX(发射)模式。通过5个Spi接口来调整状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收数据寄存器。Void CSH905() /CSN
19、=1;SCK=0;DR=1; / DR拉高,这里用于查看接收或发射数据完成AM=1; / AM拉高,用于地址匹配PWR_UP=1; / 芯片上电TRX_CE=0; / 设置为standby模式TX_EN=0;void peizhi905(void) /定义NRF905配置程序 uchar i; CSN=0; / Spi使能,向Spi写命令 SpiWrite(WC); /写放配置命令 for (i=0;RxTxConf.n;i+) /写放配置字 SpiWrite(RxTxConf.bufi); CSN=1; / 停止Spivoid SpiWrite(uchar byte) /定义Spi写操作程序
20、 DATA_BUF=byte; /将需要发送的数据写入缓存 i+) if (flag) / 将DATA_BUF.7 放在数据线上 MOSI=1; else MOSI=0; /主机读操作 SCK=1; / 拉高时钟线 DATA_BUF=DATA_BUF1; SCK=0; / 拉低时钟线 uchar SpiRead(void) /定义Spi读操作程序i+) / if (MISO) flag1=1; flag1=0; / 拉低时钟线 return DATA_BUF; / DATA_BUF 为接收到的完整数据void TxPacket(void) /定义发送程序 / Spi使能,向Spi写命令 SpiWrite(WTP); /写放配置命令32;i+) SpiWrite(TxBufi); / 写入 32 位发送数据 Delay905(1); SpiWrite(WTA); / 写数据至地址寄存器4;i+) / 写入 4 字节地址 SpiWrite(RxTxConf.bufi+5); / 关闭S
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1