大家好,在进入正题之前,先扯个犊子!
关于U+的硬件,软件,资料等部分,我之前都有介绍过的,现在在这里就不再重复的给大家讲解了!
下面给大家看,,,,,木头!
没错,相信你的眼睛,是一堆木头!
下面带大家进入正题,本篇报告,亦为结项小作品,亦为教程!繁琐之处,还请大家伙见谅!
准备材料,一堆木头,手钻,切割片,钻头,打磨机!
下面需要大家自己来CAD自己所想音响的尺寸,根据尺寸,画出自己所想的图纸,结构!我所使用的是榫卯结构!
那么,还需要拉花锯,锉刀,狍子,
关于音响的具体制作,就不在此演示了!请大家继续等待我作品的更新,等音响完工之后,还会再给大家做一个教程!
那么,重点来了!
这是我做的频谱,层共阳,束共阴,想必大家都有玩,或者见到过光立方吧,同样的道理,我们先来做一个小小的测试,用STC12C5A60S2来测试,
这是ADC部分,大家可用来参考!
- #ifndef _FFT_INCLUDED_
- #define _FFT_INCLUDED_
- struct compx
- {
- float real;
- float imag;
- };
- struct compx dd[65]; //FFTÊý¾Ý
- data struct compx temp;
-
- code float iw[64]=
- {
- 1.000,0,0.9952,-0.0980,0.9808,-0.1951,0.9569,-0.2903,0.9239,-0.3827,0.8819,-0.4714,0.8315,-0.5556,
- 0.7730,-0.6344,0.7071,-0.7071,0.6344,-0.7730,0.5556,-0.8315,0.4714,-0.8819,0.3827,-0.9239,0.2903,-0.9569,
- 0.1951,-0.9808,0.0980,-0.9952,0.0,-1.0000,-0.0980,-0.9952,-0.1951,-0.9808,-0.2903,0.9569,-0.3827,-0.9239,
- -0.4714,-0.8819,-0.5556,-0.8315,-0.6344,-0.7730,-0.7071,-0.7071,-0.7730,-0.6344,-0.8315,-0.5556,-0.8819,-0.4714,
- -0.9239,-0.3827,-0.9569,-0.2903,-0.9808,-0.1951,-0.9952,-0.0980
- };
- //¸´Êý³Ë·¨
- void ee(struct compx b1,uchar data b2)
- {
- temp.real=b1.real*iw[2*b2]-b1.imag*iw[2*b2+1];
- temp.imag=b1.real*iw[2*b2+1]+b1.imag*iw[2*b2];
- }
- //³Ë·½º¯Êý
- uint mypow(uchar data nbottom,uchar data ntop)
- {
- uint data result=1;
- uchar data t;
- for(t=0;t
- return result;
- }
- //¿ìËÙ¸µÁ¢Ò¶±ä»»
- void fft(struct compx *xin,uchar data N)
- {
- uchar data fftnum,i,j,k,l,m,n,di***uff,dispos,dissec;
- data struct compx t;
- fftnum=N; //¸µÁ¢Ò¶±ä»»µãÊý
- for(m=1;(fftnum=fftnum/2)!=1;m++);//ÇóµÃMµÄÖµ
- for(k=0;k<=N-1;k++) //Âëλµ¹ÖÃ
- {
- n=k;
- j=0;
- for(i=m;i>0;i--) //µ¹ÖÃ
- {
- j=j+((n%2)<<(i-1));
- n=n/2;
- }
- if(k
- }
- for(l=1;l<=m;l++) //FFTÔËËã
- {
- di***uff=mypow(2,l); //ÇóµÃµú¼ä¾àÀë
- dispos=di***uff/2; //ÇóµÃµúÐÎÁ½µãÖ®¼äµÄ¾àÀë
- for(j=1;j<=dispos;j++)
- for(i=j;i
- {
- dissec=i+dispos; //ÇóµÃµÚ¶þµãµÄλÖÃ
- ee(xin[dissec],(uint)(j-1)*(uint)N/di***uff);//¸´Êý³Ë·¨
- t=temp;
- xin[dissec].real=xin[i].real-t.real;
- xin[dissec].imag=xin[i].imag-t.imag;
- xin[i].real=xin[i].real+t.real;
- xin[i].imag=xin[i].imag+t.imag;
- }
- }
- }
- //Íê³ÉÏÔʾÊý¾ÝµÄת»»¹¤×÷,°üÀ¨¶¥µãÏÂÂäËٶȿØÖÆÒÔ¼°¶¥µã¸üж¨¸ñ
- //¶ÔfftÊý¾Ý½øÐд¦Àí,µÃµ½¸÷¸öƵÂʶεĵçѹ·ùÖµ
- void processfft(void)
- {
- uchar data pt=0,tmp;
- for(pt=1;pt<65;pt++)
- {
- dd[pt].imag=0; //ÇåÁãÐ鲿
- }
- fft(dd,64); //¶Ôµ±Ç°Êý¾Ý½øÐиµÁ¢Ò¶±ä»»
-
- for(pt=1;pt<65;pt++)
- {
- dd[pt].real=sqrt(dd[pt].real*dd[pt].real+dd[pt].imag*dd[pt].imag);//È¡¾ù·½¸ù
- }
- if(Menu==1)
- {
- for(pt=2;pt<34;pt+=2)
- {
- for(tmp=(dd[pt].real/32)+1,LEDBuf[pt]=0xFF;tmp>=1;tmp--)//tmp>1;²»±£Áô×îµÍλÄÇÒ»Ðг£ÁÁ
- {
- LEDBuf[pt]<<=1;
- }
-
- LEDBuf[pt]=~(LEDBuf[pt]);
-
- }
- }
- else if(Menu==2)
- {
- //ÏÂÂä¸Ð
- for(pt=2;pt<34;pt+=2)
- {
- tmp=(dd[pt].real/32)+1;
- if(refreshflag[pt]
- {
- for(LEDBuf[pt]=0xFF;tmp>1;tmp--) //tmp>1;²»±£Áô ×îµÍλÄÇÒ»Ðг£ÁÁ;{}Ò»´ÎÒ²²»Ö´ÐУ»
- {
- LEDBuf[pt]<<=1;
-
- }
- refreshflag[pt]=(dd[pt].real/32)+1;
- }
- else
- {
- if(refreshflag[pt]>1)refreshflag[pt]--; //¶¥¶ËÏÂÂäËٶȿØÖÆ ¸Ä±äÖµ¿ÉÒԸıäϽµËÙ¶È
- for(LEDBuf[pt]=0xFF,tmp=refreshflag[pt];tmp>1;tmp--) //tmp>1;²»±£Áô ×îµÍλÄÇÒ»Ðг£ÁÁ
- {
- LEDBuf[pt]<<=1;
- }
- }
- }
- }
- else if(Menu==0)
- {
- //ÏÂÂä¸ÐƵÆ×
- for(pt=2;pt<34;pt+=2)
- {
- tmp=(dd[pt].real/32)+1;
- if(refreshflag[pt]
- {
- for(LEDBuf[pt]=0xFF;tmp>=1;tmp--)//tmp>1;²»±£Áô ×îµÍλÄÇÒ»Ðг£ÁÁ;{}Ò»´ÎÒ²²»Ö´ÐУ»
- {
- LEDBuf[pt]<<=1;
-
- }
- refreshflag[pt]=(dd[pt].real/32)+1;
-
- }
- else
- {
- if(refreshflag[pt]>1)refreshflag[pt]--;
- for(LEDBuf[pt]=0xFF,tmp=refreshflag[pt];tmp>=1;tmp--)
- {
- LEDBuf[pt]<<=1;
- }
- }
- LEDBuf[pt]=~(LEDBuf[pt]);
- }
- }
-
- }
- #endif
复制代码
FFT傅里叶变换,这个不用多解释了吧,所有频谱都会用到的算法,大家可直接搬运!
这是频谱的原理图,很简单的!
为此,因为U+并没有太多的外设接口,为了节省资源,我们用STC12C5A60S2来做频谱,用U+来做传输控制部分!
之前也有给大家介绍过U+的下载方式了,糟糕,今天上传已经受限制了,我来用文字描述
大家可下载我之前的帖子,里面有个DEMO,是U+的调试底包,下载后,我们要用到最新的SDK,
用最新的sdk去链接 http://www.haieruplus.com/cn/
这样,在里面新建工程,创建自己我们的WIFI音响,创建数据流,创建传输,用SOCK
其实这个东西也并没有大家所想的那么复杂,简单的来讲,比如家里有一个闲置的音响,那么我们可以把它所有的零件都拆下来,那么,我们就省去了去制作功放的成本!
那么下来我们只需要花几块钱做个频谱。哦,有个小创意,3D频谱!
下面介绍一下!利用光反射原理,下面是一个水银镜子,可以反射光,上面是频谱,再上面是一片透明的镜子,
但是要贴一张单透膜,就是从里面可以看到外面,但是从外面看不到里面的那种!那么,当你的频谱亮起的时候,光会在两个镜片当中无限的反射,但是人从外面是可以看到光源,这样就会形成无穷的光源在反射,当然我建议大家是使用雾状的LED灯来做,这样看着光源不会很乱!
那么前面都把大体的框架做完之后,音响的外部我们也要来装饰一下,加两个LED灯条,装下音响下面或者背面,这样可以做到冷光的效果,看着很是高大上!
哦。对了。我用的是8线的无刷电机,要用到驱动板的,这里需要和大家解释一下,如果大家没有驱动板,最好也用个 单片机来控制一下,控制一下转速,这样做的音响才有质感!
本次小作品亮点。3D频谱,WIFI传输!
我也真诚的希望,大家可以通过这个教程,来自己制作一个,通过闲余的时间,来提高我们的动手能力,
这次,我们也能更好的去体验U+...去体验它后台的一个性能,稳定性,文件传输,已及效率。
最后,把源码分享给大家,因为文件传输超过30M的限制,还请大家见谅,大家下载源码后,把后缀改为点C...也请管理员同志见谅!
|