|
我打算設(shè)計一個室內(nèi)環(huán)境監(jiān)測系統(tǒng) 這是第一階段的設(shè)計使用DHT11測量溫濕度顯示在TFT顯示屏上,目前可以通過串口調(diào)試助手接收信息。
如果溫度或濕度超過閾值蜂鳴器會發(fā)出響聲
但是發(fā)現(xiàn)DHT11誤差比較大
后面我打算再加一個光敏傳感器和PM2.5的檢測或者噪音分貝的測量,通過ESP8266能夠把檢測的消息發(fā)送到手機(jī)端或PC
下面是我用的器件
實物
TFT1.44寸
DHT11
三針腳有源蜂鳴器
STM32F103RCT6
主要代碼如下
- #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)正在啟動中");
- 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) //報警閾值
- {
- 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);//讀出一個字節(jié)
- u8 DHT11_Read_Bit(void);//讀出一個位
- u8 DHT11_Check(void);//檢測是否存在DHT11
- void DHT11_Rst(void);//復(fù)位DHT11
- #endif
復(fù)制代碼
|
評分
-
查看全部評分
|