电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>具有颜色选择的音频频谱可视化器

具有颜色选择的音频频谱可视化器

2022-11-04 | zip | 0.05 MB | 次下载 | 2积分

资料介绍

描述

我对可寻址的“Neopixel”RGB LED 的可能性很感兴趣。我想学习如何控制它们并在具有挑战性的项目中使用它们。我读过一些使用 LED 阵列和矩阵来表示音频频谱的项目,就像图形均衡器上的照明显示器一样。

我想到了一些不同的东西。一个垂直的 LED 串怎么样,低频在底部,高频在顶部,每个频段的幅度会显示为每个 LED 的亮度?然后音乐将沿着这条弦“跳动”。我当然不是第一个想到或执行它的人,但我还没有看到这个特定的应用程序。

如果 LED 的亮度由音乐控制,LED 的颜色可以由设备的用户设置吗?

这个怎么运作

该设备的电路和代码以两种模式运行。这些模式是通过前面板右侧的模式开关选择的。当模式开关在左侧位置时,颜色设置模式被激活。

颜色设置模式允许用户使用 5 个电位器设置 LED 灯条的颜色范围。具体来说,从左到右,电位器调整:

1.数值——LED灯带的整体亮度

2. 饱和度 - 此设置逐渐在鲜艳的色彩和纯白色之间转换色调

3. 顶部色调 - 指定 LED 灯条顶部的色调(颜色)

4. 底部色调 - 指定 LED 灯条底部的色调(颜色)

当 LED 灯带包含多个 Hue 时,颜色顺序始终遵循色谱的顺序:红色、橙色、黄色、绿色、蓝色、紫色。

要为整个 LED 灯条选择一个色调,只需将顶部色调和底部色调电位器放在相同的位置。

5. Spread - 控制色相沿 LED 灯条的分布范围,从集中在中间到“聚集”在两端。

我使用色相、饱和度和值 (HSV) 颜色模型来控制 LED,而不是 RGB 参数,因为 HSV 直接产生我想要的效果。本文解释并比较了 HSV 和 RGB 颜色模型。幸运的是,代码中使用的 Adafruit Neopixel 库同时支持 RGB 和 HSV。

当模式开关处于右侧位置时,FFT 模式被激活。在这种模式下,电位器被禁用。

FFT(快速傅立叶变换)模式接受来自音乐播放器耳机连接的输入。使用 FFT,它计算每个频带的 HSV 设置的值(亮度)部分。然后它将这个值参数与用户选择的颜色组合起来,并将它们发送到适当的 LED。本文对傅里叶变换进行了简单易懂的解释。实际的计算超出了我的想象,但慷慨的 Arduino 社区再次以 ArduinoFFT 库的形式提供了救援。

电路

电路原理

poYBAGNkWfqADy-ZAAFMRYhHfSY975.png
 

在此图中,标记为 Arduino Nano (Rev3.0) 的设备实际上是一个 Arduino Nano Every。

标有电压调节器 5V 的设备实际上是一个 5V 降压转换器9VDC 墙上适配器通过其 Vin 引脚为 Nano 供电,并为降压转换器供电。降压转换器的作用是为 LED 灯条提供 5V 电源Nano 通过引脚 D3 与 LED 灯条通信

我使用了这个项目中详述的音频输入电路(在图的左上角):

该电路使用 Nano 的 REF 和 3.3V 引脚,并馈入 A0 模拟输入。

五个电位器用于设置 LED 灯条的颜色和颜色范围。代码部分描述了这五种设置。它们由 Nano 的模拟输入 A1 到 A5 读取。

模式开关用于选择颜色设置或 FFT 模式。开关位置在 Nano 的 D2 引脚上读取。

Fritzing 文件可在下面的原理图部分下载

面包板组装

pYYBAGNkWf2AX8fuAAPS5IThiEo586.png
 

我为那些想像我一样探索和修改电路的人提供了这张图。面包板也是测试代码和所有组件的最不令人沮丧的方式。Fritzing 文件可在下面的原理图部分下载。

同样,看起来像稳压器的设备实际上是一个 5V 降压转换器。表示为 Arduino Nano(Rev3.0)的控制器实际上是 Arduino Nano Every。所有红线承载 5V,橙色线承载 9V,黑线接地。

原型板和盒子组装

pYYBAGNkWgCAHD4MAAINgLuYxPk646.png
 

