基于ArduinoUNO的LD3320语音识别+SYN6288语音合成的智能分类垃圾桶

基于ArduinoUNO的LD3320语音识别+SYN6288语音合成的智能分类垃圾桶文章目录写在前面器件连接部分代码运行结果小结写在前面接上一篇文章,这次是集合了语音识别+语音合成(就是语音播报实现一种反馈)+SG90舵机实现垃圾桶的开与闭,给出上篇文章链接,如果对LD3320语音识别还有问题的朋友可以看看:LD3320语音识别模块与Arduino软串口通讯实现开关灯功能发现还是有好多人都在做这个,当玩具也好,毕设也好,这个都是一个好玩又有趣的项目。因为这只是现在的一门小课…

大家好,又见面了,我是你们的朋友全栈君。

写在前面

接上一篇文章,这次是集合了语音识别+语音合成(就是语音播报实现一种反馈)+SG90舵机实现垃圾桶的开与闭,给出上篇文章链接,如果对LD3320语音识别还有问题的朋友可以看看:LD3320语音识别模块与Arduino软串口通讯实现开关灯功能
发现还是有好多人都在做这个,当玩具也好,毕设也好,这个都是一个好玩又有趣的项目。因为这只是现在的一门小课设,就拿来当玩具玩玩,后期看情况会加入WIFI(或者蓝牙?)实现无线通讯,顺便学习一下物联网,用Android Studio开发一个APP就可以实现手机控制。还是一样,这篇文章仅作为参考。如有做得不足或者不对的地方,欢迎一起交流学习。

器件

  • SG90舵机*2(我这只实现2个分类,就可回收垃圾与其他垃圾,道理都一样)

  • LD3320语音识别模块

  • SYN6288语音合成模块

  • Arduino UNO R3 328p

  • 小垃圾筒*2 (这里我没用到)

连接

在这里插入图片描述

我是这么接,当然这个不是绝对。

LD3320 Arduino
5V 5V
GND GND
RXD D5
TXD D6
SYN6288 Arduino
5V 5V
GND GND
RXD D2
TXD D3

两个舵机,所以

SG90 Arduino
红线 5V
棕线 GND
橙线 D9、D10

两个舵机,分别9号跟10号。

部分代码

LD3320可以通过串口与产品中的单片机进行串口通信达到控制效果,如采用这种方式进行控制,用户可以对main.c函数中的处理函数进行修改,将输出的信息更改为输出识别码,那么在每次识别成功后串口都将打印输出对应的识别码,产品中的单片机就可以对该识别码进行操作以达到控制效果。

给出LD3320模块的原理图在这里插入图片描述
厂家给的文件:
LDChip.c

