創意發明:自制小型PM2.5環境檢測系,實測效果還可以,趕快一起學起來!

最近比較忙,可能更新的文章比較少,疫情期間請大家多多注意身體,儘量減少外出,在家學習。
這段時間由於疫情影響不能出去,看着家對面空氣檢測系統的大屏幕上各種數據不斷變化,於是突發奇想,能不能自己也做一個PM2.5測試系統呢,想到就要做。
老規矩廢話不多說,先上實物圖:
實物圖1
在這裏插入圖片描述
實物圖2
在這裏插入圖片描述
在這裏插入圖片描述
實測測量精度和準確率還是可以的。

PM2.5檢測系統參考代碼如下:

#include<reg52.h>
#include “delay.h”
#include “LCD12864.h”
#include “PM2_5.h”
#include “BMP180.h”
#include “DHT11.h”
#define uint unsigned int
#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%10);
    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(pressure%1000);
    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
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#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(dat0xAA)
{
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.05;
// SBUF=cal[1];
// while(!TI);
// TI=0;
//
//
// SBUF=cal[2];
// while(!TI);
// TI=0;

                    }
            }
    }

}

鑑於篇幅有限,只能寫這麼多了。
最後,如果有什麼意見或者建議歡迎您留言給我,讓我們共同學習一起進步,
如果需要完整代碼或設計文件,請私信我或者直接給簡介裏的郵箱發郵件,看到後會第一時間回覆。
謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章