豪华酒店的厕所之旅
我们家族八辈贫农,生活在一个东北的小山村,虽然说 没见过什么大场面,可是好山好水的,生活倒也不错。从小 对电子制作的着迷也受到了环境的限制,很难去一趟城市, 也没见过什么新奇玩意儿。话说,在我 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_H < 0x03){ //关闭时的距离
CON2++; CON = 0; if(CON2 > 20){ CON2 = 0;
LED_Y = 1; //LED指示灯熄灭
}
}
“最终数值”、双临界点和20次连续检测的程序部分
不确定因素,效果反而不佳。如果在某些特殊情况还需要更 远的传送距离,我们就要用新的软硬件方案来应对了。
☆ 提 高 A D C 精 度 , 例 如 将 8 位 A D C 换 成 1 0 位 或 1 2 位ADC。
☆将双临界点的数值设置得更小。
☆用 LED 驱动电路提高红外发光二极管的功率(即提高 亮度)。
☆为红外光敏二极管一端加装信号放大电路。
☆尽量使用反光效果好的反射物体(如白纸、镜面)。
5. 如何进一步提升抗干扰能力?
最后一个问题,是同频环境光的干扰。在我的实验中, 还没有出现过这样的问题,它只存在于理论推理中。但这种 干扰的可能性并不为0,所以有必须说明一下。所谓的同频 干扰,就是假设红外感应开关的周围正好存在这么一个红外 光源,它也按一定的频率点亮和熄灭,而这一频率正好和红 外感应开关中红外发光二极管的亮、灭频率一致,且周期相 同。这种巧合并不只是彩票头奖的幸运观众才能遇见的,当 多个红外感应开关在较近的距离内同时使用时,问题就自然 会出现。如果它们之间的距离不能改变,那就只有用跳频的 方法来解决了。跳频技术在移动电话和无绳电话机上已经成 为必备的功能,为了防止窃听或当某一频道被占用时,电话 机会自动切换到别的频道,让通信更稳定、可靠。对于红外 感应开关来说,跳频并没有那么复杂,只要在程序中不断改变红外发光二极管的亮、灭时间,用不同的频率去检测,其他干扰光源也以相同频率跳变的机会就少之又少了,再加上 前面介绍的20次连续检测功能,再遇见干扰的可能性就几乎 为0 了。
增加以上5项功能,系统的稳定性达到了巅峰,而如此 稳定的设计却丝毫没有改变硬件制作。仍然是那几种元器件,稳定与否全看程序的设计。单片机就是这么神奇,创造 优良性能于无形之中,带你体验精简设计的内在之力。
更远距离的对射传感器方案
还有一种情况,是应用上的需要。如果使用红外感应 开关来制作赛跑的电子终点线,将红外发射管和接收管分别 安装在跑道的两端会是更好的解决方案。平时终点线上没有 障碍物,发射的红外信号轻松地被接收。当有人通过终点线 时,人的身体挡住了红外光的路线,接收端收不到信号而 触发开关,完成比赛的计时。同样的设计还可以用作防盗报 警器。这种对射式的传感器需要很远的传送距离,一般需要2~5m。如果是这种应用,就需要改变软硬件方案,38kHz调 制红外线不是很好的解决方案。利用单片机产生38kHz的调制红外线信号,接收端使用具有集信号解调、放大和输出于 一体的红外传感器TSOP1838。电路设计同样精简,而对射 有效距离可以达到7~10m。相关的技术正在被我研究着,这 里算是抛砖引玉,希望给正在研究此技术的朋友一点帮助。 发挥你的才能,把这项技术运用到生活之中。制作自动 干手机、感应水龙头、感应电灯开关、智能寻迹小车、防盗 报警器、感应桌面、比赛计时器等。基于单片机的红外感应 开关将成为你电子竞赛、产品设计、趣味DIY的必备佳品。这就是红外感应开关的创新制作,可以简单稳定地感应你。