新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 简单稳定地感应你——红外感应开关的创新制作

简单稳定地感应你——红外感应开关的创新制作

作者:时间:2011-02-21来源:网络收藏
酒店的厕所之旅
我们家族八辈贫农,生活在一个东北的小山村,虽然说没见过什么大场面,可是好山好水的,生活倒也不错。从小对电子制作的着迷也受到了环境的限制,很难去一趟城市,也没见过什么新奇玩意儿。话说,在我13岁的那年,老爸朋友的儿子结婚,在城里置办了酒席,请我们一家三口过去。人家的婚礼真是气派,就在铁力市中心最豪华的大酒店举行。酒店里金碧辉煌,地面光得照人,墙上贴着大大的“喜”字。年头久远,记不清更多的细节,唯有一件事让我印象深刻。菜上来了,有我最爱吃的大虾,配上大瓶的可乐,两眼一闭、大嘴一张,吃它个天翻地覆、死去活来。吃饱喝足,来到豪华酒店的厕所门前。厕所里也金碧辉煌,地面也光得照人,墙上贴着大大的“男”字。没错,就是这里了。走进去看到一排小便池,小便池并不稀奇,之前也有见过,稀奇的是小便池上面贴着标语,上写“向前一小步,文明一大步”。更稀奇的是标语的下面有一个方形的金属板,金属板中间有一个黑色方形的玻璃。我一边小便一边研究着,我发现时不时地从黑色玻璃里面会亮起一个小红灯。我把身体前后移动,小红灯也跟着闪烁。当我转身离开的时候,突然听到“哗哗”的冲水声。我马上回来看,小红灯又开始闪烁,我一走开它又冲水。难道黑色玻璃后面有人在看?我有点害羞,没敢再过去研究。来到洗手台,发现一排水龙头竟然都没有阀门开关,我拍了拍出水口,没有反应。忽然发现出水口下面也有一个黑色玻璃,我把手伸过去,水就自然地流了出来。我确定黑玻璃的后面没有人,这应该是一种感应装置,可以感应到我的手。可它到底是如何感应的呢?洗完了手,正准备出门,又发现门旁边的干手机。干手机的底部也有一片黑玻璃,当我把手放在下面时,一股暖风出现了。


这次豪华酒店的厕所之旅把我给震撼了,原来电器的开关可以这么智能,不用我们触碰到它,它就可以感应到我。我的脑子开始高速运转,想象着这项技术应用到自己家中的情景。妈妈洗菜可以不用开水龙头,家里的电灯不用出力按就可以开关,还有家里的电视机、电风扇、奶奶的收音机都可以放上这种感应开关。把它装在大门上,和门铃连接,只要有人站在门口,门铃就会响。我的小伙伴来家里找我,一定会把他们吓一跳的。想着想着,忍不住笑出声来。

从数字电路到

上了大学后,学校里有很多书店。在没有发现之前,我一直在书店的电子技术专区里徘徊。那里有好多关于电子制作的书,都是我喜爱的。我最爱看的就是电子制作500例之类的书,里面的好多制作简单又实用。某天,我突然在书中发现了红外线感应干手机的制作实例。一下把我带回到那一次难忘经历——豪华酒店的厕所之旅。我要实现我少年的梦想,我要实现这个制作。接下来的日子里,我就开始研究红外线感应干手机的原理和电路。
原来,所谓的感应开关,只是利用了人眼看不到的红外线来感应物体。感应开关的核心元器件就是红外反射传感器。红外反射传感器包括一个红外线发光二极管和一个红外线光敏二极管,它们两个都朝着一个方向,被封装在一个塑料外壳里。使用时,红外线发光二极管点亮,并发出一道人眼看不见的红外光。如果传感器的前方没有物体,那么这道红外光就以299792458m/s的速度(光速)消散在宇宙中。
但如果传感器前方有不透明的物体时,红外光就会被反射回来,会照在旁边的红外线光敏二极管上。红外线光敏二极管接收到红外光后,其输出引脚的电阻值就会产生变化。通过判断这个阻值的变化,它就可以感应到前方的物体,进而控制电器开关了。
了解了原理,又看到了书中的电路原理图后,我却产生了新的疑惑。红外线发光二极管应该和普通二极管的驱动电路一样,用红外线光敏二极管加一个三极管放大接收信号来驱动继电器不就可以了吗?为什么还要加NE555和CD4069两个芯片,把简单的事情搞复杂了呢?看了后面的文章介绍才知道,原来这样做的目的是为了防止环境光的干扰。在我们生活的环境里,处处都暗藏着红外线。太阳是最常见的红外线发光体,还有火光、灯光、红外线遥控器和一些不可预知的光源。问题来了,身边这么多红外线光源,传感器里的红外线光敏二极管怎么知道哪些光是环境里的红外光,哪些光是它邻居发出来的红外光呢?于是天才的工程师想到了调制解调的办法。他们把红外线发光二极管以某一频率进行调制,即让它以一定的频率闪烁。在红外线光敏二极管一端则设计一个电路,让接收端可以筛选出这一频率的红外光源。像收音机一样,传感器只要以自己的频率发射,再以自己的频率接收就可以过滤掉其他频率光源的干扰了。


