基于单片机技术的红外感应控制开关创新制作

作者 杜洋 来源 《无线电》杂志
发布时间 2010-12-17

关键问题与解决之道

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

基于单片机技术的红外感应控制开关创新制作

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的必备佳品。这就是红外感应开关的创新制作,可以简单稳定地感应你。

基于单片机技术的红外感应控制开关创新制作

上一页123
电子爱好者 DIANZIAIHAOZHE.COM