一.硬件方案
& Y* C: _" p; y' g本设计由STM32单片机、风扇控制电路、温湿度传感器电路、1602液晶显示电路+蓝牙模块电路和电源电路组成。通过温湿度传感器检测温湿度,并在液晶上和APP上实时显示。当湿度超过75度,APP发出报警信息,通过APP发送指令“O”,风扇启动。通过APP发送指令“C”,风扇关闭。。
; I' q9 [' V$ ^. e主要由STM32单片机+风扇控制电路+温湿度传感器电路+1602液晶显示电路+蓝牙模块电路+电源电路组成;如图:* V. U1 x' u C3 c; e2 O9 B
, ^6 W4 x( z" V, S
; J2 C2 J& ]+ ?+ [7 X1 Q4 o! R
: L o4 a+ Q/ G$ V4 Q二.设计功能" R7 c: J+ c7 v
(1)通过温湿度传感器检测温湿度,并在液晶上和APP上实时显示。
+ K/ a6 j* U) }& u V5 T(2)当湿度超过75度,APP发出报警信息。# I' d4 Y! c+ p, T9 u
(3)通过APP发送指令“O”,风扇启动;通过APP发送指令“C”,风扇关闭。
, U x9 a: U; O: N
6 C. ?2 T1 x! _" y三.设计原理图$ X: z7 A- b/ ]7 S# r1 E% ?
(1)原理图主要采用AD软件进行设计,如图:& z* Q2 N6 Z A& o+ h& ~
& w. ]) }; | [& a( v2 E
% o' l8 i9 J o. w! v' L) p+ [& l
; t% v+ [1 j0 C+ D(2)PCB图如下:2 _3 `( w, Z, j2 r
% Q8 R9 h1 S% B3 u
1 x5 |3 G& X7 U. |% m
: G2 D5 B0 k4 A, G. g
四.软件设计 _0 h% D+ W* H8 n' C n
(1)程序流程图. |1 l4 v8 J U/ w% p% b
! o9 x& N7 y7 D. ~: c
5 Z4 R& t- ]" L# Z
1 a- D6 l3 @0 D3 j' e5 K. x(2)主程序源码# N3 I3 T; \$ c- p' H
: D# K! y0 `$ K9 e: F6 H
- int main(void)8 x9 ] {" \: F& X9 r& f
- { " q' m6 b5 {0 ?5 [/ O* D8 o' @ Z
- delay_init(); //延时函数初始化
; j1 F7 B* D3 [: L* D; O2 A - uart_init(9600); //串口初始化为9600
! K2 t4 i) |# L, v1 I; W - TIM3_Int_Init(499,7199);//50ms * V* F# n0 F( W! O) X9 z
- LED_Init(); //初始化与LED连接的硬件接口4 }8 |0 Q$ E5 _
-
0 r' t5 i1 F3 m3 h- W0 D - // Adc_Init(); //ADC初始化
: g5 X% g- {3 l; }0 b5 h; ?6 x
( p9 t; m& R8 m- Lcd_GPIO_init(); //1602接口初始化
7 f3 Z" Y5 c, U# V4 v8 ~- K - Lcd_Init();
1 ^* ?8 U# L* ?2 J, r - fengshan = 0; //上电风扇转一下
% D; \* L- h, j; Z - delay_ms(200);# `5 a8 n0 T! ^- B
6 Q( }1 r& G1 o0 E- sprintf(dis0,"Temp:%02d C DH:%02d%%",(u16)DHT11.Tem_H,(u16)DHT11.Hum_H);//打印温湿度% f& W. [) n, v4 Q' V L
- Lcd_Puts(0,1,(unsigned char *)dis0); //初始化显示
2 i1 E& X! c, X$ @9 b x, b- r - Lcd_1Put(7,1,0xdf);
" d6 k7 N* }8 h- j - sprintf(dis1,"My designer ! ");//打印电流
2 Z9 a5 F0 J5 _. Q& [ J0 [ - Lcd_Puts(0,0,(u8 *)dis1);//显示电流& i/ T f3 R0 Q$ a6 h" c
- fengshan = 1;& M) E, ]- j, K3 m
- while(1)
8 ]# ^0 e6 f* O- S0 ^2 w8 j - {! u- I, R) s) V6 N' Q8 H& x2 C
- if(DHT11_ReadData()) //是否读取到温湿度1 b) [, _* w3 ~" U' f
- {
8 r* r& B( H. M Z0 N, c - sprintf(dis0,"Temp:%02d C DH:%02d%%",(u16)DHT11.Tem_H,(u16)DHT11.Hum_H);//打印温湿度; E2 o5 V c5 h" w
- Lcd_Puts(0,1,(unsigned char *)dis0); //显示: s2 i5 K6 Z! z B7 _& m! `
- Lcd_1Put(7,1,0xdf);+ t+ S' E3 r1 |3 G3 Z/ E. k. ~# N5 [
- printf(dis0);//串口打印数据
`5 B- o' B4 a. o% S - printf("\n"); `" {& L) j+ P
- if(DHT11.Hum_H>75) //对比湿度值
1 n1 R4 |( c' ^( X" r3 e# \0 q. g - {% K) f9 j9 W y
- printf("Shidu High\n");//发送湿度过高. V9 {2 d* o% ~ ~5 o
- }
& d5 {, n1 ?- g/ F \8 U: e: y - else
- q6 A% D# H7 b X' s9 b6 q0 T - { o. J8 l$ I3 M/ ~/ I# l. v
- printf("Shidu Normal\n");//湿度正常5 B( o$ G! [ ~+ F- u# C; t5 T$ ]7 V
- }
$ {: c, K2 A: k, @! T - delay_ms(800);//风扇控制在串口中断中处理% ?2 @9 X# T; v7 K8 u% W1 z
- }
0 l0 h- C& @& C4 q0 C/ i - * r0 A* l7 r# w6 K! C* k- k
- }
. F8 n' u: K- ]$ O - }
复制代码 v# c X) o" W4 } m6 a5 G$ ?3 [
|