第二十一篇、基于Arduino uno,控制有源蜂鸣器和无源蜂鸣器发出声音——结果导向

0、结果

说明:有源蜂鸣器按照一定的频率报警,无源蜂鸣器则是一直报警,都采用非阻塞方式编写,如果是你想要的,可以接着往下看。

1、外观

说明:有源蜂鸣器和无源蜂鸣器看上去一样,但是背面不一样,第一张图是有源蜂鸣器,第二张图是无源蜂鸣器。也有三个引脚的,其实都是一样的。



2、连线

说明:只需要连接两根线或三根线。

  • uno————两个引脚的蜂鸣器
  •     7--------------正极
  • GND--------------负极
     
  • uno————三个引脚的蜂鸣器
  •     5V--------------VCC
  • GND--------------GND
  •       7--------------I/O 

3、源程序

说明:采用非阻塞方式编写,一定时间驱动蜂鸣器,并将对应功能进行函数化,方便移植。

有源蜂鸣器程序:


/*
  注意:低电平触发,给低电平就有声音,高电平没有声音,一定的工作频率
*/
/****************************************有源beep part****************************************/
#define beepPin 7                             //初始划蜂鸣器引脚
#define beepTimeInterval 1000                 //检测一次的时间间隔   
unsigned long beepTimes = 0;                  //记录设备运行时间
int beepCount = 0;                            //定义一个变量
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(9600);                         //设置串口波特率为9600
  pinMode(beepPin, OUTPUT);                   //蜂鸣器引脚设置成输出模式
  Serial.println("设备上线!");                 //串口打印对应的值
}
void loop() {
  ControlBeep();                              //控制蜂鸣器工作
}
/****************************************有源beep part****************************************/
/*控制蜂鸣器工作*/
void ControlBeep() {
  if (millis() - beepTimes >= beepTimeInterval) {
    beepTimes = millis();                    //一定时间执行一次
    beepCount++;
    if (beepCount % 2 == 1) {
      Serial.println("蜂鸣器打开!");
      digitalWrite(beepPin, LOW);            // 蜂鸣器工作
    } else {
      beepCount = 0;
      Serial.println("蜂鸣器关闭!");
      digitalWrite(beepPin, HIGH);          // 蜂鸣器停止工作
    }
  }
}

无源蜂鸣器程序:

/****************************************无源beep part****************************************/
/*
  注意:无源蜂鸣器,需要一定的频率才能工作。
  接线:
  VCC------正极
  GND------负极
*/
#define buzzer 7                                  //初始划蜂鸣器引脚
#define beepTimeInterval 5                        //检测一次的时间间隔   
unsigned long beepTimes = 0;                      //记录设备运行时间
int beepCount = 0;                                //定义一个变量
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(9600);                             //设置串口波特率为9600
  pinMode(buzzer, OUTPUT);                        //蜂鸣器引脚设置成输出模式
  Serial.println("设备上线!");                     //串口打印对应的值
}
void loop() {
  ControlBeep();                                  //控制蜂鸣器工作
}
/****************************************无源beep part****************************************/
/*控制蜂鸣器工作*/
void ControlBeep() {
  if (millis() - beepTimes >= beepTimeInterval) {
    beepTimes = millis();                         //一定时间执行一次

    digitalWrite(buzzer, HIGH);                   // 蜂鸣器工作
    delay(1);
    digitalWrite(buzzer, LOW);
    delay(1);          
  }
}

4、注意事项

说明:有源蜂鸣器工作比较简单,因为内部有震荡源,所以只需要给一个高电平或者低电平就可以发出声音;无缘蜂鸣器因为没有震荡源,所以需要外部给一定频率的高低电平才能发出声音。

5、基本原理

有源蜂鸣器:
        有源蜂鸣器通常包括一个振荡器、放大器、以及共振腔等元件。与无源蜂鸣器不同的是,有源蜂鸣器内置驱动电路,可以直接通过DC电源进行驱动,无需外接交流信号。在Arduino中,有源蜂鸣器连接到数字或模拟输出引脚,通过改变输出的高低电平来控制蜂鸣器发声。
        Arduino中的有源蜂鸣器通常需要外接一个可调节直流电源,如5V,用于驱动内部驱动电路。与无源蜂鸣器不同的是,在控制蜂鸣器时,将引脚输出设置为低电平(0V)即可打开蜂鸣器,将引脚输出设置为高电平(5V)即可关闭蜂鸣器。
无源蜂鸣器:
        无源蜂鸣器通常由一个压电陶瓷薄片、振荡电路以及共振腔组成。在Arduino中,无源蜂鸣器连接到数字或模拟输出引脚,通过改变输出的高低电平来控制蜂鸣器发声。
        Arduino中的无源蜂鸣器需要外接一个交流信号,利用交流电信号来驱动压电陶瓷薄片产生声音。在控制蜂鸣器时,将引脚输出设置为高电平(5V)即可打开蜂鸣器,将引脚输出设置为低电平(0V)即可关闭蜂鸣器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值