一、项目功能概述
* J2 A( V `. y* F% c4 w( p+ h1、OLED显示温湿度、空气质量,并可以设置报警阈值, B/ h# J: S6 q! k, t
2、设置4个继电器开关,分别控制灯、空调、开关、风扇
4 S% [+ V) k- w) x4 Z3 N' ` D4 A' K# }3、设计一个离线语音识别系统,可以语音控制打开指定开关、并且可以显示识别命令词到OLED屏上0 `6 |( z1 u* G/ A
4、OLED实时显示4个继电器的状态& B$ G% F( H, P) |2 u r: ^
5、设计一个低功耗开关电路,可以语音控制使得系统进入低功耗模式,并且进入低功耗模式后可以再次语音唤醒系统,重新开始正常工作2 l5 R+ f$ m2 p; o/ e/ G+ }
语音控制具体描述:; L5 Z2 E2 L7 K* T
5 V8 W6 w% N( Q9 H' p
' s2 ~2 |5 J5 r. ~+ A2 |) F3 P! i
, h) y3 e( |$ V& b+ F/ D
二、项目原理图" M+ `5 h, `; \" ^, \
(一)最小系统. a0 t2 l& t$ R& t& g* W4 @
( u7 i2 D$ n8 y7 y" x
4 X+ B* Z3 P/ N9 }- m t; K1 \: w7 X8 Y* ^
(二)供电5 L8 Y D9 s2 ^0 d6 ?- }3 G0 R
" {! h. V3 S6 f: C- L) }: h
0 Y+ L: N, \0 e* q# L6 ]6 ?3 D" |6 k6 ^! o5 d& l* w
(三)传感器
- |( {2 P& h" f+ A( y# Z! D+ \; r
" B: N- ]* P. e& H3 E. Q) x4 W
; m% P8 Q/ d0 m4 ~- a. v: N: l! {+ s( G. A
(四)语音模块
6 _; {5 o: M2 x {
: i( z' n5 c( z: f7 V5 |
% ^# [! V |( D0 o- D b9 k* g
' g* a3 T- H; ~5 n% H' B: B(五)继电器模组
/ Z9 y, j$ N) y: P
# y/ ^( I- v9 c# j4 }* P
$ C* n1 Z" Q' ^! ]* }7 W1 P' c% r. K0 s6 O
- J- V) l' j2 K& m6 A9 w7 F(六)按键蜂鸣器) Z" s C. E+ W& }$ V- S/ o1 m
% r6 t$ U/ m, w8 k7 B
! ^) @2 Y; {) [ V7 x& [' `) A
2 p# B+ s" A+ l! [9 `- M/ h5 n(七)低功耗开关' }; z; p9 G/ w& K8 S
4 s9 R7 d) o, G
) B) l7 }* H" r/ q
6 L( z. N' Q$ s三、程序设计( d6 k3 q! w* y" {: @4 l4 ^
6 V% z; T M; ?- int main(void)
: P- o& H; r( T9 _2 M - { 9 w2 Q- e% x( U
- u16 key;
* ~6 J h6 P: z' p; W - int adc,cnt=0;7 q, A4 O+ \; k7 }2 |
- float volt;
# w: P m9 P0 l6 L+ K - delay_init();
+ [9 ^9 X- g/ F* L: p0 ~+ F9 s2 b - NVIC_Configuration();
" L* o: b# o, t: p - BEEP_Init();
: \7 I; N) [! W8 p - OLED_Init(); + ^, r1 p, C$ f3 P
- OLED_Clear();8 w2 p' M! y2 G& Z" O9 B x ?
- uart_init(115200);
" G; J6 y/ E$ m - printf("欢迎使用化作尘智能家居系统\r\n");. R! P" l! @9 D# ^7 k
- KEY_Init();9 F- f; S; I) M0 e1 h; d" S
- LED_Init();
& t8 q% R" o% k( s6 o - TIM3_Int_Init(500-1,720-1);
$ y& o( C, ?- R0 u7 z9 r! X - DEV_Init();//外设初始化
! n6 V5 { Y ] -
3 P& l* e7 j* o3 B/ A( v$ Q -
) e# D6 B) ?* j - OLED_ShowCHinese(8,0,50);//
5 m! M7 w7 z% L - delay_ms(200);
* `0 P" X2 q) T2 z: F7 w$ X) P2 V/ i - OLED_ShowCHinese(24,0,51);//
, N- x* D7 P1 J7 v. y0 L. i& \ - delay_ms(200);- ?1 Q6 J) x, q# B6 N+ k
- OLED_ShowCHinese(40,0,52);// I: C* u7 R9 d+ t9 e6 W0 Z
- delay_ms(200);( Y7 e( g7 z5 T* e# O L' c) ^
- OLED_ShowCHinese(56,0,39);//( @0 K: O* h3 e9 T2 \1 a
- delay_ms(200);
* N' x: d# m. [1 ? - OLED_ShowCHinese(72,0,40);//9 E, r+ |( z- L" e( T5 H9 b
- delay_ms(200); W# Q* L% O& M8 d, q8 s: X5 Y
- OLED_ShowCHinese(88,0,48);//
6 Q' l3 D( F3 i* y+ {+ q: f7 v - delay_ms(200);
% G* Z* W2 b8 W2 m - OLED_ShowCHinese(104,0,49);//+ x6 j( J! B/ Q f( U3 ^9 Y
- delay_ms(200);
! y2 k; f }+ X& ? y: C! [: M7 _7 v -
, f! q4 H+ n5 U- S8 Q, J - OLED_ShowNum(0,2,201908,6,16);# d+ Q$ U' S3 {8 ^' I( M
- OLED_ShowNum(48,2,384176,6,16);
r/ X* K# Z5 e -
" W! p: ~! ~; k6 E+ Z - , x* w Q) i9 d8 m, y' j
- OLED_ShowCHinese(40,4,53);2 P O, X1 {- v
- OLED_ShowCHinese(56,4,54);
3 Q9 t, }* s( i3 f! J; ^5 x( D - OLED_ShowCHinese(72,4,55);2 k j! p. G6 K2 r1 q
- ]% v5 n0 r* Z# }
- delay_ms(1500); 3 A1 d# N, w# b
-
; V# r) `& r% i, _6 U - OLED_Clear();
0 Q b- g& O- S9 r, x - OLED_Dis_Menu();- G. Y) U* D% N/ D% @/ }0 X
- while(1) 9 v' L' F( J* g5 j& m3 Z. t
- { , j% U+ @- T3 ?' Z5 _$ e! r
- if(cnt++ ==1000)
' E7 w6 E# E& o/ K) V - {, ^- U; n- P* h0 j) R
- cnt = 0;
$ W# |5 m6 M2 y: f5 i: r. t9 L, {2 S& I - LED0=!LED0;
4 @$ A" Z% l1 C6 s- h1 h5 h - adc = Get_Adc_Average(0,5);! u9 f' \3 M8 D# U4 g" A
- volt = adc*3.3/4096;
7 F2 L# L* ]- U: M. t - air = pow((3.4880*10*volt)/(5-volt),(1.0/0.3203));
* u/ ~0 h6 v2 t - printf("air :%d\r\n",air);& R( I& p3 } y1 _3 X5 F' O+ G
- //获取温湿度
2 ]5 @1 i' _9 J2 ]4 K- G4 H - DHT11_Read_Data( &temp, &humi);
4 ?- X) j# ~& _* e0 A0 r6 z& Y - if(last_temp!=temp || last_humi!=humi)
3 c- r7 H5 [0 t! C( H3 j8 o - {
$ }9 U# ~; v! h - OLED_Dis_DHT(temp,humi,air);
0 A, h j: ?5 [9 A - } @6 w. r, P0 b
- }- E- I% n8 c# @( q
- key = Key_GetValue(); //按键扫描
, O' s! Y `* H - if(key)0 w+ I) l- ^# @* g! J* E
- DealKeyVal(key);3 O. w4 ?% o1 ~
- if(!KEY1_IO())5 I# V. ?: F3 q( I% Q4 T1 V2 S
- {0 s9 R. F i$ r! V( Y1 M0 ^3 g2 U. U
- printf("%d\r\n",GetTime());
" \9 P4 o# F* v. @2 _ - }! G3 c3 k6 R& F" |
- if(temp>Max_temp || humi>Max_humi || air>Max_air)
! ?- ]- J; E3 }/ c: t: r* f - {
$ ?+ t/ L+ K7 v: C) B6 ^& B3 D - if(cnt<500)BEEP=1;1 K! Z4 p/ B2 Q( C+ c9 L; V
- else if(cnt<1000)BEEP=0;; u4 Z4 h6 G6 V2 H. o
- }else BEEP=0;% D+ t+ x6 \" L0 K* @% k( ?
- Q! s: V' |& H
- 4 O7 J5 u* y* b, x* h4 N
- delay_ms(1);6 X' I: s5 i6 o& w; |
- } . T% I) q) z- m9 X: s7 e- r' T
-
+ I- ^7 u( b: L8 z! _% u - }
复制代码 ! v) j. N9 j) ?/ j- i8 N+ \/ a! t
四、扩展功能/ r7 {- [' \6 |9 m
(一)根据环境温湿度、空气状况,自动控制智能家居设备( ]# W" |! {( z' Y, B9 B4 m. Y
(二)优化界面,添加系统更多设置,报警设置、家居控制模式选择、智能开关机模式5 G9 M; S% y2 J6 K8 G- H0 N, N
(三)添加定时开关智能家居模式
: h" y. f- c: f! Z: w(四)添加蓝牙或WIFI模块 x# `0 d4 c j1 G" ?3 O1 A
(五)设计手机APP控制4 C/ T0 [7 W) f4 a g! A! S
(六)添加更多语音控制功能
. z. C4 W, [& }. a: s' [0 V9 \/ J$ O: U- p4 M* b1 K$ U
五、项目展示:
& H. |( ?& _7 t7 f5 L
% ^( {/ ` }% O6 k# f% D. z M
$ Q+ L8 W' R; Y: ~1 p, o0 y
. d; j- o+ Y+ l5 d. a3 M: H1 L8 f
|