我的灯笼会唱歌
一盏小灯,不能满足你的大House,却能,满足你的心灵。当我第一次见到“它”的时候,以为它就是一个储物盒。 因为看了爱奇艺IP大剧《冒险王卫斯理之支离人》,觉得里面的古盒承包了整部剧“最精致”(反话)的镜头。
后面发现朋友做了一个六边形的音乐灯笼和它有点相似,于是就借来玩一玩。
看外形除了同是六边形,其他地方没有什么和古盒相似。虽然是这样的结果,我还是手贱的拆了它。 拆开后,发现做一盏音乐灯笼,需要以下材料:
喇叭 ×1(某宝) 铜箔 (某宝)
因为灯笼的体积较小巧,所以选用了DreamerNano V4.0主板。
为了给灯笼增加点生命力,可以说是“绞尽脑汁”啊。将数字触摸开关和声音模块相结合;通过触摸开关,我的灯笼就会唱歌了。 触摸开关是基于电容感应原理,就算隔着塑料,玻璃等材料也能被感应到,其感应灵敏度随着接触面的大小和覆盖材料的厚度而变化。 为了方便触摸,用一根线引出来,接在用铜箔做的灯穗上,这样一触摸灯穗,就能播放音乐了。 听说DIY和音乐很配哦。所以每次当我DIY制作时,我都会加上音乐。以前我加音乐的方式,就是手机播放音乐。而现在有了音效模块,就可以淘汰到手机了。
此模块可以储存8M的音效文件,可以存放200多个音效,它的储存方式简单;使用简单,运用DF gravity接口,减少了接线的麻烦;在播放上可以指定播放,循环播放,还可以调节音乐的大小。
将有黑边这面朝上摆放,从左到右一次为:红(电源负极),电源正极,绿(电源负极),蓝(电源负极)。
想要相应的颜色,就接相应的引脚。当三个引脚同时接电源负极的时候,显示为白色。同时还可能通过编程,显示多种颜色。 灯笼一共采用6块RGB 背光板,然后将6块RGB 背光板分成A,B两组,当音乐响起的时候,可以交叉显示不同的颜色。(视频如下)
【连线图】
线虽多,但是连接的时候很简单。
俗话说:好马配好鞍,一盏好看的灯笼肯定要配一根好看的灯笼提手了。所以我就找了一张过年剩下的福字,卷了一根提手。
而长得像六边形的这个外壳,则是3D打印的。不方便打印的小伙伴,可以自己发挥想象力,用一些替代品,比如说硬纸板之类的。 【成品图】 【程序代码】
- const int buttonPin = 12;
- int buttonState = 0;
- int analogPin = 2;
- int busy = 0;
- int randNumber;
- int ar=0;
- int ag=0;
- int ab=0;
- int br=0;
- int bg=0;
- int bb=0;
- unsigned char order[4] = {0xAA,0x06,0x00,0xB0};
- void volume( unsigned char vol)
- {
- unsigned char volume[5] = {0xAA,0x13,0x01,vol,vol+0xBE};
- Serial1.write(volume,5);
- }
- void A(int ar,int ag,int ab)
- {
- analogWrite(3,(255-ar));
- analogWrite(5,(255-ag));
- analogWrite(6,(255-ab));
- }
- void B(int br,int bg,int bb)
- {
- analogWrite(9,(255-br));
- analogWrite(10,(255-bg));
- analogWrite(11,(255-bb));
- }
- void play(unsigned char Track)
- {
- unsigned char play[6] = {0xAA,0x07,0x02,0x00,Track,Track+0xB3};
- Serial1.write(play,6);
- }
- void setup()
- {
- Serial1.begin(9600);
- pinMode(analogPin,INPUT);
- pinMode(3,OUTPUT);
- pinMode(5,OUTPUT);
- pinMode(6,OUTPUT);
- volume(0x1E);//音量设置0x00-0x1E
- }
-
-
- void loop()
- {
- buttonState = digitalRead(buttonPin);
- if(buttonState == HIGH){
- play(0x04);
- show1();
- delay(1000);
- }
- A(255,0,0);
- B(255,0,0);
- }
-
- void show()
- {
- for(int a=0; a<7;a++){ //循环语句,控制PWM亮度的增加
- A(255,0,0);
- B(200,0,0);
- delay(300);
- A(0,200,0);
- B(0,255,0);
- delay(300);
- A(0,0,255);
- B(0,0,200);
- delay(300);
- }
- }
- void show1()
- {
- volume(0x1E);//音量设置0x00-0x1E
- for(int a=0; a<9;a++){
- A(255,0,0);
- delay(100);
- B(0,255,0);
- delay(300);
- A(255,0,255);
- delay(100);
- B(0,0,255);
- delay(300);
- A(255,0,0);
- delay(100);
- B(0,0,255);
- delay(300);
- A(0,255,255);
- B(255,255,0);
- A(0,0,255);
- B(255,255,255);
- delay(300);
- A(200,105,0);
- B(70,0,50);
- delay(300);
- A(50,100,60);
- B(0,200,50);
- delay(300);
- A(0,105,255);
- B(70,200,0);
- delay(300);
- A(255,255,255);
- B(255,0,0);
- delay(300);
- }
- }
复制代码
【打印文件】 |