Arduino阿杜伊诺音响机
我仍然收到许多发布Arduino Sound Machine项目的请求。我认为现在是为初学者准备入门书的合适时机。首先,保持低期望,因为我在这里没有什么新的东西可以分享。我只是想帮你构建一个基于Arduino的小型语音生成器项目 - 仅此而已。好的,让我们开始吧! MP3-TF-16P 模块
我在这里介绍的项目是基于旧的,但仍然可用的串行MP3迷你模块MP3-TF-16P,这是一个廉价的MP3模块,具有放大的单声道扬声器输出。该模块可用作带有电池、扬声器和按钮的独立模块,或与 Arduino 或任何其他具有串行通信 (UART) 功能的微控制器结合使用。根据数据表,这种易于使用、稳定且可靠的模块提供了完美的集成MP3和WMV硬件解码。
最小的模块有一个SD卡端口,并从SD卡读取MP3文件。此外,该模块具有用于与微控制器通信的TX和RX引脚。它还具有DAC和USB功能。
主要特性(复制自数据表):
支持的采样率 (kHz): 8/11.025/12/16/22.05/24/32/44.1/48 24 位 DAC 输出,支持动态范围 90dB,SNR 支持 85dB 完全支持FAT16,FAT32文件系统,最大支持32G的TF卡,支持32G的U盘,64M字节的NORFLASH 多种控制模式、I/O控制模式、串行模式、AD按钮控制模式 广告声音等待功能,音乐可以暂停。当广告结束时,音乐继续播放 音频数据按文件夹排序,最多支持100个文件夹,每个文件夹最多可容纳255首歌曲 30级可调音量,6级EQ可调 解码 MP3、WAV、WMA
以下是围绕YX5200-24SS(内核)和8002(音频)IC构建的MP3-TF-16P模块的引脚。正如您在引脚排列数据中看到的那样,小MP3模块还在软件音量控制(DAC_R,DAC_L)下提供双声道(立体声)音频输出。
MP3-TF-16P 模块操作有三种模式 – 串行模式、AD 键模式和 I/O 模式。串行模式支持异步串行通信 – UART。
通信标准:9600 基点 数据位数:1 结账: 无 流量控制:无 在串行通信模式下,应注意电平转换,因为模块的外部接口是为3.3V TTL电平定制的。如果您的项目建议的微控制器是5V类型- 如Arduino Uno / Nano,那么建议包括一个与模块的RX引脚串联的1K电阻。该模块的推荐输入电压 (Vcc) 为 DC3.2V 至 5.0V(典型值为 4.2V)。板载"桥式"音频放大器可以驱动标准的3W额定扬声器(请参阅数据表以了解有关扬声器选择的更多信息)。
相关网站链接:
http://www.flyrontech.com/eproducts/126.html ,http://thaieasyelec.com/downloads/EFDV308/HXJ8002_Miniature_Audio_Amplifier_Datasheet.pdf https://picaxe.com/docs/spe033.pdf https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299
要与 Arduino 板配合使用,您只需要模块的 VCC、GND、SP+、SP-、TX 和 RX 引脚(其他引脚是可选的)。整个布线非常简单。该模块通过其标有TX和RX的引脚与Arduino Uno串行通信。在当前设置中,Uno 的引脚 D10 和 D11 充当软件串行库下的可编程 TX 和 RX。模块的扬声器输出引脚(SPK_1和SPK_2)被路由到小型扬声器。将一些MP3文件复制到SD卡并上传Arduino Sketch后,您可以看到模块上的红色LED在播放操作期间开始闪烁。
请注意,您只能将micro SD卡与模块一起使用(1GB足以快速入门)。大多数微型SD卡开箱即用,但设置可能无法读取以前使用的卡。如果是这样,请尝试使用micro SD卡适配器/读卡器和计算机格式化存储卡。该安装程序支持 FAT16 和 FAT32 文件系统。将micro SD卡插入计算机,转到"我的电脑",右键单击SD卡,然后选择"格式化..."
接下来,在该Micro SD卡上创建一个名为MP3的新文件夹,并将mp3文件复制到那里。MP3文件应具有名称"0001名称.mp3","0002名称.mp3"等。请记住,您将MP3文件复制到micro SD卡中的顺序会影响播放顺序,即播放(1)功能在这里使用的Arduino Sketch中将播放复制到micro SD卡中的第一个MP3文件。
在下面,您可以看到我在上述硬件设置中使用的快速测试Arduino Sketch。坦率地说,这个Arduino Sketch是从Web获取的代码的改编版本。Arduino Sketch需要三个库 - "Arduino h","SoftwareSerial h"和"DFRobotDFPlayerMini.h"。
下载并安装第三个库后,只需复制并粘贴Arduino Sketch并上传(库下载链接 https://github.com/DFRobot/DFRobotDFPlayerMini ).
[code]#include "Arduino.h"#include "SoftwareSerial.h"#include "DFRobotDFPlayerMini.h" // Requisite LibrarySoftwareSerial mySoftwareSerial(10, 11); // RX, TXDFRobotDFPlayerMini myDFPlayer;void printDetail(uint8_t type, int value);void setup(){ mySoftwareSerial.begin(9600); Serial.begin(115200); Serial.println(); Serial.println(F("MP3 TF 16P Module Test")); Serial.println(F("Initializing MP3 TF 16P >>> (May take a couple of seconds)")); if (!myDFPlayer.begin(mySoftwareSerial)) { Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while(true); } Serial.println(F("MP3 TF 16P Module Active!")); myDFPlayer.volume(30); //Set volume value to 30 myDFPlayer.play(1); //Play the first mp3}void loop(){ static unsigned long timer = millis(); if (millis() - timer > 5000) { timer = millis(); // myDFPlayer.next(); //Play next mp3 every 5 seconds } if (myDFPlayer.available()) { printDetail(myDFPlayer.readType(), myDFPlayer.read()); /*Print the detail message from MP3 TF 16P Module to handle different errors and states*/ }}void printDetail(uint8_t type, int value){ switch (type) { case TimeOut: Serial.println(F("Time Out!")); break; case WrongStack: Serial.println(F("Stack Wrong!")); break; case DFPlayerCardInserted: Serial.println(F("Card Inserted!")); break; case DFPlayerCardRemoved: Serial.println(F("Card Removed!")); break; case DFPlayerCardOnline: Serial.println(F("Card Online!")); break; case DFPlayerPlayFinished: Serial.print(F("Number:")); Serial.print(value); Serial.println(F(" Play Finished!")); break; case DFPlayerError: Serial.print(F("DFPlayerError:")); switch (value) { case Busy: Serial.println(F("Card not found")); break; case Sleeping: Serial.println(F("Sleeping")); break; case SerialWrongStack: Serial.println(F("Get Wrong Stack")); break; case CheckSumNotMatch: Serial.println(F("Check Sum Not Match")); break; case FileIndexOut: Serial.println(F("File Index Out of Bound")); break; case FileMismatch: Serial.println(F("Cannot Find File")); break; case Advertise: Serial.println(F("In Advertise")); break; default: break; } break; default: break; }}[/code]
这是上述Arduino Sketch的Serial Monitor窗口:
这是我的快速测试设置:
老实说,我讨厌我的小聚酯薄膜扬声器的微弱单声道MP3输出。因此,我寻找一种简单的方法来获得立体声输出,并找到了一个很棒的技巧!我将MP3-TF-16P模块的输出引脚DAC_R和DAC_L连接到一个有点"黑客入侵"的PC多媒体扬声器的信号输入点L和R,通过100Ω电阻,而其公共信号输入点(G)连接到GND。然后,模块的现有单声道扬声器输出引脚(SPK_1和SPK_2)连接到2引脚螺丝端子,作为可选的单声道声音插座。尽管如此,修改后的设置仍然发挥出色!
这是我使用的PC多媒体扬声器系统。幸运的是,它有自己的USB电源。
下一步是什么?
最初的DFPlayer模块(来自DFRobotics)是一个很棒的小型MP3播放器模块,价格实惠。这款便宜的MP3-TF-16P模块的性能也相当不错。该MP3-TF-16P模块的原理图基本上是YX5200-24SS MP3播放器芯片供应商描述的官方参考设计的近似复制品(见下文),但它在BTL(桥接负载)模式下采用了伪造的AB类(不是D)8引脚8002音频放大器芯片。
随它去!您刚刚学习了如何将MP3-TF-16P迷你MP3播放器模块连接到Arduino Uno以及如何开始播放。显然,将基于micro SD卡的MP3播放器模块连接到Arduino打开了一个真正的数字音频的新世界。您可以编辑此基本想法,以便在许多需要自定义基于语音的报警器的项目中使用。
结语
这里介绍的Mini MP3播放器模块是一个小巧而便宜的模块,可直接输出一个扬声器。该模块还可以用作独立模块,并附有电池、扬声器和按钮。值得注意的是,这个超级可爱的模块有很多变体,包括假货。我观察到这些假货并不支持最新DFR库的所有功能(假货有效,但形式有限)。此外,如果您在播放过程中听到非常响亮的噪音,则需要将模块电源与Arduino电源分开和/或简单地将模块的Vcc降低到4.2VDC。这是DFPlayerMini备忘单的有用链接
https://reprage.com/post/dfplayer-mini-cheat-sheet