目标
用电位器调节无源蜂鸣器发出不同的声音
特点
- 1 无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它
- 2 声音频率可控,可以做出“多来米发索拉西”的效果。
- 3 在一些特例中,可以和LED复用一个控制口
有源蜂鸣器和无源蜂鸣器的区别
方波
理论
无源蜂鸣器和实际的音响的信号是一样的,是靠频率驱动的,学会无源蜂鸣器可以直接把音响信号接到自己家的音箱上。
实物图
- VCC 外接3.3V-5V电压(可以直接与5v单片机和3.3v单片机相连)
- GND 外接GND
- I/O 外接单片机IO口
接线图
Mind+
- 400表示输出频率
IDE
/*
测试无源蜂鸣器
*/
// 无源蜂鸣器
#define BUZZER 2
// 定义一个LED
#define LED2 3
// 定义电位器引脚
#define POT A0
// the setup function runs once when you press reset or power the board
void setup() {
// 打开串口
Serial.begin(9600);
// 蜂鸣器BUZZER设置为输出
pinMode(BUZZER, OUTPUT);
// 初始化蜂鸣器不响
digitalWrite(BUZZER, LOW);
}
// the loop function runs over and over again forever
void loop() {
// 电位器控制led灯亮度
PwmLed();
Buzzer();
}
void PwmLed()
{
// 读取电位器的值
PotBuffer = analogRead(POT);
PotBuffer = map(PotBuffer, 0 ,1023 , 0, 255);
analogWrite(LED2, PotBuffer);
}
void Buzzer()
{
// 读取电位器的值
PotBuffer = analogRead(POT);
// 模拟不同的Hz频率400Hz,也即是1秒中输出400个方波,蜂鸣器支持2k-5K的频率,我们本案例模拟1K的频率
for(int i = 0; i<100; i++)
{
digitalWrite(BUZZER, HIGH);
// 休眠微妙
delayMicroseconds(PotBuffer);
digitalWrite(BUZZER, LOW);
// 休眠微妙
delayMicroseconds(100);
}
delay(1000);
}
无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它,所以上述的循环就是为了模拟方波,而方波是有高有低的频率。