uint8 LD_AsrAddFixed()
{ 
   
  uint8 k, flag;
  uint8 nAsrAddLength;
#define DATE_A 11 /*数组二维数值*/
#define DATE_B 20 /*数组一维数值*/
  uint8 code sRecog[DATE_A][DATE_B] =
  { 
   
    "la ji tong",\ //一级口令设为“垃圾桶”
    "fei zhi",\
    "su liao",\
    "bo li",\
    "yi la guan",\
    "bao zhi",\
    "yi wu",\
    "wei sheng zhi",\
    "guo ke",\
    "luo ye",\
    "chen tu"
  };	/*添加关键词,用户修改*/
  uint8 code pCode[DATE_A] =
  { 
   
    CODE_CMD,\
    CODE_1,\
    CODE_2,\
    CODE_3,\
    CODE_4,\
    CODE_5,\
    CODE_6,\
    CODE_7,\
    CODE_8,\
    CODE_9,\
    CODE_10
  };	/*添加识别码,用户修改*/
  ..........

文件:main.c

void 	User_handle(uint8 dat)
{ 
   
  if(0==dat)
  { 
   
    G0_flag=ENABLE;
		UARTSendByte(0x01);    //将识别到的识别码传到串口输出,以下同理
		PrintCom("1/r/n");
    LED=0;
  }
  else if(ENABLE==G0_flag)
  { 
   
    G0_flag=DISABLE;
    LED=1;
    switch(dat)
		{ 
   
		case CODE_1:
			UARTSendByte(0x02);
			PrintCom("2/r/n");
			SRD1 = 1;
			break;
		case CODE_2:
			UARTSendByte(0x02);
			PrintCom("2/r/n");
			SRD1 = 0;
			break;
...........

给出SYN6288原理图:
在这里插入图片描述

关于SYN6288得多说几句,主控制器和SYN6288语音合成芯片之间通过UART接口连接,控制器可通过通讯接口向SYN6288语音合成芯片发送控制命令和文本,SYN6288语音合成芯片把接收到的文本合成为语音信号输出,输出的信号经功率放大器进行放大后连接到喇叭进行播放。

使用之前得要把发送的文本转换文本编码格式
在这里插入图片描述
我们与这个芯片“对话”用的不是中文,得首先把中文转换它才能“念出来”,网上有很多这些转换的方法,这里就不再纂述。

Arduino代码

#include <Servo.h> //调用这个库,控制舵机的
#include <SoftwareSerial.h> //定义软串口的

SoftwareSerial softSerial1(6,5);   //6为RX,5为TX
SoftwareSerial softSerial2(3,2);   //3为RX,5为TX
Servo myservo1;  // 定义舵机一
Servo myservo2;  // 定义舵机二
int a;

void speech1(){ 
            //播放:提示音msgd
  unsigned char i = 0;
  unsigned char head[10];

  head[0] = 0xFD;
  head[1] = 0x00;
  head[2] = 0x07;
  head[3] = 0x01;
  head[4] = 0x00;
  head[5] = 0x6D;
  head[6] = 0x73;
  head[7] = 0x67;
  head[8] = 0x64;
  head[9] = 0xE6;

  for(i=0; i<10; i++){ 
   
    softSerial2.write(head[i]);
  }
}

void speech2(){ 
             //播放:可回收垃圾
  unsigned char j = 0;
  unsigned char head1[16];

  head1[0] = 0xFD;
  head1[1] = 0x00;
  head1[2] = 0x0D;
  head1[3] = 0x01;
  head1[4] = 0x00;
  head1[5] = 0xBF;
  head1[6] = 0xC9;
  head1[7] = 0xBB;
  head1[8] = 0xD8;
  head1[9] = 0xCA;
  head1[10] = 0xD5;
  head1[11] = 0xC0;
  head1[12] = 0xAC;
  head1[13] = 0xBB;
  head1[14] = 0xF8;
  head1[15] = 0xD4;

  for(j=0; j<16; j++){ 
   
    softSerial2.write(head1[j]);
  }
}

void speech3(){ 
               //播放:其他垃圾
  unsigned char k = 0;
  unsigned char head2[14];

  head2[0] = 0xFD;
  head2[1] = 0x00;
  head2[2] = 0x0B;
  head2[3] = 0x01;
  head2[4] = 0x00;
  head2[5] = 0xC6;
  head2[6] = 0xE4;
  head2[7] = 0xCB;
  head2[8] = 0xFB;
  head2[9] = 0xC0;
  head2[10] = 0xAC;
  head2[11] = 0xBB;
  head2[12] = 0xF8;
  head2[13] = 0xCA;

  for(k=0; k<14; k++){ 
   
    softSerial2.write(head2[k]);
  }
}

void setup() { 
   
  myservo1.attach(9);  // D9为舵机一信号口
  myservo2.attach(10); // D10为舵机二信号口
  Serial.begin(9600);  //串口初始化
  softSerial1.begin(9600);
  softSerial2.begin(9600);
}

void loop() { 
   
  softSerial1.listen();		//监听第一个串口
  a=softSerial1.read();      //读取串口1的值
  switch(a)
  { 
   
    case 1:
      speech1();            //播放提示音
      break;
    case 2:
      speech2();              //识别到是可回收垃圾,并播报出来
      delay(1000);
      myservo1.write(90);        //舵机一旋转90° 
      delay(3000);               //延迟一段时间,也就是扔垃圾的时间
      myservo1.write(0);        
      delay(5);                 //给舵机一个转动的时间
      break;
    case 3:
      speech3();
      delay(1000);            //识别到是其他垃圾,并播报出来
      myservo2.write(90);        //舵机二旋转90°
      delay(3000);
      myservo2.write(0);        
      delay(5); 
      break;
    default:
      break;
  }
}

关于softSerial1.listen(); 要说几句,之前一直发现一个问题,就是我在用着两个软串口进行通讯,发现语音播报的功能就显示不出来,但是我分着来用,却可以实现,这里提出串口监听的方法,按我的目前的理解就是,只运行第一个软串口,即语音识别模块的串口通讯,这样程序就能完好的运行了。

运行结果

因为这里不能直接上传视频,总的来说是可以正常运行的了,-.-
那我就用串口监视器来说明吧
在这里插入图片描述

小结

(估计也没人看总结)总的来说,基本的功能已经实现了,接下来就是提升或者想想怎么提高识别率以及增加几句“垃圾语”,因为目前时不时还是会乱识别到不该识别到的对话。用Arduino控制舵机就几句代码就可以实现,这比STM32或者51方便好多好多。
这是玩具,这是玩具,这是玩具。 文章中肯定有很多不足的地方,有很多交代不来的东西,我说怎么做这东西的人很多,但是在CSDN上没有,可能就是很多东西不知道怎么用语言表达。
希望能帮到做这个项目方向的朋友,也希望能帮到偶然点进来的朋友。

完整代码:点击下载

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153158.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • 什么是CICD

    什么是CICD什么是CICD一、简介二、持续集成(CI)三、持续交付(CD)四、持续部署(CD)五、下一步是什么?一、简介CI/CD的采用改变了开发人员和测试人员如何发布软件。最初是瀑布模型,后来是敏捷开发,现在是DevOps,这是现代开发人员构建出色的产品的技术路线。随着DevOps的兴起,出现了持续集成(ContinuousIntegration),**持续交付(ContinuousDeli…

  • google浏览器下载安装chrome_谷歌商店网页版

    google浏览器下载安装chrome_谷歌商店网页版。。。

  • QQ农场开挂_农场游戏源码

    QQ农场开挂_农场游戏源码  QQ空间\校友农场外挂源代码12009年08月18日星期二11:41{///////////////////////////////////////////////////////////////////////////////                           声明//本代码不针对任何团体和个人,只为学习\交流\促进游戏的发展而发布//…

  • Linux下通配符总结

    Linux下通配符总结

  • 7个免费的服务器监控工具

    7个免费的服务器监控工具监控服务器是否正常与健康是非常重要的,确保用户始终可以访问你的服务。提高监控效率就需要使用高效的工具了,下面介绍10个免费的服务器监测工具。一、PerformanceCo-PilotPerformanceCo-Pilot(PCP)是一个开源框架和工具包,用于监控,分析和响应实时和历史系统性能的细节。PCP具有完全分布式,基于插件的架构,使其特别适用于复杂环境和系统的集中分析。可以使用C,C++,Perl和Python界面添加自定义性能指标。二、Antur…

  • Anaconda和Pycharm安装和配置教程[通俗易懂]

    Anaconda和Pycharm安装和配置教程[通俗易懂]1、下载Anaconda2(最好选Python2.7的,兼容性好点)在官网下载:https://www.continuum.io/downloads新路径https://www.anaconda.com/distribution/2、安装Pycharm(顺便激活成功教程,不需要激活成功教程工具)默认下一步,安装好就OK了。手动配置Pycharm所用解释器3、打开“文件”—“设置”,它会自动检测…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号