本设计:( A) K) k( h7 E) g- ]% l! r+ S" o
基于STM32的智能语音识别的柔光台灯设计(源程序+原理图+PCB+设计说明书+PPT) 原理图:Altium Designer 程序编译器:keil4/keil 5 编程语言:C语言 编号Y001 4 v4 s1 v$ s, g" H& R
设计说明: 课题主要研究语音识别、按键识别、PWM波调节亮度、OLED屏幕显示四个模块,目前市面上语音识别的台灯大多仅是控制灯的亮灭,采用的是普通LED节能灯进行照明,相比较于市场上已有的产品,本课题所研究设计的台灯采用的主控芯片是性能较高的STM32F103C8T6单片机芯片,采用中断方式对台灯进行按键控制,并通过基于LD332O语音识别模块,利用非特定人语音识别技术对台灯的工作状态进行语音控制,同时实现了语音控制和按键控制台灯的工作状态,采用输出波形比较输出PWM波,利用PWM波来控制光照的亮度及达到柔光照射的目的,并采用OLED屏幕显示台灯的工作状态灯信息,因此使用者可以快速的指导台灯目前的工作状态,根据自身的实际需求通过语音或者按键对台灯的工作状态进行调节,这样就能够更好的帮助这些弱势群体,如老人、儿童、孕妇等行动不便的人,由于采用的是柔光台灯照明,在一定程度上减缓青少年近视发病率持续上升的趋势,并且LED灯能够缓解资源消耗过大、污染物排放量的现状。
T/ B) z" Y$ |
实现功能如下: 1.语音识别部分:采用市面上流行的基于LD3320语音识别模块,利用非特定人语音识别(ASR)技术,调试语音模块使其满足台灯所需要的特定词汇。词汇包括:唤醒词、开灯、关灯、亮一点、变暗等。采用主控芯片STM32F103C8T6与LD3320语音识别模块进行串口通信,主控芯片接收数据后处理该消息命令。 2.按键控制部分:利用按键中断机制来控制灯的亮度,以及控制灯的开和关。 3.PWM波控制LED柔光灯亮度部分:采用STM32F103C8T6内部自带定时器输出PWM功能,接上外围电路,控制多个LED灯。 4.显示模块部分:主控芯片通过SPI协议驱动0.96寸OLED屏幕,在128*64个像素点的屏幕上显示灯的亮度级数及其他信息。 & h/ ?% I2 p/ k9 u
2 W: P1 V5 R$ O
$ m8 O, g- X6 V, p
& D/ c( S/ A# R* Z; Z9 j: G
原理图(提供源文件): " h: J- I' W2 l
PCB图(提供源文件):
6 l1 d- ~% N0 ~3 v* V
源程序(提供源文件) ) e1 h z( z# W* L+ d3 X( w
以下为部分程序,完整程序可在下载链接获取:
4 Z! ?. L _- J- int lighter=0;
1 C3 M$ p( V7 ?7 w: D7 k - int main(void)
: A. K- y9 {# O - { 1 ~( ?- I4 k* _& r
- delay_init(); //延时函数初始化 % |& g5 Z, a' b% Y% c/ @
- NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init(); 7 @" y V% u* P" }2 F
- OLED_Init(); //初始化OLED & f- v& p T V/ [% G! `
- OLED_Clear(); //OLED清屏6 `- R3 L: ~' d; o" q# W
- TIM1_PWM_Init(); //TIM1 PWM波输出初始化,并使能TIM1 PWM输出
: U! s: _+ z- Y4 o* A( | - usart2_Init(9600); //初始化串口2
0 I7 C. Y, s3 }, y) j( _& W - EXTIX_Init(); //外部中断初始化:中断线,IO,设置中断优先级(抢占优先级,响应优先级),触发方式 ) y p% t/ C- e6 Q7 f O7 W. \5 _/ |
- int j;6 s; |& K& s! \& Z. ]" B6 j1 @, ?
- show_name();" [; O' h D" S5 D* ]- i
- + c0 F7 l0 i9 B
- while(1) . @# c; e6 u( g1 z
- {
+ Q- M! |% C! I X - j=ld3320_uart_receive(); //得到接受函数的字符串buff
) a6 w3 [: C+ \9 i9 V" k' Y - pwm_led_out_test(lighter); //设置PWM波占空比,以此控制台灯亮度 % U W1 W% b! a& a
- switch(j)
+ o8 B0 r0 p) N; G - {
9 S( P. y" G- [. L - case 1: //一级口令:小陈 - `4 t6 u/ S5 O5 M' R [# x u
- show_name(); " t8 s M k# |- P+ ?& W
- break; $ D, c0 ~( H- j/ O1 ^" f+ R
- case 2: //亮一点; n( m1 d+ b0 X8 |
- if(lighter<5) //亮度还不满5
5 F4 L* y. \' i6 p# b, s - {9 J/ x- ~0 k. ?
- lighter++;) Q. x* Q- o5 ]8 S- F1 n- f, [5 ~
- show_light(lighter); //显示亮度6 {- S3 [2 F$ r/ ^* e% Y }
- }
3 N7 Z: L, C7 l) ~3 |# ? f0 I! l - else
' P0 N+ B3 C& c6 K# Q7 R - show_zuida();
9 E; e8 W' w# |8 k. e2 M+ G, a+ Y0 u m - break; //显示已达最大亮度 " ^: u/ h( E \
- case 3: //变暗
- N$ U1 X1 q( ^: K6 a - if(lighter>0), ]$ [. i; x1 A1 h9 i0 V: V
- {% R5 y; T' [: c$ |6 M
- lighter--;! J7 ?7 ~$ N( C/ `4 J9 b
- show_light(lighter); //显示亮度
5 z3 P# }$ i1 k! N1 n - }- O& k1 B9 T: O1 S0 K- j& ?
- else
& u, {: S. [1 x% `* w& S; Z - show_zuidi();
; c `: c( P7 {1 Q3 d - break; //显示已达最低亮度
5 f5 A g n" \9 J# [9 p4 i+ a3 D - case 4: //开灯(默认亮度等级3,60)
8 @1 Q2 c( B1 h! | z2 h, A/ l - lighter = 3;
7 r, j) q5 z, y$ z: ?& z8 Z0 d& ~ - show_light(lighter);
$ Q. k4 C! r: B+ a0 A - break;
0 o' `' l8 L: ^- W" u - case 5: //关灯5 ~0 A8 i) c$ B, k( H$ N0 E
- lighter = 0;
( v" A$ U' N0 j( E - show_ling(); ! t" v+ n2 y: h5 L
- break; 1 X2 |* U5 J9 [0 D
- case 6: //亮度20
/ i, j9 T6 U; @ Y8 d+ l; c! Y8 J. H - lighter = 1;
& ]3 c8 \/ F; ] - show_ershi(); & ^$ D# h' b8 [8 Z. A6 R, x+ A
- break; - P0 K& w* w. g0 ~
- case 7: //亮度60
# p; v; c2 v/ e# Y. p - lighter = 3;
. u" c! a9 ? S% h# j - show_liushi();
7 _9 d( f0 ^' K/ t - break; ) B* o! a" c* V! W- y9 j* L/ B
- case 8: //亮度100
3 t" e2 `8 m. K! T, o! H+ i/ A% j - lighter = 5;! r; Q" D7 \. D" _
- show_yibai();
( w6 u# `) o9 f3 q - break; : ? f5 A+ O# L5 [$ g$ w4 [1 D
- case 9: //显示请重新发口令 : F9 v8 G7 n" B i/ p
- show_chongfa(); , D! F& `' w+ t) O9 e2 ^
- break;
9 `7 l; Q5 r% |' P9 S - case 10: //显示请重新发口令 9 H3 \# G/ D4 w6 B" A" o
- show_chongfa();
2 R/ |3 ~8 l4 N( o, d9 R2 A - break;
' _# u. N# v6 N6 V2 E/ ^ - default:break;
8 q! N/ B/ ~+ [0 D" l - }, u: W# D; H! D5 l; ?
- }
& g) V/ W/ `, ? - }
复制代码设计说明书:
$ w0 W: f3 i* |6 ^& C- M' g |