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

目录标题

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

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

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

    原理图:Altium Designer

    程序编译器:keil4/keil 5

    编程语言: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个像素点的屏幕上显示灯的亮度级数及其他信息。

    img

    img

    原理图

    img

    系统各模块器件介绍

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

    image-20220901004833721

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

    LD3320语音识别模块

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

    img

    语音识别系统原理框图

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

    OLED显示模块

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

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

    image-20220901005115058

    PCB图

    img

    源程序

    img

    img

    程序设计框架

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

    img

    程序流程图

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

    image-20220901005224963

    主函数

    int main(void)
    {
    	delay_init();	    	 //延时函数初始化
    	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	LED_Init();			     //LED端口初始化
    	OLED_Init();			//初始化OLED 
    	OLED_Clear(); 
    	TIM1_PWM_Init();        //TIM1 PWM波输出初始化,并使能TIM1 PWM输出
    	usart2_Init(9600);	    //初始化串口2
    	EXTIX_Init();
    
    	int j;
    	show_name();
    	My_USART2_SendData("123");
    	while(1) 
    	{
    		j=ld3320_uart_receive();         //得到接受函数的字符串buff
    		pwm_led_out_test(lighter); 
    		switch(j)
    		{
    			case 1: show_name(); break; //小陈
    			case 2:     //亮一点
    			  My_USART2_SendData("ligther ");
    			  if(lighter<5)              //如果亮度还不满5
    			    { lighter++; show_light(lighter);  }    //显示亮度
    			  else
    			    { show_zuida(); } break;    //屏幕提示已达最大亮度
    			case 3:      //变暗
    			  if(lighter>0)
    			    { lighter--; show_light(lighter); }    //显示亮度
    			  else
    			    { show_zuidi(); } break;       //屏幕提示已达最低亮度
    			case 4: lighter = 3; show_light(lighter); break;   //开灯,默认亮度等级3,60%
    			case 5: lighter = 0; show_ling(); break;       //关灯
    			case 6: lighter = 1; show_ershi(); break;       //亮度20
    			case 7: lighter = 3; show_liushi(); break;       //亮度60
    			case 8: lighter = 5; show_yibai(); break; 		//亮度100
    			case 9: show_chongfa(); break;       //显示请重新发口令
    			case 10: show_chongfa();	break;      //显示请重新发口令
    			default:break;
    		}
    	}
    }
    

    OLED程序

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

    /初始化SSD1306通信引脚					    
    void OLED_Init(void)
    { 	
     	GPIO_InitTypeDef  GPIO_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;         //速度50MHz
     	GPIO_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;         //速度50MHz
     	GPIO_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驱动代码

    void ProcessInt0(void)
    {
    	uint8 nAsrResCount=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<=4)   //BA寄存器对内容进行评分
    		   { 
    			nAsrStatus=LD_ASR_FOUNDOK;  //0x10 一次识别结束后有一个识别结果
    		   } 
    		else 
    	      { 
    			nAsrStatus=LD_ASR_FOUNDZERO;  //0x11一次识别结束后没有识别结果
    		    }
    	}
    	else                      //没有识别结果
    	   {
    		nAsrStatus=LD_ASR_FOUNDZERO;
    	    }
    LD_WriteReg(0x2b,0);        //中断请求编号寄存器
    LD_WriteReg(0x1C,0);        //ADC开关控制,写0表示ADC不可用
    LD_WriteReg(0x29,0) ;      //中断允许寄存器
    LD_WriteReg(0x02,0) ;      //FIF0中断允许
    LD_WriteReg(0x2B,0);       //中断请求编号寄存器
    LD_WriteReg(0xBA,0);	     //中断辅助信息寄存器
    LD_WriteReg(0xBC,0);	     //识别过程强制结束,在ASR进行过程中,可以设置本寄存器提前结束本次ASR过程
    LD_WriteReg(0x08,1);	     //清除FIF0内容(清除指定FIF0后再写入一次0x00),0x01为清除FIFO_DATA
    LD_WriteReg(0x08,0);	     //清除FIFO_DATA后 再次写
    EX0=1;                   //外部中断允许位:允许中断
    }
    

    设计说明书

    立论依据

    (课题来源、选题依据和背景情况、课题研究目的、理论意义和实际应用价值)

    随着社会的发展,人们对美好生活愈加的向往,智能产品成为时代的发展趋势。我国语音识别研究在近年来发展迅速,研究的水平也从实验室逐步走向市场,进入消费者的电子产品、工业、家电、通信、汽车电子、医疗、家庭服务等各个领域。

    语音识别技术就是通过识别和理解把语音信号转变为相应的文本或命令的高技术,发展至今日,中小词汇量非特定人语音识别系统识别精度已经大于98%,对特定人语音识别系统的识别精度就更高,这已经能够满足一般应用的要求,于是大量的语音识别产品开始进入市场和服务领域。这些产品为人们的生活提供了很大的便利,例如语音识别的智能台灯,改变了传统只能通过手动控制的方式,采用语音识别技术,通过语音来控制台灯的工作状态。

    现在大部分台灯都是通过手动控制,虽然目前已有语音控制的台灯,但大多数语音控制台灯的控制模式单一,主要是控制台灯的开和关。当需要调节光照亮度时还需手动调节,因此使用起来很不方便,特别是对于老人、儿童和行动不便者来讲尤其困难。

    设计这样一款能够通过语音识别控制亮灭以及亮度的台灯,它可以根据使用者的需求来进行调节,这样就能够更好的帮助这些弱势群体人群,以及在一定程度上减缓青少年近视发病率持续上升的趋势,并且能够避免资源的不必要消耗。

    文献综述

    (国内外研究现状、发展动态)

    随着智能制造业的快速发展,语音识别开始得到广泛的应用,在信息处理、通信、控制等领域也相继出现了各种功能的语音识别系统。其中应用相对广泛的有IBM公司的Viavoice、Android系统的Voice Actions、苹果的Siri以及国内科大讯飞的语音识别产品等,这些软件的共同点是文本转语音的功能较为完善,而反过来语音转文本的功能则较为差些。例如Voice Actions的识别能力超强,但是前提是必须按照规定的格式和语法结构表达,否则就无法识别。

    随着语音识别的广泛应用,出现了许多不同用途的语音识别模块,例如DFRobot的中文语音识别模块,它的核心是国内ICRoute公司的高性能LD3320语音识别芯片,是一颗基于非特定人语音识别(ASR)技术的语音识别/声控芯片,上面集成了高精度的A/D和D/A接口,不再需要外界辅助的Flash和RAM,就可以实现语音识别、声控、人机对话功能,不需要用户进行录音训练,识别的关键词语列表是可以动态编辑的。

    越来越多的语音识别模块的出现,更加刺激了语音识别类产品的创新研发,市面上出现各种功能的语音智能产品,产品以实用性、易用性和人性化为主,致力于为人们提供一个舒适、方便、高效和快捷的生活环境。

    研究内容

    毕业设计(论文)的主要研究内容、构想与思路、可能出现的工作难点以及拟解决的方法)

    主要研究内容:本课题是基于语音识别的智能LED柔光台灯设计,主要的研究内容包括语音识别模块应用,PWM波控制LED柔光灯的亮度,0.96寸OLED显示当前柔光LED台灯的工作状态,软件硬件的联合调试。

    构想与思路:

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

    \2. 按键控制部分:按键中断机制控制灯的亮度,按键控制灯的开光。

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

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

    研究基础

    (所需研究条件和实验条件)

    \1. 设计需要的主要元器件: STM32F103C8T6单片机开发板、LED灯、基于LD3320语音识别模块、0.96寸OLED屏幕

    \2. 制作需要的实验条件:用于软硬件设计的个人电脑、用于制作电路板的电子电工实验室相关设备、用于烧录程序的ST-LINK下载器。

    \3. 调试需要的实验条件:直流稳压电压源、万用表、示波器等。

    \4. 研究所需的理论基础:C语言程序设计、单片机原理及应用、模拟电子技术基础、数字电路与逻辑设计、电路分析基础等。

    img

    资料清单

    下载链接见文章开头

    1. 设计需要的主要元器件: STM32F103C8T6单片机开发板、LED灯、基于LD3320语音识别模块、0.96寸OLED屏幕

    \2. 制作需要的实验条件:用于软硬件设计的个人电脑、用于制作电路板的电子电工实验室相关设备、用于烧录程序的ST-LINK下载器。

    \3. 调试需要的实验条件:直流稳压电压源、万用表、示波器等。

    \4. 研究所需的理论基础:C语言程序设计、单片机原理及应用、模拟电子技术基础、数字电路与逻辑设计、电路分析基础等。

    [外链图片转存中…(img-rxjQCIoW-1661965086923)]

    资料清单

    下载链接见文章开头

    img

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于STM32与LD3320的智能语音识别柔光台灯设计

    发表评论