工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

DIY电灯遥控开关电路

作者:dolphin时间:2016-09-08

  偶尔得到一个遥控器。体形小巧,很适合挂在钥匙扣上随身携带,便决定将它利用起来。用它来控制电灯。

  一、功能构思
  
  使用单片机解码。上电默认关灯,每按一次遥控器按钮改变一次灯的状态。最好另设一个手动按钮,以便未带遥控器时开关灯。

  二、硬件部分
  
  由于用的是单片机解码,硬件部分自由度很大。首先要接收到遥控器发出的红外光信号,并将它放大,解调成脉冲信号。这个任务就交给红外接收头了。红外接收头型号繁多,外形各异。只要是解调频率是38kHz的脉冲型接收头都行。本人用的接收头型号为SFH506-38。为降低功耗,原来设想用双向可控硅作开关,后来考虑到假如用的是节能灯,可能关灯后会有灯管闪烁问题,权衡之下就用了继电器,型号是JQC-3,线圈电压l2V。单片机选AT89C2051。光耦是废手机充电器上拆的,型号为PC718。变压器次级电压12.5V,功率lW左右。其余元件见下图的标注。PCB极见中图。下图是元件安装图。

电灯遥控开关电路

  三、软件部分
  
  红外编码格式是有标准的,如常用的NEC编码,就是由前导码、机器码、数据码,重复码四部分组成。前导码包括9ms低电平和4.5ms高电平。结束码是0.56ms低电平。机器码和数据码共32位二进制数,分4个字节。前2个字节是机器码,用以区分每个遥控器。后2个字节是数据码,用于区分各个按键。为了达到校验作用数据码的2个字节互为反码。每位数据码也由一个低电平和一个高电平组成。一般规定以0.56ms低电平和0.56ms高电平表示逻辑0,0.56ms低电平和1.68ms高电平表示逻辑l。单片机解码可以采用查询方式或中断方式。

  以使用外部中断0方式为例:红外接收头收到信号后输出低电平触发中断,程序转至中断子程序。在中断程序中首先判断前导码是否正确。具体可以每X毫秒判断一次INT0口电平状态,连续判断N次(NX应该稍小于9ms)。

  只要有一次不是低电平就视为干扰信号,程序退出。若N次判断均为低电平,则程序原地踏步,等待前导码中4.5ms高电平的到来。4.5ms高电平到后也用上述方法进行多次,当然这时INT0脚应该每次都为高电平,并且多次判断的累加时间应稍小于4.5ms。如果前导码正确,接下来开始解第一位机器码。因为机器码数据“0”和“1”的区别仅是高电平的延续时间不同,所以我们等机器码的前半部分0.56ms低电平到来后先延时Y毫秒(5.6<Y<1.68)再将此时INT0口的电平送入CY位,并通过带CY位循环移位指令将解出的码移入累加器A中暂存。解出8位机器码后将累加器中数据传送到内部某个RAM单元。第二次8位解完后放入内部RAM另一单元。如此循环直至将16位机器码全部解出并分别放入内部RAM的2个单元中。解数据码的方法也和解机器码的一样。这个小遥控器的编码很特别。图5是用COOL EDIT PR02.1软件捕获的波形图。可见它没有前导码,只有3个字节的数据码。每位码由1个低电平和1个高电平组成。假设我们规定用1.5ms低电平和0.6ms高电平表示数据码0,用0.6ms低电平和1.5ms高电平表示数据码l,并按高位在左低位在右的原则分析波形后,得到此遥控器的十六进制编码是FBH、BEH、FOH。如果要用这个遥控器来控制电灯,可以预先把它的编码加载于RAM中,再将接收到的红外信号解出码后和它相比较,如果相同,说明是这个遥控器发出的指令,灯的状态就改变一次。解码的方法可以借鉴前面介绍的原理,做小小的修改即可。完整的程序如下:

  该程序初始化部分主要是开启外部中断1,并将遥控器的数据码送71H、72H、73H单元。主循环部分判断手动按钮,按钮每闭合一次灯的状态就改变一次。中断子程序先是将红外信号解码,解码后的数据存入74H、75H、75H单元,并分别和71H、72H、73H中的数据比较。如果相等则改变灯的状态。

  硬件焊接完毕,将烧写有上面程序的89C2051插入电路中,只要元件无误上电就能正常工作。



评论

技术专区