使用声音传感器的Arduino控制的音乐喷泉

原文:https://circuitdigest.com/microcontroller-projects/arduino-controlled-water-fountain-using-sound-sensor

使用声音传感器的Arduino控制的音乐喷泉

ARDUINO项目

德巴斯·帕里达(Debasis Parida) 2019年8月26日修改

使用声音传感器的Arduino控制的喷泉使用声音传感器的Arduino控制的喷泉

有几个喷泉可以无条件地洒水并具有一些有趣的照明效果。因此,我徘徊在设计一个创新的喷泉上,该喷泉可以响应外部音乐并根据音乐节拍洒水。听起来很有趣吗?

Arduino饮水机的基本思想是从任何外部声音源(例如手机,iPod,PC等)获取输入,对声音进行采样并将其分解为不同的电压范围,然后使用输出打开各种继电器。我们首先使用基于电容麦克风的声音传感器模块在声源上执行操作,以将声音分成不同的电压范围。然后,电压将被馈送到运放,以将声级与特定限制进行比较。较高的电压范围将对应于继电器开关ON,该继电器开关包括根据歌曲的节拍和节奏操作的音乐喷泉。因此,我们在这里使用Arduino和声音传感器构建此Musical Fountain。

所需材料

  1. Arduino纳米
  2. 声音感应模块
  3. 12V继电器模块
  4. 直流泵
  5. 发光二极管
  6. 连接线
  7. 维罗板或面包板

声音传感器的工作

在这里插入图片描述

声音传感器模块是一个基于驻极体麦克风的简单电子板,用于感应环境中的外部声音。它基于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控制的喷泉容器

编程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);
   }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值