图四 程序框图
程序框图如图四所示,程序开始后,对程序进行初始化。向P0脚写入低电平,开启所有中断,启动计数器。当中断1来时,进入中断1,设置R0为0,调用延时程序
tiME0(延时10ms),判断R0是否等于7,若不是,则加1,继续发送数据进入循环,直至R=7,即实现的是灯慢慢变亮的一个过程。当中断0和中断1同时产生时,根据优先级,屏蔽掉中断1,开启中断0。调用延时程序TIME0(延时1分钟),查询中断0控制位;防止人体不小心到达热释电探测器的探测范围内,采用延时程序来排除干扰,防止误判。若为0,则返回主程序;若为1,则向P0高四位发送数据,使灯保持原来最亮状态,调用延时程序TIME1,判断R0是否等于0,若是则中断返回,若不是,则R0减1,继续循环,直至R0等到于0,此程序的目的是实现灯慢慢变暗。
三、实验结果:
本系统的主要设计思想来源于生活。台灯是一般家庭的生活必需品,但由于经常忘记关灯而造成巨大的能源浪费。全球这么多台灯,估算一下,消耗能源可观。另一个是作为一个必需品,当然要使生活变得更方便,省去了黑暗中开灯的麻烦,并且可以纠正坐姿。本系统在实验室进行了实物实验。热释电红外探测器1的距离是4m左右(距离可调),主要是因为般来说是门离书桌的距离;以便黑暗中时人一到门口则启动,省去了开灯的麻烦,用户可以根据自己的实际情况进行距离调节。热释电红外探测器1的距离是10cm左右(距离可调),主要考虑是当学习时,有时坐姿不正,引起身体离桌面太近,容易引起近视,此时台灯发出警告,提醒注意,若在设定的时间内未离开,则强制熄灭。有时人学习累了,趴在桌子上睡觉,而忘了关灯,这时系统就会检测到,从而启动延时程序,一段时间过后,台灯就会自动熄灭。
本系统的主要技术难点在于对人体红外信号的采集及处理。由于采用的是热释电红外传感器,当人体进入其感应范围时,传感器就会产生几mV信号,然后通过以BISS0001为中心的信号处理电路,对信号进行二次放大,并滤波,以防止外界的信号产生干扰。信号经过BISS0001后从而转化为数字信号输出,便于用单片机进处理。
本系统制作的主要设计源泉来源于生活,因此创新之处也在于处理生活中一些比较常见的问题。以专门感应人体红外信号的热释电红外传感器为基础,以BISS0001信号处理电路,利用单片机进行处理,以达到便于控制的目的。当房间亮度不够时,且有人在附近时,台灯便会自动点亮,省去了黑暗中摸开关的麻烦;当学习时由于靠桌面太近,造成坐姿不正,系统就会提示,以纠正坐姿,防止近视;当学习太累了时,趴在桌子上睡会儿时,台灯就会自动熄灭;当无人在时,系统也会使台灯自动熄灭,以达到节省能源的目的。除了硬件部分采用防干扰技术外,在软件中也采用了防干扰技术,当中断0产生时,并不立即执行,而是对其进行延时,防止由于不小心而进入到探测器2的范围内,以免产生误判。
虽然本系统以达到了使生活方便的目的,但是电路还是不够简单。因为当有多个热释电红外传感器时,就需要相应的信号检测电路。改进之处在于用一个信号处理电路同时控制多个传感器。还有一个不足之处在台灯开启时,产生的光强容易干扰光敏电阻对环境光强的判别,引起误判,现在的处理方法是传感器部分与控制部分单独分开放置。
参考文献:
1) 胡学海主编 单片机原理及应用系统设计
电子工业出版社 北京 2005年8月
2) 赵继文主编 传感器与应用电路设计 科学出版社 北京 2002年
3) 黄继昌主编 电子元器件应用手册 人民邮电出版社 北京 2004年
实验心得:
本系统的设计思想来源于生活,所以所具有的功能也是为生活的方便而设置的。因此就产生了制作智能台灯的想法。首先在与老师的商讨下,对项目进行了认证,确定了项目的可行性,列出了项目的主要难点及可能出现的问题,确定了以后的制作重点。接下来进行构思,列出大体的框架图。然后根据框架图用protel画出电路原理图。 在对电路原理图进行了严谨的认证后,便开始了焊接电路。由于主要对象是人,因此采用热释电红外传感器,此传感器是专门用于接收人体产生的10um左右的信号,相应的利用BISS0001处理其所产生的信号并转化为可处理的数字信号。在焊接的过程中发现若用到两个光敏电阻,则可能使单片机产生误判。因此将两个光敏电阻合到一块,不仅简化了电路,还提高了系统的稳定性。当信号检测及处理部分完成后,便开始试检,以确定电路焊接正确与否。在对电路进行调试的过程中,必须排除外界的干扰,尤其是附近热源的红外线干扰。首先将BISS0001设置成不可重复触发方式,比较长延迟时间,以便得到稳定的输出信号,并把接收光电池的引脚接成高电平,使BISS0001认为一直处于黑暗之中,便于观测。在运行时,当人远离时,BISS0001输出低电平,符合要求;但是在人靠近后信号出现不规则的变化。利用示波器对BISS0001的各个管脚进行测量,发现信来源的主要不稳定因于传感器,因此,在目前没有更好的更换下,只好采用目前的热释电传感器。
接下来做的是数字电路部分,主要80C51、74LS138、LM324、DAC0832组成。数字电路部分比较简单,焊接完成后,编写一个新程序,对各个端口进行扫描,从而显示数字电路是可行的。
在对电路部分进行了初步的检测后,解决了比较主要的问题;因此依据硬件编写相应的程序,经过KEIL软件
仿真后,语法上无错误,各个端口的数据正是所需要的,最后是将软件烧到单片机中,然后运行整个系统。
通过本次实验,熟悉了电路的开发和制作及论文的编著写。在实验中也遇不少难题,但通过各种方法进行了解决。
附录:
源程序:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP DET1 ;远探测器
ORG 0013H
AJMP DET0 ;近探测器
ORG 0050H
MAIN: MOV P0, #00000001B ;置初始值DET0,DET1可重复触发,灯灭
MOV TMOD, #00000010B ;方式2,8位自动重装计数器
MOV TCON, #00010000B ;开启计数器T0
MOV IE, #10000111B ;开启所有中断
SJMP $
;灯慢慢变亮
DET1: MOV P0, #00000001B
CALL TIME0 ;灯亮度延时10ms
MOV P0, #00000011B
CALL TIME0
MOV P0, #00000101B
CALL TIME0
MOV P0, #00000111B
CALL TIME0
MOV P0, #00001001B
CALL TIME0
MOV P0, #00001011B
CALL TIME0
MOV P0, #00001101B
CALL TIME0
MOV P0, #00001111B
CALL TIME1
RETI
;灯慢慢熄灭
DET0: CALL TIME1 ;延时1分钟
MOV TCON, A
ANL A, #1
JZ LOOP
MOV P0, #00001111B
CALL TIME0
MOV P0, #00001101B
CALL TIME0
MOV P0, #00001011B
CALL TIME0
MOV P0, #00001001B
CALL TIME0
MOV P0, #00000111B
CALL TIME0
MOV P0, #00000101B
CALL TIME0
MOV P0, #00000011B
CALL TIME0
MOV P0, #00000001B
RETI
LOOP: ret
;延时10ms
TIME0: SETB TR0
MOV R0, #250
MOV R1, #20
D_1: DJNZ R0, D_1
MOV R0, #250
DJNZ R1, D_1
CLR TR0
RET
;延时1分钟
TIME1: SETB TR0
MOV R0, #250
MOV R1, #200
MOV R2, #60
D_2: DJNZ R0, D_2
MOV R1, #200
DJNZ R1, D_2
MOV R2, #60
DJNZ R2, D_2
CLR TR0
RET
END
19