哈哈,看过原理之后,心中暗自生起了一团烈火。然后以70km/h的速度(坐车)奔向电子市场。备齐了元器件,照着原理图制作出了实物。不得不佩服我当时的焊接水平,用了一片小小的洞洞板,把电路制作得小巧、紧凑。不过接上电源之后,问题就来了,当我把手放在感应区域时,指示灯并没有亮。后来发现,这是发射频率和接收频率不匹配导致的,因为采用的是RC电路产生频率,简单地说就是靠电容的充放电周期产生频率,所以频率很容易随温度变化而变化。电路的调试花了我许多时间,在没有示波器的帮助下,光靠反复修改电阻值和电容值的测试来达到成功是多么困难的事情呀!当同学把手放在感应区,指示灯亮起的那一刻,所有调试的困苦都转化为成就感,在同学们赞叹的话语中成几何性倍增了。
像电影一样,故事到了高潮,接下来的每一步都是坠落。同学们只看到了光彩的一面,背地里它悄悄出现的问题,都成为我们私下独处时的伤痛。在一个阳光明媚的下午,强光照进室内,感应开关受强光的影响而处在不稳定的状态,它不断地自行开关,而且对反射物体没有反应。家里常用的电视机红外线遥控器也会让感应开关失灵。即使把它放在阴暗的角落也会出现一个讨厌的问题,即当反射物就会不断地开关,继电器的吸合很快,好像一台电报机。这是因为反射物体正好处在了感应区的临界点上,也就是“感应到”和“感应不到”的分界线上,物体微微靠近或离开就会产生开关状态的改变。没有人会希望自己家的电灯像闪电、水龙头像音乐喷泉吧。这些问题加在一起,让感应开关的应用很不理想,辛辛苦苦把家里所有的电灯开关都改装成感应的,不到一个月又被爸爸改回了传统开关。慢慢的,对感应开关的兴趣就被音控开关、延时开关的制作热情所取代。几星期后,我和红外线感应开关彻底分手了。
从那之后的某一天,我开始学习。几个月前我对单片机内置的模数转换器(ADC)产生了兴趣,不断地探索它的妙用,DIS.MUSIC3炫彩音乐显示器就是利用ADC来采集音频信号的。突然有一天,我想,利用带有ADC功能的单片机可不可以取代传统的数字电路,而让红外线感应开关变得更稳定呢?在网上搜索了半天,没有找到基于单片机的红外线传感器的制作。这个情况对我来说亦好亦坏,好的是如果制作成功,这将又会是我的一项创新制作;坏的是我没有任何可以参考的资料,甚至都不能保证我的想法是否可行。我学习单片机的过程好像是一条正弦波,从基础开始学习,然后开发应用程序,再后来独立完成创新制作,到最后又回到了基础技术问题的研究。接下来的日子里,我做得最多的事是研究红外线的知识。做了N多次实验,用不同的红外线发光源来做研究,找到它们的特性和区别。之后开始研究电路制作简单、同时又具备高稳定性的红外感应开关。研究到最后,我自己都惊讶了,原来硬件电路可以如此简单,简单到没有任何多余的元器件——单片机、红外反射传感器、LED指示灯和电源。在之前的版本里,硬件电路上还需要加一条导线,但是后来我修改了程序算法,这条导线便光荣下岗了。
是的,程序算法——一种杀人于无形的利器。如果人类和动物的区别是人类具有理性和智慧的话,那么单片机与数模电路的区别就是单片机具有程序控制。单片机程序精确地处理着时间和状态,软件的强大把硬件成本降到最低,并可以零成本复制。我热爱编程,它给了我无穷的乐趣和超乎想象的创新可能。如果我是即将毕业的大学生,我会把这个创新制作写成论文,让导师喜笑颜开;如果我是专注科普的《无线电》杂志的作者,我就只能用微小的篇章简单地说一说这款制作的基本原理了。但在此之前,先让我们趁着热情未减,亲手制作一下这款基于单片机的红外感应开关,体验它的精巧构思,检验它的抗干扰能力吧。
我是在面包板上搭建的电路,电源采用的是3节5号电池所组成的4.5V直流电源。因为电路非常简单,我还特意为了面包板上的接插布局而定义了IO接口。所以我们连导线都不需要,只要把单片机、红外反射传感器和LED指示灯插在指定的孔洞里就行了。值得注意的问题有:单片机需要使用带有ADC功能的STC12C2052AD系列;烧写程序时,选择使用内部RC振荡器;红外反射传感器没有特定的型号,我使用的是RPR220,你也可以使用其他型号的产品。
在面包板搭建的实验电路上测试,有没有感觉到它的精简和稳定呢?把LED指示灯接在P1.7接口上时,它是无锁存的感应开关,即有反射物体时LED灯亮,物体离开就熄灭,适用于感应式水龙灯。把LED指示灯接在P1.6接口上时,它
是锁存感应开关,即感应开关触发1次LED灯亮,2次触发时LED灯灭,适用于感应式电灯开关。如果把LED指示灯改换成继电器,就可以用来控制其他电器了。电器可以是任何你想得到的东西,相信你和我一样,早就有过这样的梦想。现在是实现它的时候了。
除了实用的开关改装计划,红外感应开关还可以把家居生活变成科幻电影。一张可以感应你的桌子会不会震惊四座呢?普通桌子的上表面嵌着一块磨砂玻璃板,当桌面空空的时候,桌子没有什么特别。可是当我们把手、杯子或报纸放在上面时,相应的位置就会发出光来。原来,玻璃下面安装了数百个LED灯和感应装置,只要桌子感应到有东西放在上面,就会让单片机控制对应位置的LED灯点亮。变换单片机的程序还可以玩出更多的花样呢。
如果用我的这款红外感应开关是不是也可以实现这部科幻作品呢?在撰写本文的时候,我也同时在研究这项技术,希望可以用我们常用的单片机来实现,如果真能实现,我再另写文章与各位分享。那桌子、那感应式电灯都将成为你的作品、你的精心之作。

