Arduino--音乐频谱

news2025/1/21 15:43:50

本文主要介绍基于Arduino实现的音乐频谱显示,音乐频谱原理就是声音传感器(MIC)接收音频信号后通过FFT将时域信号转换成频域信号,再将音频信号频域分量分别显示在对应的LED点阵屏上,呈现出音乐随频律动的感觉,整体效果比较赏心悦目
完整代码见文末链接(含相关头文件)

(1)简介

首先介绍实现本文所需要的主要器件:
(1)Arduino开发板:全系列均可以,本文主要以UNO为例
(2)MAX7219 LED点阵模块
有关于该模块的详细介绍见:https://blog.csdn.net/u011816009/article/details/124309755
(3)声音传感器:要求能模拟量输出,理论上只要能输出模拟量的都可以,我是电子大楼随意几块钱买了个,也能正常使用
在这里插入图片描述

(2)接线图

接线图相对比较简单,按照下图示意接线即可
在这里插入图片描述

(3)程序代码

初始化配置

include "LedControl.h"

/* Led matrix - Max7219 Declared */
LedControl lc = LedControl(7, 6, 5, 1);

const int maxScale = 50;

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

主函数如下

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

signalMax = 0;
signalMin = 255;

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

if (sample < 255) {
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, 254, 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]--;
}

(4)视频效果展示

Arduino音乐频谱

(5)附完整代码(含所需头文件等)

百度网盘下载:
链接:https://pan.baidu.com/s/15uyKs5nhGCX9W46Yd7j4FA
提取码:c457

CSDN下载:
https://download.csdn.net/download/u011816009/87177570

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows Docker Desktop安装K8S

Docker DeskTop提供了K8S支撑&#xff0c;安装也较为简单。对于本地开发&#xff0c;测试部署项目较为方便。下面进行简单说明。 DockerDesktop配置镜像源&#xff0c;较为简单&#xff0c;有许多网上例子直接参考即可。启用K8S等待一阵子&#xff0c;K8S即可安装成功。可以看…

MySQL存储引擎介绍

首先 我们要知道 什么是引擎 我们常见的 客机 直升机 火箭等等 他们都有自己的引擎 引擎也就是指一个机器的核心 当然 你如果是一个飞机 那你自然是不能用火箭的引擎的 存储引擎就是存储数据 建立索引 更新/查询数据等技术的实现方式&#xff0c;存储引擎是基于表的&#xf…

TDK | CeraLink 电容器快速切换逆变器的革新

本周向大家介绍另一款压电技术的产品CeraLink。 CeraLink 是一系列非常紧凑的电容器&#xff0c;用于稳定直流链路中的电压。因此它们适合用作缓冲器或直流母线电容器。这些产品基于 PLZT 陶瓷&#xff0c;旨在为工程师提供针对快速开关转换器、空间要求非常紧凑的转换器和需要…

Java项目:饰品商城系统(java+SSM+JSP+javascript+jQuery+Mysql)

源码获取&#xff1a;俺的博客首页 "资源" 里下载&#xff01; 项目介绍 本项目分为前台与后台&#xff0c;有普通用户与管理员两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,用户管理,一级分类管理,二级分类管理,饰品管理,订单管理、发货、…

Linux中对磁盘(硬盘)分区和挂载

记录&#xff1a;346 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用fdisk对磁盘分区&#xff1b;使用mkfs.xfs创建文件系统&#xff1b;使用mount挂载磁盘到目录&#xff1b;使用umount卸载目录已挂载的磁盘&#xff1b;修改文件系统表fstab&#xff0c;满足开机启…

【计算机毕业设计】网上游戏代练商城系统

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘要 随着当今社会的发展&#xff0c;时代的进步&#xff0c;各行各业也在发生着变化&#xff0c;本系统健身房这一方面&#xff0c;利用网站游戏代练已经逐步进入人们的生活。传统的网上游戏代练&#xff0c;都是用…

前端基础入门

HTML的基本概念 WWW&#xff08;World Wide Web&#xff0c;万维网&#xff09;是一种建立在Internrt上的、全球性的、交互的、多平台的、分布式的信息资源网络。它采用HTML语言描述超文本&#xff08;Hypertext&#xff09;文件。这里所说的超文本文件指的是包含链接关系和多…

数据结构与算法中的图

数据结构与算法中的图 图的定义与术语 在线性结构之间&#xff0c;数据元素之间满足唯一的线性关系。每个数据元素&#xff08;除第一个和最后一个外&#xff09;只有一个****直接前趋和直接后继** 在树形结构中&#xff0c;数据元素之间有着明显的层次关系&#xff0c;并且每…

实验四、R_b变化对Q点和电压放大倍数的影响 ​

