基于Arduino 蜂窝器实验,利用AI改写出想要的歌曲
本文介绍了基于Arduino UNO开发板和蜂鸣器的音乐实验项目。首先说明了实验所需的环境配置(Arduino IDE、开发板设置)和硬件组件(UNO板、有源蜂鸣器、杜邦线)。实验包含初阶和进阶两部分代码:初阶演示了简单的音符播放功能,进阶则实现了多种蜜蜂声音模拟(正常嗡嗡声、受干扰声、蜂群声等)。特别展示了利用AI将代码修改为弹奏《两只老虎》的完整实现,包括音符频率定义和节奏控制。项目通过蜂鸣器
文章目录
一.Arduino 蜂窝器实验
1.效果展示
基于Arduino 蜂窝器实验,初阶与进阶
2.前置条件
首先,先配置Arduino开发板所需要的环境,你必须有Arduino板(你可以选择你喜欢的板)和一根USB线,推荐使用Arduino UNO(本身泛用且主体又强大)。其次需要安装arduino ide,详情软件如图。
开发板与端口设置:

到这里配置的环境已经基本完成
3.需要的组件
你将需要以下组件:
1 × Arduino UNO
1 x 有源蜂鸣器
杜邦线若干
4.接线图

5.实验代码
初阶代码:
const int buzzerPin = 3; //蜂鸣器模块连接引脚3
void setup() {
pinMode(buzzerPin,OUTPUT);
}
void loop() {
tone(buzzerPin,532); //duo --C2
delay(100);
tone(buzzerPin,587); //re --D3
delay(100);
tone(buzzerPin,659); //mi --E3
delay(100);
}
进阶代码:
const int buzzerPin = 3; // 蜂鸣器连接引脚
// 定义蜜蜂相关的音符频率
#define NOTE_BEE_LOW 440 // 蜜蜂低频音
#define NOTE_BEE_MID 880 // 蜜蜂中频音
#define NOTE_BEE_HIGH 1760 // 蜜蜂高频音
#define NOTE_ALARM 1047 // 警报音
void setup() {
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600); // 初始化串口用于调试输出
Serial.println("蜜蜂声音实验开始...");
// 实验序列:依次演示不同的蜜蜂声音模式
experimentStartupSound(); // 启动提示音
delay(1000);
experimentNormalBeeSound(3); // 正常蜜蜂声(重复3次)
delay(1000);
experimentDisturbedBeeSound(); // 被干扰的蜜蜂声音
delay(1000);
experimentSwarmSound(); // 蜂群声音
delay(1000);
experimentQueenBeeCall(); // 蜂王召唤声
}
void loop() {
// 循环执行完整实验序列
experimentNormalBeeSound(2);
delay(2000);
experimentDisturbedBeeSound();
delay(3000);
}
// 自定义函数:启动提示音
void experimentStartupSound() {
Serial.println("播放启动提示音");
playNote(NOTE_BEE_MID, 300);
delay(100);
playNote(NOTE_BEE_HIGH, 300);
noTone(buzzerPin);
}
// 自定义函数:正常蜜蜂声音
// 参数:repeat - 重复次数
void experimentNormalBeeSound(int repeat) {
Serial.print("播放正常蜜蜂声音,重复");
Serial.print(repeat);
Serial.println("次");
for(int i = 0; i < repeat; i++){
// 模拟蜜蜂持续的嗡嗡声
for(int j = 0; j < 5; j++){
playNote(NOTE_BEE_LOW, 150);
playNote(NOTE_BEE_MID, 150);
}
delay(500); // 每次循环间隔
}
noTone(buzzerPin);
}
// 自定义函数:被干扰的蜜蜂声音
void experimentDisturbedBeeSound() {
Serial.println("播放被干扰的蜜蜂声音");
// 被干扰时声音更急促、音调更高
for(int i = 0; i < 10; i++){
playNote(NOTE_BEE_HIGH, 50);
playNote(NOTE_ALARM, 50);
}
noTone(buzzerPin);
}
// 自定义函数:蜂群声音
void experimentSwarmSound() {
Serial.println("播放蜂群声音");
// 模拟多个蜜蜂同时发声的效果
for(int i = 0; i < 8; i++){
playNote(NOTE_BEE_LOW + i*50, 200);
}
noTone(buzzerPin);
}
// 自定义函数:蜂王召唤声
void experimentQueenBeeCall() {
Serial.println("播放蜂王召唤声");
// 蜂王声音更低沉、节奏更慢
for(int i = 0; i < 3; i++){
playNote(NOTE_BEE_LOW - 100, 400);
delay(200);
}
noTone(buzzerPin);
}
// 基础工具函数:播放指定音符
// 参数:frequency - 频率,duration - 持续时间(毫秒)
void playNote(int frequency, int duration) {
tone(buzzerPin, frequency);
delay(duration);
}
6.代码解读视频
基于Arduino 蜂窝器实验代码解释
7.利用AI调出想要的的歌曲
我给AI输入“帮我将代码修改为利用蜂窝器弹奏出《两只老虎》这首歌”可得**
修改好的代码:
const int buzzerPin = 3; // 蜂鸣器模块连接引脚3
// 定义音符频率(C调)
#define NOTE_C4 262 // 1
#define NOTE_D4 294 // 2
#define NOTE_E4 330 // 3
#define NOTE_F4 349 // 4
#define NOTE_G4 392 // 5
#define NOTE_A4 440 // 6
// 定义时长(一拍为200ms)
#define QUARTER_NOTE 200 // 四分音符(1拍)
#define HALF_NOTE 400 // 二分音符(2拍)
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
// 播放《两只老虎》完整旋律
// 第一句:1 2 3 1 |
tone(buzzerPin, NOTE_C4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_D4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_E4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_C4);
delay(QUARTER_NOTE);
noTone(buzzerPin);
delay(50); // 小节间隔
// 第二句:1 2 3 1 |
tone(buzzerPin, NOTE_C4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_D4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_E4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_C4);
delay(QUARTER_NOTE);
noTone(buzzerPin);
delay(50);
// 第三句:3 4 5 - |
tone(buzzerPin, NOTE_E4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_F4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_G4);
delay(HALF_NOTE); // 延长为2拍
noTone(buzzerPin);
delay(50);
// 第四句:3 4 5 - |
tone(buzzerPin, NOTE_E4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_F4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_G4);
delay(HALF_NOTE);
noTone(buzzerPin);
delay(50);
// 第五句:5 6 5 4 3 1 |
tone(buzzerPin, NOTE_G4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_A4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_G4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_F4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_E4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_C4);
delay(QUARTER_NOTE);
noTone(buzzerPin);
delay(50);
// 第六句:5 6 5 4 3 1 |
tone(buzzerPin, NOTE_G4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_A4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_G4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_F4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_E4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_C4);
delay(QUARTER_NOTE);
noTone(buzzerPin);
delay(50);
// 第七句:1 5 1 - |
tone(buzzerPin, NOTE_C4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_G4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_C4);
delay(HALF_NOTE);
noTone(buzzerPin);
delay(50);
// 第八句:1 5 1 - |
tone(buzzerPin, NOTE_C4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_G4);
delay(QUARTER_NOTE);
tone(buzzerPin, NOTE_C4);
delay(HALF_NOTE);
noTone(buzzerPin);
// 播放完一遍后停顿2秒再重复
delay(2000);
}
8.扩展
1.#define 的作用
在 C/C++(包括 Arduino 编程)中,#define 是一个预处理指令,用于在编译前对代码进行文本替换(宏定义)。它的核心作用是 “用一个标识符代替一段文本”,从而简化代码、提高可读性或实现一些通用配置。
#define 是预处理阶段的文本替换工具,核心是 “用标识符代替文本”。
无参数宏适合定义常量(如引脚、数值),提高代码可维护性;
带参数宏适合简单运算,但需注意优先级和类型问题(复杂逻辑建议用函数)。
2.代码函数调用流程
这个程序的函数调用流程可以分为初始化阶段(setup()) 和循环阶段(loop()) 两部分
程序启动 → setup() 初始化 → 依次执行:
experimentStartupSound() → delay(1000)
→ experimentNormalBeeSound(3) → delay(1000)
→ experimentDisturbedBeeSound() → delay(1000)
→ experimentSwarmSound() → delay(1000)
→ experimentQueenBeeCall()
进入 loop() 无限循环:
循环执行:
experimentNormalBeeSound(2) → delay(2000)
→ experimentDisturbedBeeSound() → delay(3000)
→ 重复…
3.代码中experimentNormalBeeSound()函数与两个for循环的作用
experimentNormalBeeSound()函数:
experimentNormalBeeSound() 函数的作用是重复模拟蜜蜂正常飞行时的 “嗡嗡声”
for循环:
内层循环(j):负责 “单次嗡嗡声的细节”,通过高低频快速交替,模拟翅膀振动的连续感。
外层循环(i):负责 “整体重复次数”,通过多次循环 + 间隔,模拟蜜蜂持续活动的过程。
更多推荐



所有评论(0)