579|30

1643

帖子

0

资源

纯净的硅(初级)

【花雕动手做】有趣好玩的音乐可视化系列小项目(06)---点阵频谱灯 [复制链接]

 

偶然脑子发热心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累些有用的音乐频谱可视化的资料,也会争取成型一些实用好玩的音乐可视器项目。

 

【花雕动手做】有趣好玩的音乐可视化系列小项目(06)---点阵频谱灯
 项目所需材料如下:

 

00.jpg


回复

965

帖子

3

资源

版主

你这完全就是一个小仓库,要什么有什么,想做什么做什么

点评

谢谢老师的鼓励,为做系列实验,二年来积累了不少传感器和执行器的模块  详情 回复 发表于 6 天前

回复

1643

帖子

0

资源

纯净的硅(初级)

annysky2012 发表于 2021-10-9 22:01 你这完全就是一个小仓库,要什么有什么,想做什么做什么

谢谢老师的鼓励,为做系列实验,二年来积累了不少传感器和执行器的模块


回复

1643

帖子

0

资源

纯净的硅(初级)

05-1.jpg

 

MAX7219 
是美国MAXIM 公司推出的多位LED 显示驱动器,采用3 线串行接口传送数据,可直接与单片机接口连接,用户能方便修改其内部参数,以实现多位LED 显示。它内含硬件动态扫描电路、BCD译码器、段驱动器和位驱动器。此外,其内部还含有8X8 位静态RAM,用于存放8 个数字的显示数据。显然,它可直接驱动64 段LED点阵显示器。当多片MAX7219 级联时,可控制更多的LED 点阵显示器。显示的数据通过单片机数据处理后,送给MAX7219 显示。


MAX7219点阵显示模块(8X8 LED共阴)模块参数:
1.单个模块可以驱动一个8*8共阴点阵
2.模块工作电压:5V
3.模块尺寸:长5厘米X宽3.2厘米X高1.5厘米
4.带4个固定螺丝孔,孔径3mm,可使用本店M3铜柱固定
5.模块带输入输出接口,支持多个模块级联


回复

1643

帖子

0

资源

纯净的硅(初级)

MAX7219模块电原理图

 

05-6.jpg


回复

1643

帖子

0

资源

纯净的硅(初级)

MAX9814是一款低成本高性能麦克风放大器,具有自动增益控制(AGC)和低噪声麦克风偏置。器件具有低噪声前端放大器、可变增益放大(VGA)、输出放大器、麦克风偏置电压发生器和AGC控制电路。
●自动增益控制(AGC) 
●3种增益设置(40dB、50dB、60dB) 
●可编程动作时间 
●可编程动作和释放时间比 
●电源电压范围2.7V~5.5V  
●低THD:0.04% (典型值) 
●低功耗关断模式 
●内置2V低噪声麦克风偏置

 

000.jpg


回复

1643

帖子

0

资源

纯净的硅(初级)

【花雕动手做】音乐可视化系列小项目(06)---点阵频谱灯

   项目之一:八段分频8X8点阵屏的音乐频谱灯

 

   实验开源代码

 

/*
【花雕动手做】音乐可视化系列小项目(06)---点阵频谱灯
项目之一:八段分频8X8点阵屏的音乐频谱灯
接脚连线:MAX9814 接A0
MAX7219 UNO
VCC →→→→→ 5V
GND →→→→→ GND
DIN →→→→→ D12(数据,数据接收引脚)
CS →→→→→ D11(负载,命令接收引脚)
CLK →→→→→ D10(时钟,时钟引脚)
*/

#include "LedControl.h"

/* Led matrix - Max7219 Declared */
LedControl lc = LedControl(12, 11, 10, 1);

const int maxScale = 11;

/* Sensor - Max9812 Declared */
const int sensorPin = A4;
const int sampleWindow = 50; // 50ms = 20Hz
unsigned int sample;

unsigned long startMillis;
unsigned long timeCycle;

unsigned int signalMax = 0;
unsigned int signalMin = 1024;
unsigned char index = 0;

unsigned int peakToPeak[8];
unsigned int displayPeak[8];
unsigned int temp[8]={0,0,0,0,0,0,0,0};
unsigned int signalMaxBuff[8];
unsigned int signalMinBuff[8];


void setup() {
// Led matrix
lc.shutdown(0, false); // bật hiện thị
lc.setIntensity(0, 1); // chỉnh độ sáng
lc.clearDisplay(0); // tắt tất cả led

Serial.begin(9600);
}

void loop() {
startMillis = millis();
//peakToPeak = 0;

signalMax = 0;
signalMin = 1024;

// Get data in 50ms
while (millis() - startMillis < sampleWindow) {
sample = analogRead(sensorPin);

if (sample < 1024) {
if (sample > signalMax) {
signalMax = sample;
}
if (sample < signalMin) {
signalMin = sample;
}
}

// 20Hz - 64Hz - 125Hz - 250Hz - 500Hz - 1kHz (timeCycle = 1/F)(ms)
timeCycle = millis() - startMillis;
if (timeCycle == 1 || timeCycle == 2 || timeCycle == 4 || timeCycle == 8
|| timeCycle == 16 || timeCycle == 32 || timeCycle == 40 || timeCycle == 50) {
signalMaxBuff[index] = signalMax;
signalMinBuff[index] = signalMin;
index = (index + 1) % 8;
delay(1);
//Serial.println(timeCycle);
}
}

// Delete pointer to array
index = 0;

// Calculation after get samples
for (int i = 0; i < 8; i++) { // i = row (led matrix)
// sound level
peakToPeak[i] = signalMaxBuff[i] - signalMinBuff[i];

// Map 1v p-p level to the max scale of the display
displayPeak[i] = map(peakToPeak[i], 0, 1023, 0, maxScale);

// Show to led matrix
displayLed(displayPeak[i], i);

// Led drop down
if (displayPeak[i] >= temp[i]) {
temp[i] = displayPeak[i];
}
else {
temp[i]--;
}

lc.setLed(0, i, temp[i], true);
delayMicroseconds(250);
}

}

