博舍

基于STM32和LD3320的智能语音识别柔光台灯设计 语音识别研究内容论文

基于STM32和LD3320的智能语音识别柔光台灯设计

目录标题基于STM32智能语音识别柔光台灯设计设计说明原理图系统各模块器件介绍LD3320语音识别模块OLED显示模块PCB图源程序程序设计框架程序流程图主函数OLED程序设计说明书立论依据文献综述研究内容研究基础

毕业设计:

基于STM32智能语音识别柔光台灯设计

(源程序+原理图+PCB+设计说明书+PPT)

原理图:AltiumDesigner

程序编译器:keil4/keil5

编程语言:C语言

设计编号:Y001

资料下载链接

设计说明

课题主要研究语音识别、按键识别、PWM波调节亮度、OLED屏幕显示四个模块,目前市面上语音识别的台灯大多仅是控制灯的亮灭,采用的是普通LED节能灯进行照明,相比较于市场上已有的产品,本课题所研究设计的台灯采用的主控芯片是性能较高的STM32F103C8T6单片机芯片,采用中断方式对台灯进行按键控制,并通过基于LD332O语音识别模块,利用非特定人语音识别技术对台灯的工作状态进行语音控制,同时实现了语音控制和按键控制台灯的工作状态,采用输出波形比较输出PWM波,利用PWM波来控制光照的亮度及达到柔光照射的目的,并采用OLED屏幕显示台灯的工作状态灯信息,因此使用者可以快速的指导台灯目前的工作状态,根据自身的实际需求通过语音或者按键对台灯的工作状态进行调节,这样就能够更好的帮助这些弱势群体,如老人、儿童、孕妇等行动不便的人,由于采用的是柔光台灯照明,在一定程度上减缓青少年近视发病率持续上升的趋势,并且LED灯能够缓解资源消耗过大、污染物排放量的现状。

实现功能如下:

1、语音识别部分:采用市面上流行的基于LD3320语音识别模块,利用非特定人语音识别(ASR)技术,调试语音模块使其满足台灯所需要的特定词汇。词汇包括:唤醒词、开灯、关灯、亮一点、变暗等。采用主控芯片STM32F103C8T6与LD3320语音识别模块进行串口通信,主控芯片接收数据后处理该消息命令。

2、按键控制部分:利用按键中断机制来控制灯的亮度,以及控制灯的开和关。

3、PWM波控制LED柔光灯亮度部分:采用STM32F103C8T6内部自带定时器输出PWM功能,接上外围电路,控制多个LED灯。

4、显示模块部分:主控芯片通过SPI协议驱动0.96寸OLED屏幕,在128*64个像素点的屏幕上显示灯的亮度级数及其他信息。

原理图

系统各模块器件介绍

整个设计包括STM32F103C8T6主控芯片模块、0.96寸OLED显示模块、LD3320语音模块、按键模块、LED灯组模块等组成,如下图2.1所示:

主要用到的元器件有STM32F103C8T6单片机、OLED显示屏幕和其驱动芯片SSD1306、LD3320语音识别芯片和内部的增强型51单片机等,这些元器件将会在本章中进行介绍。

LD3320语音识别模块

​LD3320语音识别常用的芯片,该芯片组成的语音模块识别的灵敏度高,采用的是非特定人语音识别(ARS)技术,这种技术是能够识别汉字小写拼音内容的,本课题的语音识别模块由LD3320与STC11L08XE单片机组成识别系统,如图2.4所示:

语音识别系统原理框图

​语音识别芯片能够将咪头输入的语音信息内容进行频谱分析之后再提取出该信息内容的特征,再将识别出来的内容传输至语音识别器中与先前所设定好的关键词进行比对,然后找出与识别出的信息最为相似的关键词,并进行输出。使用者只需要将识别出来的关键词语内容以汉字拼音字符串的形式传输至语音芯片当中,即可识别生效。本课题语音识别模块每次识别完成将通过中断方式请求主控模块进行处理,通过SPI协议从语音识别芯片读取信息,并根据识别的信息通过串口通信的方式将识别出来的信息发送给STM32F103C8T6单片机。

