你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
你觉得这篇文章怎么样?
首先看一下,尝试不同的模块并构建一个语音控制的MP3播放器。
在之前的博客文章中,我查看了Arduino的Grove Starter Kit,并对简单的项目启动和运行的快捷方式印象深刻。这让我对Seeed的Grove系统有所了解,所以我想我会看到不同的套件提供的东西。语音识别器的音频相关应用程序吸引了我。
盒子里有什么
语音识别器套件(174-3226)采用Grove公认的透明绿色盒子封装,包含一个底座护罩和一个红外接收器,红外发送器,MP3播放器,RTC(实时时钟)和语音识别器模块以及必要的电缆。我注意到RTC模块需要一个CR1225锂电池,不包括在内,所以我很高兴我没有在圣诞节早上打开它!
模块
Grove系统使用Base Shield作为将各种模块连接到Arduino的简便方法。我通常发现在继续为套件提供的示例之前,分别查看每个模块的信息和示例是有益的。
红外发射器和红外接收器
Seeed Grove wiki上的红外模块介绍使用发送和接收模块获得2个Arduinos来相互通信。幸运的是,我从入门套件中获得了另一个Base Shield,但如果您不是那么幸运,可以将模块直接连接到Arduino。
红外接收器连接到Base Shield上的端口D2。
发射器连接到端口D3。
我从GitHub下载了Grove Infrared Library并将其安装在Arduino IDE中。该库还包括示例草图 - 每个模块一个 - 所以它只是依次打开每个示例并将其上传到Arduino并连接匹配模块的情况。完成后,将两个模块指向对方,然后在Arduino IDE中打开串行监视器。将波特率设置为115200(如果尚未设置),您应该看到以下内容:
RTC 模块
一旦我拿到合适的电池并安装它,我就可以试用RTC模块。再次,这是一个遵循Seeed Wiki上的说明的情况,其中包括下载和安装库,然后在编辑以下行以打开和上载示例Sketch以设置正确的时间。
clock.fillByYMD(2013,1,19); //Jan 19,2013
clock.fillByHMS(15,28,30); //15:28 30"
clock.fillDayOfWeek(SAT); //Saturday
然后我可以在Serial Monitor窗口中看到正确的输出时间。
语音识别器
语音识别器预先设置为响应22个不同的命令。
我按照入门说明将上传的草图上传到Arduino。
我总是觉得有点自我意识地要求一些电子产品为我做事,尽管我很乐意对那些不以某种方式合作的无生命物体大肆滥用。
对模块说“Hicell”应该引起它的注意,你可以告诉它何时正在聆听红色LED指示灯亮起。如果你给它一个预定义的命令,它应该,如在这个例子中,在串行监视器窗口中打印命令。
确保此时波特率设置为9600。
当我靠近麦克风时,我发现Hicell命令效果最好。它曾经把“Go”与“Down”混为一谈,但在大多数情况下,只要我说清楚它就会认出我说的话。我猜它更适合麦克风靠近用户的项目,例如下面视频中安装在踏板车把手上的项目,而不是放在Siri / Alexa风格的房间里等。
MP3 播放器
MP3播放器模块将音乐存储在Micro SD卡上,并播放MP3,WAV和WMV文件。音频输出通过3.5毫米立体声插孔。同样,还有要下载和安装的库以及一系列明确的说明。
与前面的示例一样,串行监视器用于与模块交互,通过发送到播放器的简单命令进行播放,暂停,恢复等。我确保串行监视器设置为9600波特,发送命令“P”和当然,音乐通过耳机播放。
现在用语音命令试试播放器。
制作语音控制的MP3播放器
该套件的说明包括设置语音控制以打开和关闭电视以及构建语音控制的MP3播放器。我快速浏览了电视项目,但干扰查看Fortitude的最终系列并不是很受欢迎,无论如何,如果你已经阅读了我之前的博客文章,那么我对音乐相关项目更感兴趣也就不足为奇了。语音识别模块还具有更多与音乐相关的语音命令。
解释如何设置和运行语音控制MP3播放器的Wiki部分翻译得不是很好,可能有点难以理解。 我将MP3播放器插入Base Shield的端口D2,将语音识别器插入D5。 我将一些音乐文件复制到Micro SD卡。 如果要指定要播放的音乐曲目,则需要重命名文件,以便以数字开头。 例如草图中的线条:
SpecifyMusicPlay(1);
将播放名为001 ****。mp3的音乐文件
我重新命名了几首曲目,但让其他人看看玩家会做什么。
这是草图中指定语音命令的部分:
void loop()
{
int a=0;
if(speech.available())
{
a = speech.read(); // Read the return value from the Speech Recognizer
switch (a)
{
case 3: // speech command : Play music
SpecifyMusicPlay(1); // MP3: play the name of "001"
break;
case 4: // speech command : Pause
PlayPause(); // MP3: pause music
break;
case 19: // speech command : Start
PlayResume(); // MP3: continue music
break;
case 5: // speech command : Next
PlayNext(); // MP3: play next song
break;
case 6: // speech command : Previous
PlayPrevious(); // MP3: play previous song
break;
default:
break;
}
一旦示例Sketch被上传,我说“Hicell”接着是“Play Music”,这正是它所做的。我浏览了其他语音命令,它按预期响应。说“下一个”播放下一个编号的曲目,但我无法播放我原来的文件名留下的歌曲。我想知道我是否使用了“循环”命令,我可以说服它播放那些被忽视的曲目。我编辑草图添加了几行:
case 12: //speech command : Go
PlayLoop(); // MP3: loop all songs
我从Micro SD卡中删除了编号的曲目,尝试了“Go”语音命令,果然,它播放了曲目。虽然这会删除你想要听的内容的一些选择,但这也意味着你不必重命名所有的音乐文件,特别是如果你要在你的SD卡上放一大堆,这是一个巨大的优势。
实际应用
在我看来,这可以很好地将语音识别麦克风夹在夹克的领子上,MP3播放器本身隐藏在口袋里,使用9V电池运行,让你在外出时轻松播放音乐关于。语音识别器模块需要一根长电缆,看起来最长的Seeed do是50cm(179-3728),但使用2根转换电缆(179-3734)制作更长的电缆很容易从适当的插座(179-3735)连接电缆。把它放在一个坚固的情况下,它可能正是你需要激励你的新年分辨率健身制度。