创客三级跳-制作延时启动电源
2015-08-25 08:59:28吴俊杰
把arduino当作一个电源使用吗?是不是有一些暴殄天物?但是如果从模块可重用的角度来看又何妨呢?今天它是一个智能电源,明天它也可以是一个信号发生器,总之,可以随意改换功能的可编程电路,使我们的世界能够少生产一些电子垃圾,让这个世界变得更加美好。
原理
相比于一个开关串联一个发光二极管这种控制,延时控制是一个必须要使用逻辑电路的功能,而这也就解释了我们为什么要使用程序。如何设计一个延时电源呢?s4a软件通过联机调试模式可以更方便地让我们了解到这一点。烧写s4a的固件以后,找到端口号,然后会看到图1所示的串口状态的面板,在数字13号端口插一个暖色调的一针一孔的暖色调排线作电源的正极,在12号端口插一个冷色调排线作为电池的负极,在正极和负极直接插一个发光二极管,启动程序之后,我们可以看到发光二极管延时1s后亮了。
图1 延时电源的工作原理
这是因为“digital 13 off”这个指令相当于将13号端口的电压降到跟arduino的gnd端口相当,而“digital 13 on”则将13号端口的电压升高到跟arduino的5v端口相当,那么在启动程序的时候,将13号端口和12号端口都设为gnd(负极),然后,过1s之后,将13号端口电压升为5v,此时发光二极管自然就亮了。这里需要说明的是,如果将led直接插在上图arduino板下方power处红色点所示的5v黑色点所示的gnd之间,通过这个发光二极管的电流会超过其能够承受的最大电流,发光二极管会烧毁,而现在插led的位置,由于电路板做了电流保护,直接插一个发光二极管是安全的,这就是我们为什么要制作一个延时电源的重要原因了。这种比较小的电流,已经足够用来驱动led、蜂鸣器、小型继电器、手机震动马达这些需要电流不大的设备。
此外如果不希望加延时功能,只是期望将arduino作为一个电源使用,在s4a当中还可以对11号端口和10号端口进行设置,当arduino通电时11号端口自动充当电池正极,10号端口自动充当电池负极。这样只需要将供电一方的电源换成一个手机充电器,就可以安全放心地使用这个arduino安全延时电源了。
图2添加非延时电源功能
原型
在这里面,有一个非常自然的改进需求,就是期望能够调整延时时间,最常用的是电位器,也就是我们通常所说的旋钮。电位器的原理和滑动变阻器的原理一致,旋转中间的划片,改变的是其相对于整个电阻的位置,如图3所示,电位器的两端接5v和gnd,中间接arduino的a0端口,根据通用的布线的颜色规范,选择红色、黑色和蓝色的一针一孔排线来完成电路的连接。
图3 连接电位器
旋转电位器的旋钮,我们会发现旋钮旋转到一端,a0的数值为0,另一端数值为1023,如果我们直接将a0数值设定为延时时间,我们会发现旋转到不同角度时,延时时间不同。如图4所示,最小为0s,最大为1023s。
图4 简单的延时控制
但是如果我们从实际生活的角度来看这个延时调节旋钮,会发现它不太方便使用,比如这个延时电源的主要用途有两个,给自己3min时间做一个眼保健操,和一天之后的同一时间启动电源来制造一个惊喜,那么a0数值0对应的则是180s,1023对应的是24×60×60s=86400s,这样就需要建立一个函数来描述这种对应关系了。我们用一次函数的运算公式就可以找到这个对用关系。
其中a表示a0的数值,t表示需要延时的时间,如图5所示,改进后的延时电源增加了一个变量t,在一开始的时候告诉用户延时电源将在多少秒以后启动。
图5 改进后的延时电源
如果用户希望用户体验更好,可以在软件界面当中增加询问时间范围的功能。
产品
完成了上面的调试工作,我们便可以将延时电源制作成一个比较稳定的产品了,这需要将程序下载到下位机,使用arduino的图形化编程插件ardublock可以很方便地实现这个功能,只需要将上面的算法移植到ardublock当中即可。如图6所示,使用串口监视器可以查看每次延时的时间。
图6 串口监视器查看延时时间
由于函数涉及到小数点的运算,因此设定延迟时间的变量time的类型为实数型。至此,我们就完成了一个可以随意设定延时时间的电源,在设计上,还可以给这个电源加上盒子,设计一个旋钮的面板来表示0.5h、8h等不同的延时效果,从精度上来看,这个延时电源的调节最小精度为(86400-180)/1023s,大概是1.5min的时间,但是在实际的使用过程中往往达不到这个精度,工程项目就是在不停的妥协中追求最优的结果,可能这正是我们不懈追求的动力吧。