风筝
发表于: 2019-9-5 11:27:34 | 显示全部楼层

有一些喷泉无节奏的洒水,并伴随着一些有趣的灯光效果。所以我徘徊于设计一个创新的喷泉,它可以响应外部音乐,并根据音乐节拍洒水。这听起来不是很有趣吗?


这款Arduino喷泉的基本思想是从任何外部声源(如移动设备、iPod、PC等)接收输入,对声音进行采样并将其分解为不同的电压范围,然后使用输出打开各种继电器。我们首先使用基于电容麦克风的声音传感器模块在声源上执行以将声音分成不同的电压范围。然后将电压馈送到运算放大器,以将声级与特定限制进行比较。较高的电压范围将对应于继电器开关ON,其包括对歌曲的节拍和节奏进行操作的音乐喷泉。本文我们使用Arduino和声音传感器制作这个音乐喷泉。


所需材料

●    Arduino Nano开发板

●    声音传感器模块

●    12V继电器模块

●    直流泵

●    发光二极管

●    连接导线

●    面包板


声音传感器的工作原理

声音传感器模块是一个简单的驻极体麦克风电路板,用于感应环境中的外部声音。它基于LM393功率放大器和驻极体麦克风,可用于检测是否有超出设定阈值限制的声音。模块输出是数字信号,表示声音大于或小于阈值。

Sound-Sensor-Module.jpg


电位器可用于调节传感器模块的灵敏度。当声源低于/高于电位计设定的阈值时,模块输出为HIGH / LOW。声音传感器模块也可用于以测量声级分贝。


声音传感器电路图

Sound-Sensor-Circuit-Diagram.png

我们知道在声音传感器模块中,基本输入设备是将声音信号转换为电信号的麦克风。但由于声音传感器的电信号输出幅度很小,很难分析,所以我们使用了一个NPN晶体管放大器电路,它将放大它并将输出信号馈送到放大器的非反相输入端。这里LM393 OPAMP用作比较器,比较来自麦克风的电信号和来自分压器电路的参考信号。如果输入信号大于参考信号,那么OPAMP的输出将为高,反之亦然。


音乐喷泉电路图

Circuit-Diagram-for-Arduino-Controlled-Water-Fountain-using-Sound-Sensor.png

如上述音乐喷泉电路图所示,声音传感器由3.3V电源的Arduino Nano供电,声音传感器模块的输出引脚连接到Nano的模拟输入引脚(A6)。您可以使用任何模拟引脚,但请务必在程序中更改它。继电器模块和直流泵由外部12VDC电源供电,如图所示。继电器模块的输入信号连接到Nano的数字输出引脚D10。对于照明效果,我选择了两种不同颜色的LED,并将它们连接到Nano的两个数字输出引脚(D12和D11)。


这里直流泵的连接方式是,当继电器模块的输入端有一个高电平脉冲时,继电器的COM触点连接到常开触点,电流形成闭合电路,直流泵打开,水流通过。否则泵将保持关闭状态。根据声音输入,从Arduino Nano生成HIGH / LOW脉冲。


在面包板上焊接整个电路,如下所示:

Circuit-Hardware-for-Arduino-Controlled-Water-Fountain-using-Sound-Sensor.jpg

在这里,我们使用塑料盒作为喷泉容器和迷你5v泵作为喷泉:

Musical-Fountain-Container.jpg


编程Arduino Nano音乐喷泉

这个Arduino喷泉项目的完整程序在页面底部给出。在这里解释部分代码,以便更好地理解:


该程序的第一部分是声明必要的变量,用于分配我们将在下一个程序块中使用的引脚号。然后用一个值定义一个常量REF,该值是声音传感器模块的参考值。分配值700是声音传感器的输出电信号的字节等效值。

  1. int sensor = A6;
  2. int redled = 12;
  3. int greenled = 11;
  4. int pump = 10;

  5. #define REF 700
复制代码

void setup()函数中,我们使用pinMode函数来分配引脚的INPUT / OUTPUT数据方向。这里传感器被视为INPUT,所有其他设备被用作OUTPUT。

  1. void setup()
  2. {
  3.   pinMode(sensor,INPUT);
  4.   pinMode(redled,OUTPUT);
  5.   pinMode(greenled,OUTPUT);
  6.   pinMode(pump,OUTPUT);
  7. }
复制代码

在loop函数内部,调用analogRead函数,该函数读出传感器引脚输入的模拟值并将其存储在变量sensor_value中。

  1. int sensor_value = analogRead (sensor);
复制代码

在最后一部分中,使用if-else循环来比较输入模拟信号和参考值。 如果它大于参考值,则所有输出引脚都被赋予高输出,以便激活所有LED和泵,否则一切都保持关闭状态。 在这里,我们还给出了70毫秒的延迟,以区分继电器的ON / OFF时间。

  1. if (sensor_value>REF)
  2.   {
  3.     digitalWrite(greenled,HIGH);
  4.     digitalWrite(redled,HIGH);
  5.     digitalWrite(pump,HIGH);
  6.     delay(70);
  7.    }
  8.    else
  9.    {
  10.     digitalWrite(greenled,LOW);
  11.     digitalWrite(redled,LOW);
  12.     digitalWrite(pump,LOW);
  13.     delay(70);
  14.    }
复制代码

Testing-Arduino-Controlled-Water-Fountain-using-Sound-Sensor.jpg

以上就是Arduino控制的喷泉工作方式。如有任何问题,请随时在本帖下面进行回复。


代码

以下是本文使用的完整代码: main.rar (321 Bytes, 下载次数: 93)

跳转到指定楼层
yongbutingzhi11
发表于: 2019-11-5 10:41:14 | 显示全部楼层

学到很多东西,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-18 18:03 , Processed in 0.139099 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表