回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕学编程】Arduino动手做(232)---使用ESP32-S3-CAM WROOM N16R8驱动蜂鸣器报警器 简单

头像 驴友花雕 2024.09.28 11 0

0-.jpg
09-.jpg
09--.jpg

无源蜂鸣器是一种需要外部驱动信号才能发声的电子元件。与有源蜂鸣器不同,无源蜂鸣器内部没有振荡电路,因此需要通过外部提供的方波信号来驱动。

1、工作原理:
无源蜂鸣器的发声原理类似于扬声器。通过给音圈接入交变电流,形成电磁铁与永磁铁的相互作用,推动振膜发声。接入直流电只能持续推动振膜,无法产生声音。

2、驱动方式:
无源蜂鸣器需要外部提供一定频率的方波信号来驱动。通过改变方波的频率,可以控制蜂鸣器发出不同的音调。这使得无源蜂鸣器可以用于播放简单的音乐。

3、频率与音调:
无源蜂鸣器的声音频率可调。通过改变输入信号的频率,可以实现不同的音调。例如,常见的音符频率对照表可以帮助你生成特定的音调。

4、应用场景:
无源蜂鸣器广泛应用于各种电子设备中,如计算机、报警器、电子玩具等。由于其声音频率可控,适用于需要发出特定音调的场合。

5、模块优点:
无源蜂鸣器通常比有源蜂鸣器便宜,且声音频率可控,可以实现多种音效。此外,在某些情况下,无源蜂鸣器可以与LED复用一个控制口,节省资源。

 

64.jpg
64-.jpg
64-0.jpg

Arduino实验接线示意图(实验接脚不同)

 

65.jpg

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百三十二:ESP32-S3 WROOM N16R8 CAM开发板WiFi+蓝牙模块
  OV2640/5640摄像头模组
 {花雕动手做}项目之十九:使用ESP32-S3-CAM WROOM N16R8驱动报警器

实验开源代码
 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
   实验二百三十二:ESP32-S3 WROOM N16R8 CAM开发板WiFi+蓝牙模块
   OV2640/5640摄像头模组
  {花雕动手做}项目之十九:使用ESP32-S3-CAM WROOM N16R8驱动报警器
*/

#define PIN_BUZZER 21 // 定义蜂鸣器连接的引脚为21
#define PIN_BUTTON 47 // 定义按钮连接的引脚为47
#define CHN        0  // 定义PWM通道

void setup() {
  pinMode(PIN_BUTTON, INPUT); // 设置按钮引脚为输入模式
  pinMode(PIN_BUZZER, OUTPUT); // 设置蜂鸣器引脚为输出模式
  ledcAttachChannel(PIN_BUZZER, 1, 10, CHN); // 将蜂鸣器引脚连接到PWM通道
  ledcWriteTone(PIN_BUZZER, 2000); // 以2kHz的频率发声0.3秒
  delay(300); // 延迟300毫秒
}

void loop() {
  if (digitalRead(PIN_BUTTON) == LOW) { // 如果读取到按钮引脚为低电平(按钮被按下)
    alert(); // 调用alert函数
  } else {
    ledcWriteTone(PIN_BUZZER, 0); // 停止发声
  }
}

void alert() {
  float sinVal; // 定义一个变量保存正弦值
  int toneVal;  // 定义一个变量保存声音频率
  for (int x = 0; x < 360; x += 10) { // 从0度到360度,每次增加10度
    sinVal = sin(x * (PI / 180)); // 计算x的正弦值
    toneVal = 2000 + sinVal * 500; // 根据x的正弦值计算声音频率
    ledcWriteTone(PIN_BUZZER, toneVal); // 设置蜂鸣器的频率
    delay(10); // 延迟10毫秒
  }
}

代码解读:

1、定义常量:

```cpp
#define PIN_BUZZER 21 // 定义蜂鸣器连接的引脚为21
#define PIN_BUTTON 47 // 定义按钮连接的引脚为47
#define CHN        0  // 定义PWM通道
```

这里定义了蜂鸣器和按钮连接的引脚,以及使用的PWM通道。PIN_BUZZER表示蜂鸣器连接的GPIO引脚,PIN_BUTTON表示按钮连接的GPIO引脚,CHN表示使用的PWM通道。

2、初始化设置:

```cpp
void setup() {
 pinMode(PIN_BUTTON, INPUT); // 设置按钮引脚为输入模式
 pinMode(PIN_BUZZER, OUTPUT); // 设置蜂鸣器引脚为输出模式
 ledcAttachChannel(PIN_BUZZER, 1, 10, CHN); // 将蜂鸣器引脚连接到PWM通道
 ledcWriteTone(PIN_BUZZER, 2000); // 以2kHz的频率发声0.3秒
 delay(300); // 延迟300毫秒
}
```

在setup函数中,设置按钮引脚为输入模式,蜂鸣器引脚为输出模式。使用ledcAttachChannel函数将蜂鸣器引脚连接到PWM通道,并使用ledcWriteTone函数以2kHz的频率发声0.3秒。

3、主循环:

```cpp
void loop() {
 if (digitalRead(PIN_BUTTON) == LOW) { // 如果读取到按钮引脚为低电平(按钮被按下)
   alert(); // 调用alert函数
 } else {
   ledcWriteTone(PIN_BUZZER, 0); // 停止发声
 }
}
```

在loop函数中,检查按钮的状态。如果按钮被按下(读取到低电平),则调用alert函数;否则,停止蜂鸣器发声。

4、报警函数:

```cpp
void alert() {
 float sinVal; // 定义一个变量保存正弦值
 int toneVal;  // 定义一个变量保存声音频率
 for (int x = 0; x < 360; x += 10) { // 从0度到360度,每次增加10度
   sinVal = sin(x * (PI / 180)); // 计算x的正弦值
   toneVal = 2000 + sinVal * 500; // 根据x的正弦值计算声音频率
   ledcWriteTone(PIN_BUZZER, toneVal); // 设置蜂鸣器的频率
   delay(10); // 延迟10毫秒
 }
}
```

alert函数生成一个频率变化的声音。通过计算正弦值来改变声音频率,形成一个类似警报的声音效果。循环从0度到360度,每次增加10度,计算正弦值并相应调整蜂鸣器的频率。

5、PWM控制:
使用ledcAttachChannel和ledcWriteTone函数实现PWM控制。ledcAttachChannel函数将引脚连接到PWM通道,ledcWriteTone函数设置PWM信号的频率。通过这种方式,可以精确控制无源蜂鸣器的发声频率,实现复杂的声音效果。

实验场景图

 

65-.jpg

评论

user-avatar
icon 他的勋章
    展开更多