欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4974|回復(fù): 1
收起左側(cè)

STM32單片機微氣候監(jiān)測系統(tǒng) 空氣檢測儀 源程序與原理圖

[復(fù)制鏈接]
ID:706202 發(fā)表于 2021-5-2 14:11 | 顯示全部樓層 |閱讀模式
本文提出了一種基于 STM32單片機的低功耗、高性能的自動氣象站數(shù)據(jù)采集系統(tǒng)設(shè)計方案。詳細(xì)介紹了系統(tǒng)軟件的設(shè)計方法,實現(xiàn)了數(shù)據(jù)的采集、處理及存儲,并提供良好的 人機交互接口,實現(xiàn)自動氣象站數(shù)據(jù)的實時顯示與菜單化的界面管理功能。利用ESP8266模塊用wifi將氣象站和移動端相連接,達到遠(yuǎn)程數(shù)據(jù)傳輸和監(jiān)控氣象數(shù)據(jù)的目的。
    接下來的內(nèi)容介紹了當(dāng)前氣象站的發(fā)展現(xiàn)狀,分析了一個氣象站需要具備的特性以及功能,確立了氣象站的設(shè)計目標(biāo)以及總體設(shè)計方案,并介紹了該氣象站系統(tǒng)的硬件組成及設(shè)計理念,分析了所選元器件的優(yōu)勢及特性。最后通過局域網(wǎng)將氣象站及用戶連接起來,達到實時傳輸數(shù)據(jù)的功能。
    該氣象站從實際應(yīng)用出發(fā),實現(xiàn)了數(shù)據(jù)的自動采集及傳輸,具有體積小、成本低、功耗低、采集速度快等優(yōu)點,經(jīng)過包裝后能夠在實際應(yīng)用中協(xié)助氣象工作的進行,具有一定的前景。

與傳統(tǒng)式氣象采集工具相比較,采用微氣候監(jiān)測系統(tǒng)作為主要觀測工具將帶來以下明顯優(yōu)點:
(1)擴展氣象觀測的區(qū)域與密度
    自動氣象站可以工作在惡劣環(huán)境下,并且不需要固定工作人員值守。既實現(xiàn)了無人惡劣區(qū)
域的氣象信息的觀測又降低了人力成本,提高了社會經(jīng)濟效益。
(2)提高氣象觀測的可靠性
自動氣象監(jiān)測系統(tǒng)采用最新技術(shù),傳感器性能相對優(yōu)異,其采集到的數(shù)據(jù)準(zhǔn)確且可靠,并 且自動氣象站通常采用一定的數(shù)據(jù)處理算法,進一步提高數(shù)據(jù)的可靠性。
  • 改善氣象監(jiān)測成本
    自動氣象站安裝維護方便,不需要固定人員值守,并且體積小,成本低,與專業(yè)人員觀測 相比大大降低了業(yè)務(wù)費用。
(4)易于遠(yuǎn)程監(jiān)控
    多臺自動氣象站通常可以組成觀測網(wǎng),相互之間通過互聯(lián)網(wǎng)進行聯(lián)系,觀測人員通過專用 配套軟件可以方便的對各氣象站進行監(jiān)測與維護。
自動氣象站的核心是氣象傳感器,氣象傳感器的性能直接決定采集到的信息是否可靠準(zhǔn)確,一 套自動氣象站是否良好直接受限于氣象傳感器,因此,研發(fā)性能優(yōu)異的氣象傳感器是設(shè)計自動氣象  站的首要任務(wù)之一。
    因此,一個現(xiàn)代的氣象站具有集成度高,無人值守,全天候工作,精度高,可靠性高等一系列優(yōu)點。
3 系統(tǒng)方案架構(gòu)及工作原理   
   設(shè)計任務(wù) 以stm32為核心,加上多種傳感器組合,將采集到的氣象數(shù)據(jù)顯示在LCD屏幕上,同時可以通過串口通信以及wifi通信,將采集到的數(shù)據(jù)實時的傳輸回PC端及移動端。
   
圖1功能實現(xiàn)流程圖
4 系統(tǒng)硬件設(shè)計
總的設(shè)計原理圖
2 項目原理圖
3 項目引腳定義圖
4.1 硬件選型
   (1)主板采用的是STM32F103C8T6核心板,性價比高,有著較低廉的的價格以及良好且低耗的性能。
4 STM32F103C8T6原理
  • 顯示屏選用TFT1.44寸屏幕模塊,用于顯示傳感器采集的數(shù)據(jù)。
  • DHT11溫濕度模塊,用于采集溫濕度數(shù)據(jù)。
5 DHT11溫濕度模塊原理
  • 光敏傳感器,光敏電阻用于采集光照強度數(shù)據(jù)。
