最近更新于 2024-05-05 14:18
硬件
声音传感器 KY-038
Arduino UNO
使用
这种声音传感器有两种信号输出方式,一种是模拟信号,连续的信号,通过 A0 引脚输出,另外一种是数字信号,通过 D0 输出,达到阈值就输出高电平否则就是低电平。阈值/灵敏度可以通过扭转电位器调节(蓝色的那个是电位器,上面那个螺钉是旋钮),我测试的时候顺时针降低灵敏度,逆时针提高灵敏度。
模拟信号
引脚的话 GND 对 GND,VCC 是正极,接 Arduino 的 3.3V 和 5V 都可以,A0 就是模拟信号输出口,接 Arduino 上 A0 (接其它 A 开头的引脚也行,只是程序中要对应)
const int soundSensorPin = A0;
const int threshold = 600;
const int ledPin = 13;
bool status = false;
void setup()
{
pinMode(soundSensorPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int soundLevel = analogRead(soundSensorPin);
Serial.print("Sound Level: ");
Serial.println(soundLevel);
if (soundLevel > threshold)
{
status = !status;
if (status)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
delay(500);
}
delay(50);
}
上面程序设定声音阈值为 600(模拟信号范围 0~1023),超过阈值就改变一次 L 指示灯状态(开变关,关变开)(L 指示灯在 Arduino UNO 上是关联到数字接口 13 的),另外会通过串口打印音量模拟信号值。
可以打开工具-串口绘图器观察曲线,波特率对应代码设定的 9600(通过声音传感器上的电位器调一下灵敏度,适应程序中设置的阈值,默认状态下不超过但是接近设定的阈值,这样有声音触发时方便观察效果)
数字信号
数字信号引脚是 D0,接 Arduino 的 8 引脚(其它数字引脚也可以,但是代码中要对应)。
const int soundSensorPin = 8;
const int ledPin = 13;
void setup()
{
pinMode(soundSensorPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int soundStatus = digitalRead(soundSensorPin);
Serial.print("Sound Level: ");
Serial.println(soundStatus);
digitalWrite(ledPin, soundStatus == true ? HIGH : LOW);
delay(10);
}
数字信号输出接口在音量高于一定的阈值时会输出高电平(阈值可以通过电位器调节),同时传感器上有个指示灯会亮,低于阈值就是输出低电平。这里程序中只需要读取高低电平就行,声音超过阈值,Arduino 上的 L 指示灯就会亮,低于阈值就熄灭。
声音传感器