在这篇文章中,我们将使用arduino和DFPlayer构建一个Mp3播放器。本文设计了两种Mp3播放器,一种是按键控制,另一种是红外遥控。我们还将看看DFPlayer (Mp3播放器模块)和它的规格。
我们都喜欢音乐,我们喜欢在健身、阅读、睡前或一天辛苦工作后放松自己的时候听音乐。
几十年前,由于机械部件的结构复杂性,在家里建造一个音乐播放器对电子发烧友来说几乎是不可能的。
那时候,盒式磁带只能容纳有限数量的歌曲。把一首歌复制到另一盘磁带上也是一场噩梦。但现在,由于电子技术的进步,Mp3播放器可以用你的零用钱从零开始制作。
现在让我们继续讨论项目的技术细节。
该项目的核心是DFPlayer,这是一个小型Mp3播放器模块,可以容纳micro SD卡,并可以使用微控制器控制。
DFPlayer的说明:
它有内置放大器,可以驱动3瓦的立体声或单声道扬声器。它有24位数字模拟转换器(DAC),这是非常好的低成本和紧凑的模块。
DFPlayer的底部视图:
它支持MP3和WMV硬件解码。它支持采样率
8KHz、11.025KHz、12KHz、16 khz、22.05KHz、24KHz、32KHz、44.1KHz、48KHz。
最多支持32GB micro SD卡。它支持多达100个文件夹,每个文件夹可以分配多达1000首歌曲。
它有6个不同级别的均衡器;以及30级音量调节控制。它可以工作在3.2V到5V。
DFPlayer引脚配置:
以上规格以DFPlayer的数据表为基础。
到目前为止,您应该已经熟悉了DFPlayer及其规范。您可以从电子商务网站或本地电子市场购买此模块。
现在让我们进入原理图。
按钮式Mp3播放器设计:
以上电路非常简单;arduino发送命令到DFPlayer模块来控制歌曲。用户可以通过按钮输入他们的选择。
arduino内置的上拉电阻已经在程序中被激活,所以我们不需要在按钮上附加物理电阻。
尽量使用高质量的扬声器;DFPlayer可以提供非常高质量的声音。
如果您在较高音量时发现声音失真,请通过arduino和DFPlayer之间的共同接地,以5V直流从外部供电DFPlayer模块。
如果需要立体声设置,将DFPlayer的一个扬声器连接到SPK1,另一个扬声器连接到SPK2,其余的扬声器线接地。
按钮控制程序:
//--------- 由R.Girish——/ /
# include < SoftwareSerial.h >
SoftwareSerial mySerial(10、11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
#定义确认0x00
const int btnNext = A0;
const int btnPause = A1;
const int btnPrevious = A2;
const int volumeUP = A3;
const int volumeDOWN = A4;
Int volume = 15;
boolean Playing = false;
无效的设置()
{
pinMode (btnPause、输入);
pinMode (btnNext、输入);
pinMode (btnPrevious、输入);
pinMode (volumeUP、输入);
pinMode (volumeDOWN、输入);
digitalWrite (btnPause、高);
digitalWrite (btnNext、高);
digitalWrite (btnPrevious、高);
digitalWrite (volumeUP、高);
digitalWrite (volumeDOWN、高);
mySerial.begin (9600);
延迟(1000);
playFirst公司();
玩= true;
}
无效循环()
{
if (digitalRead(btnPause) == LOW) / /暂停
{
如果(玩)
{
暂停();
玩= false;
}
其他的
{
玩= true;
玩();
}
}
if (digitalRead(btnNext) == LOW) / /输入数字
{
如果(玩)
{
next ();
}
}
if (digitalRead(btnPrevious) == LOW) / /显示当前位置
{
如果(玩)
{
前();
}
}
如果(digitalRead (volumeUP) = =低)
{
volumeINC ();
}
如果(digitalRead (volumeDOWN) = =低)
{
volumeDEC ();
}
}
playFirst公司()无效
{
x3f exe_cmd (0, 0, 0);
延迟(500);
x06 exe_cmd(0, 0,体积);
延迟(500);
x11 exe_cmd (0 0 1);
延迟(500);
}
空白暂停()
{
x0e exe_cmd (0, 0, 0);
延迟(500);
}
空打()
{
exe_cmd (0 x0d 0 1);
延迟(500);
}
空白next ()
{
exe_cmd (0 x01 0 1);
延迟(500);
}
空白之前()
{
exe_cmd (0 x02 0 1);
延迟(500);
}
空白volumeINC ()
{
体积=体积+ 1;
如果(体积= = 31)
{
体积= 30;
}
x06 exe_cmd(0, 0,体积);
延迟(500);
}
空白volumeDEC ()
{
体积=第一卷;
如果(体积= = 1)
{
体积= 0;
}
x06 exe_cmd(0, 0,体积);
延迟(500);
}
void exe_cmd(字节CMD,字节Par1,字节Par2)
{
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
byte Command_line[10] = {Start_Byte, Version_Byte, Command_Length, CMD,确认,Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
(字节x = 0;x < 10;x + +)
{
mySerial.write (Command_line [x]);
}
}
//--------- 由R.Girish——/ /
现在让我们转向基于IR的远程设计。
IR控制Mp3播放器原理图:
以上设计简单如按按钮为主;唯一的区别是去掉了按钮和包含了TSOP 1738红外接收器。从IR遥控器接收到的信号馈送到arduino的A0管脚。
现在,要控制这个Mp3播放器,你需要一个备用的电视,或者任何其他红外遥控器,可能就在你的垃圾盒上。你必须决定哪个按钮来控制像播放和暂停等功能。
有6个功能:
1)播放并暂停
2)第二首歌
3)以前的歌
4)体积增加
5)体积减少
均衡器(普通/流行/摇滚/爵士/古典/基础)
你需要选择遥控器上的按钮,找到这些按钮的十六进制编码,这些编码将被遥控器传输。若要查找十六进制代码,请下载IR库。
github.com/z3t0/Arduino-IRremote
将库添加到arduino软件中,并导航到文件> Examples> IRremote > IRrecvDemo,并上传完成硬件设置的代码。
打开串行监视器,按遥控器上的按钮,就会看到十六进制代码,将其记在纸上相应的按钮上。
您需要在下面给出的程序中输入十六进制代码。一旦你在程序中输入了十六进制代码,就上传它。你可以用遥控器控制你的歌曲了。
红外远程设计程序:
/ /——由R.Girish——/ /
# include < SoftwareSerial.h >
# include < IRremote.h >
SoftwareSerial mySerial(10、11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
#定义确认0x00
//--------------------------------------------------------//
# define pause_play 0x2FD08F7
# define next_song 0x2FDD827
# define prev_song 0x2FDF807 //用远程按钮代码开始“0x”替换这些十六进制代码
# define vol_inc 0x2FD58A7
# define vol_dec 0x2FD7887
# define sound_均衡器0x2FD30CF
//-------------------------------------------------------//
const int receive = A0;
IRrecv IRrecv(接收);
decode_results 12月;
Int volume = 15;
Int eqset = 0;
boolean Playing = false;
无效的设置()
{
irrecv.enableIRIn ();
mySerial.begin (9600);
延迟(1000);
playFirst公司();
玩= true;
}
无效循环()
{
如果(irrecv.decode(12月)
{
如果(dec.value = = pause_play)
{
如果(玩)
{
暂停();
玩= false;
}
其他的
{
玩= true;
玩();
}
}
如果(dec.value = = next_song)
{
如果(玩)
{
next ();
}
}
如果(dec.value = = prev_song)
{
如果(玩)
{
前();
}
}
如果(dec.value = = vol_inc)
{
volumeINC ();
}
如果(dec.value = = vol_dec)
{
volumeDEC ();
}
如果(dec.value = = sound_equalizer)
{
均衡器();
}
irrecv.resume ();
}
}
playFirst公司()无效
{
x3f exe_cmd (0, 0, 0);
延迟(100);
x06 exe_cmd(0, 0,体积);
延迟(100);
x11 exe_cmd (0 0 1);
延迟(100);
}
空白暂停()
{
x0e exe_cmd (0, 0, 0);
延迟(100);
}
空打()
{
exe_cmd (0 x0d 0 1);
延迟(100);
}
空白next ()
{
exe_cmd (0 x01 0 1);
延迟(100);
}
空白之前()
{
exe_cmd (0 x02 0 1);
延迟(100);
}
空白volumeINC ()
{
体积=体积+ 1;
如果(体积= = 31)
{
体积= 30;
}
x06 exe_cmd(0, 0,体积);
延迟(100);
}
空白volumeDEC ()
{
体积=第一卷;
如果(体积= = 1)
{
体积= 0;
}
x06 exe_cmd(0, 0,体积);
延迟(100);
}
空白均衡器()
{
eqset = eqset + 1;
如果(eqset = = 6)
{
eqset = 0;
}
x07 exe_cmd (0, 0, eqset);
延迟(100);
}
void exe_cmd(字节CMD,字节Par1,字节Par2)
{
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
byte Command_line[10] = {Start_Byte, Version_Byte, Command_Length, CMD,确认,Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
(字节x = 0;x < 10;x + +)
{
mySerial.write (Command_line [x]);
}
}
//--------- 由R.Girish——/ /
注1:在编译程序时,您可能会看到警告,请忽略。
注2:试着把你所有的歌曲都放在SD卡中,而不是文件夹。
作者的原型:
快速quuestion:
我想让遥控器上的程序播放某些曲目。我有和视频里你一样的遥控器。
我想让按钮1播放轨道1,等等。你将如何编码?
如果可能的话,我会试着联系这篇文章的作者澄清一下……
根据我对公式的理解。由于公式是F=1/8.8 rc,因此F=1/8.8*22*22=54.4近似为50Hz ??
C的单位是法拉,而不是uF(根据我的说法),在计算之后,你必须用实际的设置来确认它……
我看到了。请先生帮我计算一下CD4047的R1和C1
有关公式,你可以参阅这篇文章
//www.addme-blog.com/2013/09/ic-4047-datasheet-pinouts-application.html
请为我选择一个更好的。意思是我想要一个能给我的电视,吊扇,DVD播放器,SETTLITE接收器供电的
好的,你可以从这个链接试试第二个电路
//www.addme-blog.com/2013/10/pure-sine-wave-inverter-circuit-using.html
谢谢,先生。先生,我想在您的电路上做一个1000瓦的逆变器,请提供给我一个链接
是正弦波还是方波,请注明....
先生,请查看这个链接,我可以用IRF3205替换2N3055吗?http://www.high-voltage-lab.com/projects/72/bigs/500w_220v_inverter_corrected__th.gif
巴希尔,这是一个荒谬的逆变电路....LM324和BJT是不必要的引入,而且是过度杀伤。
如果你想将mosfet与IC4047一起使用,你可以很好地通过10欧姆电阻和反向1N4148二极管将mosfet与IC引脚直接连接到电阻器....为了更好的安全,在mosfet的栅极/源极上放置1K电阻。