0 前言
🔥 Hi,大家好,这里是丹成学长的毕设系列文章!
🔥 对毕设有任何疑问都可以问学长哦!
这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是
🚩 基于Stm32的家庭有害气体检测系统
🥇学长这里给一个题目综合评分(每项满分5分)
🧿 选题指导, 项目分享:
https://blog.csdn.net/molodi/article/details/125933857
1 简介
2 主要器件
- STM32F103C8T6主控芯片
- 甲醛采集传感器
- DHT11温湿度传感器
- ESP-01S wifi模块
3 实现效果
4 设计原理
4.1 ZE08-CH2O甲醛采集传感器
简介 ZE08-CH2O型电化学甲醛模组是一个通用型、小型化模组。利用电化学原理对空气中存在CH2O(甲醛)进行探测,具有良好的选择性,稳定性。内置温度传感器,可进行温度补偿;同时具有数字输出与模拟电压输出,方便使用。 ZE08-CH2O传感器模块是将成熟的电化学检测技术与精良的电路设计紧密结合,设计制造出的通用型气体模组。
通讯协议 ZE08-CH2O模块采用串口通讯,串口波特率等参数如下,波特率出厂默认为9600,不可更改:
所得到的气体浓度计算公式为:
气体浓度值=气体浓度高位*256+气体浓度低位
问答式指令 问答式指令即需要单片机主动发送读取浓度值指令,模块才会返回当前的浓度值。 切换到问答式,命令行格式如下: 读气体浓度值格式如下: 模块接收到读取浓度指令后,就会返回一条气体浓度值数据:
4.2 DHT11温湿度传感器
简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。 接线 DHT11编码步骤
- 单片机上点后1s内不读取(不重要)
- 主机(单片机)发送起始信号:
- 主机先拉高data
- 拉低data延迟18ms
- 拉高data(通过此操作将单片机引脚设置为输入)。
- 从机(DHT11)收到起始信号后进行应答:
- 从机拉低data,主机读取到data线被拉低持续80us后从机拉高data线, 持续80us,直到高电平结束,意味着主机可以开始接受数据。
- 主机开始接收数据:
- 主机先把data线拉高(io设置为输入)
- 从机把data线拉低,主机读取data线电平,直到低电平结束(大约50us)
- 从机拉高data线后,延迟40us左右(28~70us之间)主机再次读取data线电平,如果为低电平,则为“0”,如果为高电平,则为“1”。
- 继续重复上述1,2步骤累计40次。
5 部分核心代码
void show()
{
LCD1602_write(0,0x80);
LCD1602_writebyte("CH2O:");
LCD1602_write(1,0x30+ch2o/10000%10);
LCD1602_writebyte(".");
LCD1602_write(1,0x30+ch2o/1000%10);
LCD1602_write(1,0x30+ch2o/100%10);
LCD1602_write(1,0x30+ch2o/10%10);
LCD1602_write(1,0x30+ch2o%10);
LCD1602_writebyte("mg/m3");
}
void main()
{
uchar h,l;
LCD1602_cls();
TMOD=0x21;
TH0=0x4c;
TL0=0x00;
ET0=1;
TR0=1;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
EA=1;
ES=1;
TR1=1;
h=byte_read(0x2000);
l=byte_read(0x2001);
ch2o_H=h*256+l;
if(ch2o_H>700)
ch2o_H=80;
while(1)
{
show();
key();
}
}
void UART_4() interrupt 4
{
if(RI)
{
RI=0;
UART_dat[bz]=SBUF;
switch(bz)
{
case 0:
if(UART_dat[bz]==0xFF) bz=1;
else bz=0;
break;
case 1:
if(UART_dat[bz]==0x17) bz=2;
else bz=0;
break;
case 2:
if(UART_dat[bz]==0x04) bz=3;
else bz=0;
break;
case 3:
if(UART_dat[bz]==0x00) bz=4;
else bz=0;
break;
case 4:
bz=5;
break;
case 5:
bz=6;
break;
case 6:
if(UART_dat[bz]==0x13) bz=7;
else bz=0;
break;
case 7:
if(UART_dat[bz]==0x88) bz=8;
else bz=0;
break;
case 8:
if((UART_dat[bz]+UART_dat[1]+UART_dat[2]+UART_dat[3]+UART_dat[4]+UART_dat[5]+UART_dat[6]+UART_dat[7])%256==0)
{
ch2o=UART_dat[4]*256+UART_dat[5];
ch2o=ch2o*13.392857;
bz=0;
}else
{
bz=0;
}
break;
}
}
//DHT11温湿度传感器部分
//typedef unsigned char uchar;
//typedef unsigned int uint;
//定义变量
sbit Data=P3^6;
uchar rec_dat[13];//用于保存接收到的数据组
void DHT11_delay_us(uchar n)
{
while(--n);
}
void DHT11_delay_ms(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void DHT11_start()
{
Data=1;
DHT11_delay_us(2);
Data=0;
DHT11_delay_ms(20); //延时18ms以上
Data=1;
DHT11_delay_us(30);
}
uchar DHT11_rec_byte() //接收一个字节
{
uchar i,dat=0;
for(i=0;i<8;i++) //从高到低依次接收8位数据
{
while(!Data); //等待50us低电平过去
DHT11_delay_us(8); //延时60us,如果还为高则数据为1,否则为0
dat<<=1; //移位使正确接收8位数据,数据为0时直接移位
if(Data==1) //数据为1时,使dat加1来接收数据1
dat+=1;
while(Data); //等待数据线拉低
}
return dat;
}
void DHT11_receive() //接收40位的数据
{
uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
DHT11_start();
if(Data==0)
{
while(Data==0); //等待拉高
DHT11_delay_us(40); //拉高后延时80us
R_H=DHT11_rec_byte(); //接收湿度高八位
R_L=DHT11_rec_byte(); //接收湿度低八位
T_H=DHT11_rec_byte(); //接收温度高八位
T_L=DHT11_rec_byte(); //接收温度低八位
revise=DHT11_rec_byte(); //接收校正位
DHT11_delay_us(25); //结束
if((R_H+R_L+T_H+T_L)==revise) //校正
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
/*数据处理,方便显示*/
rec_dat[0]=RH/10+'0';
rec_dat[1]=(RH%10)+'0';
rec_dat[2]='%';
rec_dat[3]='R';
rec_dat[4]='H';
rec_dat[5]=' ';
rec_dat[6]=' ';
rec_dat[7]=(TH/10)+'0';
rec_dat[8]=(TH%10)+'0';
rec_dat[9]='^';
rec_dat[10]='C';
}
}
void main()
{
//使用lcd1602显示数据
DHT11_receive();
lcd1602(rec_dat);
}
🧿 选题指导, 项目分享:
https://blog.csdn.net/molodi/article/details/125933857
|