6 光敏傳感器原理
(5)霍爾傳感器測速模塊,用于采集風(fēng)速數(shù)據(jù)。
7 霍爾傳感器測速模塊原理
(6)ESP8266wifi模塊,通過wifi進行數(shù)據(jù)傳輸,將數(shù)據(jù)傳輸回移動端。氣壓檢測模塊,通過氣壓檢測推算出所在地的海拔高度。
8ESP8266wifi模塊原理
(7) PM2.5模塊,檢測所在地的PM2.5濃度值。
8ESP8266wifi模塊原理
4.2 功能說明
(1)通過傳感器采集多種氣象數(shù)據(jù),將其顯示在屏幕上。
(2)每隔五秒可以通過網(wǎng)絡(luò)調(diào)試助手傳輸一次數(shù)據(jù)回PC端
(3)通過wifi模塊將數(shù)據(jù)傳輸回移動端
9 功能說明
5 調(diào)試與實驗結(jié)果
10 硬件成品
11 數(shù)據(jù)傳回
12 數(shù)據(jù)清理后的
13 BI做的界面
6 結(jié)束語
    本文提出了一種基于STM32單片機的低能耗微氣候監(jiān)測系統(tǒng)的設(shè)計方案。詳細(xì)介紹了系統(tǒng)的設(shè)計方法,實現(xiàn)了數(shù)據(jù)的采集、處理和存儲,并提供了良好的人機交互接口。通過ESP8266模塊可以與移動端設(shè)備進行實時通信。達到遠(yuǎn)程數(shù)據(jù)實時傳輸和監(jiān)控的目的。所設(shè)計的自動氣象站數(shù)據(jù)采集系統(tǒng)具有體積小、成本低、功耗低、采集速度快等優(yōu)點,完全滿足了實際的需要。
  • 在硬件方面采用了模塊化的設(shè)計,當(dāng)工作環(huán)境變化是只需要將新的模塊加入到系統(tǒng)中并對其進行簡單的配置和升級后即可使用,大大提高了系統(tǒng)的可擴展性。
  • 利用了STM32芯片低耗高效的原則,且不采用復(fù)雜的嵌入式操作系統(tǒng)軟件設(shè)計,使得氣象站低功耗的要求成為現(xiàn)實。
  • 設(shè)計的人機界面簡潔、直觀、可操作性強,不需要專業(yè)的維護人員便可以維持氣象站的運行和簡單的維護功能,提高了系統(tǒng)的靈活性。