关键问题与解决之道


从年少时厕所里红外感应开关初体验,到传统电路制作的原理及问题,再到用单片机实现更稳定的感应开关设计,直至感应开关在电器开关和感应桌面上的应用。红外感应开关已经逐渐从厕所走向了客厅,从复杂走向了精简,从波动走向了稳定。那么有谁想知道单片机是怎么做到稳定感应的呢?其中的奥秘又是什么呢?这里就把一些技术实现的基本原理与诸位分享。如果你有更好的方案和改进意见,或者你是这方面资深的专家,欢迎各路英豪与我交流。闲话少说,小弟这里献丑了哈!

1.如何去除环境光的干扰?

与之前的调制解调的方式不同,在使用ADC功能之后,另一种解决方案会让测试更有效率。那就是使用双重检测方法。前提条件是,单片机可以控制红外发光二极管的开关。首先,要使用ADC功能读出接在ADC接口上电压的模拟量,数值从0到255(十进制)。红外光敏二极管接收的红外光线强时,ADC读出的数值就大,反之就小。我们要做的就是,控制红外发光二极管在发光时读一次ADC的数值,然后再让红外发光二极管熄灭,再读一次ADC的数值。我们先假设没有其他红外光源的干扰,当红外发光二极管熄灭时,红外光敏二极管应该检测不到光源,ADC读出的数值也应该为0;当红外发光二极管点亮,且没有反射物体时,ADC读出的值也应该很小,接近于为0;当有反射物体时,红外光敏二极管检测到光源,ADC读出的数值会变大。如果存在其他光源的干扰,那么当红外发光二极管熄灭时,也会读到较大的数值。双重检测读出的数值的差距越大,表示干扰光源越弱,反之则越强。我们通过这种双重检测,就可以判断接收到的红外光是不是发射端发出来的了,两次检测的数值之差就是我们需要的最终数值。最终数值将参与下面的算法处理,也是我们判断和处理的关键数据。单片机需要控制红外发光二极管高速开关,以便更快地采集数据。

