其实现在所能看到的大部分都是在去年暑假就做出来了,但是做出来以后无论是软件还是硬件结构都没有现在这么完善,比如当时有些字乱码,电机轴与帽子(旋转的部分,我就叫它帽子吧)连接不够结实,供电也不够稳定。放在角落积里了一年的灰,本以为它的命运已经走到了尽头,现在看到这个活动,觉得这一次也许是它“出灯头地”的时候到了,给大家娱乐一下,把它生命的价值再升华升华。
先来一张整体效果图
下面说一下配料表:
洞洞板两块、电阻、电容、三极管、继电器、电机、单片机、发光二极管、霍尔传感器开关、等等。
其实我列这个物料清单没什么意思,因为这都是制作过程中根据需求用自己有的东西来拼凑的,如果有人要做的话,不一定要这样,根据自己的口味放不同的配料就好了。
下面是去年的案发现场(我这个桌子是整齐得相当不明显,莫gai意哈)
接下来就让我从下到上详细讲一下整个案件。整个东西分为底座和帽子两个部分。首先是供电,电源接口用的是microusb,
生活中非常常见的接口,随便一个安卓手机的数据线就是,很方便,不管是用充电宝、电脑usb、充电器或者其他一切标准usb接口来供电都是OK的。
然后是底座的电路,直接说电路不太好说清楚,先说一下设想的功能吧,并不想让它很传统地打开开关就开始转,不安分的内心总想变着法地搞出点什么事情来。于是乎,我觉得如果上电以后它不转,当用手助推它一下然后它才开始转应该会比较有意思一点,会让人产生一种是自己亲手赋予它不断前进的动力的错觉。实际图是下边这个样子的,
图5.jpg2048x1152 888 KB
为了搞事,曾一度胡思乱想到了使用D触发器来驱动常规继电器等方案,但是电路会多很多,小小的底座会很拥挤难以布线;还有就是常规继电器需要一直通电才能保持一个状态,一贯坚持能省就省的我怎么能接受白白地浪费那么多电呢,不过办法总是会有的,还好最后经过本少侠的不断探寻,发现世上竟然还有磁保持继电器这种东东的存在。这里我要说一下这个磁保持继电器,不像常规的继电器一样,它是A端线圈通电后开关向A侧吸合,然后A线圈断电后开关不返回,只有当B线圈通电的时候才能把开关向B侧吸合,像我们的电灯开关一样用手拨一次才动一次,不拨就不动。这样一个东东用在这里简直是天作之合啊。
另外,助推启动这功能是通过霍尔开关1来控制的,关于霍尔传感器的原理在高中物理课本上有讲过的,但是这里我们只用知道这个开关的作用就行了,当开关感应到的磁场强度大于一定值之后它的输出端会输出低电平,否则输出高电平,在原理图中我把它等效成了一个单刀双掷(SPDT)开关。
然后是电机,最开始用的是自己从玩具车里拆出来的那种,但是由于电机需要跨过电刷,而且帽子上的元件也都有一定高度,可怜这种电机鞭长莫及啊,那短短的轴连接不到帽子上了,用过各种办法折腾着用铁轴加长,但是实在难以固定并且很难保证笔直,转起来容易乱甩,也一点都不结实,后来重新淘了加长轴的电机装上以后问题迎刃而解,真是只要有钱有网,一切都好商量。
至此,介绍完这几个主要元件后,可以说整个底座电路了,原理图在此,
底座_已标注.png2048x1496 181 KB
其中VCC_Main是外部提供的总电源,VCC是电机和帽子的电源,当底座电路控制接通VCC以后,电机开始旋转,帽子开始根据单片机程序梅花间竹地指挥着led们亮与灭,这样遵循一定时序的亮灭跟随着电机的脚步旋转运动起来以后,结合我们人眼的视觉暂留,我们就会看到led们显示出了自己想要的文字或者图案了,怎么样,是不是瞬间感觉了到科技的无穷魅力,只能说第一个想到这么玩的童鞋脑洞真是不小,向他表示一下我的严重的敬佩之意。
此电路从单片机上电复位电路得到启发,上电瞬间,电容C1相当于短路,三极管Q1导通,继电器A端通电,开关打向A端,VCC被断开,保证了上电以后不转,同时接通了霍尔传感器1和线圈B的电源。当助推帽子以后,帽子上的磁铁1接近底座上的霍尔开关1,其输出低电平使继电器B线圈通电,开关向B侧吸合,VCC接通,整机开始工作,同时霍尔开关1自杀并且强行让线圈B做陪葬(这个地方要得意一下,我觉得这个设计还是比较巧妙的(^-^)),切断了自己和线圈B的电源,从此以后,在下次重新上电之前,尽管帽子每旋转一圈,上面的磁铁1就会接近一次霍尔开关1,但是它没有电源就不工作,继电器B线圈也不会再通电,只有重新上电时继电器开关向A端吸合时才能重新赋予霍尔开关1和线圈B生命力,一个字,省电。
这个地方有一点要澄清,三极管可以当开关使用,但是我这个使用方法是存在隐患的 ,包括下面要说的控制LED的地方的三极管也是一样的,比较正确的用法应该在基极和射极之间再连接一个100K左右的大电阻,具体原因不细说了,大家尽量不要这么干,去年的我也是不知道的。
然后是电动机的固定,在尝试过使用果冻杯、纸盒以及各种size的药瓶子以后,发现随手拿起的焊锡卷非常适合,电机放在中间,稍微塞一些木头纸屑什么的就能很好地固定住,另外,焊锡卷很重,这样能够稳住重心,在帽子高速旋转的时候不至于颤抖得太厉害。
底座到帽子的电源是通过自制的电刷和电机的轴来传输的,电刷是正极,电机轴是负极。这个电刷比较关键,一定要尽量做得平滑、对称、阻力小并且接触良好,我这个电刷由两部分构成,无图无真相
第一部分是从不知道什么地方拆出来的一个弹片,一端焊在板子上,另一端弄上一滴焊锡会圆润一些,改善接触效果。第二部分是铁圈,这铁圈连同外面那一圈黑色的塑料筐其实是一个喇叭的残骸。
随便弄点润滑油涂上以后效果还是不错的(其实好几次都是从宿舍垃圾桶里找袋方便面调料油涂的)。
由于电刷的使用,帽子上得到的电源电压不可避免地会产较大的纹波甚至有时会间断,这就是之前工作很不稳定经常在转动过程中单片机会重启导致从头开始显示的原因,但是纯手工电刷结构的性能已经无力提升了,只能从电路上下手,所以必须在帽子上电源两端并联大电容进行电源滤波,如上上图,我这里并联了一个1000uF和一个100uF的电解电容,作用与音响功放中的“大水塘”类似,其实一般情况下对于大部分芯片规范的电源去耦电容是一个10uF有极性电容加一个0.1uF无极性电容,但这里情况不一样,事实证明这次改进加了此大电容以后效果大大地得到了改善,再也不会出现单片机重启而从头开始显示的情况了,只怪当初Too young too simple,不懂得这些套路。
接下来可以正式进入介绍帽子电路的环节了,首先核心是单片机,51足矣,根据要显示的内容多少选择ROM大小不同的型号就是了,比如89C/LE51有4K的ROM,89C/LE52有8K,5后面一位数字乘以4K就是该型号的ROM空间大小,表示其中“C”表示5V单片机,“LE”表示3V单片机。由于在这之前,有电机这一大耗电大户,中间又有自制的劣质电刷这一拦路虎,电源经过重重洗劫到达单片机的时候已经是狼狈不堪了,具体表现为电压低且不稳定,稳定的问题之前已经说过并联了大电容勉强解决,但是电压低就比较麻烦了,这个时候再用普通的5V单片机已经不能正常工作, 所以这里用了一个低压版的51单片机,其内部资源跟其高压版本一模一样,唯一区别是供电电压可以低至2V。
另一个重要的器件就是LED了,考虑到51单片机IO口是集电极开路门(OC门),其高电平驱动能力较弱,所以选择用IO的低电平驱动LED,因此LED选的是共阳极红蓝绿三色LED,原理图中的一个共阳极三色LED是用3个发光二极管来表示的。
电路原理图如下,P1和P0口共16个脚决定要点亮哪几个LED,P3^0,P3^1和P3^2三个脚通过控制3个三极管的通断决定要点亮这些灯中的哪一个颜色,如前文所述,这里的三极管用法也是存在同样的隐患的,大家最好还是要养成规范使用的好习惯,不要不学好,不然在做更复杂一些的东西的时候可能会出现各种不可描述的问题,搞得焦头烂额都找不出原因。LED正常发光需要10+mA的电流,综合考虑三极管饱和压降、单片机管脚内阻、以及远不足5V的VCC,经过粗略计算每个LED串联一个100欧的电阻后导通时有20个mA不到的电流,可能有些许偏大,但实际效果表明这并没有什么大碍。
帽子完整电路_1_已标注.png910x1536 147 KB
然后是晶振电路,这个没什么好说的,像原理图那么接就好。
接下来是本系统使用的第二个霍尔开关2,我认为这里有必要再上一次之前的那张图片
这个开关至关重要,每次帽子转过一圈接近底座上磁铁2时时,此霍尔开关输出一个低电平,告诉单片机这个位置是显示的起始位置,这里可以使用中断,但我是用查询法通过P3^3管脚来查询这个位置的,用中断还是用查询根据个人中意的方案来,程序的写法也因此不同。
上图中霍尔开关2下面那块黑乎乎的东西是LM1117,3.3V稳压芯片,本想用来稳压的,但是可能因为VCC实在低的可怜了,VCC与3.3V压差太小而导致该线性稳压芯片不能正常工作,在板子上已经把它跳过了,所以原理图中也没有画出来。
对于LED与电路的连接,用漆包线还是比较方便的,我这个漆包线来自以前家里电视机里面被雷劈坏的变压器的初级线圈(这么说貌似更有变废为宝的味道呵呵呵)。还有就是用排针把串口和电源引了出来供以后烧写程序用。
基本部件已经说完了,下边说一下整体组装联调,之前说了用了加长轴的电机,但是如果只是在洞洞板上打个洞是很难把帽子稳定地固定在轴上的,这个固定是一个重点,也是一个难点。经过多次的尝试和失败后,最终用了如图中那么一个东东焊接在板子上,那是小时候那种放磁带的随身听里面电动机上的铜质皮带轮,有些随身听里面那个轮是塑料的,那是要不成滴。还有一个东西可以用,那就是玩具车里电机上的那个铜的小齿轮,同样好多车里那个齿轮是塑料的,那也是不行的。注意焊的时候要把电机轴穿过洞洞板然后穿过那个小皮带轮再焊,焊的过程中要保证把洞洞板垂直于轴,这样穿起来焊可以防止小轮角度不斜、位置不偏,还能防止焊锡流进孔里致使轴穿不过小孔。
即使用了这个小轮来固定,但是帽子经常插上去再拔下来次数多了,小轮中间的孔已经变大了难以固定稳,又要想办法了。看到那个红导线上的弹簧没有,至于它的来历,我怕说出来大家笑我,它是打火机里面的那个能产生电火花的小时候经常用来电小女生然后被老师请家长的那个东东里面的上半部分里面的那个比较硬一些的那个弹簧,其实那个东东叫做压电陶瓷点火器,完全拆解以后能发现里面有两个弹簧,这是比较小比较硬比较难拆出来的那个。用它来套在电机轴上,刚刚好,剩不多也不少,套得很紧接触很牢靠,因为底座和帽子的地线是通过这个轴来连接的,所以这样一方面能够有效减小轴孔松动带来的电源纹波,另一方面也能把帽子紧紧压在轴上帽子下面的塑料齿轮上,转起来的时候不会胡乱地晃动。
这个轴与帽子的连接说的比较细,当时真是折腾了好久,因为对于纯手工制作来说,有好多看起来很简单的事确实是相当考验脑洞大小和动爪能力的。
还有一个重要问题是要保证帽子的重量分布尽量中心对称,这样才能防止转起来时偏心甩得太厉害,同样是在经过了几番折腾以后发现在洞洞板角上通过增减铜柱数量来调整是最方便也是效果最好的。
话说到这份上,已经把能看得见摸得着的东西基本都说完了,剩下的就是软件部分了,至于程序,我觉得没有什么好多说的吧,只要清楚了整个的工作原理,结合电路,代码一看应该都能明白,这并不算是多复杂的系统,我这个的代码不算字库有400来行,字库就有400多行,大部分的ROM空间是用来装这些字库的。关于字库的生成,我用的是PCtoLCD这个取模软件,非常实用方便,取模后以数组的形式存在ROM里面,按顺序把数组的值赋给P0和P1这两组IO口,就能控制16个LED按要求发光,配合合适的亮灭延时,LED转起来后就能显示出相应的文字或图案了。
此灯在显示的过程中出现的颜色以及每种颜色持续的时间都是随机的,这个随机数的生成在单片机上貌似不太好直接使用那些库函数,我这里是在每次查询到起始位置的时候取定时计数器的值作为随机数的,在晶振固定的情况下,这个值由电机转速的波动来决定,这里晶振是12M,所以定时器计数一次的时间是一个机器周期即1微秒,电机每转一周所用时间的误差用微秒级别的单位来衡量的话应该还算是蛮随机的了,在认为从定时器中取的值为随机数的前提下,把这个值经过一定的运算来决定灯的颜色以及其持续时间,in this way,每次的颜色和持续时间也都可以认为是随机的了。颜色由红蓝绿三种任意组合,共有七种,这么想的话理论上可以用它来显示一条彩虹啊hia hia hia。
其实程序、电路原理这些才是核心思想,但是并没有用很多篇幅来介绍这些部分,一方面因为这些主要是靠理解的,不太好表述出来,只是把一些比较关键的地方提了一下;另一方面,如果要真正地做出一个东西来,从花费的时间精力和成本的角度来看,就这个旋转led来说的话,其核心思想的理解、方案的制定这些东西都不是占主要部分的,而是器件选型和采购、硬件结构的搭建以及后期的软件和硬件的稳定性调试和优化花了起码80%的时间精力,尤其是调试这个环节特别重要,往近了看,只有不断调试改进才能使当前做的东西尽善尽美甚至是锦上添花;往远了看,调试和优化是一个发现问题和解决问题的过程,而这也正是我们个人能力真正得到锻炼和提高的过程。所以有了想法就应该赶紧下手,该出手时就出手哇,你有我有他都有呀……又在一本正经地胡说八道了,说着说着不装逼会死病又犯了。
事到如今,该说的都说了,是时候来个了断了,本文是一条考研狗用空闲时间写的,这也是本狗第一次这么抛头露脸地发表这种东西,没有什么经验,本以为很快能写完的,没想到开始以后根本停不下来,不知不觉已经写了这么多天,东拉西扯地说了这么多,只希望给臭味相投的童鞋们娱乐娱乐,愿以此抛砖引玉、与君共勉,若不喜欢,请轻轻地喷。
这里有视频[http://v.youku.com/v_show/id_XMTc1NjY4ODA5Mg==.html]
本想最后再来几张图让大家体会一下的,但是提示说图片不能超过10张,中间也删了几张才够数的,感兴趣的话那就看视频吧。
From Yangmeng