多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 基于MSGEQ7的音乐节奏灯 ### STEP1 了解获取项目的方法 [跳动的音乐灯](https://create.arduino.cc/projecthub/HeinzKetschup/spectrum-analyzer-with-rgb-leds-eb9785?ref=platform&ref_id=424_trending___&offset=0) * 这个项目来自Arduino官网([https://www.arduino.cc](https://www.arduino.cc/)),在官网里有许多的项目可供大家参考学习,其实想做这个项目是觉得这个灯光挺好看的,网站里还有其他许多更有意思的项目,不过也挺难的,大家要有完成的决心,一开始都挺难的,不过也就开头难,完成第一个后就会做第二个、第三个了,因为用的东西基本都一样了 语法说明: ![](https://img.kancloud.cn/af/16/af16518291d8d6c04683524b48d9274c_600x570.jpg) 这个是开发板(UNO)这个是我最终的制作效果图: ![](https://img.kancloud.cn/0b/42/0b42c5bd252114d4c27d733e7a78ecbe_255x450.png) 我们选择官网里的项目呢,主要是为了方便一点,在其他的地方其实也有许多的资源,但是个人感觉官网里的比较详细一点,大家也别想找到操作视频什么的,除非是淘宝上的套件,他们用的是自制的PCB板子,我们使用的是测试电路的面包板,就是这个 ![](https://img.kancloud.cn/57/0a/570aa9adcb4e96501be4e34a4880e321_254x132.png) 而PCB就是印刷电路板,项目设计师们首先在面包板上测试电路,成功之后才会制成印刷电路板, 左图就是印刷电路板刚成型时候的样子,然后我们把各种元器件焊接上去,就可以形成我们使用的Arduino板子,类似于右图这样的。 可以放心材料都是齐全的,在上面可以看到这个项目采用的是Arduino Nano R3的板子,而我们最好使Arduino UNO板子,因为这个板子使用的人多些,但其实所有的板子都是差不多的,因为他们都是通过接口来传输数字信号或其他信号的; ### 看懂原理图 接着我们就要开始接线了,怎么接线呢,我们肯定是没办法自己设计电路的,所以这就要求我们看懂别人的电路,而表示电路连接方式的方法叫原理图,所有的项目在完成之后都是得画原理图的,包括毕业设计、企业、还有网上各种开源项目。我们必须看懂原理图,才能接线。 咋一看,可能什么都看不懂,其实多看看就行了,这些绿线表示电路的连接线,用导线连上就行,上面的5V电压都是来自同一个电源,GND接负极也都是同一个电源的负极,也就是对应我们单片机上的+5V、GND ![](https://img.kancloud.cn/95/b9/95b967dd32c08ffb2d2c63c1fd888558_962x477.png) ### STEP2 购买材料 首先,我们要有Arduino软件和Arduino单片机 1. 软件的话可以到官网上下或者找有的同学要。大家其实买Arduino板子的时候,记得向淘宝买家要教程,里面会有安装方法和相关的软件,还有学习教程,都比较详细。 2. 买单片机的话,最好买成套的,会比较划算,比如带了面包板、部分电阻、电容的那种,我们买单片机的时候,最好提前确定需要的电阻、电容、芯片、多拿点导线(有公对公、公对母、母对公、母对母的)都拿一点,在面包板上做实验的话,公对公的多些,就是插头对插头的那种。 3. 有时我们也需要带锡导线用来焊接,如果项目需要的话也可以购买一些,学长也是一边做一边买的,浪费不少邮费,所以大家一定要提前准备好呀,一次性解决。 接着,我们就需要照着官网上的要求买材料了,大家可能觉得买材料而已,肯定没问题,实际上,光是电容就有好几种,陶瓷电容、电解电容、金属电阻……分了好多种,而且即便买对了类型,咱们也不见得就认识。比如陶瓷电容标了106,这种只有数字没单位的,所以大家买电子器材的时候一定要看准类型、看清到底要什么样的。然后买回来以后还得学习一下怎么认识阻值、电容大小,像电阻一般是色环标记,连数字都没有。建议大家去中国大学mooc学习一下如何辨别阻值、电容大小;或者游览器搜索一下。 1. 电阻 五环色谱,四环色谱及其他常见电阻鉴别方法(中国大学MOOC《电子技术实习》) 2. 电容 不同类型的电容的使用及错误使用的后果(中国大学MOOC《电子技术实习》),电容值的鉴别。不光是电容、电阻,其他的东西,比如灯带,芯片,即便是同一个名称的东西,也有许多不同的型号,大家买的时候一定要去游览器上查清楚 ### **STEP3 准备材料** 1. 我们的项目的部分材料很多时候是需要加工的 就比如学长项目里的耳机线,就是用自己坏掉的耳机做的;用这个耳机就得弄明白左声道,、右声道,GND线……分清他们主要看颜色。学长都是去网上一个个查的,然后再用锡线把导线焊上去,所以大家遇到问题常常上百度 2. 学长看这一整个电路,特别是右下角那块USB接口太复杂,看着整个电路只要用公有5V进行输入,所以直接用单片机的5V输出了,大家也可以这么办。 3. 然后连接完电路之后,就会发现一些问题,比如学长连接完电路以后,单片机发生了自我断电保护。显然单片机是电流过载了,所以根据高中物理,电流过大就该串联一个较大的电阻,起到限流的作用。不可能是电压过大,因为5V电压由单片机输出。同理,如果咱们在连接电路后灯泡或者电机转速比较慢,可以把整个电路并联一个较小电阻,至于阻值是多少,同学们还没有学习模拟电路和数字电路,我们没有办法进行计算,所以只能一个个试一试啦 4. 灯管部分需要加工 灯管原来是一整条的,需要剪成若干等长的几段,再用导线连接起来。查资料后发现灯管内置IC,由靠近接线的一端从0开始编号。 所以,我们在进行对器材进行操作之前,务必去网上查一下相关的使用说明,等完全确定了再下手,否则有很大可能导致项目的失败。 5. 对于芯片,这个项目使用了MSGEQ7,学长一开始也不知道这个芯片是干什么的,所以就去网上搜集资料,搜集到了一些说明和它的作用,对于我们理解代码有很大的帮助。大家可以学习去阅读芯片手册,以后大家就业的时候一定会用到,特别是电信的同学。芯片手册里有芯片的操作方法和指令,最后单片机都是对芯片进行操作的。在这里学长说明一下,芯片的引脚是有标号顺序的,连接电路的时候需要用(月牙形向上,左边从上到下1~4,右边5~8)。 6. 电烙铁如果要买的话一定要功率大的,最好在60W以上,否则根本融化不了锡线。 ### **STEP4 开始工作** 1. 首先我们先去网上查一下面包板的结构,开始按原理图接线,别怕原理图看不懂,它怎么连接的线,你的导线就怎么连。 2. 连接完成之后就是烧录代码,商家给的教程里会有烧录方法,但是学长烧录完成以后出现了,灯泡乱闪的现象,最后才知道电路一定要共地,就是把所有的地线都接到单片机的GND接口上。 3. 灯泡有了反应,但是从结果来看并没有很好的效果 为使灯带达到更好的效果,做了如下更改 (1) `void LEDaus1(int b,int c,int d,int e,int f,int g,int h,int j,int k)// 改变原代码,单数灯带逆序关闭;` ` void LEDaus2(int b,int c,int d,int e,int f,int g,int h,int j,int k)// 对双数灯带顺序关闭` 在这里解释一下,因为我们的灯带是顺序连接的,所以单双号灯带的标号是反的, 大家可以看到灯带是蛇形连接的,从左下角开始编号0~60;其原理就是通过控制每个灯泡的颜色和开闭,来实现节奏灯的效果。而控制他们的是经过MSGEQ7芯片转化后的电平信号。MSGEQ7芯片的作用就是将接收到的相应频段的音频信号转化成相应的电平信号 (1) ``` void LEDaus1(int b,int c,int d,int e,int f,int g,int h,int j,int k) { for (int i=k; i>=b; i--) { pixels.setPixelColor(i, aus); pixels.show(); delay(1);// 延时,改变原代码,使之有逐渐关闭的效果 } } ``` 在这里,原来的代码里没有延时,直接一次性把所有的灯管完全关闭,没有渐变的感觉,所以在这里加上延时1毫秒 ``` (3) pixels.setPixelColor(0, grb);// 一直点亮第一行的灯光,感觉好像好看些 pixels.setPixelColor(19, grb); pixels.setPixelColor(20, grb); pixels.setPixelColor(39, grb); pixels.setPixelColor(40, grb); pixels.setPixelColor(59, grb ); (4) void abfolge(int b,int c,int d,int e,int f,int g,int h,int j,int k) { switch (l)// 根据MSGEQ7传来的数据,显示相应的灯光 { case 93 ... 105:/\*<---------------------------------------second LED area------------------------------------------------------\*/ LED1(b,c,d,e,f,g,h,j,k); break; case 106 ... 118:/\*<---------------------------------------third LED area-------------------------------------------------------\*/ LED2(b,c,d,e,f,g,h,j,k); break; case 119 ... 131:/\*<---------------------------------------fourth LED area------------------------------------------------------\*/ LED3(b,c,d,e,f,g,h,j,k); break; case 132 ... 144:/\*<---------------------------------------fith LED area--------------------------------------------------------\*/ LED4(b,c,d,e,f,g,h,j,k); break; case 145 ... 157:/\*<---------------------------------------sixth LED area-------------------------------------------------------\*/ LED5(b,c,d,e,f,g,h,j,k); break; case 158 ... 170:/\*<---------------------------------------seventh LED area-----------------------------------------------------\*/ LED6(b,c,d,e,f,g,h,j,k); break; case 171 ... 182:/\*<---------------------------------------eighth LED area------------------------------------------------------\*/ LED7(b,c,d,e,f,g,h,j,k); break; case 183 ... 195:/\*<---------------------------------------nineth LED area------------------------------------------------------\*/ LED8(b,c,d,e,f,g,h,j,k); break; case 196 ... 208:/\*<---------------------------------------tenth LED area------------------------------------------------------\*/ LED9(b,c,d,e,f,g,h,j,k); break; } } ``` 在这里可以看到芯片的工作原理,芯片将声音频率转换成一个人数字传入switch()函数,通过数字大小,我们可以可以打开相应的灯,在这里LED1表示第一排的灯,所以操作这个灯光就像我们用C语言用一系列for循环输出图形图案一样,所以我们也可以多买些灯管,拼成一个LED显示屏,用它来进行图像显示。 在这里由于音频率较低,导致发光灯管太少,直接降低缩小了值域,使更多的灯管闪 ### **STEP5** **画原理图** (1)当所有东西都完成之后,我们就需要画出自己电路的原理图了,我们使用的是AD(Altium Designer) 这个软件以后学习硬件的同学应该会用到,最好了解一下,因为最后的电路都得用原理图表示出来, 这个也不是很专业