《單片機(jī)接口設(shè)計(jì)》 環(huán)境測(cè)試儀
實(shí)驗(yàn)報(bào)告
專業(yè):電氣與電子工程學(xué)院 班級(jí):電1401—2 學(xué)號(hào):20142525 姓名:呂坤 指導(dǎo)教師:何朝峰 完成日期:20160905
摘要 隨著科技的不斷發(fā)展,在人們的生活日益提高的同時(shí),也帶來(lái)了不可忽視的環(huán)境方面的問(wèn)題,人們生活品味不斷提高,健康意識(shí)越來(lái)越受到重視。所以周邊環(huán)境的質(zhì)量成了人們議論的話題,現(xiàn)在市面上的各種監(jiān)測(cè)儀多的數(shù)不勝數(shù),基于此,我設(shè)計(jì)了一個(gè)基于宏晶單片機(jī)STC12C5A60S2、DHT12傳感器、熱釋電紅外傳感器模塊、GP2Y1010AU0F監(jiān)測(cè)儀的一個(gè)可便攜式的可智能顯示的環(huán)境測(cè)試儀,可以隨時(shí)隨地檢測(cè)周圍環(huán)境的溫度、濕度以及PM2.5顆粒濃度,讓我們能方便觀察周圍的環(huán)境狀況,對(duì)周圍環(huán)境做出正確的判斷,此設(shè)計(jì)電路簡(jiǎn)單,器件少,程序系統(tǒng),很便于學(xué)習(xí)和應(yīng)用。 關(guān)鍵詞 STC12C5A60S2、DHT12、GP2Y1010AU0F、熱釋電紅外傳感器、環(huán)境測(cè)試
一、設(shè)計(jì)題目: 環(huán)境監(jiān)測(cè)儀 二、設(shè)計(jì)目的: 隨著科技的不斷發(fā)展,在人們的生活日益提高的同時(shí),也帶來(lái)了不可忽視的環(huán)境方面的問(wèn)題,人們生活品味不斷提高,健康意識(shí)越來(lái)越受到重視。所以周邊環(huán)境的質(zhì)量成了人們議論的話題,現(xiàn)在市面上的各種監(jiān)測(cè)儀多的數(shù)不勝數(shù),基于此,我設(shè)計(jì)了一個(gè)基于宏晶單片機(jī)STC12C5A60S2、藍(lán)宙oled、DHT12傳感器、GP2Y1010AU0F監(jiān)測(cè)儀的一個(gè)可便攜式的智能顯示的環(huán)境測(cè)試儀,可以隨時(shí)隨地檢測(cè)周圍環(huán)境的溫度、濕度以及PM2.5顆粒濃度,讓我們能方便觀察周圍的環(huán)境狀況,對(duì)周圍環(huán)境做出正確的判斷,此設(shè)計(jì)電路簡(jiǎn)單,器件少,程序系統(tǒng),很便于學(xué)習(xí)和應(yīng)用。 三、設(shè)計(jì)任務(wù): 根據(jù)硬件連接,和編程互補(bǔ),達(dá)到用stc單片機(jī)控制DHT12與GP2Y1010AU0F兩個(gè)傳感器達(dá)到各自的功能要求,采集到各自的數(shù)據(jù),供單片機(jī)調(diào)用再通過(guò)藍(lán)宙oled顯示出溫度,濕度,pm2.5粉塵濃度值,可以直觀地被我們所看到。 四、所用器件: USB電源、單排插針、10kΩ20kΩ電阻若干、33pF電容、12MHz晶振、22uF電容、220uF電容、DHT12傳感器、8050三極管、GP2Y1010AU0F傳感器、藍(lán)宙oled屏幕、熱釋電紅外傳感器、STC12C5A60S2傳感器。 五、電路方案設(shè)計(jì) 電源供電模塊
1.001.jpg (7.68 KB, 下載次數(shù): 72)
下載附件
2016-9-24 15:31 上傳
最小系統(tǒng)模塊以及oled模塊
1.002.jpg (23.12 KB, 下載次數(shù): 59)
下載附件
2016-9-24 15:31 上傳
兩個(gè)主要傳感器模塊
1.003.jpg (12.19 KB, 下載次數(shù): 68)
下載附件
2016-9-24 15:31 上傳
1.004.jpg (12.23 KB, 下載次數(shù): 53)
下載附件
2016-9-24 15:31 上傳
PCB以及電路板3D板模型生成
1.005.jpg (46.13 KB, 下載次數(shù): 57)
下載附件
2016-9-24 15:31 上傳
1.006.jpg (20.78 KB, 下載次數(shù): 62)
下載附件
2016-9-24 15:31 上傳
實(shí)物圖
1.007.jpg (24.43 KB, 下載次數(shù): 51)
下載附件
2016-9-24 15:31 上傳
六、實(shí)驗(yàn)?zāi)K程序 在焊接完電路以后,就開(kāi)始進(jìn)入調(diào)試步驟下面是一些模塊的大致程序 (由于程序過(guò)多,只提及各模塊主程序部分) - //**************pm2.5主程序***************//
- //****單片機(jī)產(chǎn)生時(shí)序,然后副機(jī)發(fā)出回應(yīng)信號(hào),然后再AD取樣,再進(jìn)行數(shù)據(jù)轉(zhuǎn)換,發(fā)送給主函數(shù)****//
- for(i=0;i<5;i++)
- {PM2_5=0;
- Delay9800us();
- PM2_5=1;
- Delay270us();
- k=!k;
- ADC_CONTR|=0x08;//啟動(dòng)A/D轉(zhuǎn)換
- status=0;
- while(status==0)//等待A/D轉(zhuǎn)換結(jié)束
- {status=ADC_CONTR&0x10;}
- ADC_CONTR&=0xE7;//將ADC_FLAG清0
- result=ADC_RES;
- if(result<31)
- {result=0;}
- VAL =result*5/256;// 將上面的數(shù)字量轉(zhuǎn)換成電壓值
- Density = (VAL*0.17 -0.1)*1000;//放大數(shù)值一千倍
- if(Density<0)//有符號(hào)禁止出現(xiàn)負(fù)號(hào)
- {Density=0;}
- Delay_30us();
- //UARTT(Density);//串口調(diào)試送數(shù)值顯示
- }
- }
- //***********AD采集**********//ad初始化準(zhǔn)備捕捉
- void GETPM()
- { unsigned long i;
- unsigned char status;
- ADC_CONTR|=0x80;//開(kāi)A/D轉(zhuǎn)換電源,第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源
- for(i=0;i<1000;i++);//適當(dāng)延時(shí)
- P1ASF=0x04;//選擇A/D轉(zhuǎn)換通道
- //UARTInit();
- ADC_CONTR=0xE2;
- for(i=0;i<1000;i++);//適當(dāng)延時(shí)
- *****************************dht12主程序以及校驗(yàn)***************************************
- 函數(shù)名:DHT12讀數(shù)據(jù)函數(shù)
- 參 數(shù):無(wú)
- 返回值:失敗->-1,-2,-3,-4;成功->0
- **********************************************************************************************/
- char GetData (void)
- { uchar i,j; //for循環(huán)變量
- uchar t; //超時(shí)判斷
- uchar dat8=0; //一次讀取的8位數(shù)據(jù),需要讀5次
-
- DATA = 0; //主機(jī)發(fā)起始信號(hào)
- Delay20ms(); //主機(jī)拉低總線至少18ms
- DATA = 1; //主機(jī)拉高總線20~40us
- Delay30us();
- t = 80; //設(shè)置超時(shí)等待時(shí)間
- while(DATA && t--); //等待DHT11拉低總線
- if(t == 0) //超時(shí)
- {
- DATA = 1;
- return -1; //通信錯(cuò)誤退出,返回錯(cuò)誤信號(hào):-1
- }
-
- //等80us響應(yīng)信號(hào)
- t = 250; //設(shè)置超時(shí)等待時(shí)間
- while(!DATA && t--); //等待DHT11拉高總線
- if(t == 0) //超時(shí)
- {
- DATA = 1;
- return -2; //通信錯(cuò)誤退出,返回錯(cuò)誤信號(hào):-2
- }
-
- //等80us響應(yīng)信號(hào)
- t = 250; //設(shè)置超時(shí)等待時(shí)間
- while(DATA && t--); //等待DHT11拉低總線
- if(t == 0) //超時(shí)
- {
- DATA = 1;
- return -3; //通信錯(cuò)誤退出,返回錯(cuò)誤信號(hào):-3
- }
-
- for(j=0; j<5; j++) //5次讀取
- {
- for(i=0; i<8; i++) //1次8個(gè)位
- {
- //等待50us開(kāi)始時(shí)隙
- t = 150; //設(shè)置超時(shí)等待時(shí)間
- while(!DATA && t--); //等待DHT11拉高總線
- if(t == 0) //超時(shí)
- { DATA = 1;
- return -4; //通信錯(cuò)誤退出,返回錯(cuò)誤信號(hào):-4
- }
- t = 0; //記錄時(shí)間清零
- while(DATA && ++t); //等待并記錄高電平持續(xù)時(shí)間
- dat8 <<= 1;
- if(t > JUDGE) //高電平持續(xù)時(shí)間較長(zhǎng)(70us)
- dat8 += 1; //傳輸值為1
- }
- dat_r[j] = dat8;
- }
- Delay30us(); //等待DHT11拉低50us
- Delay30us();
- DATA = 1; //結(jié)束,拉高總線
- return 0; //返回成功信號(hào)
- }
- //************校驗(yàn)函數(shù)************//
- char Check (void)
- { uchar i; //for循環(huán)變量
- uint chk=0; //校驗(yàn)和
- for(i=0; i<4; i++)
- chk += dat_r[i]; //累加
- if((uchar)chk != dat_r[4]) //比對(duì)
- return -1; //返回錯(cuò)誤信號(hào):-1
- else
- return 0; //返回正確信號(hào):0
- }
-
- /********************讀值函數(shù)************************/
- void duTH(void)
- {
- char i,f;
- // UART_Init(); //串口初始化
- Delay1s(); //等待DHT11穩(wěn)定
- for(f=0;f<2;f++)
- {
- i = GetData(); //讀數(shù)據(jù)
- if(i != 0) //有錯(cuò)誤
- {
- // UART_T(-i); //返回錯(cuò)誤值
- break; //重新開(kāi)始
- }
-
- i = Check(); //數(shù)據(jù)校驗(yàn)
- if(i != 0) //有錯(cuò)誤
- {
- //UART_T(-i); //返回錯(cuò)誤值
- break; } //重新開(kāi)始
-
- sg=dat_r[0];
- wg=dat_r[2];
- Delay20ms();
- Delay20ms();
- Delay20ms();
- Delay20ms();
- Delay20ms();
- }
- }
- /**************************oled主函數(shù)*******************************/
- int main(void)
- { //u8 t;
- //delay_init(); //延時(shí)函數(shù)初始化
- // NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí) LED_Init(); //LED端口初始化
- OLED_Init(); //初始化OLED
- OLED_Clear() ;
- while(1)
- {//OLED_Clear();
- duTH();
- GETPM();
- XS(); //讀溫濕度函數(shù)的wg,sg,}
- void XS(void) /////顯示函數(shù)
- { OLED_ShowCHinese(0,0,0);//石 (顯示的每行數(shù)y加2,列數(shù)x可根據(jù)需要進(jìn)行調(diào)節(jié))
- OLED_ShowCHinese(18,0,1);//家
- OLED_ShowCHinese(36,0,2);//莊
- OLED_ShowCHinese(54,0,3);//鐵
- OLED_ShowCHinese(72,0,4);//道
- OLED_ShowCHinese(90,0,5);//大
- OLED_ShowCHinese(108,0,6);//學(xué)
- OLED_ShowCHinese(42,6,7);//℃
- // OLED_ShowString(0,2,"1.3' OLED TEST");
- OLED_ShowString(14,2,"2016/09/01/4"); //2016/08/22/5
- OLED_ShowString(2,4,"PM2.5:");//PM2.5:
- OLED_ShowString(86,4,"ug/m3");//ug/m3
- OLED_ShowString(0,6,"T:"); // T:
- OLED_ShowString(65,6,"H:");// H:
- OLED_ShowString(104,6,"%");// %
- OLED_ShowNum(60,4,Density,3,16);
- OLED_ShowNum(18,6,wg,3,16); //變量溫度高位(整數(shù)位)的顯示
- OLED_ShowNum(80,6,sg,3,16); } // 變量濕度高位(整數(shù)位)的顯示 */
復(fù)制代碼
七、實(shí)驗(yàn)過(guò)程及其結(jié)果(部分截圖)分別是(1)pm2.5采樣時(shí)刻與AD采集(2)pm2.5信號(hào)激發(fā)和產(chǎn)生(3)采集產(chǎn)生信號(hào)的間斷信號(hào)(4)DHT11輸出的一組數(shù)據(jù)波形時(shí)序
1.008.jpg (14.03 KB, 下載次數(shù): 56)
下載附件
2016-9-24 15:31 上傳
1.009.jpg (10.82 KB, 下載次數(shù): 45)
下載附件
2016-9-24 15:31 上傳
1.010.jpg (11.44 KB, 下載次數(shù): 43)
下載附件
2016-9-24 15:31 上傳
1.011.jpg (20.25 KB, 下載次數(shù): 62)
下載附件
2016-9-24 15:31 上傳
八、實(shí)驗(yàn)總結(jié)與心得 這次設(shè)計(jì)用了很多的時(shí)間,尤其是設(shè)計(jì)和編程部分,要考慮各種電壓電流大小合適,調(diào)各種時(shí)序,要收集各種數(shù)據(jù),還要根據(jù)數(shù)據(jù)做出函數(shù),在過(guò)程中會(huì)用到不同的軟件與工具,還有各種的儀器,在這次制作中,幾乎所有的東西都要熟悉再匯運(yùn)用,真的讓自己在這個(gè)過(guò)程中不僅學(xué)會(huì)耐心,細(xì)心,恒心,重要的是一種態(tài)度,一種方法,一種認(rèn)真。希望以后自己可以不斷提高。
附錄 主要器件簡(jiǎn)介 藍(lán)宙OLED 簡(jiǎn)介: OLED,即有機(jī)發(fā)光二極管(Organic Light-Emitting Diode),又稱為有機(jī)電激光顯示(Organic Electroluminesence Display, OELD),其顯示技術(shù)與傳統(tǒng)的LCD顯示方式不同,無(wú)需背光源,而是采用很薄的有機(jī)材料涂層和玻璃基板,當(dāng)電流流過(guò)時(shí),有材料自己發(fā)光,相比傳統(tǒng)LCD顯示屏,其更輕更薄,可視角度更大,柔軟環(huán)保且更省電。因?yàn)榫邆漭p薄、省電等特性,因此從 2003年開(kāi)始,這種顯示設(shè)備在MP3播放器上得到了廣泛應(yīng)用,而對(duì)于同屬數(shù)碼類產(chǎn)品的DC 與手機(jī),此前只是在一些展會(huì)上展示過(guò)采用 OLED屏幕的工程樣品。自2007年后,壽命得到很大提高,具備了許多 LCD 不可比擬的優(yōu)勢(shì)。 DHT12簡(jiǎn)介: DHT12 數(shù)字式溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合型傳感器,為 DHT11 的升級(jí)產(chǎn)品。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有較高的可靠性與卓越的長(zhǎng)期穩(wěn)定性。 應(yīng)用:暖通空調(diào) 、除濕器、測(cè)試及檢測(cè)設(shè)備、消費(fèi)品、汽車 、自動(dòng)控制、數(shù)據(jù)記錄器、氣象站、家電、濕度調(diào)節(jié)、醫(yī)療 、及其他相關(guān)濕度檢測(cè)控制。 DHT12 具有單總線和標(biāo)準(zhǔn) I2C 兩種通訊,且單總線通訊方式完全兼容 DHT11。標(biāo)準(zhǔn)單總線接口,使系統(tǒng)集成變得簡(jiǎn)易快捷。具有超小的體積、較低的功耗,適合多種多樣的應(yīng)用場(chǎng)合。I2C 通信方式采用標(biāo)準(zhǔn)的通信時(shí)序,用戶可直接掛在 I2C 通信總線上,無(wú)需額外布線,使用簡(jiǎn)單。兩種通信方式可自由切換,用戶可自由選擇使用方便,應(yīng)該領(lǐng)域廣泛。產(chǎn)品為 4 引線,連接方便,特殊封裝形式可根據(jù)用戶需求而提供。 Pm2.5傳感器簡(jiǎn)介: GP2Y1010AU0F是一款光學(xué)空氣質(zhì)量傳感器,設(shè)計(jì)用來(lái)感應(yīng)空氣中的塵埃粒子,其內(nèi)部對(duì)角安放著紅外線發(fā)光二極管和光電晶體管,使得其能夠探測(cè)到空氣中塵埃反射光,即使非常細(xì)小的如煙草煙霧顆粒也能夠被檢測(cè)到,通常在空氣凈化系統(tǒng)中應(yīng)用。 該傳感器具有非常低的電流消耗(最大20mA,典型值11mA),可使用高達(dá)7VDC。該傳感器輸出為模擬電壓,其值與粉塵濃度成正比。 參考文獻(xiàn): 百度百科、百度文庫(kù)、百度貼吧 郭天祥視頻教程 Altium Designer快速入門 模擬電子技術(shù)基礎(chǔ)簡(jiǎn)明教程 C語(yǔ)言程序設(shè)計(jì)
|