|
本设计:! n8 g8 z$ m- Z- n. U* |$ g
基于STM32的智能语音识别的柔光台灯设计(源程序+原理图+PCB+设计说明书+PPT) 原理图:Altium Designer 程序编译器:keil4/keil 5 编程语言:C语言 编号Y001 3 o4 {2 p- b+ F
设计说明: 课题主要研究语音识别、按键识别、PWM波调节亮度、OLED屏幕显示四个模块,目前市面上语音识别的台灯大多仅是控制灯的亮灭,采用的是普通LED节能灯进行照明,相比较于市场上已有的产品,本课题所研究设计的台灯采用的主控芯片是性能较高的STM32F103C8T6单片机芯片,采用中断方式对台灯进行按键控制,并通过基于LD332O语音识别模块,利用非特定人语音识别技术对台灯的工作状态进行语音控制,同时实现了语音控制和按键控制台灯的工作状态,采用输出波形比较输出PWM波,利用PWM波来控制光照的亮度及达到柔光照射的目的,并采用OLED屏幕显示台灯的工作状态灯信息,因此使用者可以快速的指导台灯目前的工作状态,根据自身的实际需求通过语音或者按键对台灯的工作状态进行调节,这样就能够更好的帮助这些弱势群体,如老人、儿童、孕妇等行动不便的人,由于采用的是柔光台灯照明,在一定程度上减缓青少年近视发病率持续上升的趋势,并且LED灯能够缓解资源消耗过大、污染物排放量的现状。 + T5 S! ~2 w4 a" F d/ A
实现功能如下: 1.语音识别部分:采用市面上流行的基于LD3320语音识别模块,利用非特定人语音识别(ASR)技术,调试语音模块使其满足台灯所需要的特定词汇。词汇包括:唤醒词、开灯、关灯、亮一点、变暗等。采用主控芯片STM32F103C8T6与LD3320语音识别模块进行串口通信,主控芯片接收数据后处理该消息命令。 2.按键控制部分:利用按键中断机制来控制灯的亮度,以及控制灯的开和关。 3.PWM波控制LED柔光灯亮度部分:采用STM32F103C8T6内部自带定时器输出PWM功能,接上外围电路,控制多个LED灯。 4.显示模块部分:主控芯片通过SPI协议驱动0.96寸OLED屏幕,在128*64个像素点的屏幕上显示灯的亮度级数及其他信息。 . M$ @* e- z; _% f2 O+ i" J. O* u
1 v7 S$ v4 A% O+ O/ s
% ^# q0 d9 `; F/ H: n( B4 p
8 W1 O$ C" ?9 r, R& x
原理图(提供源文件):
1 F/ T2 y9 Q5 [4 j7 Q: y: _; b
PCB图(提供源文件):
/ L8 z6 q5 s+ M% T3 \; z
源程序(提供源文件)
9 ~* K, e* U" j, ]5 |% K1 A# q
以下为部分程序,完整程序可在下载链接获取:
7 p& _; R0 d3 ]' ^4 _- int lighter=0; ! ^( m; {1 ]. _& k
- int main(void)
5 K. q& _ E2 I' n' Z1 O% R - {
& @2 s+ e% X. J# Q, b" [5 p: o ?5 P - delay_init(); //延时函数初始化
0 b9 Z; t* g4 p - NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init();
" x1 F+ Q. L! k6 L - OLED_Init(); //初始化OLED & W4 M# o2 L* p. I
- OLED_Clear(); //OLED清屏1 R' V( ^9 ]& Z# L9 |
- TIM1_PWM_Init(); //TIM1 PWM波输出初始化,并使能TIM1 PWM输出
- L w% v+ A4 K! m* e - usart2_Init(9600); //初始化串口22 ?/ @8 R" t) P- x2 X
- EXTIX_Init(); //外部中断初始化:中断线,IO,设置中断优先级(抢占优先级,响应优先级),触发方式
7 e( a$ C+ a2 d& o. c+ }4 p# h" s - int j;
, Z# G, }: v, k. z - show_name();
7 T- z: Q# p2 V - 0 O* P0 w/ O$ H! c
- while(1) % M( R8 |) A1 [( e! K
- { 3 p5 b8 W; X0 b4 b) h
- j=ld3320_uart_receive(); //得到接受函数的字符串buff
" R# F; S* ^3 C( M0 v - pwm_led_out_test(lighter); //设置PWM波占空比,以此控制台灯亮度
* Q O; d- U1 D0 M - switch(j)
: Z' Q7 u# u+ D& x; B" o - { * j+ x q0 \5 o; J% i3 ]
- case 1: //一级口令:小陈 + x9 l& p$ j" _7 g
- show_name(); 1 d# u5 s2 h; @4 g
- break;
8 R, j0 [1 d$ ?- ~) \! e - case 2: //亮一点" m- K) t4 I1 u
- if(lighter<5) //亮度还不满5
! D6 ^* C& |3 g& O/ O& T - {
% T$ y; d+ _) }5 ~+ D - lighter++;' J* {2 H7 z! n, K
- show_light(lighter); //显示亮度% `2 L4 I9 P& e! h! u
- }
2 A7 s# j. h# A) O' {. E - else |+ [/ \( C% l/ N8 n$ q- V
- show_zuida(); 4 k7 u- J' N' c
- break; //显示已达最大亮度
. ?% o1 n' z+ T% k k) r - case 3: //变暗& F- _ ]* g8 J, v" V
- if(lighter>0)4 F* I2 G# r1 }
- {
9 }% c; D/ d5 d7 \0 c - lighter--;2 l" N4 E, D5 B) {
- show_light(lighter); //显示亮度 5 T9 R: O" U$ G2 L/ @3 _; P
- }1 A$ h7 h/ L5 p. ~/ n' C* t
- else
0 h1 d$ A1 \7 q) L! e2 M* @- C; ] - show_zuidi(); ! G' F( b& i d c
- break; //显示已达最低亮度
) d, h8 A ?( H9 r+ k - case 4: //开灯(默认亮度等级3,60)( F9 ^0 h0 @& G% U
- lighter = 3;
- S5 _, r5 M" @1 D0 l- u - show_light(lighter);
4 f" H3 ~9 `9 W5 u5 a8 @/ K - break; : v( }6 _$ W5 V1 a) m2 {
- case 5: //关灯
1 e, h. s. g3 R4 s& q7 i2 O - lighter = 0;- {: H7 M" I8 i4 S
- show_ling(); ( L# d- y9 T1 }# j5 S- [
- break;
) ^. S4 d! `1 R7 u+ E2 h3 X0 w9 a - case 6: //亮度20
! M: f% w* B3 G - lighter = 1;
5 |1 ^7 y+ {7 W) @2 B$ w! X - show_ershi(); 7 e7 W4 w, E3 O. d7 Z7 @
- break;
/ k# S7 f6 z; X! Y' y. l) _+ m9 ~ - case 7: //亮度60
# U+ J! h3 o: D# J0 w: V6 V - lighter = 3;* u2 K* `5 t( S' D* H2 i: q' o
- show_liushi();
" E+ e/ z- n9 P$ V/ w4 `% t4 B - break;
3 Q: u9 d3 K- i# ^8 Q' F - case 8: //亮度100
# L: C$ P! q; f' s S' V - lighter = 5;3 J% x# q: I5 I8 r
- show_yibai();
- X! W# H: _* O8 F: b5 U+ a - break; $ H6 Q8 ?9 ?8 e
- case 9: //显示请重新发口令
\2 G5 L0 m/ F6 _5 d# m5 n$ u' v - show_chongfa();
" e e' C5 y2 S' U - break;
) h6 O" j9 j8 [7 X - case 10: //显示请重新发口令
' j- a+ G5 n/ t. X: O0 } - show_chongfa(); $ h2 N( f6 p$ c" G; R) e# I
- break;
! c3 p) R! |0 h. c5 S. ^. V4 `4 j - default:break;8 |3 S& P. a0 P/ r5 Y
- }8 N6 J8 |& Y0 m7 Y* j6 c4 i; M
- } 6 {9 A6 e4 v7 D, ?3 m
- }
复制代码设计说明书: 0 ?) A7 ~3 W) M0 m2 i" S) J
|