基于单片机的矿井环境监测系统设计毕业设计Word格式.docx

上传人:b****5 文档编号:19225825 上传时间:2023-01-04 格式:DOCX 页数:79 大小:5.56MB
下载 相关 举报
基于单片机的矿井环境监测系统设计毕业设计Word格式.docx_第1页
第1页 / 共79页
基于单片机的矿井环境监测系统设计毕业设计Word格式.docx_第2页
第2页 / 共79页
基于单片机的矿井环境监测系统设计毕业设计Word格式.docx_第3页
第3页 / 共79页
基于单片机的矿井环境监测系统设计毕业设计Word格式.docx_第4页
第4页 / 共79页
基于单片机的矿井环境监测系统设计毕业设计Word格式.docx_第5页
第5页 / 共79页
点击查看更多>>
下载资源
资源描述

基于单片机的矿井环境监测系统设计毕业设计Word格式.docx

《基于单片机的矿井环境监测系统设计毕业设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的矿井环境监测系统设计毕业设计Word格式.docx(79页珍藏版)》请在冰豆网上搜索。

基于单片机的矿井环境监测系统设计毕业设计Word格式.docx

A/D转换模块:

ADC0809;

显示模块:

LCD1602;

无线模块:

NRF2401。

方案一的系统设计结构图如图2.2所示。

图2.2方案一设计结构图

2.2.2方案一的设计方法

设计系统主要分为两大部分。

矿井下,温湿度传感器和甲烷浓度传感器进行数据采集,之后将采集到的数据通过模数转换电路并送入单片机(监测系统)中进行处理,在矿井下显示实时监测的结果,并将处理后的数据通过无线发射装置发送至地面的控制中心。

地面控制中心通过无线接收装置收到处理后的实时监测数据。

通过控制系统实时显示矿井下各项数据指标之外,还将数据与设定的安全值进行比较,超出或者低于安全值范围,报警模块发出相应的声光报警。

信息采集模块主要采集温度、湿度以及甲烷浓度三个指标,分别通过DHT11温湿度传感器、MQ-4甲烷浓度传感器实现。

温湿度传感器DHT11采集到矿井下空气温湿度,向单片机输出一组数字信号,经单片机处理。

MQ-4通过对甲烷等气体的浓度感应输出模拟信号,经模数转换芯片转换成8位数字信号输入单片机。

单片机将采集到的信号还原摄氏温度、相对湿度以及甲烷体积浓度,通过LCD1602显示屏进行显示,同时通过无线射频芯片NRF2401发送和接收数据。

2.2.3方案一的优缺点

方案一的设计思路具有廉价、易于实现的优点。

传感器DHT11、MQ-4,显示屏LCD1602以及无线模NRF2401都是市面上常见而且价格低廉的器件。

缺点在于传感器精度不高,显示屏显示空间有限,无线传输距离较短。

2.3方案二的论述

2.3.1方案二的设计结构图

系统由数据采集模块、模拟/数字转换模块、显示模块、报警模块、无线模块以及无线中继模块组成。

温湿度传感器DHT21(又名AMS2301)、甲烷浓度传感器MQ-4;

OLED;

NRF905;

无线中继模块:

NRF905。

方案二的设计结构图如图2.3所示。

图2.3方案二设计结构图

2.3.2方案二的设计方法

设计系统主要分为三大部分。

矿井下,与方案一类似。

单片机(监测系统)中进行处理,在矿井下显示实时监测的结果,并将处理后的数据通过无线发射装置发送至中继系统。

根据矿井下环境复杂程度,设置N个中继器用来接继无线信号,直至发送到地面控制中心。

各器件的工作方式同方案一。

温湿度传感器改采用DHT11的升级芯片DHT21;

显示模块使用OLED屏幕;

无线模块改使用NRF905芯片。

2.3.3方案二的优缺点

方案二针对方案一的缺点进行了改进。

方案二的设计思路对于温湿度的采集精度更高,在显示模块显示空间更大,并且无线传输距离大大增长。

增加的中继系统更加符合复杂矿井环境下的无线传输要求。

方案二相比方案一,制造成本高。

2.4方案的选择

将方案一与方案二进行如下对比。

方案二比方案一更加精确和适用。

在无线模块的选择上。

NRF2401更适应于室内短距离传输。

905系列具有NRF905B、NRF905SE、NRF905RD、RFC-30系列等模块,可以达到最低100米,最远3000米的直线可视传输距离。

因此选用方案二来实现本系统的设计。

这里选用NRF905芯片进行无线传输,根据不同的复杂矿井环境,可以选择不同的905模块。

该系统目前以NRF905SE模块进行设计,可以达到300米的直线可视距离。

下表2.1为两种方案的比较。

