历史上的今天
返回首页

历史上的今天

今天是:2024年10月08日(星期二)

正在发生

2021年10月08日 | 基于51单片机的PM2.5+温湿度检测仪

2021-10-08 来源:eefocus

一.硬件方案

单片机实时通过ADC0832转换芯片采集GP2Y1010AU粉尘传感器的粉尘的浓度,和读取环境的温湿度,通过单片机的数据转换处理后在液晶屏上显示空气中的质量,当测量空间中的粉尘浓度、温度、湿度大于设置值时,蜂鸣器和发光二极管发出声光报警。粉尘的浓度、温度、湿度报警值可以通过按键进行设置。


主要由51单片机(STC89C52/51、AT89C52/51)+LCD1602液晶+ADC0832+蜂鸣器+DHT11温湿度传感器 +按键+GP2Y1010AUOF粉尘传感器+发光二极管设计而成;如图:

在这里插入图片描述

二.设计功能

(1)LCD1602液晶第一行显示当前测到PM2.5空气质量值,第二行显示当前温度和湿度值。

(2)使用夏普的GP2Y1010AUOF粉尘传感器实时检测空气中的PM2.5值并通过1602显示出来,检测更加准确。

(3)当粉尘浓度值高于设定值时、温度湿度超出上下限范围,蜂鸣器和指示灯会发出声光报警。

(4)PM2.5值具有等级划分功能。用3个不同颜色的指示灯指示不同范围。绿灯亮表示环境良好,黄灯亮表示轻度污染,红灯亮,表示重度污染。

(5)本系统设置有4个按键,除1个为复位按键外,其他三个按键用来设定浓度报警值的,分别为减键、加键、设置键,设定的参数具有掉电保存,保存在STC单片机的内部,上电无需重新设置。


三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:

在这里插入图片描述

(2)Protues仿真图如下:

(3)PCB图如下:

四.软件设计

主程序源码


/************************************************

** 函数名称 : void main(void)

** 函数功能 : 主函数

** 输    入 : 无

** 输    出 : 无

** 说    明 :

************************************************/

void main(void)

