|
我打算設(shè)計(jì)一個(gè)室內(nèi)環(huán)境監(jiān)測(cè)系統(tǒng) 這是第一階段的設(shè)計(jì)使用DHT11測(cè)量溫濕度顯示在TFT顯示屏上,目前可以通過(guò)串口調(diào)試助手接收信息。
如果溫度或濕度超過(guò)閾值蜂鳴器會(huì)發(fā)出響聲
但是發(fā)現(xiàn)DHT11誤差比較大
后面我打算再加一個(gè)光敏傳感器和PM2.5的檢測(cè)或者噪音分貝的測(cè)量,通過(guò)ESP8266能夠把檢測(cè)的消息發(fā)送到手機(jī)端或PC
下面是我用的器件
IMG_20201208_181832.jpg (2.74 MB, 下載次數(shù): 78)
下載附件
實(shí)物
2020-12-8 20:26 上傳
IMG_20201208_181400.jpg (2.22 MB, 下載次數(shù): 63)
下載附件
TFT1.44寸
2020-12-8 20:24 上傳
IMG_20201208_181357.jpg (4.3 MB, 下載次數(shù): 64)
下載附件
DHT11
2020-12-8 20:23 上傳
IMG_20201208_181346.jpg (2.23 MB, 下載次數(shù): 63)
下載附件
三針腳有源蜂鳴器
2020-12-8 20:22 上傳
IMG_20201208_181336.jpg (4.01 MB, 下載次數(shù): 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, "系統(tǒng)正在啟動(dòng)中");
- delay_ms(100);
- LCD_DrawFont_GBK16(10,60,BLACK,YELLOW, "正在進(jìn)入...");
- 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, "運(yùn)行中...");
- 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); //將溫度值轉(zhuǎn)換為字符格式
- sprintf(HHH,"%d",H); //將濕度值轉(zhuǎn)換為字符格式
- printf("溫度: %d 度\r\n ",T);
- printf("濕度: %d RH\r\n ",H);
- }
- if(T>25||H>94) //報(bào)警閾值
- {
- 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++;
- }
- }
復(fù)制代碼- #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操作函數(shù)
- #define DHT11_DQ_OUT PAout(11) //數(shù)據(jù)端口 PA11
- #define DHT11_DQ_IN PAin(11) //數(shù)據(jù)端口 PA11
- u8 DHT11_Init(void);//初始化DHT11
- u8 DHT11_Read_Data(u8 *temp,u8 *humi);//讀取溫濕度
- u8 DHT11_Read_Byte(void);//讀出一個(gè)字節(jié)
- u8 DHT11_Read_Bit(void);//讀出一個(gè)位
- u8 DHT11_Check(void);//檢測(cè)是否存在DHT11
- void DHT11_Rst(void);//復(fù)位DHT11
- #endif
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|