本文所設(shè)計的氣象數(shù)據(jù)采集系統(tǒng)觀測精度高、自動化程序高、性價比高,可適應(yīng)
各種艱苦條件下的工作環(huán)境,長時間全天候不間斷地進行氣象要素觀測,具有良好的可靠性和穩(wěn)定性。這些特點使得系統(tǒng)具有很高的應(yīng)用價值和廣闊的市場前景。

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "led.h"
  4. #include "uart.h"
  5. #include "Lcd_Driver.h"
  6. #include "TFT_demo.h"
  7. #include "GUI.h"
  8. #include "dht11.h"
  9. #include "speed.h"
  10. #include "adc.h"
  11. #include "bmp180.h"
  12. #include "AT_ESP.h"
  13. #include "key.h"

  14. u32 TimingDelay = 0;                                          //用于延時函數(shù)計數(shù)
  15. u32 dht11_temp;                                                                      //獲取溫濕度
  16. u32 temperature_val = 0;       //溫度值
  17. u32 humidity_val = 0;                                          //濕度值
  18. u16 led_count = 0;                                                        //LED計數(shù)閃爍
  19. u16 light_val = 0;                                                        //光強值
  20. u8 ID = 0;
  21. u8 srr_temp1[200];
  22. u8 win_direction = 0;                                          //風(fēng)向值              【1:東南風(fēng) 2:東風(fēng) 3:東北風(fēng) 4:北風(fēng) 5:西北風(fēng) 6:西風(fēng) 7:西南風(fēng)】
  23. char *win_str;
  24. float speed_temp = 0;                                          //霍爾元件計數(shù)緩存值
  25. float speed_val = 0;                                          //風(fēng)速值
  26. float pm25_val = 0;                                                        //PM2.5值
  27. _Bool send_flag = 1;
  28. int main(void)
  29. {
  30.               SysTick_Config(SystemCoreClock/1000);//系統(tǒng)時鐘初始化
  31.               Delay_Ms(100);                            //延遲100ms
  32.             
  33. /****************************第一部分初始化************************************/
  34.               LED_Init();                                                        //LED燈初始化
  35.               Lcd_Init();                                                        //屏幕初始化
  36.               EXTI_KEY_Config();//按鍵初始化
  37.               UART1_Init();                                          //波特率115200 用于串口調(diào)試
  38.               UART3_Init();                                          //USART3配置 ESP8266串口通訊
  39.             
  40.               dht11_init();                                          //DHT11溫濕度模塊初始化
  41.               speed_init();                                          //風(fēng)速驅(qū)動初始化
  42.               ADC1_Init();                                          //ADC初始化,用于測光照強度、風(fēng)向、PM2.5
  43.               BMP_Init();                                                        //氣壓驅(qū)動初始化
  44.               BMP_ReadCalibrationData();              //從BMP180的獲取計算參數(shù)
  45.               Delay_Ms(1000);                            //延遲200ms            
  46.               printf("Init over !\r\n");
  47.   main_Demo();                                          //顯示主界面
  48. /****************************第二部分連接WIFI連接服務(wù)器************************************/            
  49.               Lcd_Clear(BLACK);
  50.               Gui_DrawFont_GBK16(0,60,WHITE,BLACK,"wait for wifi.");
  51.               while(!CheckEsp())Delay_Ms(100);//檢測ESP01            
  52.               while(ConnectWiFi("yyt","20000412")==0);//連接指定WIFI
  53.               Lcd_Clear(BLACK);
  54.               Gui_DrawFont_GBK16(25,40,WHITE,BLACK,"Wifi OK !");
  55.               printf("wifi ok!\r\n");
  56.               while(ConnectServer("172.20.10.2","6666",0)==0);
  57.             
  58.               SendStringDataToServer("Connect...");//連接指定TCPServer
  59.               Lcd_Clear(BLACK);
  60. /****************************第三部分測量數(shù)據(jù)************************************/            
  61.               while(1)
  62.               {
  63.                             /*****獲取溫度、濕度*****/
  64. //                            dht11_temp = dht11_read();
  65. //                            show_dht11(dht11_temp);
  66. //                            printf("Moisture :%u%%  Temperature:%uC \r\n",temperature_val,humidity_val );
  67.                            
  68.                             /*****獲取風(fēng)速*****/
  69. //                            speed_val = speed_temp/30.0;
  70. //                            printf("speed:%0.2f\r\n",speed_val);
  71. //                            speed_temp = 0;
  72.                            
  73.                             /*****獲取光強*****/
  74. //                            light_val = Read_Light();
  75. //                            printf("light_val:%u\r\n",light_val);
  76.                            
  77.                             /*****獲取風(fēng)向*****/
  78. //                            win_direction = Read_Wind();
  79. //                            printf("win_dir:%u\r\n",win_direction);
  80.                            
  81.                             /*****獲取PM2.5*****/
  82. //                            pm25_val = Read_PM25();
  83. //                            printf("pm25_val:%0.2f\r\n",pm25_val);
  84.                                                       
  85.                             /*****獲取大氣壓強*****/
  86. //                            ID = BMP_ReadOneByte(0xd0);
  87. //                            BMP_UncompemstatedToTrue();
  88. //                            printf("ID = %d\t  temp = %d.%dC\t   Pressure = %ldPa\t   Altitude = %.5fm\r\n",ID,bmp180.Temp/10,bmp180.Temp%10,bmp180.p,bmp180.altitude);
  89.                                                       
  90.                            
  91.                             /*****獲取所有數(shù)據(jù)*****/
  92.                             dht11_temp = dht11_read();              /*****獲取溫度、濕度*****/
  93.                             speed_val = speed_temp/30.0;speed_temp = 0;              /*****獲取風(fēng)速*****/
  94.                             light_val = Read_Light();                            /*****獲取光強*****/
  95.                             win_direction = Read_Wind();/*****獲取風(fēng)向*****/
  96.                             pm25_val = Read_PM25();                                          /*****獲取PM2.5*****/
  97.                             ID = BMP_ReadOneByte(0xd0);/*****獲取大氣壓強*****/
  98.                             BMP_UncompemstatedToTrue();
  99.                            
  100.                             //根據(jù)風(fēng)向的ADC值轉(zhuǎn)化成字符串
  101.                             if(win_direction == 1)win_str="東南";
  102.                             else if(win_direction == 2)win_str="東 ";
  103.                             else if(win_direction == 3)win_str="東北";
  104.                             else if(win_direction == 4)win_str="北 ";
  105.                             else if(win_direction == 5)win_str="西北";
  106.                             else if(win_direction == 6)win_str="西 ";
  107.                             else if(win_direction == 7)win_str="西南";
  108.                            
  109.                             //屏幕顯示數(shù)據(jù)
  110.                             show_data(dht11_temp,speed_val,light_val,win_str,bmp180.p,bmp180.altitude,pm25_val);
  111.                            
  112.                            
  113.                             if(send_flag)//TCP發(fā)送數(shù)據(jù) KEY控制開關(guān)
  114.                             {
  115.                                           snprintf((char *)srr_temp1,sizeof(srr_temp1),
  116.                                                         "{\"Data\":[\"temp\":\"%u\",\"humi\":\"%u\",\"speed\":\"%0.1f\",\"light\":\"%d\",\"direction\":\"%s風(fēng)\",\"p\":\"%ld\",\"altitude\":\"%.1f\",\"pm25\":\"%0.1f\"]}",
  117.                                           temperature_val,humidity_val,speed_val,light_val,win_str,bmp180.p,bmp180.altitude,pm25_val);
  118.                                          
  119.                                           SendStringDataToServer((char *)srr_temp1);
  120.                             }
  121.                             Delay_Ms(5000);                            //延遲
  122.               }
  123. }
  124. void SysTick_Handler(void){TimingDelay--;}
復(fù)制代碼
51hei.png
下位機STM32源程序分享: 基于STM32大棚系統(tǒng).7z (5.89 MB, 下載次數(shù): 82)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:984253 發(fā)表于 2021-11-26 12:48 | 顯示全部樓層
你好能問下,這個能夠搭建出仿真電路嗎?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表