资讯详情

如何给Arduino项目添加音乐播放功能

一、蜂鸣器播放音乐

说到单片机播放音乐,你首先想到的应该是无源蜂鸣器或喇叭。( 由于无源蜂鸣器的工作原理与扬声器相同,这里混为一谈,但实际使用仍存在差异 ),无论是51、Arduino、亦或是STM32.蜂鸣器用于播放音乐。无源蜂鸣器被广泛使用,从电子贺卡、玩具到上个世纪的康瑞达电脑

在Arduino以下函数常用于驱动蜂鸣器:

Tone(蜂鸣器引脚, 输出频率);/// 蜂鸣器在指定的引脚输出中发出声音 noTone(蜂鸣器引脚);         // 停止指定引脚PWM输出,使蜂鸣器不发声 

播放音乐的方式:

优点有:

  1. 成本低,通常只需要蜂鸣器。对于更高的要求和更高的声音要求,只需添加三极管和电阻,并添加二极管保护。
  2. 电路设计简单,

缺点有:

  1. 你需要一个定时器来输出大量的资源PWM,一定的空间(内部RAM\ROM或外部ROM)
  2. 占用大部分系统时间,切换频率等
  3. 由于Arduino没有DAC,播放的音乐只是勉强能听,方波输出和模拟输出还是有很大区别的
  4. 对于某些IO教程直接驱动蜂鸣器、扬声器,对于开发版来说,它是炸弹,从燃烧到燃烧IO,重要的是带走开发版和传感器(这里涉及电感知识,感兴趣的朋友可以去看B站up 罗兹新一期关于继电器的视频)

二、MP3模块播放音乐

今天,国产的MP3模块已经很流行了,比如JQ6500、JQ8900等,使用MP三模块连接单片机,既能简单地播放音乐,又能控制EQ、音量、随意暂停播放插播歌曲、查询歌曲名字、歌曲时长等。他的操作就像老式一样MP三、只需将他连接到电脑上,存放歌曲即可。

在Arduino以下函数常用于驱动MP3模块:

// 使用串口控制 dat = Serial.read(); Serial.write(dat); // IO或单总线控制 delay(ms); delayMicroseconds(us); digitalWrite(io, LOW); digitalWrite(io, HIGH);

播放音乐的方式:

优点有:

  1. 占用IO少,一个IO可播放数百首音乐
  2. 占用资源少,MP3模块支持IO即使是手动开关也可以控制触发、单总线控制、串口控制等,也不需要使用单片机昂贵的空间来存储音频文件。
  3. 与蜂鸣器相比,音频播放效果好,差别很大
  4. 音量可调,更换音频文件无需再次烧录程序
  5. 电路设计简单

缺点有:

  1. 与蜂鸣器相比,价格确实有点贵。一套基本要10元左右。
  2. 功耗更大,因为有专用功放和DSP、DAC等电路的功耗会比蜂鸣器大

三、用解码器播放音乐

使用音频解码模块 功放 存储模块的方法是STM32中比较常见,在低端单片机中并不多见,使用VS1053 该方法仅适用于高端单片机,内存卡模块进行实时音频输出,然后通过功放大来推动喇叭,它不仅对单片机性能要求高,而且对硬件电路设计和开发人员水平也要求高。

在Arduino在这种方式下,驱动代码复杂,不同型号的解码器驱动方式也大不相同,所以这里不列出参考代码。

对于这用播放音乐的方式:

优点有:

  1. 不仅支持音频解码,还支持音频编码。说人话就是支持录音和播音。
  2. 音频质量会比MP3模块的好。
  3. 支持双声道甚至更高的声道数。

缺点有:

  1. 价格昂贵,需要多芯片的配合
  2. 对单片机和开发者的要求很高
  3. 复杂的电路设计

四、总结

综合以上

2021年今天用蜂鸣器播放音乐,不仅麻烦,还需要将音频文件转换为频率文件,浪费单片机昂贵的存储空间(如果使用内存卡,内存卡还需要内存卡模块,价格就会上涨。EEPROM或flash,开发人员还需要知道如何烧录此类芯片),冒着开发版烧毁的风险,(向你推荐这类教程的人没有好心);

使用特殊的驱动芯片和内存卡播放音频更有意义。无论是价格、资源占用还是对开发者知识储备的要求,都不是最佳解决方案;

使用MP3模块,价格不高也不低,对知识储备的要求很低。(只要你能把单片机拉高拉低IO电平可以开始,这是入门教程blink已经教给你了)

五、概括

蜂鸣器适合播放提示音,价格最低,音质最差,操作麻烦

MP3模块适合播放长短音频,价格适中,音质适中,操作简单

音频解码器适用于播放高质量或多声道音频,价格昂贵,音质最好,操作复杂

标签: jq4150继电器继电器型号jr5mp1201二极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台