基于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上没有,可能就是很多东西不知道怎么用语言表达。
希望能帮到做这个项目方向的朋友,也希望能帮到偶然点进来的朋友。

完整代码:点击下载

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安装了anaconda 还需要单独安装pycharm吗_ugnx10安装教程

    安装了anaconda 还需要单独安装pycharm吗_ugnx10安装教程python环境配置步骤一:Pycharm和Anaconda的安装作者介绍1.复制pycharm和Aanconda的安装包2.安装pycharm3.安装Anaconda作者介绍张伟伟,男,西安工程大学电子信息学院,2019级硕士研究生,张宏伟人工智能课题组。研究方向:机器视觉与人工智能。电子邮件:2430290933@qq.com课题组CSDN官方账号,欢迎一键三连:https://blog.csdn.net/m0_37758063/article/details/113527955?s

    2022年8月28日
    0
  • Android SwipeRefreshLayout 官方下拉刷新控件介绍

    Android SwipeRefreshLayout 官方下拉刷新控件介绍下面App基本都有下拉刷新的功能,以前基本do

    2022年6月25日
    26
  • 计算机专业选Java和Python哪个前景好点?[通俗易懂]

    计算机专业选Java和Python哪个前景好点?[通俗易懂]对于学习计算机专业的小伙伴,面对大二选课,开始陷入Java和python的纠结中,从以后的发展来看,这两个编程语言肯定是要通吃的,但前期的学习,可以有一个侧重点,说一下我自己的观点。应很多小伙伴的要求,我们从就业应用前景和学习难易度来分析一下:一、Java1、就业应用前景从目前的招聘量上来看,Java在编程语言中可以说是常胜将军,经常有各种新出的编程语言向它发起挑战,但是Jav…

    2022年7月8日
    19
  • ESP8266开发之旅 小程序之阿里云篇① “IOT菜鸟”小程序,小白简单配置就可以玩起来

    ESP8266开发之旅 小程序之阿里云篇① “IOT菜鸟”小程序,小白简单配置就可以玩起来ESP8266开发之旅小程序之阿里云篇①IOT菜鸟,小程序如何对接阿里云

    2022年7月16日
    17
  • linux防火墙_专业的linux web应用防火墙国内排名推荐「建议收藏」

    linux防火墙_专业的linux web应用防火墙国内排名推荐「建议收藏」对于站长来说,网站的安全维护管理是重中之重,但是在建站后我们发现,再配置齐全的网站也会遭遇各种攻击扫描.这时候你就感觉服务器是一个裸奔的鸡蛋,惯性思维会想和普通电脑一样安装防护软件,这里需要注意了,很多方面不是应该就要做,而需要方法和技巧.我们先简单说下,对于网站防火墙,有两种形式:第一种是服务器提供商的硬件防火墙,购买大厂商云服务器,比如阿里云,百度云等都有专业级的硬件防火墙,能够防护加入云厂…

    2022年6月2日
    64
  • python用pyinstaller编译成exe_pycharm编译成exe

    python用pyinstaller编译成exe_pycharm编译成exe在pycharm中使用pyinstaller生成exe文件:解决通常在cmd中用pyinstaller打包的exe文件太大的问题1、在pycharm中创建虚拟环境:2、在虚拟环境中添加打包程序所需要的库:添加国内镜像库链接,基本可以正常安装所有需要的库;添加pyinstaller工具:提示:一定要按照上面的配置进行,否则会出错在需要打包的程序中右键选中externalTools—>pyinstaller等待程序打包完成,在打包程序目录下的dist文件夹中就有生成的exe文件

    2022年8月27日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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