久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7109|回復: 1
收起左側

環境監測儀 單片機接口設計實驗報告

[復制鏈接]
ID:137190 發表于 2016-9-24 15:33 | 顯示全部樓層 |閱讀模式
《單片機接口設計》
環境測試儀

實驗報告

業:電氣與電子工程學院
級:14012
號:20142525
名:呂坤
指導教師:何朝峰
完成日期:20160905

摘要
隨著科技的不斷發展,在人們的生活日益提高的同時,也帶來了不可忽視的環境方面的問題,人們生活品味不斷提高,健康意識越來越受到重視。所以周邊環境的質量成了人們議論的話題,現在市面上的各種監測儀多的數不勝數,基于此,我設計了一個基于宏晶單片機STC12C5A60S2、DHT12傳感器、熱釋電紅外傳感器模塊、GP2Y1010AU0F監測儀的一個可便攜式的可智能顯示的環境測試儀,可以隨時隨地檢測周圍環境的溫度、濕度以及PM2.5顆粒濃度,讓我們能方便觀察周圍的環境狀況,對周圍環境做出正確的判斷,此設計電路簡單,器件少,程序系統,很便于學習和應用。
關鍵詞
STC12C5A60S2、DHT12、GP2Y1010AU0F、熱釋電紅外傳感器、環境測試

一、設計題目:   環境監測儀
二、設計目的:
隨著科技的不斷發展,在人們的生活日益提高的同時,也帶來了不可忽視的環境方面的問題,人們生活品味不斷提高,健康意識越來越受到重視。所以周邊環境的質量成了人們議論的話題,現在市面上的各種監測儀多的數不勝數,基于此,我設計了一個基于宏晶單片機STC12C5A60S2、藍宙oled、DHT12傳感器、GP2Y1010AU0F監測儀的一個可便攜式的智能顯示的環境測試儀,可以隨時隨地檢測周圍環境的溫度、濕度以及PM2.5顆粒濃度,讓我們能方便觀察周圍的環境狀況,對周圍環境做出正確的判斷,此設計電路簡單,器件少,程序系統,很便于學習和應用。
三、設計任務:
根據硬件連接,和編程互補,達到用stc單片機控制DHT12與GP2Y1010AU0F兩個傳感器達到各自的功能要求,采集到各自的數據,供單片機調用再通過藍宙oled顯示出溫度,濕度,pm2.5粉塵濃度值,可以直觀地被我們所看到。
四、所用器件:
USB電源、單排插針、10kΩ20kΩ電阻若干、33pF電容、12MHz晶振、22uF電容、220uF電容、DHT12傳感器、8050三極管、GP2Y1010AU0F傳感器、藍宙oled屏幕、熱釋電紅外傳感器、STC12C5A60S2傳感器。
五、電路方案設計
電源供電模塊
1.001.jpg

最小系統模塊以及oled模塊
1.002.jpg
兩個主要傳感器模塊
1.003.jpg
1.004.jpg
PCB以及電路板3D板模型生成

1.005.jpg