表2.1两种方案的详细比较

对比项目

方案一

方案二

温度

DHT11精确度1℃;

有效量程0~50℃

DHT21精确度0.1℃;

有效量程-40~80℃

湿度

DHT11精确度1RH%

DHT21精确度0.1RH%

甲烷浓度

MQ-4经ADC0809转换成8位数字信号,精确度40ppm;

有效量程0~10000ppm

显示屏

LCD1602显示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接收程序,报警程序,键盘控制程序以及主程序组成。

3.1系统流程分析

单片机通过主程序的逻辑顺序调用各个其他程序。

首先,单片机进行初始化。

各系统中OLED模块、A/D转换模块,NRF905模块完成初始化。

之后,DHT21采集温湿度信号,MQ-4输出模拟信号经由ADC0809转换输入单片机,OLED将单片机处理后的温湿度和甲烷浓度进行显示。

由无线模块发送到中继系统再发送到控制系统,由控制系统单片机进行处理,若超出限额则启动声光报警,若未超出限额则返回等待无线模块接收新的数据,重新进行比较。

监控系统主程序解析:

voidmain()

{

LCD_Init();

//OLED初始化

init();

//ADC0809初始化,其中包括开中断和定时器

LCD_P8x16Str(10,0,"

Beingwarmup"

);

//显示“正在预热”

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发送数据

TxBuf[0]=DHT2shishu;

//发送五组数组:

分别为温度整数部分

TxBuf[1]=DHT2xiaoshu;

//温度小数部分

TxBuf[2]=DHT1shishu;

//湿度整数部分

TxBuf[3]=DHT1xiaoshu;

//湿度小数部分

TxBuf[4]=AD_DATA[0];

//未经过处理的甲烷数字信号

Delay905(500);

//延时函数等待发送完毕

S"

//在屏幕上显示发送成功标志

display();

//OLED显示程序

}

中继系统主程序解析:

TxBuf[0]=RxBuf[0];

//将接收到的五组数据发送出去

TxBuf[1]=RxBuf[1];

TxBuf[2]=RxBuf[2];

TxBuf[3]=RxBuf[3];

TxBuf[4]=RxBuf[4];

SetRxMode();

/

if(DR)//如果DR管脚收到高电平,说明发射完毕

RxPacket();

//905开始接收数据

beep_LED();

//声光报警程序

3.2温湿度采集及处理函数

温湿度采集模块使用传感器DHT21。

这是一款通过对空气中温湿度采样并输出数字信号的传感器。

DHT21模块具有三个管脚,分别接5V直流电源,接地以及数据输出口。

数据输出口采用单总线数据格式与单片机进行通讯。

通过输出四十位的高低电平信号来传输温湿度数据,每一位响应时间在80-100微秒左右。

数据格式:

40bit数据=16bit湿度数据+16bit温度数据+8bit校验码

温湿度数据分高8位数据和低8位数据组成。

校验码是前32位数据之和。

单片机将DHT21总线拉低500us并拉高后,DHT21会立即响应。

下图为单片机向DHT21发送开始信号,DHT21响应的工作过程。

图3.2DHT21响应单片机开始信号的工作过程

对应程序解析:

voidRH(void)//定义读取温湿度函数

