PM2.5檢測

PM2.5檢測

一、傳感器的概述

GP2Y1010AUOF是日本夏普公司開發的一款光學灰塵濃度檢測傳感器。此傳感器內部成對角分佈的紅外發光二極管和光電晶體管,利用光敏原理來工作。用於檢測特別細微的顆粒,如香菸顆粒、細微灰塵。依靠輸出脈衝的高度來判斷顆粒濃度。
供電電壓;5-7V
工作溫度;-10-65℃
監測最小直徑;0.8μm
夏普GP2Y1010AU0F灰塵傳感器價格較便宜,只能檢測出室內空氣中的灰塵和煙塵含量.並不能測出所謂的PM2.5濃度,然而現在市面上有好多紅外發光二極管的傳感器都稱自己是PM2.5傳感器,能測PM2.5的值,其實並不是,真正能測PM2.5濃度的是那種上百的激光傳感器,這種紅外的連PM10都測不了,只能用來玩玩,或者大概描述空氣質量的等級而已,經我多次實驗,發現這傳感器顯示的灰塵濃度與網上公佈的AQI空氣質量指數比較接近,跟真實的PM2.5濃度有很大的區別,這測出的灰塵濃度其實就是所有不同直徑的顆粒物總和,裏面包含了PM1.0,PM2.5,PM10。
二、硬件連接
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
傳感器中心有個洞可以讓空氣自由流過,定向發射LED光,通過檢測經過空氣中灰塵折射過後的光線來判斷灰塵的含量。

三、檢測原理
GP2Y1010AU 插上電源後 1 秒內會穩定、正常地運作,可以進行檢出。
對 GP2Y1010AU 輸出電壓的絕對值,並不是判定檢出的有無,使用方法是:無塵時,從輸出電壓的變化量來做判定。
另外,可以根據輸出電平時間上的變化來對檢出對象物的種別進行判別。
關於一般被採用的灰塵和煙的判別方法,一般,香菸的煙是細微粒子,密度高,會擴散式的大範圍漂移。與此相比,灰塵是一個一個大顆粒,密度低,斷斷續續式的進入灰塵傳感器的檢出領域。 就如下圖所述,煙是連續的表現出較高的輸出電壓,灰塵是間隔的表現出較高的輸出電壓。因此,根據傳感器的輸出電壓(發光素子和已同期的脈衝輸出電壓值)在時間上的推移向微機軟件的讀取,是否塵/是否有煙/是否有灰塵,不管是哪種狀態,及空氣污染的程度是多少,都可以進行檢出。
在這裏插入圖片描述

灰塵的檢出是在規定時間內,在某一輸出電壓變化的標準以上,判定在某一時間
的輸出被記入什麼,從而檢出灰塵的有無
四、特性
在這裏插入圖片描述
根據技術手冊可知,當空氣潔淨的時候,Vo的範圍是0~1.5V,典型值是0.9V。
當空氣灰塵濃度很高的時候,Vo的數值大於3.6V。但是該傳感器輸出的最大電壓爲3.6V,所以當灰塵濃度再增加時,我們這款傳感器已經測不出了。
五、程序代碼

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char //宏定義
//下載資源可見端口定義
/*****************************????????
*********************************************/
void lcd_init()//?????????//
{ 
 delay1ms(15);
 wr_com(0x38);
 delay1ms(5);
 wr_com(0x01);
 delay1ms(5);
 wr_com(0x06);
 delay1ms(5);
 wr_com(0x0c);
 delay1ms(5);

 wr_com(0x80);
 wr_dat('P');//
 wr_com(0x81);
 wr_dat('M');//:
 wr_com(0x82);
 wr_dat('2');//
 wr_com(0x83);
 wr_dat('.');//:
 wr_com(0x84);
 wr_dat('5');//:
 wr_com(0x85);
 wr_dat(':');

wr_com(0x8b);
 wr_dat('m');
 wr_com(0x8c);
 wr_dat('g');
 wr_com(0x8d);
 wr_dat('/');
 wr_com(0x8e);
 wr_dat('m');
 wr_com(0x8f);
 wr_dat('3');

 wr_com(0xc0);
 wr_dat('A');
 wr_com(0xc1);
 wr_dat('l');
 wr_com(0xc2);
 wr_dat('a');
 wr_com(0xc3);
 wr_dat('r');
 wr_com(0xc4);
 wr_dat('m');
 wr_com(0xc5);
 wr_dat(':');

 wr_com(0xcb);
 wr_dat('m');
 wr_com(0xcc);
 wr_dat('g');
 wr_com(0xcd);
 wr_dat('/');
 wr_com(0xce);
 wr_dat('m');
 wr_com(0xcf);
 wr_dat('3');
 }

uchar Error_Correct(uchar *str,uchar num)
{
 unsigned char i=0;
 unsigned char j=0;
 unsigned char Temp=0;
 //????
 for(i=0;i<num-1;i++)
 {
 for(j=i+1;j<num;j++)
 {
    if(str[i]<str[j])
  {
  Temp=str[i];
  str[i]=str[j];
  str[j]=Temp;
  }
 }
}
 //去除誤差取中間值
 return str[num/2];
}
//主函數
void main(void)
{
 InitTimer(); /初始化定時器
 BEEP=1;
 lcd_init();//初始化lcd
 delay1ms(500);
 while(1)
 {
  checkkey();//按鍵檢測
 if(set_st==0)
 {
 	if(FlagStart==1) //1次數據採集完成
  {
  num++;
  ADC_Get[num]=abc;
  if(num>9)
  {
  num=0;
  DUST=Error_Correct(ADC_Get,10);
     DUST_Value=(DUST/256.0)*5;//轉化成電壓值
     DUST_Value=(DUST_Value*0.17-0.1)*1000;//固體懸浮顆粒
  if(DUST_Value<0) DUST_Value=0;
  if(DUST_Value>760) DUST_Value=760; //限位
  DUST=(uint)DUST_Value;
  }
  TL0 = (65536-10000)/256;
  TH0 = (65536-10000)%256;
  TR0 = 1; //開始定時器
  EA = 1;
  FlagStart=0;
  }
  Alarm(); //報警
 }
 disp(DUST);//顯示粉塵濃度
 baojing();//顯示報警值
   if(set_st==1)
  {
  wr_com(0xca);
  wr_com(0x0d);
  delay1ms(150);
  }
 }
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章