找回密码
 立即注册
搜索
查看: 89|回复: 0

深入解析LD3320语音识别模块:集成单片机与非特定人语音识别技术

[复制链接]

2万

主题

0

回帖

6万

积分

管理员

积分
64536
发表于 2024-12-10 05:54:04 | 显示全部楼层 |阅读模式
大家好,我叫阿乐。今天我给大家讲解一下语音识别模块。

我们先来看看实际的模块。它看起来像这样:

实际语音识别模块

我用来向您解释的模块现在集成了一个微控制器。这样就更容易开发了。您不需要移植程序。您只需更改例程中的关键字,编译并上传即可。

模块背面的大黑块是单片机,即STC11单片机:

模块背面的STC微控制器

模块正面有一颗小芯片,引脚很多,就是图中红圈的那个:

看看单芯片长啥样:

它是一种基于非特定人语音识别(SI-ASR:-)技术的语音识别芯片,或者说是语音控制芯片。

下面我就给大家介绍一下什么是非特定人语音识别。简单来说,不需要针对特定​​说话人的识别技术。这种语音识别技术不区分年龄和性别。只要说话者说的是同一种语言,就可以被识别。简单来说,只要能拼音拼出发音,就可以输入芯片进行识别。

这个语音识别模块并不智能。这并不意味着它可以回答我们提出的任何问题。它不像我们手机上的语音助手如小爱同学或Siri,可以流利地回答我们。该模块可以识别的内容需要提前设置。我们将要识别的关键词列出来,然后将这些关键词以字符的形式传递到内部,这样就可以处理用户说出的关键词。识别,同时最多可识别50个关键词。

这个模块虽然不智能,但是开发简单,价格也不贵。而且识别关键字后可以直接从IO口输出高低电平,或者从串口打印出数据。这很有趣。我们可以用它来控制各种家电、控制汽车、传输命令等,非常有趣。



该模块有三种工作模式: 1. 正常模式; 2、密码模式; 3.按键触发方式。通过程序编程可以实现不同的工作模式。

普通模式是指模块工作时,我们直接说话,模块直接识别。

密码模式是指模块工作时,首先要说出一个一级密码,比如“芝麻开门”,模块识别出正确的一级密码后,才会进行下一级识别。

按键触发方式是指模块工作时,我们需要在进行语音识别之前按下按键,然后才能进行下一步的识别。

我认为这三种模式中密码模式比较实用。接下来讲一下使用密码方式来控制IO口高低电平的变化,进而控制一个继电器的闭合和断开。

语音识别模块见下图。红框内的引脚就是我们可以使用的IO。纵排从下到上标记为P10~P17有八个,横排从左到右分别是P34、P33、P23~P27、P41。也有 8 个,所以我们有 16 个 IO 端口可以使用。这 16 个 IO 端口可用于控制继电器、LED,或连接到微控制器的 IO 端口。

上图中,最左边的四个引脚,从下到上分别标记为5V、GND、TX、RX,用于下载程序到模块。串口就在这里。我们通过串口向其他模块或者微控制器发送数据,并从这里接收。

好的,接下来我们就直接用这个P10引脚来控制继电器。该模块输出TTL电平3.3V。即使是5V继电器也不能直接控制。我们会在上面添加一个晶体管,然后由晶体管来控制继电器。

画出这个电路图如下图所示:

电路中,语音识别模块的P10引脚直接连接一个200Ω的电阻。电阻的另一端连接到三极管的基极。 9013三极管的发射极接地和电源负极。集电极连接到二极管的正极和控制继电器。脚,继电器的另一个控制脚连接到+5V电源。这样,当P10口输出高电平时,晶体管导通,继电器闭合;当P10口输出低电平时,晶体管截止,继电器断开。我们可以通过继电器来控制各种家用电器。在电路图中,我用继电器控制220V灯。电路图中,二极管和继电器并联,二极管的负极接电源的正极。二极管在这里起到续流作用,可以保护三极管。

下图是我根据这个电路图焊接的继电器模块。顺便说一句,我为语音识别模块做了一个基础。只要将语音识别模块安装在底座上,就可以通过底座给语音模块供电。 P10口与继电器电路也相连。控制端口连接在一起。

