Arduino语音模块
外观
概述
DFRduinoPlayer语音播放模块的设计初衷是为了让您的机器人会说话。如果机器人能与人进行简单的交流的话,那么机器人就会显的更加智能,同时也增加了不少可玩性。DFRduinoPlayerV3.0,改为炬力硬编解码芯片,增加了录音功能,支持中文TTS语音合成及更多指令,sd卡兼容性更强,兼容市面上常见的32GBytes及以下的SD卡。模块具有立体声输出,可与有源音箱连接;2路功放输出,每路最大3W,可直接接喇叭;通过一个专用MP3编解码芯片进行处理,完全不占用Arduino或其他控制器上的资源,只需要将语音文件放置在SD卡中,Arduino或其他控制器便可以实现播放。也可以实现录音到sd卡中,还提供一个播放完毕提示端口,当播放完一首歌曲后,OUT会输出一个高脉冲。注意:当前版本USB功能暂未开发
技术规格
工作电压:5V工作电压:大于200mA(带负载时)驱动负载:建议4欧或8欧(扬声器内阻)输出功率:每路最大3W(4欧内阻扬声器)存储卡:完全支持FAT16、FAT32文件系统,最大支持32G的TF卡支持格式:.WAV、.MP3这两种文件格式通信格式:19200bps,格式8N1模块尺寸:52X37mm模块重量:30g产品样式图
串口排针接口:
1.+5V电源正,要保证电源电压为5V,电流最好大于1000毫安,如果电流不够需要将音量调小或者使用单个喇叭播放。2.GND电源地3.RX串口数据接收端4.TX串口数据发送端5.OUT语音结束中断输出,当语音结束时输出一个1毫秒低电平扬声器接口:
L_SP:左声道R_SP:右声道红色指示灯:电源指示灯
绿色指示灯:初始化成功后将长亮,如果SD卡未插好或SD是坏的,指示灯将一直闪烁,同时串口会输出PlesecheckmicroSDcard
模块通讯协议
串口模式,波特率19200bps,格式8N1。
通讯指令使用字符串形式, 表示回车换行符,发送命令后有字符串形式的返回值。
功能名称指令返回值备注暂停播放:p 成功返回pause 表示回车换行符继续播放:s 成功返回start 表示回车换行符下一首:n 成功返回next 失败返回false 表示回车换行符上一首:u 成功返回keyup 表示回车换行符音量设置:vX (备注:是v空格再跟数字,范围为0-255,0表示静音,255表示最大声音)成功返回volsetok X=0-255,数字越大音量越大查看歌曲列表:l 成功返回歌曲列表 歌曲列表最后会紧跟一个EndofFileList指定文件播放语音文件名称 成功返回Playok 失败返回Notfound 播放完毕返回Playend 语音文件名称必须为大写字母,不超过8个英文字母或者4个中文字,输入文件名需要包含类型后缀录音开始:r 成功返回record 开启mic录音,启动录音后,中间不再支持其他控制命令,除非发送:e退出录音应用。录音结束:e 输出:exitrecord 停止录音,并依次自动保存为:REC001.mp3REC002.mp3……播放tts语音:t语音文字 成功返回Playok 失败返回Notfound 播放完毕返回Playend 语音不超过21个中文字版本查询:i 成功返回DFRduino Player V3.0 www.DFRobot.com使用教程按键录音机
将SD卡插到sd卡插槽中为模块供电按住REC按钮不放,对着麦克风说话,说完后松开REC按钮。录音文件将存放在RECORD目录下,文件名为RECxxx.mp3简易录音机
a)目标:实现录制mp3文件到sd卡中
b)硬件清单
DF_UNO1ADKeyboard1本模块1microSD卡读写器杜邦线c)软件清单
ArduinoIDEd)连线图
e)操作步骤
在电脑上先将SD卡格式化为FAT格式,音频文件放在根目录下。将SD卡插入模块内打开ArduinoIDE将下面的代码上传到UNO(注意:UNO只有一个串口,因此程序下载和DFRduinoPlayer模块不能同时使用)按连接图进行连线,并对UNO进行供电,建议使用外部电源。///////////////////////////////////////////////////////////////////////////////////使用命令完成录音//:r 开始录音指令//:e 结束录音指令///////////////////////////////////////////////////////////////////////////////////串口接线方式//ArduinoMP3//TXRX//RXTX//5V+5V//GNDGNDintadc_key_val[5]={600,650,700,800,950};intNUM_KEYS=5;intadc_key_in;intkey=-1;intoldkey=-1;voidsetup(){Serial.begin(19200);delay(2000);//WaitforinitializationSerial.println("\:v200");//Setthevolume,from0(minimum)-255(maximum)delay(50);}voidloop(){adc_key_in=analogRead(0);//readthevaluefromthesensorkey=get_key(adc_key_in);//convertintokeypressif(key!=oldkey)//ifkeypressisdetected{delay(50);//waitfordebouncetimeadc_key_in=analogRead(0);//readthevaluefromthesensorkey=get_key(adc_key_in);//convertintokeypressif(key!=oldkey){oldkey=key;if(key>=0){switch(key){case0:Serial.println("\:r");//startrecordbreak;case1:Serial.println("\:e");//exitrecordbreak;default:break;}}}}delay(100);}//ConvertADCvaluetokeynumberintget_key(unsignedintinput){intk;for(k=0;k=0){switch(key){case0:Serial.println("\:p");//Pausebreak;case1:Serial.println("\:s");//Continouetoplaybreak;case2:Serial.println("\:n");//Playnextbreak;case3:Serial.println("\:u");//Playpreviousbreak;case4://PlayspecifiedsongSerial.println("\YOURS.mp3");break;}}}}delay(100);}//ConvertADCvaluetokeynumberintget_key(unsignedintinput){intk;for(k=0;k