使用Arduino UNO R3和压电蜂鸣器构建电子琴


东枝
原创
发布时间: 2026-01-30 15:07:24 | 阅读数 0收藏数 0评论数 0
封面
本文介绍了一种基于 Arduino UNO R3 和压电蜂鸣器的简易电子琴设计方案。通过在面包板上搭建按键电路,并利用 Arduino 读取不同按键产生的电信号,控制蜂鸣器输出对应频率的声音,从而实现类似钢琴按键的演奏效果。该项目结构简单、成本低廉,涵盖了数字/模拟输入、声音产生以及基本电路设计等内容,适合 Arduino 初学者学习电子音乐与嵌入式控制的基础原理。

准备工作:

材料:

材料名称
数量
备注
Arduino UNO R3
1
压电蜂鸣器
1
跳线连接电缆
1
电阻器
220Ω, 1KΩ, 4,7KΩ和10KΩ
按键
5
1

压电蜂鸣器工作原理

压电蜂鸣器的工作原理可以类比为一个微型“小鼓”。蜂鸣器内部包含一片压电陶瓷片,当在其两端施加电压时,压电陶瓷会因压电效应发生形变,从而产生振动。

如果对蜂鸣器施加的是交变电压(或脉冲信号),陶瓷片就会持续地伸缩振动,并推动周围空气形成声波,人耳便能听到声音。

振动的频率决定了声音的音调:振动越快,频率越高,声音越尖;振动越慢,频率越低,声音越低沉。而振动的幅度则会影响声音的响度。

通过 Arduino 输出不同频率的方波信号(例如使用 tone() 函数或 PWM),可以精确控制蜂鸣器的振动频率,从而演奏出不同的音符,甚至简单的旋律。

2

构建琴键

在面包板上安置五个独立的按钮,每个按钮都对应一个固定的音符,功能类似于简化的钢琴键。当按下某个按钮时,Arduino 会检测到对应的输入信号,并向蜂鸣器输出特定频率的电信号,从而发出相应音高的声音。

不同按钮对应不同的频率,因此会产生不同的音符;松开按钮后,声音停止。通过这种方式,五个按钮就可以组成一个简单的电子键盘,用来演奏基本的音阶或旋律。

3

连接蜂鸣器

将压电蜂鸣器安装在面包板上。将蜂鸣器的一个引脚连接到 Arduino 的数字引脚 8,作为信号输出端;另一个引脚连接到 GND(地),形成完整的电路。当 Arduino 在数字引脚 8 输出方波信号时,蜂鸣器即可发声。


4

电阻器和连接

为了稳定并区分每个按钮输入的信号,需要在每个按钮上连接电阻,用于控制进入 Arduino 的电平。将第一个按钮的信号端直接连接到 Arduino 的模拟引脚 A0。

其余按钮通过不同阻值的电阻(如 220Ω、1 kΩ 和 4.7 kΩ)分别与电源和接地构成分压电路。当不同按钮被按下时,A0 引脚会读取到不同的电压值,从而使 Arduino 能够区分是哪个按钮被触发。

5

编程

使用USB线将Arduino UNO R3连接到计算机,并打开 Arduino IDE。

然后可以编译代码并将其上传到你的主板。 代码如下



/**
* 项目名称:模拟阶梯按键电子琴
* 功能描述:通过 A0 口读取分压电路的模拟值,识别不同的按键并驱动蜂鸣器播放对应音符。
* 电路原理:按键通过不同阻值的电阻连接到 A0,形成不同的分压比。
*/

// --- 硬件引脚配置 ---
const int PIN_BUZZER = 8; // 蜂鸣器连接引脚 (支持 PWM)
const int PIN_ANALOG_KEY = A0; // 模拟量输入引脚,用于检测按键分压值

// 对应 10KΩ 电阻支路
const int UP_LIMIT_C = 100;
// 对应 4.7KΩ 电阻支路
const int UP_LIMIT_D = 300;
// 对应 1KΩ 电阻支路
const int UP_LIMIT_E = 500;
// 对应 220Ω 电阻支路
const int UP_LIMIT_F = 700;
// 对应极低电阻或直接连接
const int UP_LIMIT_G = 900;
// 理论最大 1023,超过 1000 视为未按下任何键
const int NO_KEY_VAL = 1000;

// --- 音符频率定义 (单位: Hz) ---
// 采用 C4 组(中音)标准频率
// (Do)
const int NOTE_C4 = 262;
// (Re)
const int NOTE_D4 = 294;
// (Mi)
const int NOTE_E4 = 330;
// (Fa)
const int NOTE_F4 = 349;
// (Sol)
const int NOTE_G4 = 392;

void setup() {
// 初始化蜂鸣器引脚为输出模式
pinMode(PIN_BUZZER, OUTPUT);
// 初始化串口通信,波特率 9600
Serial.begin(9600);
Serial.println("Electronic Piano Initialized...");
}

void loop() {
// 读取 A0 口模拟电压(转换后为 0-1023 的整数)
int sensorValue = analogRead(PIN_ANALOG_KEY);
// 串口打印当前值,方便在波形器或控制台中调试电阻分压范围
// Serial.print("Analog Value: ");
// Serial.println(sensorValue);

// 阶梯式判定逻辑:根据模拟值范围判断按下的具体键位
if (sensorValue < UP_LIMIT_C) {
emitTone(NOTE_C4);
} else if (sensorValue < UP_LIMIT_D) {
emitTone(NOTE_D4);
} else if (sensorValue < UP_LIMIT_E) {
emitTone(NOTE_E4);
} else if (sensorValue < UP_LIMIT_F) {
emitTone(NOTE_F4);
} else if (sensorValue < UP_LIMIT_G) {
emitTone(NOTE_G4);
} else {
// 若模拟值超过最高阈值,说明没有电流回路(按键未按下)
noTone(PIN_BUZZER);
}

// 扫描频率控制:30ms 延迟可兼顾按键灵敏度与防抖动
delay(30);
}

/**
* 播放指定频率的音符
* @param freq 输入的音符频率 (Hz)
*/
void emitTone(int freq) {
tone(PIN_BUZZER, freq);
}
6

测试琴键

将代码上传到Arduino后,按下每个按钮即可听到相应的提示音。如果注意到两个按钮发出相同的声音,则可以调整代码中的电阻值或阈值。

请尝试在新的 Arduino 键盘上演奏简单的曲子,例如“Twinkle, Twinkle, Little Star”或“Mary Had a Little Lamb”。


阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载
pdf下载 举报