自制 Arduino 扬声器:最简两元件发声实验全程指引
想找个简单好玩的 Arduino 入门项目?自制扬声器仅需两个元件,却能播放各种旋律,是新手练习编程与声学原理的绝佳切入点。
Arduino 扬声器发声原理
Arduino 通过数字引脚(默认 D3)输出不同频率的方波,驱动压电蜂鸣器或扬声器发声。利用 tone() 函数产生指定频率(音高)与持续时间(节奏)的方波组合,即可合成音乐。例如汽车倒车提示音、简单乐曲等均可通过上传新程序实现。
tone() 函数核心用法
tone(pin, frequency, duration)
pin:输出引脚frequency:频率(Hz),无符号整数 0–65535,人耳敏感范围约 2000–5000 Hzduration:可选,毫秒;省略则持续输出直到调用noTone(pin)
示例代码:
可尝试修改频率参数(100、1000、10000 等)观察音调变化,频率越高音调越尖锐。
硬件准备与接线
- Arduino 开发板(Uno/Nano 等)
- 压电蜂鸣器或小功率扬声器
- 杜邦线若干
直连法(最简)
蜂鸣器一脚接 D3,另一脚接 GND。上传完整播放代码(含 pitches.h 音高定义文件)即可听到旋律。
完整代码示例(多图展示):
pitches.h 由 Brett Hagman 编写,定义了标准音名对应频率(如 NOTE_C4 为中音 C),调用时直接写音名更直观。新建标签页(Ctrl+Shift+N)粘贴以下内容保存为 pitches.h:
面包板接法(带限流电阻)
面包板接线图
- Arduino 板
- 压电蜂鸣器
- 无焊面包板
- 100 Ω 电阻
- 两根跳线
步骤:
- 蜂鸣器跨接面包板两行
- 正极(红线或 + 标记)接 D8
- 负极串联 100 Ω 电阻后接 GND
节奏控制:制造节拍
利用 tone() 第三参数设定持续时间,配合 delay() 制造静默间隔。例如 tone(8, 440, 500); delay(1000); 实际产生 500 ms 声音 + 500 ms 静默,形成基础节拍单元。掌握后可编排复杂节奏。
tone() 函数局限性
- 单引脚独占:同一时刻仅能在一个引脚输出 tone,双扬声器无法同步发声,需先
noTone()释放再切换引脚。 - 与 analogWrite() 冲突:引脚 3 和 11 共用定时器,同时用会产生异常波形。
- 低频下限:最低可设 31 Hz,再低波形失真严重,听感不佳。
结语
Arduino 扬声器是成本最低、上手最快的声光电入门项目。虽受限于单定时器、低频表现等短板,但足以支撑简单音乐播放、报警提示等创意应用。有疑问欢迎留言交流。
工业技术
- 打造可靠的 Arduino 能源监测与数据记录仪——分步指南
- 用 Arduino 制作万能红外遥控器:分步指南
- 热敏电阻测温轻松上手:Arduino 分步实战教程
- 从零手搓SCARA机械臂:Arduino UNO驱动,Processing图形界面含正/逆运动学
- 构建可靠电流镜像电路:分步指南
- Arduino 入门指南:硬件架构、编程核心与首个 LED 实战
- 构建自动化仓库:现代化运营的分步指南
- DIY LED灯套件:打造节能环保照明灯具
- 电击枪电路制作全指南:原理、类型、自制与安全防范
- 自制LED手电筒:电路原理与分步制作指南
- 自制无线电中继台:分步打造可靠通信中继指南
- 自制射频探测器:低成本发现隐藏无线电信号简易指南