210浏览
查看: 210|回复: 7

[项目] 【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器

[复制链接]
【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图2

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图1
【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图3

驴友花雕  中级技神
 楼主|

发表于 2024-9-28 11:00:12

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器

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

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

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

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

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

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

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-9-28 11:02:05

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图2

实验用的按键开关模块

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-9-28 11:04:35

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器

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

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-9-28 11:05:51

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器

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

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.    实验二百三十二:ESP32-S3 WROOM N16R8 CAM开发板WiFi+蓝牙模块
  4.    OV2640/5640摄像头模组
  5.   {花雕动手做}项目之十九:使用ESP32-S3-CAM WROOM N16R8驱动报警器
  6. */
  7. #define PIN_BUZZER 21 // 定义蜂鸣器连接的引脚为21
  8. #define PIN_BUTTON 47 // 定义按钮连接的引脚为47
  9. #define CHN        0  // 定义PWM通道
  10. void setup() {
  11.   pinMode(PIN_BUTTON, INPUT); // 设置按钮引脚为输入模式
  12.   pinMode(PIN_BUZZER, OUTPUT); // 设置蜂鸣器引脚为输出模式
  13.   ledcAttachChannel(PIN_BUZZER, 1, 10, CHN); // 将蜂鸣器引脚连接到PWM通道
  14.   ledcWriteTone(PIN_BUZZER, 2000); // 以2kHz的频率发声0.3秒
  15.   delay(300); // 延迟300毫秒
  16. }
  17. void loop() {
  18.   if (digitalRead(PIN_BUTTON) == LOW) { // 如果读取到按钮引脚为低电平(按钮被按下)
  19.     alert(); // 调用alert函数
  20.   } else {
  21.     ledcWriteTone(PIN_BUZZER, 0); // 停止发声
  22.   }
  23. }
  24. void alert() {
  25.   float sinVal; // 定义一个变量保存正弦值
  26.   int toneVal;  // 定义一个变量保存声音频率
  27.   for (int x = 0; x < 360; x += 10) { // 从0度到360度,每次增加10度
  28.     sinVal = sin(x * (PI / 180)); // 计算x的正弦值
  29.     toneVal = 2000 + sinVal * 500; // 根据x的正弦值计算声音频率
  30.     ledcWriteTone(PIN_BUZZER, toneVal); // 设置蜂鸣器的频率
  31.     delay(10); // 延迟10毫秒
  32.   }
  33. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-9-28 11:09:18

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器

代码解读:

1、定义常量:


  1. #define PIN_BUZZER 21 // 定义蜂鸣器连接的引脚为21
  2. #define PIN_BUTTON 47 // 定义按钮连接的引脚为47
  3. #define CHN        0  // 定义PWM通道
复制代码



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

2、初始化设置:


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



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

3、主循环:


  1. void loop() {
  2.   if (digitalRead(PIN_BUTTON) == LOW) { // 如果读取到按钮引脚为低电平(按钮被按下)
  3.     alert(); // 调用alert函数
  4.   } else {
  5.     ledcWriteTone(PIN_BUZZER, 0); // 停止发声
  6.   }
  7. }
复制代码



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

4、报警函数:


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



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

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-9-28 11:12:12

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器

实验场景图

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-9-28 11:13:46

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图1

【花雕学编程】Arduino动手做(232)--ESP32S3-CAM 报警蜂鸣器图2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail