毕业设计:单片机DIY-小型PM2.5系统,实际测试满足要求,赶快围观

时间:2023-03-27来源:佚名

大家好,因为最近忙着考试,最近比较忙,可能更新的文章比较少,疫情期间请大家多多注意身体,尽量减少外出,在家学习。

其实我发现在家学习只要静下心来,效率还是蛮快的,只要持之以恒,定会有所收获。

好了我们言归正传,前几天和几个小伙伴去市区公园玩,看着公园对面空气检测系统的大屏幕上各种数据不断变化,于是突发奇想,我能不能自己也用单片机做一个PM2.5测试系统呢,虽然不知道能不能成功,但想到就要做。

于是我利用好久以前的一个开发板当载体,开始自己DIY,成功了以后-我测试了一下基本能实时显示各种颗粒物的含量,又和真实数据对比了一下,准确度基板满足要求。

老规矩废话不多说,先上实物图:

原理:其实就是一块显示屏加上单片机实时控制,再加上采集和显示代码就差不多了

实物图1

毕业设计:单片机DIY-小型PM2.5系统,实际测试满足要求,赶快围观

数据采集和接收模块

毕业设计:单片机DIY-小型PM2.5系统,实际测试满足要求,赶快围观

实测测量精度和准确率还是可以的。

PM2.5检测系统参考代码如下:

主程序

include "delay.h"

include "PM2_5.h"

include "DHT11.h"

define uchar unsigned char

sbit waring=P1^3;

void main()

{

lcd_init();

Init_BMP085();

Init_PM2_5();

while(1)

{

bmp085Convert();

RH();

lcd_pos(0,0);

display_string("pm2.5:");

if(read_pm()>5)

display_num(read_pm());

else

display_num(5);

display_string("ug/m3");

display_string(" ");

lcd_pos(1,0);

display_string("T:");

display_num(temperature/10);

display_string(".");

display_num(temperature);

display_string("'C");

display_string(" ")

display_string("H:");

display_num(RHdataH);

display_string("%");

lcd_pos(2,0);

display_string("pre:");

display_num(pressure/1000);

display_string(".");

display_num(pressure00);

display_string("kpa");

lcd_pos(3,0);

display_string("smo:");

if(read_pm()>200)

{

display_string("High");

waring=0;

}

else

{

display_string("low");

display_string(" ");

waring=1;

}

display_string("Al:");

display_num(Altitude);

display_string("m");

display_string(" ");

delay_ms(200);

}

}

PM2.5

define uint unsigned int

define K_PM 820

void senddata(uchar dat);

uint read_pm();

uchar cal[7]={0};

// cal[0]:起始位 0xAA

// cal[1]:Vout(H)

// cal[2]:Vout(L)

// cal[3]:Vref(H)

// cal[4]:Vref(L)

// cal[5]:校验位

// cal[6]:结束位0xFF

uchar buf;

uchar sum;

int i=0;

float Vo;

void Init_PM2_5()

{

SCON=0x50;

PCON=0x00;

TMOD=0x20;

EA=1;

ES=1;

TL1=0xF4;

TH1=0xF4;

TR1=1;

}

uint read_pm()

{

return (uint)(K_PM*Vo);

}

void serial() interrupt 4

{

ES=0;

RI=0;

buf=SBUF;

senddata(buf);

ES=1;

}

void senddata(uchar dat)

{

if(dat==0xAA)

{

i=0;

cal[i]=dat;

}

else

{

i=i 1;

cal[i]=dat;

if(i==6)

{

sum=cal[1] cal[2] cal[3] cal[4];

if(sum==cal[5]&&cal[6]==0xFF)

{

// for(i=0;i<=6;i )

// {

// SBUF=cal[i];

// while(!TI);

// TI=0;

// }

Vo=(cal[1]*256 cal[2])/1024.0*5;

// SBUF=cal[1];

// while(!TI);

// TI=0;

//

// SBUF=cal[2];

// while(!TI);

// TI=0;

}

}

}

}

鉴于篇幅有限,只能写这么多了。

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,

文章不能上传附件,如果需要完整代码或设计文件,请私信我或者给我留言,看到后会第一时间回复。

谢谢!

    相关阅读

    三相四线空开的接线图说明

    有关三相四线空开怎么接线的问题,在电路接线过程中,空气开关 是三根线,三相四线也称为动力线,黄绿红或ABC相,把三根火线 接入空开的上桩头。 三相四线空开的接线图 在漏电开...
    2022-12-15
    三相四线空开的接线图说明

    空调铜管裸露在外面有什么影响?

    几十年前安装的空调,铜管都是裸露的,没有现在这么讲究,但制冷制热效果一样杠杠的。先抛开“空调用铜管还是铝管好 ”不说,单从使用者的角度来说,将铜管裸露在外是有影响的...
    2022-12-12
    空调铜管裸露在外面有什么影响?

    空调小管(供液管)结霜是什么原因

    空调空调小管(供液管)结霜,常见原因如下: 1、缺冷媒 当空调中缺少冷媒时,极有可能出现空调结霜 现象。解决办法:及时查漏补漏,添加适量的制冷剂,使空调恢复运行。 2、系统...
    2022-12-12
    空调小管(供液管)结霜是什么原因

    脉冲电子电表怎么偷电,一招教会你偷电方法

    用来偷电的方法有多种,对于脉冲电子表应该怎么偷电,其实这个偷电方法很简单的,只需要拔掉一根线就可以达到偷电的目的了,一起来了解下吧。 脉冲电子电表的偷电方法 说明:...
    2022-12-17
    脉冲电子电表怎么偷电,一招教会你偷电方法

    关了LED灯仍然微亮怎么办,二种方案完美解决微亮(鬼火)问题

    有关LED灯的使用问题,晚上关了LED灯或者节能灯后,会发现仍然有微亮的光线,这种称之为“鬼火”,怎么来解决关了LED灯仍然微亮的问题,这里分享了二种解决方法,加中间继电器...
    2022-12-23
    关了LED灯仍然微亮怎么办,二种方案完美解决微亮(鬼火)问题

    小牛电动车怎么解锁限速,6个步骤帮你搞定解限速问题

    有关小牛电动车解限速的方法,可以破解20公里限速的,破解流程不复杂,只要6个步骤就可以搞定,小牛电动车怎么解锁限速,可以来试一试本文给出的解锁限速的方法。 小牛电动车解...
    2022-12-13
    小牛电动车怎么解锁限速,6个步骤帮你搞定解限速问题

    空调指示灯亮着会不会费电,一年能费多少度电

    对于空调指示灯亮着会不会费电的问题,会费电,这个不用怀疑。无论哪一种电器设备,哪怕是微小的指示灯,也会是费电的,只是费电量微乎其乎,一年消耗的电量可以忽略不计。...
    2022-12-23
    空调指示灯亮着会不会费电,一年能费多少度电

    雅迪电动车怎么解除25码,附详细解限速步骤说明

    雅迪电动车解除25码限速的方法 方法1:先不要打开电源,捏住刹把,调速把转到底,立即打开电源,在捏住刹把状态下连续转动调速把到最大限度3次,第三次调速把转到底保持5至8秒,...
    2022-12-13
    雅迪电动车怎么解除25码,附详细解限速步骤说明

    网站栏目