一、项目功能概述
% s1 Z" r! |: z, ]0 o0 R% I0 A1、OLED显示温湿度、空气质量,并可以设置报警阈值
+ [+ I* T3 l1 w8 V2、设置4个继电器开关,分别控制灯、空调、开关、风扇
' v& \1 A# L% `- n7 i& J3、设计一个离线语音识别系统,可以语音控制打开指定开关、并且可以显示识别命令词到OLED屏上
; |5 T# ]7 Y, ^- C) z9 Y4、OLED实时显示4个继电器的状态
/ v+ c; i7 Q2 D- P# n. j0 Y5、设计一个低功耗开关电路,可以语音控制使得系统进入低功耗模式,并且进入低功耗模式后可以再次语音唤醒系统,重新开始正常工作# ^* L- F* \7 \! v) w; _% N
语音控制具体描述:
3 ]) ?5 q) B) B8 ]
9 R0 A/ r* m; |! o
3 v, u1 g5 U) b( ?7 w l) g! C1 h1 z% b- u$ o q7 l
二、项目原理图1 z# h# l! [" ^. ?
(一)最小系统$ T6 n7 J$ b* s( y) h, C
; u9 E2 \4 ~. ` b
2 M, E1 Y5 Q; m* @
( K3 P, [: x; F+ C' L8 u. K( z(二)供电2 ~* J9 u6 S3 W* \
, G3 `$ ^9 l5 c- f! l
0 }; q! j0 Q. V( l- P0 f
( L; H+ K& ^* z% u- X1 l(三)传感器
0 w9 J( n& P" ?# B
8 X. ~. O. Y5 `% _
+ u: W& L6 `2 Z% ~1 }& k1 w
) \5 S+ [* b- l+ k9 X. C(四)语音模块0 C$ L& H2 C% n1 K7 m
2 F, \' ^ G% t1 ~6 L
" ~( \* E3 z' V
& {0 _$ A$ h& K. E4 @: O; ?; G( T8 l(五)继电器模组
& n4 R# `* y' _3 h9 i
9 d5 ]! f/ J5 L. w2 q/ P, V3 n
- [0 t, F5 Z+ Y: W! X2 J9 l: R# c$ X5 [! L, q/ e; K
(六)按键蜂鸣器3 S8 @( e7 f( J Q
" u' I2 {& s0 H
8 c7 Z/ Y9 [( [# f" D a# S
( A) \6 R( `0 F9 L" K(七)低功耗开关, Y2 e) P# U& V5 n4 ^( f5 V
/ V9 n/ `2 g, H! g9 i( v3 V
$ u5 N, ~( [7 ^: p: p
/ a- v# s- b4 k6 o& q+ o$ h L三、程序设计1 d% ]4 L* d/ A" `; H
8 f# r+ L* R* L: Z) s& r- Z3 X- int main(void)
+ l6 O# Z0 G% c$ c% |; \3 Z - { 3 J) s5 N0 m1 u- p
- u16 key;
1 o' V A( h- I; Q+ m/ V% o - int adc,cnt=0;
( H y: J4 _6 S- [+ L4 r) F( c3 x0 _ - float volt;
# y5 ^0 M% \$ `. \3 h - delay_init();
; ~; v$ Q! k6 g( f& V - NVIC_Configuration(); ! m& r3 h, S% a: R
- BEEP_Init();1 f, _, S( m' j8 \' F
- OLED_Init(); : E) B, P6 {/ C2 I$ t/ ~% c$ j
- OLED_Clear();
k, L3 K: A% d' E* I - uart_init(115200);6 C b3 x8 l7 E% [) i! T
- printf("欢迎使用化作尘智能家居系统\r\n");4 o' b e- {3 t1 _. a4 H- N* S
- KEY_Init();5 G2 X7 H( e1 k7 q
- LED_Init();
' ~" x; t6 a; F5 ~. e - TIM3_Int_Init(500-1,720-1);
3 @5 J! x" `' `% k/ Y/ j" x4 m - DEV_Init();//外设初始化6 [/ q: X% P( r# R* Q
-
% \& l3 K( n: ~! [* T# ^ -
/ u; m1 m0 H8 H! p" c - OLED_ShowCHinese(8,0,50);//( l5 r4 L* T' C, H3 g
- delay_ms(200);+ [ {1 X4 C; q& K7 R0 Y3 b$ a$ r6 _
- OLED_ShowCHinese(24,0,51);//% q" r5 s8 y% a
- delay_ms(200);6 d3 k, [& b+ r- L/ `! `! ^
- OLED_ShowCHinese(40,0,52);//
. f3 P c1 b% F5 K- `( W - delay_ms(200);
( ]8 B/ x8 B) H6 z - OLED_ShowCHinese(56,0,39);//
5 d4 _4 I+ x/ ]* E3 h: w, r - delay_ms(200);4 z0 x' Q% T. m+ E. f: `( w8 O
- OLED_ShowCHinese(72,0,40);//: p: E9 D4 P+ \6 |. p% N( ~
- delay_ms(200);
- K% n- S! ?7 u+ f0 M- @2 H8 L) h- k - OLED_ShowCHinese(88,0,48);//" f# F1 G+ d, M9 V
- delay_ms(200); 1 ]+ L7 S2 m- F* _3 N
- OLED_ShowCHinese(104,0,49);//
! ~" a* b8 I( b) \ - delay_ms(200);
$ m) @0 t4 w+ o -
8 P( H, V. C$ }4 s# V) ~ - OLED_ShowNum(0,2,201908,6,16);' T1 y2 h/ @+ x2 w u, ]7 N' H$ A
- OLED_ShowNum(48,2,384176,6,16);
/ I, B; k' }) A; V3 K - 1 Y: U) ~% f: y
- ' v: m" F D) \$ y C/ [2 b* r
- OLED_ShowCHinese(40,4,53);, c u0 n+ I; Z0 Z. t0 f" x- J8 X
- OLED_ShowCHinese(56,4,54);: \* v* b( o4 m+ U K# n
- OLED_ShowCHinese(72,4,55); |! x2 w5 G2 x9 C9 \) _2 p
-
1 n z( N$ g) {$ z - delay_ms(1500); / Y5 N! A, C9 a2 K( Y+ U$ z
- 0 e) H' s3 y7 S' N% {
- OLED_Clear();
; ~) ?$ @* b9 [0 k/ Z - OLED_Dis_Menu();
2 @# W) T0 w7 _% J+ Q2 w - while(1)
- u8 v) Q- A5 H' I2 y4 | - { , g P' m6 h; D0 \( G& `
- if(cnt++ ==1000)& ^3 Y# ~) ^& i- j3 d
- {8 d" a$ Z/ {; i( z9 K
- cnt = 0;, H: i' b! T0 D3 w+ d; Y- D3 t
- LED0=!LED0;7 S7 S, u% m( V1 |
- adc = Get_Adc_Average(0,5);, s* g" g* y; l( |) A$ C
- volt = adc*3.3/4096;+ s$ Z% Y2 W. @! ?% o
- air = pow((3.4880*10*volt)/(5-volt),(1.0/0.3203));1 C' n7 h, q' a1 y
- printf("air :%d\r\n",air);
! b2 w+ Y: v. c; S( b3 ~$ C - //获取温湿度
: W9 A- T$ K+ x W - DHT11_Read_Data( &temp, &humi);% @, t$ H! O$ d2 I% N3 f
- if(last_temp!=temp || last_humi!=humi)) `; n9 d: g& r( [7 o6 {+ u
- {( c8 L5 X+ M* H0 ]3 ], L. R0 q
- OLED_Dis_DHT(temp,humi,air);
: A; V; x# l8 C0 {2 W% c- o - }
7 B- v, k; j! X6 h& F2 X- y( D$ p - }, e, l- _& ]. W( y
- key = Key_GetValue(); //按键扫描
& E4 o3 P. G; l6 q: ? - if(key)
2 K- d- m7 z8 p: `* Q. a - DealKeyVal(key);
5 _+ ^* R5 F& U! G6 ?/ @4 | - if(!KEY1_IO())
& J5 ]8 o* q" }4 M - {* k7 y5 t1 z% K$ c) k
- printf("%d\r\n",GetTime());
3 y3 b# ^: U5 L' e& }$ h' a9 Q, _ - }
1 U, O& g, F8 |: j2 U1 i - if(temp>Max_temp || humi>Max_humi || air>Max_air)
- h7 c) \. T* C: D2 C4 }* P. w8 \ - {9 c) M8 U- o; y) `( K# b1 Y; J1 v7 l/ x
- if(cnt<500)BEEP=1;
7 d7 k/ Y B" s! U' `7 I - else if(cnt<1000)BEEP=0;
0 E6 c! W( F X; z3 D; { - }else BEEP=0;
1 q* C" m9 M9 d G; Y0 ^ - ' u0 r# E& Y# L
-
1 z, P: {0 @' p8 R% F - delay_ms(1);
9 F2 P* Q! G B. g6 e - }
" i! V8 h" B2 _: {) l9 c! _* C - 4 n l+ U5 y" Q- E0 r; z0 f/ o7 p7 Z
- }
复制代码
f2 O: |. u3 t* T6 H0 r四、扩展功能
' D- s7 B* L& c! K/ n(一)根据环境温湿度、空气状况,自动控制智能家居设备$ \" D4 V1 [- n0 _% @) ~
(二)优化界面,添加系统更多设置,报警设置、家居控制模式选择、智能开关机模式& ^) L/ m# M) t1 h$ a
(三)添加定时开关智能家居模式! x3 q7 K# _; v+ T" i4 Y3 C0 a
(四)添加蓝牙或WIFI模块
, t- S8 f4 ^2 T$ \( A+ Q(五)设计手机APP控制, [0 ?( ^" J. z% F+ Q( |9 O
(六)添加更多语音控制功能, Y. t3 N1 |2 h6 i
2 ~/ S1 S* X& A0 n" x2 w
五、项目展示:$ j" ?' t+ u. m; O5 T
+ O: \& ^1 m$ b4 X4 ]8 u: T
. H3 _6 {# `+ a: P: C( l6 K8 \ _# B% O/ H$ ^$ {! d
( Y( B1 {9 X" K2 [7 [' C8 }/ v |