使用声音传感器的Arduino控制的音乐喷泉
德巴斯·帕里达(Debasis Parida) 2019年8月26日修改
使用声音传感器的Arduino控制的喷泉
有几个喷泉可以无条件地洒水并具有一些有趣的照明效果。因此,我徘徊在设计一个创新的喷泉上,该喷泉可以响应外部音乐并根据音乐节拍洒水。听起来很有趣吗?
Arduino饮水机的基本思想是从任何外部声音源(例如手机,iPod,PC等)获取输入,对声音进行采样并将其分解为不同的电压范围,然后使用输出打开各种继电器。我们首先使用基于电容麦克风的声音传感器模块在声源上执行操作,以将声音分成不同的电压范围。然后,电压将被馈送到运放,以将声级与特定限制进行比较。较高的电压范围将对应于继电器开关ON,该继电器开关包括根据歌曲的节拍和节奏操作的音乐喷泉。因此,我们在这里使用Arduino和声音传感器构建此Musical Fountain。
所需材料
- Arduino纳米
- 声音感应模块
- 12V继电器模块
- 直流泵
- 发光二极管
- 连接线
- 维罗板或面包板
声音传感器的工作
声音传感器模块是一个基于驻极体麦克风的简单电子板,用于感应环境中的外部声音。它基于LM393功率放大器和驻极体麦克风,可用于检测是否有超出设定阈值限制的声音。模块输出是数字信号,指示声音大于或小于阈值。
电位计可用于调节传感器模块的灵敏度。当声源低于/高于电位计设置的阈值时,模块输出为HIGH / LOW。相同的声音传感器模块也可用于以分贝为单位测量声音水平。
声音传感器电路图
众所周知,在声音传感器模块中,基本输入设备是麦克风,该麦克风将声音信号转换为电信号。但是由于声音传感器的电信号输出非常小,很难分析,因此我们使用了一个NPN晶体管放大器电路来放大它,并将输出信号馈送到Op-的同相输入端。放大器 LM393 OPAMP在这里用作比较器,比较来自麦克风的电信号和来自分压器电路的参考信号。如果输入信号大于参考信号,则OPAMP的输出将为高电平,反之亦然。
您可以按照“运算放大器”电路部分的介绍,了解有关其工作原理的更多信息。
音乐喷泉电路图
如上面的音乐喷泉电路图所示,声音传感器由Arduino Nano的3.3V电源供电,声音传感器模块的输出引脚连接到Nano的模拟输入引脚(A6)。您可以使用任何模拟引脚,但请确保在程序中进行更改。继电器模块和直流泵由外部12VDC电源供电,如图所示。继电器模块的输入信号连接到Nano的数字输出引脚D10。为了获得照明效果,我选择了两种不同颜色的LED,并将它们连接到Nano的两个数字输出引脚(D12,D11)。
在这里,泵的连接方式是:当将高脉冲信号提供给继电器模块的输入时,继电器的COM触点将连接到NO触点,并且电流将成为闭合电路路径,以流经泵到达激活水流。否则,泵将保持关闭状态。根据声音输入,从Arduino Nano产生HIGH / LOW脉冲。
将整个电路焊接到穿孔板上后,如下图所示:
在这里,我们使用了一个塑料盒作为喷泉容器,并使用了微型5v泵作为喷泉,我们之前在消防机器人中使用了该泵:
编程Arduino Nano用于跳舞喷泉
该Arduino水喷泉项目的完整程序在页面底部给出。但是在这里,我只是为了更好地理解而逐部分地进行解释:
程序的第一部分是声明必要的变量,以分配我们将在程序的下一个块中使用的引脚号。然后定义一个常数REF,其值是声音传感器模块的参考值。分配值700是声音传感器的输出电信号的字节等效值。
int sensor = A6;
int redled = 12;
int greenled = 11;
int pump = 10;
#define REF 700
在*无效设置*功能中,**我们使用了pinMode函数来分配引脚的INPUT / OUTPUT数据方向。在这里,传感器被视为输入,所有其他设备均被用作输出。
void setup()
{
pinMode(sensor,INPUT);
pinMode(redled,OUTPUT);
pinMode(greenled,OUTPUT);
pinMode(pump,OUTPUT);
}
在无限循环内,调用了AnalogRead函数,该函数读取从传感器引脚输入的模拟值并将其存储在变量sensor_value中。
int sensor_value = AnalogRead(sensor);
在最后一部分中,使用if-else循环将输入模拟信号与参考值进行比较。如果大于参考值,则所有输出引脚均被赋予HIGH输出,从而所有LED和Pump均被激活,否则一切保持OFF。在这里,我们还给出了70毫秒的延迟,以区别继电器的ON / OFF时间。
if(sensor_value> REF)
{
digitalWrite(greenled,HIGH);
digitalWrite(redled,HIGH);
digitalWrite(pump,HIGH);
delay(70);
}
else
{
digitalWrite(greenled,LOW);
digitalWrite(redred,LOW);
digitalWrite(pump,LOW);
delay(70);
}
这是由Arduino控制的喷泉的工作方式,下面提供带有工作视频的完整代码。
代码
int sensor = A6;
int redled = 12;
int greenled = 11;
int pump = 10;
#define REF 700
void setup()
{
pinMode(sensor,INPUT);
pinMode(redled,OUTPUT);
pinMode(greenled,OUTPUT);
pinMode(pump,OUTPUT);
}
void loop()
{
int sensor_value = analogRead (sensor);
if (sensor_value>REF)
{
digitalWrite(greenled,HIGH);
digitalWrite(redled,HIGH);
digitalWrite(pump,HIGH);
delay(70);
}
else
{
digitalWrite(greenled,LOW);
digitalWrite(redled,LOW);
digitalWrite(pump,LOW);
delay(70);
}
}