(以下教程仅针对Arduino UNO、Arduino Nano等使用Atmel328P为核心的开发板)

一、蜂鸣器播放音乐

说起单片机播放音乐,大家第一个想到的应该是无源蜂鸣器或喇叭。( 因无源蜂鸣器的工作原理与扬声器相同,此处混为一谈,但实际使用仍有区别 ),无论是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等,使用MP3模块连接单片机,既可以简单的播放音乐,又可以控制EQ、音量、随意暂停播放插播歌曲、查询歌曲名字、歌曲时长等。他的操作如同老式MP3,只需要将他连接到电脑,存放歌曲即可。

在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模块适合播放长短音频,价格适中,音质中等,操作简单

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

如何给Arduino项目添加音乐播放功能相关推荐

  1. 怎么添加本地音乐_展示 | 传一学员优秀项目之音乐播放器

    ?点击上方蓝字关注我们 前言:随着移动互联网在国内的飞速发展,移动音乐作为国内最受欢迎的娱乐休闲方式之一也得到飞速的发展,有包括酷狗.QQ.酷我等在内的全用户覆盖的音乐软件,又有像网易云.虾米等在内的 ...

  2. Arduino触摸屏MP3音乐播放器和闹钟项目

    在这个项目中,我将向您展示如何制作Arduino触摸屏MP3音乐播放器和闹钟.您可以观看以下视频或阅读下面的书面教程. Arduino触摸屏MP3音乐播放器和闹钟项目 概述 主屏幕具有大时钟,日期和温 ...

  3. all3dp.com网站中全部Arduino项目(2022.7.1)

    arduino项目] 原文地址:https://all3dp.com/topic/arduino/ 最受欢迎20220707 项目组-1. [2022 年 10 个最有用的 Arduino 项目:]( ...

  4. android播放mp3功能,Android Studio实现简单音乐播放功能的示例代码

    项目要求 基于Broadcast,BroadcastReceiver等与广播相关的知识实现简单的音乐播放功能,包括音乐的播放.暂停.切换.进度选择.音量调整. 设计效果 (进度条时间刷新功能还没有实现 ...

  5. [MAUI 项目实战] 音乐播放器(一):概述与架构

    系列文章将分步解读音乐播放器核心业务及代码: [MAUI 项目实战] 音乐播放器(一):概述与架构 [MAUI 项目实战] 音乐播放器(二):播放内核 [MAUI 项目实战] 音乐播放器(三):界面交 ...

  6. 如何在网站中添加音乐

    来源:http://www.ido321.com/1042.html 发现有很多的个人博客中添加了背景音乐,以增强用户体验.LZ搜集到了两种在网站中添加音乐的方式. 一.豆瓣的FM         这 ...

  7. 在线音乐播放项目——BY音乐

    前言: 这是我的第一个 SSM 项目 -- BY 音乐,所涉及到的技术:Spring.SpringBoot.SpringMVC.MyBatis.BCrypt 加密.自定义拦截器.HTML.CSS.Ja ...

  8. 使用声音传感器的Arduino控制的音乐喷泉

    原文:https://circuitdigest.com/microcontroller-projects/arduino-controlled-water-fountain-using-sound- ...

  9. java实现音乐播放功能

    java实现音乐播放功能 注意:音乐文件格式是WAV格式 (本文转载自CSDN--小白) 欢迎收看<好看的博文没人赞>系列 这里将实现一个音乐工具类,通过实例化该类传入音乐文件路径,可以进 ...

  10. Arduino项目专用的Beetle CM-32U4微控制器

    Beetle CM-32U4是国内著名开源硬件商DFRobot新出品的一款板载了充电管理芯片的微型Leonardo控制器,是Beetle控制器的升级版本,在集成度和易用性上做了更多优化,专为对使用时长 ...

最新文章

  1. Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
  2. MBR与GPT分区格式(实例-创建大于2TB的分区)
  3. Fusioncharts图表组件API参考方法(Functions)汇总篇(续)
  4. NR 5G SA注册流程
  5. php表单时间转换为时间戳-175
  6. spring boot一个模块加载不到引用另一个模块的mapper.xml报错org.apache.ibatis.binding.BindingException: Invalid bound sta
  7. python 函数参数多个逗号不报错_python笔记7-多线程threading之函数式
  8. nginx 1.11.0实现http和https正向代理
  9. springboot 整合 百度OCR身份证识别
  10. 在Ubuntu16.04上安装QQ
  11. 工程量计算稿1.54安装教程 v1.54pjb
  12. python编写手游脚本_编写一个手游脚本需要哪些知识?
  13. tf改善_如何衡量和改善自动常见问题解答
  14. 序列化和反序列化(示例)
  15. 西门子200smart自创库与说明
  16. 哈工大车万翔:自然语言处理范式正在变迁
  17. 转载的--------待整理
  18. 装饰器模式——爱江山更爱美人
  19. Istio-PilotDiscovery服务的创建
  20. 运筹学 知识点总结 (七)

热门文章

  1. 怎么把mxf转换成mp4?
  2. Dalamud:FFXIV插件框架和API-源码
  3. 苹果手机长截屏_发现一个手机必备软件
  4. 教你webm格式怎么转换成mp4
  5. Cadence 17.4 等长布线
  6. 软件测试面试题及答案,2022最强版
  7. Javascript json转对象(互转)
  8. 软件、硬件版本号命名规范
  9. Latex数学符号输入大全
  10. UG12.0运动仿真分析基础到精通视频教程