赞
踩
用到了SYN6288,如图:
这里我们讲的是语音播报模块,它的功能是播放声音,之后我会在更新语音识别的demo。本实验使用的是mega2560,之后会更新stm32、esp32/esp8266,其实原理都是相通的。
我们需要通过软件把自己想要播放的文字转成16进制,然后添加到代码里就好。
syn6288这个模块可以播报中英文,它和单片机的连接走的是串口通信,串口发送包含声音内容的GB2312编码,模块播放声音。
接线:VCC 、GND接对应,TX、RX反接。
程序:
- void speech(){
- unsigned char i = 0;
- unsigned char head[46];//声音内容:早上好,现在是北京时间九点半,努力学习呀
-
- head[0] = 0xFD;
- head[1] = 0x00;
- head[2] = 0x2B;
- head[3] = 0x01;
- head[4] = 0x00;
- head[5] = 0xD4;
- head[6] = 0xE7;
- head[7] = 0xC9;
- head[8] = 0xCF;
- head[9] = 0xBA;
- head[10] = 0xC3;
- head[11] = 0xA3;
- head[12] = 0xAC;
- head[13] = 0xCF;
- head[14] = 0xD6;
- head[15] = 0xD4;
- head[16] = 0xDA;
- head[17] = 0xCA;
- head[18] = 0xC7;
- head[19] = 0xB1;
- head[20] = 0xB1;
- head[21] = 0xBE;
- head[22] = 0xA9;
- head[23] = 0xCA;
- head[24] = 0xB1;
- head[25] = 0xBC;
- head[26] = 0xE4;
- head[27] = 0xBE;
- head[28] = 0xC5;
- head[29] = 0xB5;
- head[30] = 0xE3;
- head[31] = 0xB0;
- head[32] = 0xEB;
- head[33] = 0xA3;
- head[34] = 0xAC;
- head[35] = 0xC5;
- head[36] = 0xAC;
- head[37] = 0xC1;
- head[38] = 0xA6;
- head[39] = 0xD1;
- head[40] = 0xA7;
- head[41] = 0xCF;
- head[42] = 0xB0;
- head[43] = 0xD1;
- head[44] = 0xBD;
- head[45] = 0xA8;
-
- for(i=0; i<46; i++){
- Serial.write(head[i]);
- }
- }
- void setup() {
- Serial.begin(9600);
- }
-
- void loop() {
- speech();
- delay(10000);
-
- }
声音编码的生成我用到的是函数语音生成器,可以搜一下。
效果:
语音示例1
我们掌握了以上知识,可以扩展一下,我们联系生活,进入超市时候会有个语音播报并打开小栅栏,这个功能,它用到了红外、语音播报、可能还有一个电磁锁控制开门。我们可以做一个简单地红外出发语音播报,就是有客人来的语音提示。
注意:这时你需要一个红外传感器(光电开关),或者一个什么感应模块,来判断是否有人。
我用的是光电开关,如下:
光电开关连线: 棕色接VCC,蓝色接GND,黑色接5引脚,我用的mega2560,大家可以换别的单片机,思路是通的,代码换个引脚就行。
代码如下:
- void speech(){
- unsigned char i = 0;
- unsigned char head[20];//语音内容:您好,欢迎光临
-
- head[0] = 0xFD;
- head[1] = 0x00;
- head[2] = 0x11;
- head[3] = 0x01;
- head[4] = 0x00;
- head[5] = 0xC4;
- head[6] = 0xFA;
- head[7] = 0xBA;
- head[8] = 0xC3;
- head[9] = 0xA3;
- head[10] = 0xAC;
- head[11] = 0xBB;
- head[12] = 0xB6;
- head[13] = 0xD3;
- head[14] = 0xAD;
- head[15] = 0xB9;
- head[16] = 0xE2;
- head[17] = 0xC1;
- head[18] = 0xD9;
- head[19] = 0x95;
-
- for(i=0; i<20; i++){
- Serial.write(head[i]);
- }
- }
- void setup() {
- Serial.begin(9600);
- }
-
- void loop() {
- if (digitalRead(5) == LOW) {
- speech();
- delay(1000);
- }
- }
效果:
红外触发语音播报
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。