600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 基于ArduinoUNO的LD3320语音识别+SYN6288语音合成的智能分类垃圾桶

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

时间:2023-05-31 04:47:13

相关推荐

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

文章目录

写在前面器件连接部分代码运行结果小结

写在前面

接上一篇文章,这次是集合了语音识别+语音合成(就是语音播报实现一种反馈)+SG90舵机实现垃圾桶的开与闭,给出上篇文章链接,如果对LD3320语音识别还有问题的朋友可以看看:LD3320语音识别模块与Arduino软串口通讯实现开关灯功能

发现还是有好多人都在做这个,当玩具也好,毕设也好,这个都是一个好玩又有趣的项目。因为这只是现在的一门小课设,就拿来当玩具玩玩,后期看情况会加入WIFI(或者蓝牙?)实现无线通讯,顺便学习一下物联网,用Android Studio开发一个APP就可以实现手机控制。还是一样,这篇文章仅作为参考。如有做得不足或者不对的地方,欢迎一起交流学习。

器件

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

LD3320语音识别模块

SYN6288语音合成模块

Arduino UNO R3 328p

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

连接

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

两个舵机,所以

两个舵机,分别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为TXSoftwareSerial softSerial2(3,2); //3为RX,5为TXServo myservo1; // 定义舵机一Servo myservo2; // 定义舵机二int a;void speech1(){//播放:提示音msgdunsigned 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上没有,可能就是很多东西不知道怎么用语言表达。

希望能帮到做这个项目方向的朋友,也希望能帮到偶然点进来的朋友。

完整代码:点击下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。