OLED显示模块

OLED显示屏,是一种有机的发光二极管,它能够自发光,并且拥有反应灵敏、极薄厚度、能够适应的温度范围大、对比度相对较高,还有不需要背光源、结构简单、分辨率高等优势,同时也存在着难以大型化的不足。

本课题采用的OLED显示屏为中景园电子的显示屏,该模块有蓝色、黄蓝色、白色三种颜色可供选择,但是每一个OLED显示屏只能显示这三种颜色中的其中一种颜色,模块尺寸为2.7CM2.6CM,显示尺寸为0.96寸,屏幕的分辨率达12864,工作电压为3.3V。其结构图如下图2.6所示:

PCB图

源程序

程序设计框架整个程序的设计主要分为STM32F103C8T6单片机IO的初始化程序设计、OLED显示程序设计、PWM波输出程序设计、LD3320语音识别程序设计等,设计的框架如下图4.1所示:

程序流程图

在主程序里,先直接调用各个模块初始化程序,完成OLED初始化、定时器初始化、串口初始化等,然后不断扫描执行switchcase函数,调用PWM波输出控制LED灯程序和OLED显示屏显示函数。串口中断和按键外部中断会改变工switch控制参数,以此达到改变PWM波和OLED不同的显示界面。其主函数程序如下

主函数intmain(void){delay_init();//延时函数初始化NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级LED_Init();//LED端口初始化OLED_Init();//初始化OLEDOLED_Clear();TIM1_PWM_Init();//TIM1PWM波输出初始化,并使能TIM1PWM输出usart2_Init(9600);//初始化串口2EXTIX_Init();intj;show_name();My_USART2_SendData("123");while(1){j=ld3320_uart_receive();//得到接受函数的字符串buffpwm_led_out_test(lighter);switch(j){case1:show_name();break;//小陈case2://亮一点My_USART2_SendData("ligther");if(lightershow_zuida();}break;//屏幕提示已达最大亮度case3://变暗if(lighter>0){lighter--;show_light(lighter);}//显示亮度else{show_zuidi();}break;//屏幕提示已达最低亮度case4:lighter=3;show_light(lighter);break;//开灯,默认亮度等级3,60%case5:lighter=0;show_ling();break;//关灯case6:lighter=1;show_ershi();break;//亮度20case7:lighter=3;show_liushi();break;//亮度60case8:lighter=5;show_yibai();break;//亮度100case9:show_chongfa();break;//显示请重新发口令case10:show_chongfa();break;//显示请重新发口令default:break;}}}OLED程序

在液晶显示屏程序里,先配置SPI协议四个GPIO口和SSD1306复位引脚为推挽输出,然后输出复位电平复位SSD1306芯片。接下来是调用写命令函数来设置SSD1306工作参数,最后关闭显示,复位坐标点到原点,

/初始化SSD1306通信引脚voidOLED_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能A端口时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_4);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能A端口时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8);OLED_RST_Set();delay_ms(100);OLED_RST_Clr();delay_ms(200);OLED_RST_Set();//复位过程

LD3320驱动代码

voidProcessInt0(void){uint8nAsrResCount=0;EX0=0;//外部中断0允许位:不允许ucRegVal=LD_ReadReg(0x2B);LD_WriteReg(0x29,0);//中断允许寄存器LD_WriteReg(0x02,0);//FIFO中断允许位if((ucRegVal&0x10)&&LD_ReadReg(0xb2)==0x21&&LD_ReadReg(0xbf)==0x35)//b2:DSP忙闲状态,0x21表闲,可以进行下一步ASR动作;bf:ASR状态报告寄存器,确定一次语音识别流程正常结束,识别成功{nAsrResCount=LD_ReadReg(0xba);if(nAsrResCount>0&&nAsrResCount

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