第一章:概述
1.1、設(shè)計的主要內(nèi)容和意義
1.1.1、設(shè)計的主要內(nèi)容本設(shè)計提出的“PM2.5,PM10監(jiān)測”的方案最基本的實(shí)現(xiàn)方法是由Arduino開發(fā)板、激光粉塵傳感器、LED燈、顯示模塊、報警器等模塊組成的電路,PM2.5/10激光傳感器SDS011采集空氣中PM2.5,PM10的濃度值,經(jīng)過Arduino unoR3開發(fā)板處理后,在595驅(qū)動八位數(shù)碼管上顯示,并且設(shè)置一個報警值,檢測的PM2.5,PM10濃度值超過報警值后,另外,該設(shè)計在實(shí)時檢測濃度的同時,根據(jù)當(dāng)前檢測濃度亮起相應(yīng)的燈,濃度范圍分別為:
1.1.2、設(shè)計的主要意義(1)PM2.5由什么組成:
PM2.5是粒徑小于2.5μm的空氣中的懸浮物。微小的可溶性固體、可溶性氣體是形成PM2.5的首要因素。例如SOx(硫的氧化物)、NOx(氮的氧化物)、xCl、xBr、xCO3等物質(zhì)形成的水的微小液滴,微小液滴和微小顆粒是形成灰霾的主要物質(zhì)。
(2)PM2.5來源:
PM2.5是日常發(fā)電、工業(yè)生產(chǎn)、汽車尾氣排放等過程中經(jīng)過燃燒而排放的殘留物,大多含有重金屬等有毒物質(zhì)。一般而言,粒徑2.5微米至10微米的粗顆粒物主要來自道路揚(yáng)塵等,2.5微米一下的細(xì)顆粒物主要來自化石燃料燃燒。揮發(fā)有機(jī)物。
(3)PM2.5的危害:
氣象專家和醫(yī)學(xué)專家認(rèn)為,由細(xì)顆粒物造成的灰霾天氣對人體健康的危害甚至要比沙大粒徑10微米以上的顆粒物,會被擋在人的鼻子外面;粒徑在2.5微米至10微米之間的顆粒物,能夠進(jìn)入上呼吸道,但部分可通過痰液等排出體外,另外也會被鼻腔內(nèi)部的絨毛阻擋,對人體健康危害相對較小;而粒徑在2.5微米以下的細(xì)顆粒物,直徑不足人類頭發(fā)絲的1/20大小,不易被阻擋。被吸入人體后會直接進(jìn)入支氣管,干擾肺部的氣體交換引發(fā)包括哮喘、支氣管炎和心血管病等方面的疾病。
世界衛(wèi)生組織發(fā)布的報告顯示,無論是發(fā)達(dá)國家還是發(fā)展中國家,目前大多數(shù)城市和農(nóng)村人口均遭受到顆粒物對健康的影響。高污染城市中的死亡率超出相對清潔城市的15%至20%。據(jù)統(tǒng)計,在歐洲,PM2.5每年導(dǎo)致386000人死亡,并使歐盟國家人均期望壽命減少8.6個月。人體的生理結(jié)構(gòu)決定了對PM2.5沒有任何過濾、阻攔能力,而PM2.5對人類健康的危害卻隨著醫(yī)學(xué)技術(shù)的進(jìn)步,逐步暴露出其恐怖的一面。氣象專家和醫(yī)學(xué)專家認(rèn)為,由細(xì)顆粒物造成的灰霾天氣對人體健康的危害甚至要比沙塵暴更大。粒徑10微米以上的顆粒物,會被擋在人的鼻子外面;粒徑在2.5微米至10微米之間的顆粒物,能夠進(jìn)入上呼吸道,但部分可通過痰液等排出體外,另外也會被鼻腔內(nèi)部的絨毛阻擋,對人體健康危害相對較小;而粒徑在2.5微米以下的細(xì)顆粒物,直徑相當(dāng)于人類頭發(fā)的1/10大小,不易被阻擋。被吸入人體后會直接進(jìn)入支氣管,刺激呼吸道,干擾肺部的氣體交換,從而引發(fā)咳嗽、呼吸困難、哮喘、慢性支氣管炎等呼吸系統(tǒng)的疾病并導(dǎo)致心律不齊、非致命性心臟病等心血管方面的疾病。其中,老人、小孩以及心肺疾病患者是PM2.5污染的敏感人群。
因此,對PM2.5的監(jiān)測與治理便顯得越來越重要。
第二章:主控制器及主要器件
2.1、Arduino unoR3 開發(fā)板(1)Arduino UNO R3的介紹
Arduino UNO R3是一款易用型開源控制器,硬件上與Arduino UNO相比并沒有大的變動,最大不同在于USB轉(zhuǎn)串口電路部分,改用的 是一塊ATMega16U2單片機(jī),由此成本也有所提高,軟件部分與之前一樣,沒有大的變化。
Arduino是一塊基于開放原始代碼的Simple i/o平臺,并且具有開發(fā)語言和開發(fā)環(huán)境都很簡單、易理解的特點(diǎn)。讓您可以快速使用Arduino做出有趣的東西。它是一個能夠用來感應(yīng)和控制現(xiàn)實(shí)物理世界的一套工具。 它由一個基于單片機(jī)并且開放源碼的硬件平臺,和一套為Arduino板編寫程序 的開發(fā)環(huán)境組成。Arduino可以用來開發(fā)交互產(chǎn)品,比如它可以讀取大量的開關(guān)和傳感器信號,并且可以控制各式各樣的電燈、電機(jī)和其他物理設(shè)備。Arduino項(xiàng)目可以是單獨(dú)的,也可以在運(yùn)行時和你電腦中運(yùn)行的程序(例如:Flash,Processing,MaxMSP)進(jìn)行通訊。
(2)Arduino unoR3的特性:
微控制器核心:AVRmega328P-PU(處理速度可達(dá)20MIPS)
工作電壓:+5V
外部輸入電壓:+7V~+12V(建議)
外部輸入電壓(極值):+6V≤Vin≤+20V
數(shù)字信號I/O接口:14(其中6個PWM輸出接口)
模擬信號輸入接口:6
DC I/O接口電流:40 mA
Flash容量:32 KB (其他2K用于bootloader)
時鐘頻率:16MHz
(3)Arduino UNO R3硬件實(shí)物圖如下
1.001.jpg (41.36 KB, 下載次數(shù): 86)
下載附件
2016-10-11 17:32 上傳
(4)工作原理圖:
1.002.jpg (42.67 KB, 下載次數(shù): 82)
下載附件
2016-10-11 17:32 上傳
2.2、595驅(qū)動八位數(shù)碼管(1)74HC595芯片:
74HC595是具有8位移位寄存器和一個存儲器,三態(tài)輸出功能。移位寄存器和存儲器是分別的時鐘。
數(shù)據(jù)在SHcp的上升沿輸入,在STcp的上升沿進(jìn)入的存儲寄存器中去。如果兩個
時鐘連在一起,則移位寄存器總是比存儲寄存器早一個脈沖。移位寄存器有一個串行移位輸入(Ds),和一個串行輸出(Q7’),和一個異步的低電平復(fù)位,存儲寄存器有一個并行8位的,具備三態(tài)的總線輸出,當(dāng)使能OE時(為低電平),存儲寄存器的數(shù)據(jù)輸出到總線。
(2)數(shù)碼管基本屬性:
1.采用2片 595驅(qū)動數(shù)碼管,需要 單片機(jī)3路IO口,根據(jù)數(shù)碼管動態(tài)掃描原理進(jìn)行顯示;
2.寬工作電壓3.3V到5V;
3.PCB板尺寸:71mm*22mm
4.數(shù)碼管型號:共陰
(3)優(yōu)點(diǎn):
74595的主要優(yōu)點(diǎn)是具有數(shù)據(jù)存儲寄存器,在移位的過程中,輸出端的數(shù)據(jù)可以保持不變。這在串行速度慢的場合很有用處,數(shù)碼管沒有閃爍感。
(4)硬件實(shí)物圖如下:
1.003.jpg (18.06 KB, 下載次數(shù): 76)
下載附件
2016-10-11 17:32 上傳
(5)工作原理圖:
1.004.jpg (35.72 KB, 下載次數(shù): 114)
下載附件
2016-10-11 17:32 上傳
(6)硬件連接圖:
1.005.jpg (43.02 KB, 下載次數(shù): 76)
下載附件
2016-10-11 17:32 上傳
2.3、PM2.5 激光傳感器SDS011(1)工作原理:
采用激光散射原理:當(dāng)激光照射到通過檢測位置的顆粒物時會產(chǎn)生微弱的光散射,在特定方向上的光散射波形與顆粒直徑有關(guān),通過不同粒徑的波形分類統(tǒng)計及換算公式可以得到不同粒徑的實(shí)時顆粒物的數(shù)量濃度,按照標(biāo)定方法得到跟官方單位統(tǒng)一的質(zhì)量濃度。
(2)特點(diǎn):
數(shù)據(jù)準(zhǔn)確:激光檢測,穩(wěn)定,一致性好;
響應(yīng)快速:場景變換響應(yīng)時間小于10秒;
便于集成:串口輸出(或IO口輸出可定制),自帶風(fēng)扇;
分辨率高:分辨顆粒最小直徑達(dá)0.3微米;
(3)技術(shù)指標(biāo):
測量輸出:PM2.5/PM10
量程:0.0-999.9微克/立方米
供電電壓:5V
最大工作電流:100mA
休眠電流:2mA
工作溫度范圍:-20-50℃
相應(yīng)時間:1秒
串口數(shù)據(jù)輸出頻率:1次/秒
顆粒物直徑分辨率:小于0.3微米
相對誤差:10%
(4)硬件實(shí)物圖如下
1.006.jpg (35.06 KB, 下載次數(shù): 67)
下載附件
2016-10-11 17:32 上傳
第三章:硬件電路設(shè)計及操作
3.1、電路設(shè)計框圖:3.1.1硬件設(shè)計框圖:
1.007.jpg (14.58 KB, 下載次數(shù): 82)
下載附件
2016-10-11 17:32 上傳
3.1.2軟件設(shè)計框圖:
1.008.jpg (26.42 KB, 下載次數(shù): 74)
下載附件
2016-10-11 17:32 上傳
3.1.3硬件連接圖:
1.009.jpg (31.46 KB, 下載次數(shù): 72)
下載附件
2016-10-11 17:32 上傳
3.1.4 電路原理圖:
1.010.jpg (29.2 KB, 下載次數(shù): 79)
下載附件
2016-10-11 17:32 上傳
3.2.1 PM2.5檢測儀的操作
1.011.jpg (34.16 KB, 下載次數(shù): 88)
下載附件
2016-10-11 17:32 上傳
接上電源如上圖顯示,開始檢測PM2.5/10。主要操作按鈕有3個如下
1.012.jpg (23.55 KB, 下載次數(shù): 82)
下載附件
2016-10-11 17:32 上傳
這兩個按鈕的功能是劃分PM2.5/10的質(zhì)量等級。左邊的是PM2.5,右邊的是PM10
持續(xù)按下去儀器正面的LED燈會亮,主要操作附屬光碟有示。
1.013.jpg (27.89 KB, 下載次數(shù): 83)
下載附件
2016-10-11 17:32 上傳
左上角的紅色按鈕是復(fù)位按鈕,主要用于蜂鳴器的復(fù)位。
第四章:軟件
4.1 編程軟件Arduino ideArduino IDE是Arduino的開放源代碼的集成開發(fā)環(huán)境,其界面友好,語法簡單以及能方便的下載程序,使得Arduino的程序開發(fā)變得非常便捷。作為一款開放源代碼的軟件,Arduino IDE也是由Java、Processing、 avr-gcc等開放源碼的軟件寫成,其另一個最大特點(diǎn)是跨平臺的兼容性,適用于Windows、Max OS X以及Linux。2011年11月30號Arduino官方正式發(fā)布了Arduino1.0版本,可以下載不同系統(tǒng)下的壓縮包,也可以在github上下載源碼重新編譯自己的IDE。
第五章:設(shè)計主要用途及應(yīng)用場景
5.1、主要用途本設(shè)計主要可用于室內(nèi)和戶外的空氣質(zhì)量的檢測,可調(diào)節(jié)的報警濃度的設(shè)計,可用于長期檢測和提醒PM2.5和PM10的濃度。
5.2、應(yīng)用場景辦公室空氣檢測和提醒,公共場合控?zé),空調(diào)和通風(fēng)口處監(jiān)測,氣象臺,觀測站,馬路口監(jiān)測為期排量
第六章:應(yīng)用設(shè)計進(jìn)行的相關(guān)實(shí)驗(yàn)及結(jié)論分析
6.1、實(shí)驗(yàn)一 :公園檢測
1.014.jpg (23.81 KB, 下載次數(shù): 75)
下載附件
2016-10-11 17:32 上傳
(單位:微克/立方米)
1.015.jpg (20.77 KB, 下載次數(shù): 82)
下載附件
2016-10-11 17:32 上傳
(單位:微克/立方米)
6.2、實(shí)驗(yàn)二:路口檢測
1.016.jpg (23.59 KB, 下載次數(shù): 78)
下載附件
2016-10-11 17:32 上傳
(單位:微克/立方米)
1.017.jpg (20.2 KB, 下載次數(shù): 68)
下載附件
2016-10-11 17:32 上傳
6.3實(shí)驗(yàn)三:常見生活場景檢測
1.018.jpg (23.76 KB, 下載次數(shù): 101)
下載附件
2016-10-11 17:32 上傳
1.019.jpg (20.99 KB, 下載次數(shù): 90)
下載附件
2016-10-11 17:32 上傳
1.020.jpg (22.95 KB, 下載次數(shù): 78)
下載附件
2016-10-11 17:32 上傳
(單位:微克/立方米)
1.021.jpg (24.2 KB, 下載次數(shù): 78)
下載附件
2016-10-11 17:32 上傳
6.4、檢測分析(1)相對于實(shí)驗(yàn)二和三,實(shí)驗(yàn)一的PM25和PM10數(shù)值明顯低很多,空氣質(zhì)量等級為優(yōu),說明在花草樹木具有凈化空氣的效果,說明了花草樹木有助于凈化空氣。
(2)相對于實(shí)驗(yàn)一和三,實(shí)驗(yàn)三的PM25和PM10數(shù)值明顯高,特別是中午和晚上的時候到達(dá)頂峰,說明是中午和晚上是下班時間引起車流的高峰期造成的。
(3)該設(shè)計在日常生活中可以用于對我們經(jīng)常處在的生活場景進(jìn)行監(jiān)測,在家里臥室的檢測數(shù)據(jù)結(jié)果是優(yōu)秀的,但在學(xué)校宿舍檢測數(shù)據(jù)明顯升高,空氣質(zhì)量為良,這是因?yàn)樗奚岬呐赃吺枪;車流量多造成的?/font>
6.5、應(yīng)對方法(1)治理方法:
多植樹,減少機(jī)動車的排放量,促進(jìn)清潔能源開發(fā),監(jiān)督工廠排放等
(2)生活應(yīng)對霧霾方法:
1、霧霾天氣少開窗,最好不出門或晨練。
2、外出戴專業(yè)防塵口罩。
3、多喝桐桔梗茶、桐參茶、桐桔梗顆粒、桔梗湯等“清肺除塵”茶飲。
4、少量補(bǔ)充維生素D。
5、飲食清淡多喝蜂蜜水.
7、盡量減少吸煙甚至不吸煙。
第七章、總結(jié)
隨著霧霾天氣的肆虐,我們有理由且必要的做一些措施來注意我們身邊空氣的PM2.5/10,而本設(shè)計這是基于這點(diǎn),應(yīng)用所學(xué)的知識,制作一個經(jīng)濟(jì),簡單,實(shí)用的多功能PM2.5/10濃度檢測儀。
在設(shè)計中PM2.5激光傳感器采集空氣中PM2.5和PM10的濃度值,經(jīng)過Arduino unoR3開發(fā)板處理后,在八位數(shù)碼管上顯示,并且設(shè)置一個報警值,檢測的PM2.5濃度值超過報警值后,蜂鳴器報警。另外,該設(shè)計在實(shí)時檢測濃度的同時,根據(jù)當(dāng)前檢測濃度亮起相應(yīng)的燈,直觀的能告知觀測者當(dāng)前的濃度。
在本設(shè)計中,需要閱讀相應(yīng)的資料才能做出設(shè)計,對于資料的應(yīng)用和學(xué)習(xí)能力是很重要,這也算是這次設(shè)計給團(tuán)隊(duì)帶來的鍛煉。
當(dāng)然在設(shè)計完成后,本著一開始設(shè)計的實(shí)用性的出發(fā)點(diǎn),進(jìn)行了三個檢測試驗(yàn),一方面檢測設(shè)計的可操作性和實(shí)用性,另一方面也是讓自己對PM2.5和PM10的產(chǎn)生有了直觀的了解。
最后很高心能夠通過團(tuán)隊(duì)的努力,運(yùn)用所學(xué)順利完成了該設(shè)計。
參考文獻(xiàn)
Arduino unoR3開發(fā)板用戶手冊
PM2.5激光傳感器用戶手冊
595驅(qū)動八位數(shù)碼管用戶手冊
Arduino程序設(shè)計基礎(chǔ)(第二版)陳呂州
Arduino編程從零開始 Simon Monk
C程序設(shè)計教程(第二版)譚浩強(qiáng)
附錄:程序
- const unsigned char dula[10]=
- {
- 0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f
- };//0到9的段碼
- unsigned char const wela[]=
- {
- 0xfe,0xfd,0xfb,0xf7,
- 0xef,0xdf,0xbf,0x7f
- };//1到7的位碼
-
-
- unsigned char location[8];
- unsigned int Pm25=0;//初始化P2.5
- unsigned int Pm10=0;//初始化P10
- long previousMillis = 0;// 1s的時間間隔,
-
-
- void jinbao()//報警模塊
- {
- int i=1500;
- tone(9,i);
- }
-
-
- void SendByte1(unsigned char dat)
- {
- int CLK = 12;int SER = 11;
- unsigned char i;
- for(i=0;i<8;i++)
- {
- digitalWrite(CLK,0);
- digitalWrite(SER,bitRead(dat,7-i));
- digitalWrite(CLK,1);
- }
- }
-
- void SendByte2(unsigned char x,unsigned char y)//收集PM10和PM25并且發(fā)送給sendbyte1
- {
- SendByte1(x);
- SendByte1(y);
- }
- void latch(void)//鎖住模塊,傳感器傳來的數(shù)據(jù)
- {
- int ST = 13;
- digitalWrite(ST,1);
- digitalWrite(ST,0);
- }
-
-
- void PM25(unsigned int v)//PM25按照個十百分離模塊
- {
- int i;
- if(v/1000)
- {
- location[0]=dula[v/1000%10];
- location[1]=dula[v/100%10];
- location[2]=dula[v/10%10];
- }
- else
- {
- if((v/100) != 0)
- location[0]=dula[v/100%10];
- location[1]=dula[v/10%10]|0x80;
- location[2]=dula[v%10];
- }
- for(i=0;i<8;i++)
- {
- SendByte2(wela[i],location[i]);
- latch();
- }
- }
-
-
- void PM10(unsigned int v)//PM10按照個十百分離模塊
- {
-
- int i;
- if(v/1000)
- {
- location[4]=dula[v/1000%10];
- location[5]=dula[v/100%10];
- location[6]=dula[v/10%10];
- }
- else
- {
- if((v/100) != 0)
- location[4]=dula[v/100%10];
- location[5]=dula[v/10%10]|0x80;
- location[6]=dula[v%10];
- }
- for(i=0;i<8;i++)
- {
- SendByte2(wela[i],location[i]);
- latch();
- }
- }
- void Display()//顯示模塊
- {
- int i;
- for(i=0;i<8;i++)
- location[i]=0;
- PM25(Pm25);
- PM10(Pm10);
- }
- void serialsend()//串口數(shù)據(jù)模塊
- {
- uint8_t mData = 0;//無符號8位
- uint8_t i = 0;//無符號8位
- uint8_t mPkt[10] = {0};//無符號8位
- uint8_t mCheck= 0;//無符號8位
- while (Serial.available() > 0) //串口接收到了數(shù)據(jù)
- {
- mData = Serial.read(); //讀取發(fā)送的數(shù)據(jù)
- delay(10);//延時收集數(shù)據(jù)
- if(mData == 0xAA)
- {
- mPkt[0] = mData;
- mData = Serial.read();
- delay(10);
- if(mData == 0xc0)
- {
- mPkt[1] = mData;
- mCheck = 0;
- for(i=0;i < 6;i++)
- {
- mPkt[i+2] = Serial.read();
- mCheck += mPkt[i+2];
- }
- mPkt[8] = Serial.read();
- delay(10);
- mPkt[9] = Serial.read();
- if(mCheck == mPkt[8])//檢驗(yàn)好了
- {
- Serial.flush();
- Pm25 = mPkt[2] | (mPkt[3]<<8);
- Pm10 = mPkt[4] | (mPkt[5]<<8);
- if(Pm25 > 9999)
- Pm25 = 9999;
- if(Pm10 > 9999)
- Pm10 = 9999; //得到一個好的數(shù)據(jù)
-
-
- int Button = digitalRead(2); //讀到的狀態(tài)值
- if(Button==0)
- {
- delay(10);
- if(Button==0) //延時消抖處理
- {
- switch (Pm10/100)
- {
- case 0 :digitalWrite(3,HIGH); break;
- case 1 :digitalWrite(3,HIGH); break;
- case 2 :digitalWrite(3,HIGH); break;
- case 3 :digitalWrite(3,HIGH);break;
- case 4 :digitalWrite(4,HIGH); break;
- case 5 :digitalWrite(4,HIGH); break;
- case 6 :digitalWrite(4,HIGH); break;
- case 7 :digitalWrite(4,HIGH); break;
- case 8 :digitalWrite(5,HIGH); break;
- case 9 :digitalWrite(5,HIGH); break;
- case 10 :digitalWrite(5,HIGH); break;
- case 11 :digitalWrite(5,HIGH); break;
- default: digitalWrite(3,HIGH);digitalWrite(4,HIGH); digitalWrite(5,HIGH);jinbao();break;
-
- }
- }
- }
- else
- {
- digitalWrite(3,LOW); digitalWrite(4,LOW);digitalWrite(5,LOW); digitalWrite(9,LOW);
- }
-
- int Button1 = digitalRead(10); //讀取的狀態(tài)值
- if(Button1==0)
- {
- delay(10);
- if(Button1==0) //延時消抖處理
- {
- switch (Pm25/100)
- {
- case 0 :digitalWrite(8,HIGH); break;
- case 1 :digitalWrite(8,HIGH); break;
- case 2 :digitalWrite(8,HIGH); break;
- case 3 :digitalWrite(8,HIGH);break;
- case 4 :digitalWrite(7,HIGH); break;
- case 5 :digitalWrite(7,HIGH); break;
- case 6 :digitalWrite(7,HIGH); break;
- case 7 :digitalWrite(7,HIGH); break;
- case 8 :digitalWrite(6,HIGH); break;
- case 9 :digitalWrite(6,HIGH); break;
- case 10:digitalWrite(6,HIGH); break;
- case 11 :digitalWrite(6,HIGH); break;
- default:digitalWrite(8,HIGH); digitalWrite(7,HIGH);digitalWrite(6,HIGH);jinbao(); break;
-
- }
- }
- }
- else
- {
- digitalWrite(8,LOW); digitalWrite(7,LOW);digitalWrite(6,LOW); digitalWrite(9,LOW);
- }
- }
- }
- }
- }
- }
- void setup()
- {
- pinMode(2, INPUT_PULLUP);pinMode(3,OUTPUT);pinMode(4,OUTPUT);
- pinMode(5,OUTPUT);pinMode(6,OUTPUT);pinMode(7,OUTPUT);
- pinMode(8,OUTPUT);pinMode(9,OUTPUT);pinMode(10, INPUT_PULLUP);
- pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT);
- Serial.begin(9600,SERIAL_8N1);
- Display();
- }
- void loop()
- {
- serialsend();
- Display();
- }
復(fù)制代碼