一.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):负责 “整体重复次数”,通过多次循环 + 间隔,模拟蜜蜂持续活动的过程。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