好的,下一步是编程。许多示例程序看起来非常复杂。如果我们只是做简单的开发,我们不需要了解每一个细节。我们只需要知道在哪里修改识别关键字即可。

如下图,在左侧项目栏中找到“.C”文件,双击打开:



在.C(下图中红圈1)文件中向下滚动,找到第274行的函数“uint8()”。在该函数中,第278行和第279行有两个数组,并且后面跟着一个数字。后面的数字代表关键词的数量,后面的数字代表这些关键词中最长的句子的长度。我们要添加三个关键字命令:“打开芝麻”、“打开继电器”、“关闭继电器”,因此它们后面是3;这三个命令的拼音都含有空格,最长的是“guan bi”“ji dian qi”,有18个,所以后面跟着18个,如图红圈2所示。

再看280~284行。这是您添加关键字拼音的地方。我们需要在这里输入要识别的命令的拼音。例如,一级密码为:“芝麻开门”,二级密码为:“打开中继”。 ”、“关闭继电器”,如图中红圈3所示。

285到289的数组是识别码数组(上图中红圈4)。所添加的识别码是预定义的宏定义常量值,必须与关键字一一对应。图中,每个关键字命令的拼音首字母大写,格式为“CODE_拼音首字母大写”。例如“芝麻开门”就是“”。

好的,我们来定义识别码。我们必须先定义这些东西,然后才能使用它们。如下图,在左侧项目栏中找到并双击打开.h文件(图中红圈1)。向下滚动找到第 40 行。请参阅#Here 是一堆(图中红色圆圈 2)。这是添加和修改识别码的地方。我们可以根据自己的需要和喜好任意定义识别码和宏名称,但必须与刚才使用的识别码配对。 ,否则会提示未定义错误。忽略识别码后面的数字和字母。如果增加识别的关键字数量,按顺序增加即可,如“0x03、0x04”等。

好吧,最后我们需要修改一下处理函数,也就是说,当模块识别到我们的命令时,需要做什么,哪个IO口输出高电平还是低电平,这个都是在处理函数里实现的。如下图,在左侧项目栏中找到并双击打开main.c函数(图中红圈1),然后向下滚动找到一行中的“void(uint8 dat)”函数202(图中红圈2)。在该功能中您可以根据自己的使用情况,在相应的识别码后面添加识别成功后的操作。

上图中,红框3框内是模块识别到“打开继电器”命令时执行的程序。令“PA1=1”,即让PA1输出高电平,而PA1在主程序中之前已经定义过,PA1=P10,所以P10引脚输出高电平。此时,晶体管导通,继电器闭合。

同样,红框4中框出的是模块识别到“关闭继电器”命令时执行的程序。令“PA1=0”,即让PA1输出低电平,PA1在主程序前面。已定义PA1=P10,因此P10引脚输出低电平。此时晶体管截止,继电器断开。

下图是主程序前面定义的PA1。 “sbit PA1=P1^0”表示P1^0=PA1,因此PA1代表P1^0端口。红框中的端口都是已定义的端口。当我们以后使用这些的时候,我们可以直接使用它们,而不需要再次定义它们。

好了,至此,整个程序的修改就完成了。接下来重建工程完成编译,生成HEX文件,然后通过USB下载器将HEX文件下载到模块中。

最终效果演示请观看下面的视频。看视频更直观。视频中有整个制作过程的详细教程。您可以根据视频教程进行学习和制作。本作品的开发制作需要大家有一定的单片机编程基础。至少你知道如何安装编程软件,了解软件的基本操作,知道如何修改代码,知道如何对51单片机进行编程。这些只是一些事情。如果你知道了这些事情,做起来就很容易了。不难。

点击此处观看详细视频教程

哈哈,最后祝大家制作成功,玩得开心。更多精彩内容请关注头条号:Maker e 。下一期见。再见~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【远见汇智】 ( 京ICP备20013102号-17 )

GMT+8, 2025-5-6 19:20 , Processed in 0.068722 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表