最终数值=红外发光二极管点亮时ADC读出的数值-红外发光二极管熄灭时ADC读出的数值

2.如何解决临界点的感应波动问题?

微微向前一点就触发,微微向后一点就关断,这是临界点问题的困扰。问题的根源在于,触发的临界点和关断的临界点是同一个距离。只要在基于单片机系统中把这两个临界点分开,这个问题就可迎刃而解。我们知道,单片机需要处理的数据是“最终数值”,它是红外发光二极管开、关状态时ADC读出的数值之差。最终数值也是一个从0到255之间不断变化的变量。反射物理离传感器越近,“最终数值”就越大。如果我们在程序里设置,当“最终数值”大于某一值时(例如200)就触发开关,小于这一值时就关断开关,那么这样编程的效果就是单一临界点的不稳定开关。单片机既然都可以模仿不稳定的开关,自然也很容易创造稳定的开关了!只要写一下程序的设置就可以很轻松地让它变得稳定。双临界点的设计只需要两个数值的条件判断:当“最终数值”大于某一值时(例如200)就触发开关,当“最终数值”小于另一个数值时(例如150)就关断开关。这样一来,在150和200之间就会创建一块中间区域。当反射物理在这个区域前后移动时,开关仍保持其原来的状态,或判断、或触发。这种双临界点的设计,其实是给反射物体一个活动空间,对反射物体的稳定性要求降低了,系统状态就自然稳定了下来。在实际调试过程中,可以根据应用的需要修改双临界点的两个数值。比如做自动水龙头时,手的移动范围较大,所以应该留出较大的活动区域。如果是做自动寻迹小车的传感器,则可以用较小的活动区域,甚至改用单临界点来实现。双临界点的设计是有启发性的,你可以利用此设计来做更多的事情,或者用在其他传感器的稳定性设计之中。

3.如何增加感应的成功率和可靠性?

“最终数值”处理和双临界点设计都可以增加系统的稳定性。在多次数据采集中,出现几次失败和误差是很正常的事情。但如果这些误差左右了开关的状态,那么这种失败又由谁来负责呢?我写的文章错别字很多,杂志社的编辑老师都说我无药可救了。当你看到本文时,你要知道一件事,那就是已经有好几位编辑老师瞪大眼睛帮我改掉了文中的错别字。最后大家看到的才是精美而通顺的文章。在感谢编辑老师的同时,我也要为我们的红外感应开关配备几位“编辑老师”,给采集到的数据把关。一旦出现错误,就放弃当前的数据,重新采集,这种设计其实就是一种冗余。我在程序中设计了一段循环检测语句,连续20次检测和判断采集到的数据,如果20次中有1次误差就马上放弃当前的所有数据,重新检测。连续20次检测已经算是很稳定的了,当然你也可以为了更稳定而改用连续50次、100次的检测,但是系统的反应速度会变慢,灵敏度也会下降。灵敏度和稳定度之间的矛盾是刚性的,在实际测试中找到适合目标系统的检测次数就可以了。“最终数值”、双临界点和20次连续检测听上去好像是很复杂的事情,可是在程序里只是很简单的几条语句。设计的重点不在于程序的复杂性,而是整个系统的设计思路。下面列出一段关键程序部分与大家分享,这个简单的程序包含了上述的3种抗干扰设计。

4.如何增大感应距离?