一、题目 研究 RbR_bRb​ 变化对 QQQ 点和 A˙u\dot A_uA˙u​ 的影响。 二、仿真电路 仿真电路如图1(b)、(ccc)所示。晶体管采用 FMMT5179。其datasheet的相关参数如下&#xff1a;(a)FMMT5179的参数(a)\textrm{FMMT5179}的参数(a)FMMT5179的参数 (b)Rb为3MΩ时的情况(b)R…

RDD——Action算子

常用Action算子 countByKeycollectreducefoldfirsttaketopcounttakeSampletakeOrderedforeachsaveAsTextFile countByKey() 返回值是一个 字典类型 ## 读取文本文件 rdd1 sc.textFile(f"file:///{ROOT}/data/input/words.txt") rdd2 rdd1.flatMap(lambda x:x.spl…

【数字信号去噪】小波软阈值+硬阈值+改进阈值数字信号去噪【含Matlab源码 1025期】

⛄一、小波语音降噪简介 对于噪声频谱遍布于语音信号频谱之中的宽带噪声&#xff0c;如果噪声振幅比大部分的语音信号振幅低&#xff0c;则削去低幅度成分也就削去了宽带噪声。基于这种思路&#xff0c;可以在频域中采取中心限幅的方法&#xff0c;即让带噪语音信号通过一限幅…

实战关于登录框的渗透测试

前言 登录框可以说是我们漏洞挖掘中最常见的点&#xff0c;漏洞的种类也是相当的多&#xff0c;相信大家在登录框中发现的漏洞数不胜数。 主要有以下这些漏洞 弱口令 SQL注入 水平越权 垂直越权 逻辑漏洞 短信轰炸 邮箱轰炸 信息泄露SQL注入 看到登录框&#xff0c;输入信…

C++智能指针之weak_ptr

C智能指针之weak_ptr前言weak_ptr总结前言 在C中&#xff0c;动态内存的申请和释放是通过运算符&#xff1a;new 和 delete 进行管理的。其中 new 负责申请内存&#xff0c;delete负责释放内存。 动态内存的使用很容易出现问题&#xff0c;这主要在于你需要保证在正确的时间释放…

【MAX78000基础案例演示】

【MAX78000基础案例演示】1. MAX78000配套软硬件1.1 硬件1.2 软件1.3 demo例程2. ADC2.1 描述2.2 设置2.3 输出3. GPIO3.1 描述3.2 设置3.3 输出4. UART4.1 描述4.2 设置4.3 输出6.小结1. MAX78000配套软硬件 有关使用 SDK 的详细信息&#xff0c;请参阅MAX78000 评估套件入门…

(附源码)计算机毕业设计Java巴音学院学生资料管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

Android Parcelable反序列化漏洞分析与利用

文章目录前言背景知识Parcelable序列化Bundle的数据结构LaunchAnyWhereCVE-2017-13288漏洞利用原理解析POC程序攻击演示CVE-2017-13315漏洞利用原理解析POC程序攻击演示漏洞Demo思考漏洞利用原理解析POC程序(供参考)总结前言 今年年初曾关注到 heen 大佬在 2018 年中旬写的一篇…

3-6数据链路层-广域网

广域网&#xff08;WAN&#xff0c;Wide Area Network)&#xff0c;通常跨接很大的物理范围&#xff0c;所覆盖的范围从几十公里到几千公里&#xff0c;它能连接多个城市或国家&#xff0c;或横跨几个洲并能提供远距离通信&#xff0c;形成国际性的远程网络。 文章目录一.基本概…

本周总结(11.21-11.27)

周一&#xff1a; ssm项目写了委托 写的过程中边写边学习了一些布局用法。 周二: ssm项目写了查看 这部分内容主要还是在前端上改了很久&#xff0c;首先就是因为三种房源各不相同&#xff0c;每个房源都需要创建一个表&#xff0c;数据也不一致&#xff0c;所以详细房源页面…

ps常用操作

ps常用操作 个人总结&#xff0c;半路出家&#xff0c;仅供个人习惯&#xff0c;仅供个人参考。1.如何将导入的图片放大&#xff1f;&#xff1f;&#xff1f; ctrl 和 加号 2.如何去除阴影或者粗糙的地方&#xff1f; 第一种方式&#xff0c;选择图像&#xff0c;选择填充 …

进军东南亚市场,腾讯云数据库 TDSQL 助力印尼 BNC 银行数字化转型

腾讯云数据库在助力金融核心系统分布式替换上&#xff0c;已经辐射到了东南亚市场。 东南亚最大的银行之一印尼BNC银行&#xff08;Bank Neo Commerce&#xff09;已正式完成新核心分布式迁移&#xff0c;使用腾讯云数据库TDSQL后&#xff0c;系统运行平稳顺畅。这标志着腾讯云…