void displayLed(int displayPeak, int row) {
switch (displayPeak) {
case 0 : lc.setRow(0, row, 0x80); break;
case 1 : lc.setRow(0, row, 0xC0); break;
case 2 : lc.setRow(0, row, 0xE0); break;
case 3 : lc.setRow(0, row, 0xF0); break;
case 4 : lc.setRow(0, row, 0xF8); break;
case 5 : lc.setRow(0, row, 0xFC); break;
case 6 : lc.setRow(0, row, 0xFE); break;
case 7 : lc.setRow(0, row, 0xFF); break;
}
}

 


回复

1643

帖子

0

资源

纯净的硅(初级)

实验场景图

 

01.jpg


回复

1643

帖子

0

资源

纯净的硅(初级)

  【花雕动手做】音乐可视化系列小项目(06)---点阵频谱灯

  项目之一:八段分频8X8点阵屏的音乐频谱灯

 

   实验视频剪辑

 

https://v.youku.com/v_show/id_XNTgxMjY3Nzc4MA==.html?firsttime=0

 


 


回复

1643

帖子

0

资源

纯净的硅(初级)

   实验场景动态图

 

03.gif


回复

167

帖子

0

资源

纯净的硅(初级)

楼主 厉害了。

我一直觉得arduino也就是玩一玩简单的

点评

谢谢老师的鼓励,比较敢于去尝试而已  详情 回复 发表于 4 天前

回复

1643

帖子

0

资源

纯净的硅(初级)

 【花雕动手做】音乐可视化系列小项目(06)---点阵频谱灯
   项目之一:两位点阵屏八段分频音乐频谱仪
   实验场景图  

 

11.jpg


回复

1643

帖子

0

资源

纯净的硅(初级)

jobszheng5 发表于 2021-10-13 09:10 楼主 厉害了。 我一直觉得arduino也就是玩一玩简单的

谢谢老师的鼓励,比较敢于去尝试而已


回复

1643

帖子

0

资源

纯净的硅(初级)

实验场景动态图

 

40.gif


回复

1643

帖子

0

资源

纯净的硅(初级)

 【花雕动手做】音乐可视化系列小项目(06)---点阵频谱灯

   项目之两位点阵屏八段分频音乐频谱仪

 

   实验视频剪辑

 

https://v.youku.com/v_show/id_XNTgxMjgzMTQ5Mg==.html?firsttime=0

 


 


回复

167

帖子

0

资源

纯净的硅(初级)

看上去还挺有意思的呀

点评

谢谢老师的鼓励  详情 回复 发表于 4 天前

回复

1643

帖子

0

资源

纯净的硅(初级)

 【花雕动手做】音乐可视化系列小项目(06)---点阵频谱灯

   项目之二:FFT算法,八段音乐可视化动态频谱仪

 

   实验开源代码

 

/*
 【花雕动手做】音乐可视化系列小项目(06)---点阵频谱灯
 项目之二:FFT算法,八段音乐可视化动态频谱仪
*/

#include <arduinoFFT.h>

#include <MD_MAX72xx.h>

#include <SPI.h>

MD_MAX72XX disp = MD_MAX72XX(MD_MAX72XX::FC16_HW, 10, 4);

arduinoFFT FFT = arduinoFFT();

double realComponent[64];

double imagComponent[64];

int spectralHeight[] = {0b00000000,0b10000000,0b11000000,

                        0b11100000,0b11110000,0b11111000,

                        0b11111100,0b11111110,0b11111111};

int index, c, value;

void setup()

{

  disp.begin();

  Serial.begin(9600);

}

void loop()

{

  int sensitivity = map(analogRead(A6),0,1023,50,100); 

  Serial.println (analogRead(A6));

  for(int i=0; i<64; i++)

  {

    realComponent[i] = analogRead(A7)/sensitivity;

    imagComponent[i] = 0;

  }

  FFT.Windowing(realComponent, 64, FFT_WIN_TYP_HAMMING, FFT_FORWARD);

  FFT.Compute(realComponent, imagComponent, 64, FFT_FORWARD);

  FFT.ComplexToMagnitude(realComponent, imagComponent, 64);

  for(int i=0; i<32; i++)

  {

    realComponent[i] = constrain(realComponent[i],0,80);

    realComponent[i] = map(realComponent[i],0,80,0,8);

    index = realComponent[i];

    value = spectralHeight[index];

    c = 31 - i;

    disp.setColumn(c, value);

  }

}

 


回复

1643

帖子

0

资源

纯净的硅(初级)

本帖最后由 eagler8 于 2021-10-13 13:20 编辑

 【花雕动手做】音乐可视化系列小项目(06)---点阵频谱灯

   项目之二:FFT算法,八段音乐可视化动态频谱仪

 

   实验视频剪辑

 

https://v.youku.com/v_show/id_XNTgxMjkwMjA5Ng==.html?spm=a2hcb.playlsit.page.1

 


 

 

 

 


回复

1643

帖子

0

资源

纯净的硅(初级)

   实验场景动态图

 

41.gif


回复

1643

帖子

0

资源

纯净的硅(初级)

jobszheng5 发表于 2021-10-13 10:11 看上去还挺有意思的呀

谢谢老师的鼓励


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/9 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表