{

DHT=0;

//单片机拉低,对应上图“主机拉低500us”

Delay905(5);

//保持拉低状态,这里采用模糊延时,不一定需要精准

DHT=1;

//拉高主线

yanshijingque_10us();

//以下为保持拉高状态。

这里需要精确延时

if(!

DHT)//判断DHT21是否响应,对应上图“DHT21响应信号80us”

U8FLAG=2;

while((!

DHT)&

&

U8FLAG++);

//等待响应

while((DHT)&

//等待响应

COM();

//运行数据接收函数

Shidu_gao=U8comdata;

//读出湿度高8位

Shidu_di=U8comdata;

//读出湿度低8位

wendu_gao=U8comdata;

//读出温度高8位

wendu_dip=U8comdata;

//读出温度低8位

Xiaoyanma=U8comdata;

//读出8为校验码

Xiaoyanma=(Shidu_gao+Shidu_di+wendu_gao+wendu_di);

//校验

if(U8temp==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;

//导出温度,方便后面显示模块调用

DHT2xiaoshu=DHTData2%10;

U8checkdata=U8checkdata_temp;

DHT21开始传输数据后,梅1bit数据都是由一个低电平间隙和一个高电平组成。

共40bit数据,当最后1bit传输完毕时,单总线将被再次拉低50us,随后释放被拉高。

voidCOM(void)//定义数据接收函数

unsignedchari;

for(i=0;

i<

8;

i++)//循环八次,接收一组数据

U8FLAG=2;

while((!

//等待低电平间隙,对应上图“1bit开始”

Delay_10us();

//等到30us,这里需要精确延时

U8temp=0;

//等待30us后我们预设值为0

if(DHT)U8temp=1;

//如果依然为高电平,可以确定数据值为1

while((DHT)&

//等待拉高结束

if(U8FLAG==1)break;

U8comdata<

=1;

//保存读到的数值,并移位

U8comdata|=U8temp;

3.3MQ-4甲烷浓度传感器以及A/D转换程序

MQ-4气体传感器适用与对甲烷、氢气、一氧化碳、烟雾等可燃气体的检测,对不同气体有不同的灵敏特性。

MQ-4传感器通过对不同浓度气体的感应输出不同的电压值。

经过模数转换输入单片机。

这里采用ADC0809模数转换芯片。

芯片能将0~5V的模拟信号转换为8位的数字信号。

D0~D7管脚连接单片机I/O口输出数字信号。

START启动转换,高电平有效。

EOC可以查看芯片转换状态,用于单片机查询转换状态。

OE管脚向单片机发出读取数据的请求,高电平有效。

CLK管脚输入500Khz脉冲的时钟信号,每一次脉冲完成一个转换。

ADDA管脚用来选择通道。

相关程序解析:

voidcsh()

EA=1;

//开总中断

TMOD=0x02;

//读TMOD进行设定

TH0=216;

//利用T0中断产生CLK信号(256-T)

TL0=216;

TR0=1;

//启动定时器T0

ET0=1;

ST=0;

//先将ADC0809的ST和OE端口拉低

OE=0;

voidt0(void)interrupt1using0//利用定时器T0产生中断

CLK=~CLK;

//生成脉冲信号

voidAD()//定义AD转换程序

ADDCS=0;

//选择通道IN0

delay2(10);

ST=1;

//启动AD转换

while(EOC==0);

//等模数转换过程结束

OE=1;

//OE管脚向单片机发送读取数据请求

CH4=P3;

//保存读取到的值,范围(0~256)

单片机读取到转换后的数字信号之后,根据MQ-4气体传感器对甲烷气体的灵敏特性,还原甲烷气体浓度。

下图为灵敏度特性曲线。

由图可见,甲烷气体在纯净空气中的浓度在1000ppm左右。

根据特性曲线,我们粗略的认为单片机读取到的数字信号乘以系数40就是空气中的实际甲烷浓度。

LCD_P8x16Str(0,6,"

CH4:

"

//显示“CH4”

Dis_Num(60,6,AD_DATA[0]*40,4);

//显示数字,这里对数字信号乘系数变成实际浓度

LCD_P8x16Str(92,6,"

ppm"

//显示单位字符串“ppm”

3.4NRF905无线发送/中继/接收程序

NRF905芯片具有较强的抗干扰能力,适合工业控制场合。

工作在频段433Mhz。

NRF905通过TRX_CE和TX_EN管脚,配置芯片掉电模式(低功耗)、Standby模式、RX(接收)模式和TX(发射)模式。

通过5个Spi接口来调整状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收数据寄存器。

VoidCSH905()//

CSN=1;

SCK=0;

DR=1;

//DR拉高,这里用于查看接收或发射数据完成

AM=1;

//AM拉高,用于地址匹配

PWR_UP=1;

//芯片上电

TRX_CE=0;

//设置为standby模式

TX_EN=0;

voidpeizhi905(void)//定义NRF905配置程序

uchari;

CSN=0;

//Spi使能,向Spi写命令

SpiWrite(WC);

//写放配置命令

for(i=0;

RxTxConf.n;

i++)//写放配置字

SpiWrite(RxTxConf.buf[i]);

CSN=1;

//停止Spi

voidSpiWrite(ucharbyte)//定义Spi写操作程序

DATA_BUF=byte;

//将需要发送的数据写入缓存

i++)

{

if(flag)//将DATA_BUF.7放在数据线上

MOSI=1;

else

MOSI=0;

//主机读操作

SCK=1;

//拉高时钟线

DATA_BUF=DATA_BUF<

1;

SCK=0;

//拉低时钟线

}

ucharSpiRead(void)//定义Spi读操作程序

i++)/

if(MISO)

flag1=1;

flag1=0;

//拉低时钟线

returnDATA_BUF;

//DATA_BUF为接收到的完整数据

voidTxPacket(void)//定义发送程序

//Spi使能,向Spi写命令

SpiWrite(WTP);

//写放配置命令

32;

i++)

SpiWrite(TxBuf[i]);

//写入32位发送数据

Delay905

(1);

SpiWrite(WTA);

//写数据至地址寄存器

4;

i++)//写入4字节地址

SpiWrite(RxTxConf.buf[i+5]);

//关闭S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1