中文语音识别扩展板 v1.1

1.产品外观
请输入图片描述

2.性能描述

  • Arduino兼容控制器:Arduino Uno、Arduino leonardo、Arduino MEGA
  • 通过LD3320芯片做汉语语音识别,不需要用户事先训练和录音,识别准确率95%
  • 每次识别最多可以设置50项候选识别句,识别句可以是单字,词组 或短句,长度为不超过10个汉字或者79个字节的拼音串
  • 板载单声道麦克风以及3.5mm音频输入接口
  • 板载mp3模块接口,可直接支持:DFPlayer MINI mp3模块、DFRduino Player module mp3模块
  • 支持mp3模块UART/I2C两种通讯方式,并可通过拨动开关自由选择
  • 板载AMS1117稳压器,可提供3.3V供电,兼容更多3.3V的元件。
  • 板载芯片状态指示灯,可直观看到芯片工作状态。
  • 尺寸:54mm×47mm

3.引脚图

特此说明:外接音频输入接口不是外置MIC,是线路输入口。
Pinout Diagram 1.jpg

 Arduino引脚占用:
    MP3模块 D0 D1 A4 A5
    语音模块 D2 D4 D9 D10 D11 D12 D13

4.Voice Recognition如何使用
语音控制LED灯实验

  • 打开串口监控,设置好波特率,对着麦克风用标准的普通话说“开~~灯~~”,LED灯就会点亮,同时会通过串口推送指令标签“0”, 之后说“关~~灯~~”,LED就会熄灭,同时会通过串口推送指令标签“1”。 PS:不要把嘴巴凑在话筒上..

硬件清单:

  • Voice Recognition 语音识别扩展板

  • Arduino控制板

  • LED发光模块ps:你也可以使用D13引脚的板载指示灯~

  • 连接线若干

工具软件清单:

  • Arduino IDE

连线图:
Pinout 1.jpg

演示代码:

/*============================================================

 *  Copyright:  DFRobot
 *  name:       VoiceLED.ino
 *      function:       通过语音控制LED灯亮灭
 *  Author:     Kelvin 
 *  Date:       2014-8-11
 
===========================================================*/

#include <avr/wdt.h>  
#include <VoiceRecognition.h>
VoiceRecognition Voice;
#define Led 8                          //定义Led引脚为8

void setup() {
    Serial.begin(9600);
    pinMode(Led,OUTPUT);              //初始化LED引脚为输出模式
    digitalWrite(Led,LOW);            //LED引脚低电平
    
    Voice.init();//初始化VoiceRecognition模块   
    Voice.addCommand("kai deng",0);   //添加指令,参数1:指令内容,参数2:指令标签(可重复)
                                      //如“北京”和“首都”代表同样含义,则可共用标签。无返回
    Voice.addCommand("guan deng",1); //添加指令,参数(指令内容,指令标签(可重复))
    Voice.start();//开始识别
    wdt_enable(WDTO_1S);//打开看门狗(防止死机)              

}
void loop() {
  switch(Voice.read())               //判断识别内容,在有识别结果的情况下Voice.Read()会返回该指令标签,否则返回-1
  {
    case 0://若是指令“kai deng”
    digitalWrite(Led,HIGH);     //点亮LED
    Serial.println("received'kai deng',command flag'0'");        //串口发送received"kai deng",command flag"0"
    break;
    case 1://若是指令“guan deng”
    digitalWrite(Led,LOW);     //熄灭LED
    Serial.println("received'guan deng',command flag'1'");       //串口发送received"guan deng",command flag"1"
    break;   
  }
  wdt_reset();    
}

语音控制mp3实验:

  • 连接MP3模块,把MP3模块通讯选择开关拨到UART位置,用标准的普通话说“播~~放~~”,小喇叭里就会放出MP3模块SD卡中名称为“0004.mp3”的文件, 之后说“停~~止~~”就会停止播放。 PS:不要把嘴巴凑在话筒上..

硬件清单:

  • Voice Recognition 语音识别扩展板

  • Arduino控制板

  • DFPlayer MINI mp3模块

  • 小喇叭

  • SD内存卡

  • 连接线若干

工具软件清单:

  • Arduino IDE

连线图:
Pinout 2.jpg

演示代码:

代码所需库文件
voiceRecognition
DFPlayerMini

/*============================================================

 *  Copyright:  DFRobot
 *  name:       VoiceMP3.ino
 *      function:       通过语音控制MP3播放
 *  Author:     Kelvin 
 *  Date:       2014-8-11
 
===========================================================*/
#include <avr/wdt.h>  
#include <VoiceRecognition.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>       //加载MP3模块库文件

VoiceRecognition Voice;

void setup() {
    Serial.begin(9600);
    mp3_set_serial (Serial);        //设置MP3模块通讯方式
    mp3_set_volume (15);            //音量调节
    
    Voice.init();                   //初始化VoiceRecognition模块
    
    Voice.micVol(85);               //麦克风放大增益,参数(10-100)默认85
    Voice.speechEndpoint(15);       //语音/背噪对比度,参数(10-50),默认15
    Voice.speechStartTime(8);       //背噪-语音辨别时间,参数(00~50)单位10MS,默认80ms
    Voice.speechEndTime(15);        //语音-背噪辨别时间,参数(00~200)单位10MS,默认150ms
    Voice.voiceMaxLength(200);      //最长语音段时间,参数(0~200)单位100MS,默认20s
    Voice.noiseTime(2);             //上电噪声忽略时间,参数(00~255)单位20ms,默认40ms
    
    Voice.addCommand("bo fang",0);  //添加指令,参数1:指令内容,参数2:指令标签(可重复)
                                    //如“北京”和“首都”代表同样含义,则可共用标签。无返回
    Voice.addCommand("ting zhi",1); //添加指令,参数(指令内容,指令标签(可重复))

    Voice.start();//开始识别
    wdt_enable(WDTO_1S);//打开看门狗(防止死机)            

}
void loop() {
  // put your main code here, to run repeatedly:
  // Serial.println(Voice.ASR(2,80,sRecog));
  switch(Voice.read())              //判断识别内容,在有识别结果的情况下Voice.Read()会返回该指令标签,否则返回-1
  {
    case 0:                         //若是指令“bo fang”
        mp3_play (4);
    break;
    case 1:                         //若是指令“ting zhi”
        mp3_stop ();
    break;   
  }
  wdt_reset();    
}

5.库函数说明
Pinout 5.jpg

6.更多应用技巧

  • 在某些场合需要识别一些简单的外文或者纯方言发音的时候,可以用拼音标注的方法来实现。

例如,有些场合需要识别一些简单的英文单词,可以用拼音标注:

one → wan
two → tu
three → si rui

例如,有些场合需要识别一些纯方言发音的词汇,也可以用拼音标注:

  • 在识别精度要求高的场景中,可以增添 “垃圾关键词语”——吸收错误识别

例如,某个应用场景中,需要识别的关键词语是 4 条,“前进”,“后退”,“开门”,“关门”。在把这 4 个关键词语设置进芯片后,可以再另外设置 10~30 个词语进模块芯片,比如“前门”,“后门”,“阿阿阿”,“呜呜”等等。

只有识别结果是 4 个关键词语之内的,才认为识别有效。如果识别结果是“垃圾关键词语”,则说明是其他的声音导致的误识别,程序会重新开始一次识别过程。

7.文档

Nextredirectltr.png库文件v1.1

Nextredirectltr.pngV1.1 原理图

Nextredirectltr.png演示视频

本文整理于 DFwiki

标签: Arduino传感器