1.006.jpg
實物圖
1.007.jpg
六、實驗模塊程序
在焊接完電路以后,就開始進入調試步驟下面是一些模塊的大致程序
(由于程序過多,只提及各模塊主程序部分)
  1. //**************pm2.5主程序***************//
  2. //****單片機產生時序,然后副機發出回應信號,然后再AD取樣,再進行數據轉換,發送給主函數****//
  3. for(i=0;i<5;i++)
  4.   {PM2_5=0;
  5. Delay9800us();
  6. PM2_5=1;
  7. Delay270us();
  8. k=!k;
  9. ADC_CONTR|=0x08;//啟動A/D轉換
  10. status=0;
  11. while(status==0)//等待A/D轉換結束
  12. {status=ADC_CONTR&0x10;}
  13. ADC_CONTR&=0xE7;//將ADC_FLAG清0
  14. result=ADC_RES;
  15. if(result<31)
  16. {result=0;}
  17. VAL =result*5/256;// 將上面的數字量轉換成電壓值
  18. Density = (VAL*0.17 -0.1)*1000;//放大數值一千倍
  19. if(Density<0)//有符號禁止出現負號
  20. {Density=0;}
  21. Delay_30us();
  22. //UARTT(Density);//串口調試送數值顯示
  23.   }
  24. }
  25. //***********AD采集**********//ad初始化準備捕捉
  26. void GETPM()
  27. { unsigned long i;
  28. unsigned char status;
  29. ADC_CONTR|=0x80;//開A/D轉換電源,第一次使用時要打開內部模擬電源
  30. for(i=0;i<1000;i++);//適當延時
  31. P1ASF=0x04;//選擇A/D轉換通道
  32. //UARTInit();
  33. ADC_CONTR=0xE2;
  34. for(i=0;i<1000;i++);//適當延時            
  35. *****************************dht12主程序以及校驗***************************************
  36. 函數名:DHT12讀數據函數
  37. 參  數:無
  38. 返回值:失敗->-1,-2,-3,-4;成功->0
  39. **********************************************************************************************/
  40. char GetData (void)
  41. {       uchar i,j;                                //for循環變量
  42.         uchar t;                                //超時判斷
  43.         uchar dat8=0;                           //一次讀取的8位數據,需要讀5次

  44.         DATA = 0;                            //主機發起始信號
  45.         Delay20ms();                          //主機拉低總線至少18ms
  46.         DATA = 1;                              //主機拉高總線20~40us
  47.         Delay30us();
  48. t = 80;                                 //設置超時等待時間
  49.         while(DATA && t--);                      //等待DHT11拉低總線
  50.         if(t == 0)                               //超時
  51.         {
  52.                 DATA = 1;
  53.                 return -1;                     //通信錯誤退出,返回錯誤信號:-1
  54.         }

  55.         //等80us響應信號
  56.         t = 250;                                //設置超時等待時間
  57.         while(!DATA && t--);                    //等待DHT11拉高總線
  58.         if(t == 0)                               //超時
  59.         {
  60.                 DATA = 1;
  61.                 return -2;                      //通信錯誤退出,返回錯誤信號:-2
  62.         }

  63.         //等80us響應信號
  64.         t = 250;                                //設置超時等待時間
  65.         while(DATA && t--);                      //等待DHT11拉低總線
  66.         if(t == 0)                               //超時
  67.         {
  68.                 DATA = 1;
  69.                 return -3;                      //通信錯誤退出,返回錯誤信號:-3
  70.         }

  71.         for(j=0; j<5; j++)                        //5次讀取
  72.         {
  73.                 for(i=0; i<8; i++)                //1次8個位
  74.                 {
  75.                                               //等待50us開始時隙
  76.          t = 150;                               //設置超時等待時間
  77.          while(!DATA && t--);                    //等待DHT11拉高總線
  78.         if(t == 0)                             //超時
  79.          { DATA = 1;
  80.          return -4;                           //通信錯誤退出,返回錯誤信號:-4
  81.         }
  82.         t = 0;                                 //記錄時間清零
  83.         while(DATA && ++t);                   //等待并記錄高電平持續時間
  84.          dat8 <<= 1;
  85.          if(t > JUDGE)                          //高電平持續時間較長(70us)
  86.         dat8 += 1;                            //傳輸值為1
  87.          }
  88. dat_r[j] = dat8;
  89.         }
  90. Delay30us();                                   //等待DHT11拉低50us
  91. Delay30us();
  92. DATA = 1;                                      //結束,拉高總線
  93. return 0;                                      //返回成功信號
  94. }
  95. //************校驗函數************//
  96. char Check (void)
  97. {       uchar i;                                //for循環變量
  98.         uint chk=0;                              //校驗和
  99.         for(i=0; i<4; i++)
  100.                 chk += dat_r[i];                  //累加
  101.         if((uchar)chk != dat_r[4])                 //比對
  102.                 return -1;                      //返回錯誤信號:-1
  103.         else
  104.                 return 0;                        //返回正確信號:0
  105. }

  106. /********************讀值函數************************/
  107. void duTH(void)
  108. {
  109.         char i,f;
  110.        // UART_Init();                           //串口初始化
  111.         Delay1s();                              //等待DHT11穩定
  112.        for(f=0;f<2;f++)
  113.         {
  114.                 i = GetData();                    //讀數據
  115.                 if(i != 0)                        //有錯誤
  116.                 {
  117.                        // UART_T(-i);           //返回錯誤值
  118.                         break;                //重新開始
  119.                 }

  120.                 i = Check();                    //數據校驗
  121.                 if(i != 0)                       //有錯誤
  122.                 {
  123.                   //UART_T(-i);               //返回錯誤值
  124.                  break; }                     //重新開始

  125. sg=dat_r[0];
  126.                                                         wg=dat_r[2];
  127.                                                           Delay20ms();
  128.                                                           Delay20ms();
  129.                                                           Delay20ms();
  130.                                                           Delay20ms();  
  131.                                                           Delay20ms();                                
  132.         }
  133. }
  134. /**************************oled主函數*******************************/
  135. int main(void)
  136. {              //u8 t;
  137. //delay_init();                                                //延時函數初始化               
  138.      //              NVIC_Configuration();               //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級               LED_Init();              //LED端口初始化
  139.                             OLED_Init();                                          //初始化OLED
  140.                             OLED_Clear()                ;
  141. while(1)
  142.               {//OLED_Clear();
  143.                             duTH();
  144.                             GETPM();
  145.                             XS();              //讀溫濕度函數的wg,sg,}
  146. void XS(void)       /////顯示函數
  147. {         OLED_ShowCHinese(0,0,0);//石 (顯示的每行數y加2,列數x可根據需要進行調節)
  148.                             OLED_ShowCHinese(18,0,1);//家
  149.                             OLED_ShowCHinese(36,0,2);//莊
  150.                             OLED_ShowCHinese(54,0,3);//鐵
  151.                             OLED_ShowCHinese(72,0,4);//道
  152.                             OLED_ShowCHinese(90,0,5);//大
  153.                             OLED_ShowCHinese(108,0,6);//學
  154.                             OLED_ShowCHinese(42,6,7);//℃
  155.               //              OLED_ShowString(0,2,"1.3' OLED TEST");
  156.                             OLED_ShowString(14,2,"2016/09/01/4");  //2016/08/22/5
  157.                             OLED_ShowString(2,4,"PM2.5:");//PM2.5:
  158.                             OLED_ShowString(86,4,"ug/m3");//ug/m3
  159.                             OLED_ShowString(0,6,"T:"); // T:
  160.                             OLED_ShowString(65,6,"H:");// H:
  161.                             OLED_ShowString(104,6,"%");// %
  162.                             OLED_ShowNum(60,4,Density,3,16);
  163.                   OLED_ShowNum(18,6,wg,3,16); //變量溫度高位(整數位)的顯示
  164.                             OLED_ShowNum(80,6,sg,3,16);              }       // 變量濕度高位(整數位)的顯示                            */
復制代碼

         七、實驗過程及其結果(部分截圖)分別是(1)pm2.5采樣時刻與AD采集(2)pm2.5信號激發和產生(3)采集產生信號的間斷信號(4)DHT11輸出的一組數據波形時序
1.008.jpg
1.009.jpg
1.010.jpg
1.011.jpg
八、實驗總結與心得
這次設計用了很多的時間,尤其是設計和編程部分,要考慮各種電壓電流大小合適,調各種時序,要收集各種數據,還要根據數據做出函數,在過程中會用到不同的軟件與工具,還有各種的儀器,在這次制作中,幾乎所有的東西都要熟悉再匯運用,真的讓自己在這個過程中不僅學會耐心,細心,恒心,重要的是一種態度,一種方法,一種認真。希望以后自己可以不斷提高。


附錄
主要器件簡介
藍宙OLED 簡介:
OLED,即有機發光二極管(Organic Light-Emitting Diode),又稱為有機電激光顯示(Organic Electroluminesence Display, OELD),其顯示技術與傳統的LCD顯示方式不同,無需背光源,而是采用很薄的有機材料涂層和玻璃基板,當電流流過時,有材料自己發光,相比傳統LCD顯示屏,其更輕更薄,可視角度更大,柔軟環保且更省電。因為具備輕薄、省電等特性,因此從 2003年開始,這種顯示設備在MP3播放器上得到了廣泛應用,而對于同屬數碼類產品的DC 與手機,此前只是在一些展會上展示過采用 OLED屏幕的工程樣品。自2007年后,壽命得到很大提高,具備了許多 LCD 不可比擬的優勢。
DHT12簡介:
DHT12 數字式溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合型傳感器,為 DHT11 的升級產品。它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有較高的可靠性與卓越的長期穩定性。
應用:暖通空調 、除濕器、測試及檢測設備、消費品、汽車 、自動控制、數據記錄器、氣象站、家電、濕度調節、醫療 、及其他相關濕度檢測控制。
DHT12 具有單總線和標準 I2C 兩種通訊,且單總線通訊方式完全兼容 DHT11。標準單總線接口,使系統集成變得簡易快捷。具有超小的體積、較低的功耗,適合多種多樣的應用場合。I2C 通信方式采用標準的通信時序,用戶可直接掛在 I2C 通信總線上,無需額外布線,使用簡單。兩種通信方式可自由切換,用戶可自由選擇使用方便,應該領域廣泛。產品為 4 引線,連接方便,特殊封裝形式可根據用戶需求而提供。
Pm2.5傳感器簡介:
GP2Y1010AU0F是一款光學空氣質量傳感器,設計用來感應空氣中的塵埃粒子,其內部對角安放著紅外線發光二極管和光電晶體管,使得其能夠探測到空氣中塵埃反射光,即使非常細小的如煙草煙霧顆粒也能夠被檢測到,通常在空氣凈化系統中應用。
該傳感器具有非常低的電流消耗(最大20mA,典型值11mA),可使用高達7VDC。該傳感器輸出為模擬電壓,其值與粉塵濃度成正比。
參考文獻:
百度百科、百度文庫、百度貼吧
郭天祥視頻教程
Altium Designer快速入門
模擬電子技術基礎簡明教程
C語言程序設計

單片機接口設計.docx

860.89 KB, 下載次數: 22, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:681612 發表于 2020-1-5 19:31 | 顯示全部樓層
謝謝樓主,對我的幫助很大!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕a√ | 亚洲91精品 | 国产成人精品午夜视频免费 | 亚洲精品456 | www.色午夜.com | 精品国产91| 久久99国产精一区二区三区 | 亚州成人| 一区二区不卡 | 成人综合一区 | 国产一二三区精品视频 | 欧美在线一区二区三区 | 天天操天天插 | 男人天堂午夜 | 在线91| 在线视频成人 | 九九热国产精品视频 | 在线免费国产视频 | 国产精品久久久久久久久久妇女 | 国产精品国产三级国产播12软件 | 99爱在线免费观看 | 亚洲一区在线观看视频 | 蜜臀91视频 | 九九精品在线 | www久久av | 午夜专区 | caoporn国产精品免费公开 | 欧美成人免费在线视频 | 亚洲一区二区三区视频 | 欧美中文一区 | 亚洲精品一区二区三区免 | 久久蜜桃资源一区二区老牛 | 亚洲免费在线视频 | 九九久久精品 | 久久99国产精品 | 欧美亚洲另类丝袜综合网动图 | 91天堂网 | 欧美一区二区三区在线观看 | 性高朝久久久久久久3小时 av一区二区三区四区 | av高清 | 国产亚洲成av人片在线观看桃 |