{

double PM,pm1,pm2;

int PMVAL=0,HPM=200,PM_count=0,pm1_count=0;

uchar T1_data=0,R1_data=0,T2_data=0,R2_data=0;//温度、湿度变量

uchar shezhi_flag=1,Mode_flag=1,n=1;//设置变量

uchar bueezr_flag=0,count=0,buzzer_time=9;//蜂鸣器报警变量

uint Mode_count=0; 

uchar disp[16]  ={"PM2.5:0000ug/m3 "};

uchar disp1[16]= {"T :00C    RH:00%"}; 

uchar Tx_Buf[15];

  InitUART(); //初始化串口                                   

LCD_Init();

    WriteChar(1,0,16,disp); //在第一行显示‘内容’

WriteChar(2,0,16,disp1); //在第二行显示‘内容’

while(1)

{

T1_data=Read_TRH(0,0);//温度

disp1[3]=T1_data/10+0x30;//十位

disp1[4]=T1_data%10+0x30;//个位


R1_data=Read_TRH(1,0);//湿度

disp1[13]=R1_data/10+0x30;//十位

disp1[14]=R1_data%10+0x30;//个位

 

pm1+=read_data(1);

if(++PM_count>=20)

{

  PM_count=0;

    pm1=pm1/20;

pm2+=pm1;

pm1=0;

if(++pm1_count>=5)

{

pm1_count=0;

PM=pm2/5;

PM=PM*50/255;

PM-=4;

    PM/=5;

PM*=1000;

PMVAL=PM;

PMVAL+=235; PMVAL=PMVAL/9;

if(PMVAL>=9999)PMVAL=9999;

WriteCOMDATA(0x86,0);

if(PMVAL<0)//PMVAL=0;

{WriteCOMDATA(0+0x30,1);PMVAL=abs(PMVAL);}

else WriteCOMDATA(PMVAL/1000+0x30,1);

WriteCOMDATA(PMVAL/100%10+0x30,1);

WriteCOMDATA(PMVAL/10%10+0x30,1);

WriteCOMDATA(PMVAL%10+0x30,1);

PM=pm1=pm2=0;

}

}


/*调用报警函数,温湿度是否在设定范围内*/

//温度值与报警值比较

if(T1_data {

bueezr_flag=1;//报警标志位置1

}

else if(T1_data>T1H)

{

bueezr_flag=1;//报警标志位置1

//湿度值与报警值比较

if(R1_data {

bueezr_flag=1;//报警标志位置1

}

else if(R1_data>R1H)

{

bueezr_flag=1;//报警标志位置1

}

//PM值与报警值比较

if(PMVAL>HPM)

{

bueezr_flag=1;

if(T1_data>T1L&&T1_dataR1L&&R1_data {

bueezr_flag=0;

BUZZER=1;

}

/*******蜂鸣器报警********/

count++;if(count>buzzer_time*10)count=buzzer_time+1;

if(count%buzzer_time==0 && bueezr_flag)

{

BUZZER=~BUZZER;//蜂鸣器取反  发出声音提示

}

/*******Mode键设置报警参数********/ 

if(Mode==0 && Mode_flag)

{  

WriteCOMDATA(0x0F,0);//LCD显示光标

Delay(100);

if(Mode==0)

{

BUZZER=1;

bueezr_flag=0;


Mode_flag=0;

shezhi_flag=1;

n=1;

while(1)   

{                                 

key();

if(Mode_count>6)

{

Mode_count=0;shezhi_flag=0;

//当下限值大于上限值时,蜂鸣器鸣叫1S提示,参数设置有误

if(T1L>T1H || R1L>R1H)

{

BUZZER=0;Delay(1000);BUZZER=1;

}

//否则退出设置页面,返回主页面

else 

{


WriteCOMDATA(0x0C,0);//关闭LCD光标

Delay(10);

n=0;

break;

}

}

else Mode_count=0; 

shezhi_flag++;

if(shezhi_flag>5)shezhi_flag=1;

if(shezhi_flag==1 || shezhi_flag==5)n=1;

pm1+=read_data(1);

if(++PM_count>=20)

{

  PM_count=0;

    pm1=pm1/20;

pm2+=pm1;

pm1=0;

if(++pm1_count>=15)

{

pm1_count=0;

PM=pm2/15;

PM=PM*50/255;

PM-=4;

    PM/=5;

PM*=1000;

PMVAL=PM;

PMVAL-=480; PMVAL=PMVAL/3;

if(PMVAL>=9999)PMVAL=9999;

PM=pm1=pm2=0;

}

}

}

}

}

}

/********LCD1602显示********/      

//WriteChar(1,0,16,disp); //在第一行显示‘内容’

WriteChar(2,0,16,disp1); //在第二行显示‘内容’

}

}

推荐阅读

史海拾趣

Gould Ami公司的发展小趣事
水泵启动或停止后,水位会发生变化,传感器再次检测水位并反馈给控制电路,形成闭环控制,确保水位稳定在设定范围内。
歌普(GEPU)公司的发展小趣事
确保水位传感器和水泵安装位置正确,能够准确反映水位变化并有效控制水泵启停。
Frequency Management International公司的发展小趣事

FMI深知技术创新是企业发展的核心动力。因此,公司一直致力于在石英晶体和晶体振荡器领域进行技术研发和创新。通过不断的技术积累和优化,FMI成功开发出了一系列高性能、高稳定性的产品,如压控温度补偿晶体振荡器(VCTCXO)、压控晶体振荡器(VCXO)、温度补偿晶体振荡器(TCXO)等。这些产品的推出不仅丰富了FMI的产品线,还进一步提升了公司在行业内的竞争力。

AVAGO公司的发展小趣事

尽管AVAGO公司在发展过程中取得了显著成就,但也面临着诸多挑战。随着全球半导体市场的竞争日益激烈,公司需要不断投入研发资金、加强人才培养、优化生产流程等方面来保持竞争优势。同时,公司还需要密切关注行业动态和市场需求变化,以便及时调整战略和产品线。在未来,AVAGO公司将继续致力于技术创新和市场拓展,为全球客户提供更优质的产品和服务。

以上五个故事仅是对AVAGO公司发展历程的简要描述,实际上公司在发展过程中还经历了许多其他重要事件和阶段。这些故事展示了AVAGO公司如何凭借技术实力、市场洞察力和战略眼光在电子行业中脱颖而出,并成为全球领先的半导体企业之一。

Helium公司的发展小趣事

Helium公司成立于2013年,由Shawn Fanning、Amir Haleem和Sean Carey共同创立。在创立初期,Helium专注于物联网无线网络技术的研究,但并未迅速获得市场关注。这一时期,电子行业正处于创新与转型阶段,物联网作为新兴领域展现出巨大潜力。Helium团队预见到了物联网的发展趋势,但由于缺乏明确的商业模式,其网络发展并未大规模铺开。然而,这段时期的积累为Helium后续的技术突破和市场拓展奠定了坚实基础。

Amptek Inc公司的发展小趣事

为了进一步提升网络性能和用户体验,Helium团队自主编译并开源了LongFi协议。这一协议能够将物联网主流LoRaWAN无线协议应用到Helium区块链应用层,实现了物联网与区块链的深度融合。LongFi协议的推出不仅提高了数据传输的效率和稳定性,还降低了物联网设备的能耗和成本。这一技术创新为Helium赢得了更多用户和合作伙伴的信任和支持,推动了其业务的持续发展。

问答坊 | AI 解惑

RFIC是分布参数还是集总参数?

与各位探讨: RFIC的整体电路结构和集总参数射频电路区别不大,差异是因为在芯片里有些元件需要用工艺可以实现的方式设计。 集成电路有它的特点,例如在IC中,线间距离和线的尺寸都很小,由此在分立电路中不会出现或影响不显著的一些物理效应( ...…

查看全部问答>

无法打开包括文件:“ca_merge30.h”

在编译时出现无法打开包括文件:“ca_merge30.h”,寻求大侠们帮忙。。。。谢谢…

查看全部问答>

新手请教GPRS发手机短信中的PDU模式

我用GPRS调试发短信,但是不知道怎么把文本的转换成PDU模式的,也可以是怎么把超级终端中收到的一堆16进制的转换成中文?…

查看全部问答>

关于传感器采样液体微量变化的问题?

关于传感器采样液体微量变化的问题?     想用传感器采样液体的微量变化,然后试了试挂吊瓶,用传感器采样滴液的变化情况,感觉液体在滴啊,但是采样值却是一会大一会小,完全没有规律,一点也没呈现出线性变小的趋势。这是怎么回事? ...…

查看全部问答>

用CETK测试CE下的DirectDraw的性能,测试结果显示330号的FLIP功能测试通过,但为什么DirectDraw的DDEX1测试例子测试不行呢?CE自

用CETK测试CE下的DirectDraw的性能,测试结果显示330号的FLIP功能测试通过,但为什么DirectDraw的DDEX1测试例子测试不行呢?CE自带的DDEX1例子调到了FLIP()函数…

查看全部问答>

pda上判断是否有存储卡或者内置存储卡

用vc2005,ppc2003,请问各位大侠我该如何判断pda上是否有存储卡或内置的存储卡并读出名字呢…

查看全部问答>

基于arm9的开发板运行一个wince系统,读写总线问题

基于arm9(EP9302)的开发板运行一个wince系统,读写总线问题: 在wince上写了一个小的测试程序, while循环读取一个虚拟地址(DI)的值, 再把这个值写到另一个虚拟地址(DO)上. 结果是:用示波器测得总线上的写信号正常, 读信号间隔时间有时要几秒钟才 ...…

查看全部问答>

据闻WINCE下能够定制触摸屏校准,具体如何定制呢?有大侠指教吗?

据闻WINCE下能够定制触摸屏校准,具体如何定制呢?有大侠指教吗?…

查看全部问答>

问个wince5.0的中断问题

就以SD卡为例子 注册表 [HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\SDHC_SMDK2440]     \"Order\"=dword:21     \"Dll\"=\"sdhc_sc2440.dll\"     \"Prefix\"=\"SDH\"         \"DMAChann ...…

查看全部问答>