该图可在下面的“原理图”部分下载。图示的板比我使用的板大,但它让我能够更清楚地说明布局。

poYBAGNkWgWAe5dCAAupJj4bh8Y610.jpg
 

通过竖起电阻器并将穿孔中的一些连接加倍,我能够将组件挤压到 7cm x 3cm 板上。它非常适合我选择的外壳,有足够的空间可供使用。

Nano 的位置使其 USB 连接器略微悬垂在电路板边缘。我在外壳上切了一个检修孔,我可以通过它连接 USB 电缆。这让我可以在不移除 Nano 的情况下重新编程

我最初使用橡胶粘合剂将 Nano 直接放置在板上,直到焊点将其固定到位。

我决定在电路板和面板安装组件之间安装 JST 连接器。对于原型而言,这似乎过于热心,但有时间,我只是想熟悉这些连接器。我也怀疑我最终会想要重新安排一些事情。

pYYBAGNkWgyAK3ypAAwhiUwTF0E132.jpg
 

我在“定制零件和外壳”部分包含了我的施工图。这些可以节省您测量、定位和安装组件的时间。您还可以使用它们打印控件的符号。

poYBAGNkWhGAEzO-AAfPgEemQb8054.jpg
 

这张照片显示了 LED 柱组件的底座。该项目要求 LED 灯条包含 29 个 LED。LED灯条的背面是自粘的,所以我把它粘在一块1/2”x1/8”的铝条上。我想扩散 LED 的光,我想到了氯丁橡胶管。它通常具有半透明的白色。我发现这种内径为 12 毫米的管子非常适合灯条和 LED 灯条。光线尚未扩散到我喜欢的程度,我将尝试使用其他材料。我的大女儿,一位艺术家,建议使用聚酯薄膜。

编码

我几乎在每一行代码中都添加了注释,以便在我学到的时候向自己解释。所以在这里,我将更笼统地描述它。

与 LED 灯条通信

该代码使用 Adafruit NeoPixel 库与 LED 灯条进行通信。以下是图书馆图书馆用户指南的链接。

主循环的结构

主循环分为两个循环;颜色设置循环和 FFT 循环。模式开关的位置决定了哪个循环处于活动状态。循环由读取开关位置的“while”语句控制。

void loop() 
while (digitalRead(modeSwitchPin)==LOW){
//Colour Setting code goes here because the mode switch is in the LOW (Colour Set) position.
}
//FFT code goes here because the mode switch is in the HIGH (FFT) position, outside “while” loop.
//If the mode switch is moved to LOW (Colour Set), reset Nano to re-initialize variables and memory.
if (digitalRead(modeSwitchPin)==LOW){
resetFunc();
}
}

当模式开关处于颜色设置位置 (LOW) 时,颜色设置代码将保持循环。

只要将模式开关拨到 FFT 位置 (HIGH),“while”循环就会中断,FFT 代码就会开始循环。

当模式开关再次轻弹到颜色设置位置时,软复位功能被激活,重新初始化 Nano 并允许颜色设置代码再次开始循环。

我包含了软重置功能,因为颜色设置代码在 FFT 代码运行后拒绝运行。我不知道为什么会发生这种情况,但是软重置有效。

发送到 LED 灯条的所有指令都采用 RGB 标准的格式 strip.setPixelColor()。但是,我选择使用 HSV 参数设置颜色,然后将它们转换为 RGB。

颜色设置模式:传播调整

这个特性需要一些解释。我添加了这个调整,因为我想改变沿 LED 灯带的色调分布,从集中在中间到“聚集”在两端。我将 sigmoid 曲线(也称为 s 曲线)公式应用于色调范围。

k=analogRead(kPin); //read k pot, 0-1023

该行读取Spread 电位器的位置。

hueSig[i] = hueMax/(1+(pow(2.718,(0-(k/4000000))*(hue-(hueMax/2))))); //apply s-curve

在这条线中,Spread 电位器 (k) 的值用于调整 S 形曲线的斜率,从而改变每个 LED 的色调。然后每个 LED 的色调变为 hueSig[i]。顺便说一句,我通过实验得出了 4000000 的值。

本文解释了 sigmoid 曲线。我在文章的开头使用了基本方程。

FFT 模式

我当然没有在这里发明任何东西。感谢 Chris Parker 分享他的设计代码。我还借鉴了Arduino FFT 库文档中的示例。


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费