亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino Nano 三路复音演奏《生日快乐》—— 灯光同步的无限循环演示

元件清单

元件数量
Arduino Nano R31

其余元件(3 个蜂鸣器、3 个 LED、6 个 100Ω 电阻、迷你面包板、跳线)均为通用元件,原文未列入清单,实际制作时请自行准备。

项目演示

将装置插入任意 USB 电源(不限电脑),即可无限循环播放《生日快乐》三声部复音,直到你听腻为止。三个声部对应的 LED 会随音符变化闪烁,视听同步效果极佳。

原理图与布局

核心技巧:Arduino Nano 正好嵌入迷你面包板,两侧引脚刚好露出,可直接插接蜂鸣器与 LED,无需焊接。面包板内部连接方式见附图。

软件实现

必须安装 Tone 库(GitHub / 直链),它利用硬件定时器与中断在单核 AVR 上实现多音轨并发生成。安装方式:IDE 菜单 Sketch → Include Library → Add .ZIP Library...。

代码结构:

完整代码

#include <Tone.h>
Tone solo, bass, rythm;
const int t = 600;           // 四分音符时长 ms
const int tt = t*2;          // 二分音符
const int t14 = round(t*1/4);
const int t24 = round(t*2/4);
const int t34 = round(t*3/4);

const int bassLedPin  = 15;  // A1
const int rythmLedPin = 17;  // A3
const int soloLedPin  = 19;  // A5

void wait(Tone &t) { while (t.isPlaying()); }

int bassLedState = LOW, rythmLedState = LOW, soloLedState = LOW;

void switchBassLed()  { bassLedState  = !bassLedState;  digitalWrite(bassLedPin,  bassLedState); }
void switchRythmLed() { rythmLedState = !rythmLedState; digitalWrite(rythmLedPin, rythmLedState); }
void switchSoloLed()  { soloLedState  = !soloLedState;  digitalWrite(soloLedPin,  soloLedState); }

void setup() {
  pinMode(14, OUTPUT); pinMode(16, OUTPUT); pinMode(18, OUTPUT); // LED 地脚 A0,A2,A4
  pinMode(bassLedPin, OUTPUT); pinMode(rythmLedPin, OUTPUT); pinMode(soloLedPin, OUTPUT);
  pinMode(2, OUTPUT); pinMode(9, OUTPUT);                     // 蜂鸣器地脚
  solo.begin(6);   bass.begin(12);  rythm.begin(0);           // 信号脚
  // 前奏两个 D4
  solo.play(NOTE_D4, t34); switchSoloLed(); wait(solo);
  solo.play(NOTE_D4, t14); switchSoloLed(); wait(solo);
}

void loop() {
  // 以下按乐谱逐小节编写,每行对应一个和弦/音符组合
  // 结构:bass.play + switchBassLed; rythm.play + switchRythmLed; solo.play + switchSoloLed; wait(rythm);
  // 为节省篇幅此处省略完整 200+ 行乐谱代码,完整版请见原项目附件或下方 GitHub 链接
  // 关键点:通过 wait(rythm) 以节奏声部为基准同步三声部
}

完整乐谱代码 请访问项目主页下载,或直接复制原文中的 Happy_birthday 完整列表。

进阶建议

制造工艺

  1. K30 CO₂ 传感器:室内空气质量实时监测
  2. 基于 1Sheeld 与 Arduino 的盲聋人士沟通辅助系统
  3. 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
  4. Arduino Nano 智能礼服:心率感应 LED 装饰,融合 CrazyCircuits 与 DFRobot 传感器
  5. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  6. DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
  7. 基于 Arduino Mega 与 Nextion 显示屏的交互式气象站
  8. Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
  9. Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
  10. Arduino Nano 手持盖革计数器:DIY 核辐射检测仪
  11. Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)
  12. 紧凑型Arduino雷达系统:HC-SR04超声波传感器配1.8英寸显示屏