|
我打算設計一個室內環境監測系統 這是第一階段的設計使用DHT11測量溫濕度顯示在TFT顯示屏上,目前可以通過串口調試助手接收信息。
如果溫度或濕度超過閾值蜂鳴器會發出響聲
但是發現DHT11誤差比較大
后面我打算再加一個光敏傳感器和PM2.5的檢測或者噪音分貝的測量,通過ESP8266能夠把檢測的消息發送到手機端或PC
下面是我用的器件
IMG_20201208_181832.jpg (2.74 MB, 下載次數: 78)
下載附件
實物
2020-12-8 20:26 上傳
IMG_20201208_181400.jpg (2.22 MB, 下載次數: 63)
下載附件
TFT1.44寸
2020-12-8 20:24 上傳
IMG_20201208_181357.jpg (4.3 MB, 下載次數: 64)
下載附件
DHT11
2020-12-8 20:23 上傳
IMG_20201208_181346.jpg (2.23 MB, 下載次數: 63)
下載附件
三針腳有源蜂鳴器
2020-12-8 20:22 上傳
IMG_20201208_181336.jpg (4.01 MB, 下載次數: 66)
下載附件
STM32F103RCT6
2020-12-8 20:21 上傳
主要代碼如下
- #include "stm32f10x.h"
- #include "beep.h"
- #include "delay.h"
- #include "dht11.h"
- #include "key.h"
- #include "lcd.h"
- #include "led.h"
- #include "usart.h"
- #include "picture.h"
- #include "stdio.h"
- int main(void)
- {
- u8 T;
- u8 H;
- u8 t=0,i;
- char TTT[20],HHH[20];
- USART1_init();
- BEEP_Init();
- DHT11_Init();
- LCD_Init();
- LCD_BLK = 0;
- delay_ms(6000);
- LCD_Clear(YELLOW);
- LCD_DrawFont_GBK16(10,40,BLACK,YELLOW, "系統正在啟動中");
- delay_ms(100);
- LCD_DrawFont_GBK16(10,60,BLACK,YELLOW, "正在進入...");
- for(i=3;i>0;i--)
- {
- LCD_DrawFont_Num32(50,80,RED,YELLOW,i);
- delay_ms(1000);
- }
- LCD_Clear(GREEN);
- LCD_DrawFont_GBK16(25,0,BLUE,GREEN, "運行中...");
- LCD_DrawFont_GBK16(5,20,BLACK,GREEN, "溫度:");
- LCD_DrawFont_GBK16(5,40,BLACK,GREEN, "濕度:");
- LCD_DrawFont_GBK16(5,60,BLACK,GREEN, "光照:");
-
- LCD_DrawFont_GBK16(61,20,BLACK,GREEN, "度");
- LCD_DrawFont_GBK16(61,40,BLACK,GREEN, "%RH");
- LCD_DrawFont_GBK16(61,60,BLACK,GREEN, "CD");
-
- while(1)
- {
- if(t%10==0)
- {
- DHT11_Read_Data(&T,&H); //讀取溫濕度值
- sprintf(TTT,"%d",T); //將溫度值轉換為字符格式
- sprintf(HHH,"%d",H); //將濕度值轉換為字符格式
- printf("溫度: %d 度\r\n ",T);
- printf("濕度: %d RH\r\n ",H);
- }
- if(T>25||H>94) //報警閾值
- {
- if(T>25)
- {
- LCD_DrawFont_GBK16(45,20,RED,GREEN,TTT);
- }
- if(H>94)
- {
- LCD_DrawFont_GBK16(45,40,RED,GREEN,HHH);
- }
- GPIO_SetBits(BEEP_PORT,BEEP_PIN);
- delay_ms(10);
- GPIO_ResetBits(BEEP_PORT,BEEP_PIN);
- }
- else
- {
- LCD_DrawFont_GBK16(45,20,BLACK,GREEN,TTT);
- LCD_DrawFont_GBK16(45,40,BLACK,GREEN,HHH);
- }
- delay_ms(100);
- t++;
- }
- }
復制代碼- #ifndef __DHT11_H
- #define __DHT11_H
- #include "sys.h"
- #define DHT11_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
- #define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
- ////IO操作函數
- #define DHT11_DQ_OUT PAout(11) //數據端口 PA11
- #define DHT11_DQ_IN PAin(11) //數據端口 PA11
- u8 DHT11_Init(void);//初始化DHT11
- u8 DHT11_Read_Data(u8 *temp,u8 *humi);//讀取溫濕度
- u8 DHT11_Read_Byte(void);//讀出一個字節
- u8 DHT11_Read_Bit(void);//讀出一個位
- u8 DHT11_Check(void);//檢測是否存在DHT11
- void DHT11_Rst(void);//復位DHT11
- #endif
復制代碼
|
評分
-
查看全部評分
|