经过实验证明,基于单片机的红外传感器的感应距离和单片机的ADC精度、双临界点数值、红外发光二极管的功率、红外光敏二极管的灵敏度,均和反射物理的反光效果有关,一般的感应距离不会超过20cm。不过,对于开关感应开关的设计已经足够了。要想增加感应距离,可以对以下几方面进行改进。只是,更远的感应距离反而会让系统产生许多
RAM_H=Read_ADC;//读出LED亮时ADC端口的值
RAM_L=Read_ADC;//读出LED灭时ADC端口的值
RAM_H=RAM_H-RAM_L;//取2次检测值之差,避开环境光干扰if(RAM_H>0x06){//开启时的距离(应该小于关闭时的距离)CON++;//计数加1
CON2=0;
if(CON>20){//连续20次检测,以避开干扰
CON=0;
LED_Y=0;//LED指示灯点亮
}
}
if(RAM_H0x03){//关闭时的距离
CON2++;CON=0;if(CON2>20){CON2=0;
LED_Y=1;//LED指示灯熄灭
}
}
“最终数值”、双临界点和20次连续检测的程序部分

不确定因素,效果反而不佳。如果在某些特殊情况还需要更远的传送距离,我们就要用新的软硬件方案来应对了。
☆提高ADC精度,例如将8位ADC换成10位或12位ADC。
☆将双临界点的数值设置得更小。
☆用LED驱动电路提高红外发光二极管的功率(即提高亮度)。
☆为红外光敏二极管一端加装信号放大电路。
☆尽量使用反光效果好的反射物体(如白纸、镜面)。

5.如何进一步提升抗干扰能力?

最后一个问题,是同频环境光的干扰。在我的实验中,还没有出现过这样的问题,它只存在于理论推理中。但这种干扰的可能性并不为0,所以有必须说明一下。所谓的同频干扰,就是假设红外感应开关的周围正好存在这么一个红外光源,它也按一定的频率点亮和熄灭,而这一频率正好和红外感应开关中红外发光二极管的亮、灭频率一致,且周期相同。这种巧合并不只是彩票头奖的幸运观众才能遇见的,当多个红外感应开关在较近的距离内同时使用时,问题就自然会出现。如果它们之间的距离不能改变,那就只有用跳频的方法来解决了。跳频技术在移动电话和无绳电话机上已经成为必备的功能,为了防止窃听或当某一频道被占用时,电话机会自动切换到别的频道,让通信更稳定、可靠。对于红外感应开关来说,跳频并没有那么复杂,只要在程序中不断改变红外发光二极管的亮、灭时间,用不同的频率去检测,其他干扰光源也以相同频率跳变的机会就少之又少了,再加上前面介绍的20次连续检测功能,再遇见干扰的可能性就几乎为0了。
增加以上5项功能,系统的稳定性达到了巅峰,而如此稳定的设计却丝毫没有改变硬件制作。仍然是那几种元器件,稳定与否全看程序的设计。单片机就是这么神奇,创造优良性能于无形之中,带你体验精简设计的内在之力。


更远距离的对射传感器方案

还有一种情况,是应用上的需要。如果使用红外感应开关来制作赛跑的电子终点线,将红外发射管和接收管分别安装在跑道的两端会是更好的解决方案。平时终点线上没有障碍物,发射的红外信号轻松地被接收。当有人通过终点线时,人的身体挡住了红外光的路线,接收端收不到信号而触发开关,完成比赛的计时。同样的设计还可以用作防盗报警器。这种对射式的传感器需要很远的传送距离,一般需要2~5m。如果是这种应用,就需要改变软硬件方案,38kHz调制红外线不是很好的解决方案。利用单片机产生38kHz的调制红外线信号,接收端使用具有集信号解调、放大和输出于一体的红外传感器TSOP1838。电路设计同样精简,而对射有效距离可以达到7~10m。相关的技术正在被我研究着,这里算是抛砖引玉,希望给正在研究此技术的朋友一点帮助。发挥你的才能,把这项技术运用到生活之中。制作自动干手机、感应水龙头、感应电灯开关、智能寻迹小车、防盗报警器、感应桌面、比赛计时器等。基于单片机的红外感应开关将成为你电子竞赛、产品设计、趣味DIY的必备佳品。这就是红外感应开关的创新制作,可以简单稳定地感应你。





红外遥控器相关文章:红外遥控器原理

万能遥控器相关文章:万能遥控器代码


手机电池相关文章:手机电池修复


51单片机相关文章:51单片机教程


模数转换器相关文章:模数转换器工作原理


燃气报警器相关文章:燃气报警器原理


评论


相关推荐

技术专区

关闭