语音模块SYN6288

 用到了SYN6288,如图:语音模块SYN6288_第1张图片

这里我们讲的是语音播报模块,它的功能是播放声音,之后我会在更新语音识别的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

我们掌握了以上知识,可以扩展一下,我们联系生活,进入超市时候会有个语音播报并打开小栅栏,这个功能,它用到了红外、语音播报、可能还有一个电磁锁控制开门。我们可以做一个简单地红外出发语音播报,就是有客人来的语音提示。

注意:这时你需要一个红外传感器(光电开关),或者一个什么感应模块,来判断是否有人。

我用的是光电开关,如下:

语音模块SYN6288_第2张图片

 光电开关连线: 棕色接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);
   }
}

效果:

红外触发语音播报

你可能感兴趣的:(arduino学习笔记,单片机,嵌入式硬件)