单片机小制作,感温彩虹杯垫
有一位波兰爱好者制作了一款感温LED杯垫,如图8.1所示。这款杯垫可以感知杯中的饮料温度,并根据温度驱动板上的LED,发出暖色或冷色的光芒。这个设计创意得到了很多电子爱好者的关注。但是笔者个人认为,原版的设计存在一些可以改进的地方。比如,由于温度测定不需要精确,温度传感器不必使用独立芯片,片内二极管测温即可。另外,原设计中的LED采用并联结构,不能够独立控制颜色,尚有改进余地,于是我设计了这一款改进型的感温彩虹杯垫。
图8.1 波兰爱好者制作的感温杯垫
元件选择
为尽可能减少元件数量,我使用一片ATTINY24单片机,同时完成温度测量以及LED灯的控制。为了减少LED驱动所需元件以及简化布线,LED采用了ST505042。这款LED内置有ST313控制器,可以用串行双极性信号直接驱动,并可直接串联,减小了PCB绘制的难度。此外,由于这款控制器是采用恒流驱动方式,所以不会有闪烁的问题,同时也可以在3~5V下的任一电压处工作良好,不会出现因为电阻限流发生电压改变时出现的偏色问题。因此,无论是干电池、锂电池,还是5V或3.3V电源,都可以使电路良好工作。
设计原理
这个制作的电路结构比较简单,电路原理图如图8.2所示,PCB图如图8.3所示。设计时,为避免电源反接导致电路烧毁,在电源路径上串联了1个肖特基二极管。之后,使用去耦电容来滤除电源上的干扰。
图8.2 彩虹杯垫电路原理图
图8.3 彩虹杯垫PCB图
电路使用单片机内部的PN结测温,通过软件即可读到温度值。单片机使用一个I/O口连接到两个阻值相同的分压电阻,这样当I/O口输出电平时,两个电阻的中点电平为高/低电平,而当I/O口转为高阻状态时,电阻中点电平即可输出1/2VCC,由此可以生成驱动LED所需的双极性信号。
LED内置的ST313控制器使用1.2MHz以下的信号来传输信息,用1/2VCC后接低电平表示逻辑0,用1/2VCC后接高电平表示逻辑1,以此来表达每个LED所需的18bit颜色信号。当数据线闲置60µs以上时,ST313将移位寄存器中的数据锁存至LED的电流控制器中,以改变LED的颜色。由于我们的连线距离很短,所以不用考虑电磁干扰对于数据正确性的影响。但当长距离传输时,由于有1/2VCC的存在,可能会导致LED颜色出现混乱,需要采取措施减少干扰的影响。将LED串行连接,在第1个LED上接入单片机信号,就可以根据单片机输出的电平信号单独控制任何一个LED的RGB颜色了。
编程调试
为了对单片机进行编程,一般使用ISP(在线编程)功能进行程序下载。可是这一功能通常需要6条线,至少也需要除电源线外的4条线。这对于自行制作的单面电路板布线是有一定难度的,而且会部分破坏电路的美观。一种解决方式是使用单片机烧写座进行编程,这种方法的缺点是烧写座价格不菲,而且芯片焊接后较难再次编程。
我采用的解决方案是使用AVR的单线调试功能(debugWIRE)实现程序修改。DebugWIRE是使用单线双向接口的片上调试系统,除电源线外,仅需要1条线就可以实现程序的修改和调试。但是为开启debugWIRE功能,仍然需要焊接飞线来修改芯片的熔丝位。设置熔丝位完成后,即可撤除飞线,仅使用复位线这1条线来控制芯片的程序。这种方式唯一的要求是需要一个原厂的调试工具,如AVR Dragon或MKII。之后就可以在AVR Studio中直接仿真程序,并按需要插入断点,实时查看各变量的值,以调试程序的正确性。
需要注意的是,每次断点的使用都将减少Flash的寿命,所以最好不要用同一块芯片调试过多的程序,但调试完直接使用是没有什么问题的。正常结束调试后,芯片不会在上电时执行程序,在调试运行时拔掉调试线,即可让程序正常运行。使用debugWIRE时,复位线上不要有其他元件。不过,debugWIRE会略微增加休眠功耗,故对功耗要求高的应用最后要将其关闭。
温度标定
使用单片机测定温度时,需要考虑传感器的误差。由于单片机测温是使用片上二极管测温,所以误差比较大。在不经标定的情况下,可能只有±10℃的精度,所以需要使用标定方法来提高精度。对于电子测量来说,我们是用电信号来表达另一个物理量,也就是用电压来表示温度,并用ADC来转换为数字量。因此,我们需要电压与温度的函数关系,才能够用电压值来反推温度值。显然,我们需要知道单片机测量到的真实温度。我们可以用一个较高精度的温度计来获得温度值,市售的玻璃水银温度计、指针温度计或远程温度计均可,也可使用万用表附赠的热电偶,或者是经过激光标定的传感器,比如18B20。如果Geek精神够足,使用冰水混合物等非主流方法亦可。
得知温度后,接下来就是建立电压与温度的函数关系。由于我们最终要由ADC转换为数字量,所以数字量输出和温度的函数关系也是等价的。理想的情况下,我们要取到尽可能多的温度点,使任何一个输出值都被覆盖到,使用查找表即可用输出值反推温度值。但是,这么多温度点的覆盖往往是不现实的,我们只能采集有限个数据点,并拟合出函数曲线。一般来说,函数的次数要低于采样的数据点数,可以使用最小二乘法来拟合曲线。如果只需要结果,excel就能做到这一点。另外,如果想知道穿过所有点曲线的形状,可以尝试使用拉格朗日插值法来获得函数。一般工程上,采用等距离采集多个数据点,然后分段直线拟合就能得到比较不错的效果。
这个制作由于对精度要求不高,而且追求简单,我们假设数字量输出和温度的函数关系是线性的,而且每1℃的变化对应数字输出量变化1。我们只需要1个点就能确定函数的位置。当然,这一点处于待测区间之中会使精度高一些。在这种情况下,只要把待测点的输出值和标定点的输出值求差,并把这个差加到标定点的真实温度值上,就可以求到待测点的真实温度值。虽然精度仍然不高,但对于这个制作绰绰有余。
另外,传感器测定出的温度值可能会有少许的抖动,这会导致系统在临界温度上在两种模式间来回切换。所以,在温度的判定上,我采用了滞回算法,即在温度上升到40℃时切换到高温模式,而下降到35℃才能切换回普通模式。低温也应用类似算法。这样,系统不会被传感器的抖动所干扰,工作较为稳定。
制作方法
为组装整个杯垫,需要将PCB裁为六边形,并裁取一块与之形状一致的有机玻璃板,可以在确定切割线后用钢尺辅助,以钩刀划开。之后,在有机玻璃板中央钻孔,但要注意钻头速度不能太快,进刀量不要太大,以避免温度过高,导致孔边缘熔化。在有机玻璃板中央钻孔。如果有机玻璃板上出现了划伤,可以用热风枪加热损伤部分,有机玻璃的小划痕会在高温下消失。之后在PCB上打上热熔胶,将有机玻璃板粘接在PCB上。最后将导热胶从有机玻璃板开孔处注入,将开口的上表面和单片机连接成一体。这样单片机就可以测量到杯垫表面的温度了。制作出来的实物如图8.4所示。至此,将杯垫连接上电源,整个杯垫就会点亮,发出彩色的光芒,如图8.5所示,并可以根据杯垫上饮料的温度,变换出不同的颜色了。
图8.4 制作出的杯垫实物
图8.5 发光效果
单片机小制作,七彩“魔法瓶”
一看题图,你可能会想,不就是一个普通的玻璃瓶吗?但是这个瓶子的功能却不简单,瓶子会感知周围光线的强度而改变内部的LED流动花式。当你的手背着光源的位置向前靠近时,口里再喃喃几句“魔法咒语”,神奇的现象出现了,本来的花式突然改变了,时而变蓝,时而变红。当你的手继续靠近时,然后可以关灯,这时瓶子闪烁得更加耀眼,更加激烈了,哇,太神奇了,竟然可以“隔空控制”!如果将此作品放在家里客厅或宿舍,一定会吸引很多客人或同学的眼球,而且可以活跃气氛。
“七彩魔法瓶”的奥秘是运用光敏电阻探测出周围光线的强弱,再根据光度由强到弱分成8个区间,每个区间都有一种不同的LED流动花式,第一个区间(也即是光照最强时)“魔瓶”不断显示红、绿、蓝的颜色;第二到第四个区间分别是显示由红色、绿色和蓝色的3种不同颜色的不同显示主题,不同的颜色能改变人的心情,因此随着主题的改变,心情也改变了;第五个区间(光照较暗时)瓶子会逐渐变化出类似彩虹的七彩颜色,因为红、绿、蓝三原色进行不同的组合就会得到不同的颜色;第六个区间是我们熟悉的流水灯,先由前排逐个流动,然后后排逐个流动;第七个区间是我最喜欢的,先逐渐显示单数和双数排的LED灯,同时,在瓶子内部的黄色和绿色草帽高亮LED灯交替亮起,发射出的光线经过洞洞板和玻璃瓶透射出来,显得特别好看;最后一个区间是光照最暗的时候,内部的高亮LED都亮起,同时左右排的LED灯交替亮,之后全部闪烁,达到最激烈的程度。相信在场观众的心情此时会达到高潮,很有创意吧,下面让我们一起来制作!
电路原理
所需器件列表:
◆ 20脚的STC12C2052AD单片机1个(或者选用同类有AD功能的单片机)
◆红、绿、蓝贴片LED各4个
◆绿色和黄色的高亮草帽LED各1个
◆ 470Ω贴片电阻6个
◆ 1kΩ贴片电阻2个
◆ 10kΩ贴片电阻1个
◆光敏电阻1个
◆ 7.5cm×7cm的玻纤洞洞板1块(玻纤板透光效果好)
◆排针若干
◆瓶口大小合适的空玻璃瓶子1个
01 用裁刀把7.5cm×7cm的玻纤洞洞板裁成3块的2.5cm×7cm大小的形状,玻纤板有一种半透明感,能把内部的光更好地透射出来,显示的效果更加美观。当然,如果材料有限也可以用其他的洞洞板,只不过效果没那么酷罢了。
02 然后在其中的一块洞洞板背面分别焊接上贴片LED和470Ω的贴片电阻,此作品要求越小越好,因此元器件都选用了贴片封装以减小体积,LED从左往右的排列为红、绿、蓝、红、绿、蓝(对应单片机的P3.0~P3.5引脚)。为了显示出七彩的效果,一定要按照红、绿、蓝的排列顺序,这三原色能组合出多种不同的颜色。注意要在中间间隔两个焊盘的位置,因为这块板子是放在左边的位置,也就是单片机P3组引脚的一边,为了更好地方便后面的对应焊接,中间跳过晶体振荡器引脚部分而焊接,焊接完成后如图所示。
03 在另一块板子,如图所示,连续焊接上贴片LED和470Ω的贴片电阻,此处6个LED灯对应P1.2~P1.7引脚,LED灯按照电路图所示的蓝、绿、红、蓝、绿、红的顺序排列。注意上面两块板子要对应好单片机的引脚位置。
04 分别剪出10针和7针的排针,并且用钳子把其弯曲成120°,如图所示,然后分别焊接在上面两块板子上,10针的对应电路图的左边,7针的对应电路图的右边。注意,要对应好LED灯位置,多出来的排针用于电源之间的连接。
05 在剩下的一块板子上焊接20脚的IC插座,然后把黄、绿两个高亮草帽LED灯的顶部弯曲成90°,如图所示,分别摆放在两端位置,黄、绿两个LED灯的顺序根据个人喜好摆放。
06 在背面焊接上光敏电阻的10kΩ贴片上拉电阻和两个高亮LED的1kΩ限流电阻,焊接完成后如图所示。
07 把左边部分的板子引出的排针对应好单片机的左边引脚位置,一一对应,注意板子背面朝外,大约弯曲成60°,然后用焊锡焊接固定好。
08 再把另一边的板子也按照上一步骤焊接上,也要注意排针对应好单片机的引脚位置,并且把光敏电阻从左边板子穿插进电路板内部,把光敏电阻的两端分别连接在单片机P1.0口和电源负极,这部分完成后如图所示。于是,一个由洞洞板组成的小型“金字塔”就制作完成了。
09 用一条大约1m长的两排排线把电源正、负极引出来,如图所示。你也可以多加两条排线把单片机的两个数据口引出来,方便程序的更新,由于我之前已经调试好了程序,因此在这里没有把数据线引出来。
10 接上电源,用手电筒在较暗的地方不断靠近光敏电阻,看看LED灯的花式显示结果是否如自己编写的程序一致,如图所示。
11 调试好程序后,就可以把它放进一个空玻璃瓶子里了,在底面板子的两端边上粘贴上双面胶,然后用镊子轻轻放进瓶子内部,在适合的位置上粘上去固定好,作品就可以宣布完成了,如图所示。电子爱好者也要加强环保意识,尽量利用废弃的物品来完成我们的电子制作,减少垃圾量,做到以废变新,这是一个不错的主意吧!而且LED灯发出的光在玻璃瓶的内壁折射又反射,显示出来的效果会比想象中要好多了!
12 插上电源,把“魔法瓶”放进较暗的地方,立即会显示出更加灿烂的炫彩闪耀效果,你一定会喜欢的。
程序部分说明
本作品最主要的部分是利用STC单片机内部的A/D转换功能,读取光敏电阻的阻值变化,进而控制LED灯的流动花式。STC12C2052AD内部置有8位AD转换功能,读取到的数为0~255的数值,然后把读到的数值分为几个范围区间,每个区间分别显示不同的LED流动花式。这里要注意的是,编写不同范围程序时,不能直接写成如“if(4040)&&(m<=60))”。
相关问答
从零制作 单片机 需要哪些知识?从零开始我先认为是所有方面都是零基础了。我来说说需要哪些知识点和学习的步骤吧。首先既然是玩单片机,那肯定是需要编程的,所以需要C语言的知识,其次玩电子...
如何组装制作 单片机 !?,制作 单片机 有折扣吗??[回答]用单片机控制最简单易操作,自动控制器也可以自己制作,用中间继电器和交流接触器就可以了。服务热情,公司环境设备先进,价格合理品控做的不错,据说...
诸位同志急需!如何制作 单片机 零件如何制作 单片机 diy控制动作...[回答]感觉还可以,研发团队与销售团队在无锡单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完...
学 单片机 要会焊电路板吗?是的。会单片机编程而不会焊接电路板,就相当于厨师只会炒菜不会洗菜、切菜那怎么能行呢?除了要学会焊接大的插件,还要能焊接尺寸很小的器件,例如0402的电...
自己制作的 单片机 能卖吗?自己制作的单片机当然能卖。单片机是一种片上系统,既然是一个系统,那就说明不是一个人能完成的事,姑且不上片上系统的设计,光说单片机设计好后投产的问题,...
如何用 单片机 制作射频读卡器?当然先去了解射频读卡器芯片的所有资料,再去做.不过,还是去买一个现成的方案吧.芯片+电路图+测试程序都有,在此基础上再自己做.不贵几百元.我以前一个...
触摸屏与 单片机 232通讯线怎么制作?根据提问者的意思,触摸屏与单片机232通讯线该如何制作?首先确认触摸屏是否具有RS232通讯接口,接线时,触摸屏的RX接单片机的TX,触摸屏的TX接单片机的RX,GND...根...
单片机 制作,P2口接键盘,P1.0输出,如图,为什么接上蜂鸣器一直...1.确定单片机工作~检查复位电路:复位按键按下测量9(RES)脚是否置高(不按为低)~晶振电路是否连接正确,正确则最小系统正常。2.若最小系统正常,确定程序是否烧录...
电气工程及其自动化学好 单片机 和PCB板制作有什..._电气工程...电气工程及其自动化学中,单片机和PCB板制作具有以下作用:1.单片机是电气自动化控制系统中的核心部件,掌握单片机编程和应用可以实现电气控制系统的...
多功能电脑时钟程序设计(C++ 单片机 程序) - yixieren2 的回答...采用at89c2051兼容芯片制作六位数显多2113路定时电子钟电路特点这里介5261绍的4102电子钟,电路可称得上极简1653,它仅使用单片的20引脚单片机完成电...