三、方案设计
3.1 系统功能实现原理
本系统主要包含以下几个模块:
①计数模块
②光感应模块
③显示模块
④测温模块
⑤键盘模块
⑥无线遥控模块
1、计数模块
计数模块我们采用红外线感应计数器,该种计数器大体分为两种,其中一种是对射式,另一种是反射式。对射式是利用一个发射头一个接收头,中间如果有物体通过就遮挡一下光线,输出一个脉冲给计数器,计数一次;反射式是发射头和接收头做在一块成为一个红外探头,当红外探头前有物体出现就把发射头的红外线反射给接收头,探头输出一个计数脉冲给计数器,计数一次。由于对我们这个系统的应用场合对射式要比反射式计数方面要准确些,所以采用对射式。我们把红外线感应计数器的脉冲输出端直接连接在单片机的I/O口上进行计数处理,计数结果同时要在液晶屏显示器上显示一下。
红外感应器与单片机连接示意图
2.光感应模块
光感应模块我们首选的是欧恩光电技术研究所 2006 年研发的专利项目--ON9658光感应传感器。该产品采用的是CMOS工艺内置了稳压、OP 放大、红外差分等近10000门电路,还有暗电流小,低照度灵敏等等优点,在实际应用中,只需加一个下拉电阻即可。此产品适合电视机、LCD背光、数码产品、仪器仪表、工业设备等诸多领域的节能控制、自动感光、自适应控制等,同时可定位为环保产品,替代传统光敏电阻、光敏二极管、光敏三极管,符合本次大赛环保的理念。
实现原理:当光照射到光敏三极管上,光敏三极管的阻值急剧减小,利用光敏三极管On9658作为传感器串联一个7.5K的电阻,通过光敏三极管电压的变化反映因光源的照射强度在光敏三极管上的变化。把检测的电压信号通过电压跟随器电路输入Atmega128型单片机。该电路结构简单,灵敏度高且检测电压信号稳定,效果明显。
采样信号运放电路,增强信号的强度,通过电压跟随器可以增加信号电压的稳定性,后级接电压跟随器增强了电路带负载能力。
3.显示模块
设计中LCD主要作用:本次设计LCD主要作用于显示当前室内人数以及对系统操作时的操作菜单,通过显示器实现方便直观人机对话界面。
LCD显示原理:本设计采用以ST7920为驱动芯片的LCD12864字符液晶显示器。ST7920通过RS、R/W 和E的时序配合,通过DB0-DB7八位数据端口对其内部数据寄存器DR和指令寄存器IR的读写操作,通过对数据寄存器DR 的访问,可以存取DDRAM、CGRAM、CGROM 和IRAM 的值。将要显示的字型码写入到DDRAM上,ST7920将自动地按照编码从CGROM 中将要显示的字型显示到屏幕上。
LCD初始化流程:
LCD显示内容:
时间设置 人数更改设置
4.测温模块
测温模块我们首选的是DS18B20,因为该模块我们之前使用过,不仅使用方便,而且在性能上也有不错的效果。 据我们了解在传统的模拟信号远距离温度测量系统中,我们需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。另外一般监控现场的电磁环境都非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产生测量误差,影响测量精度。因此,在温度测量系统中,采用抗干扰能力强的新型数字温度传感器是解决这些问题的最有效方案,数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
DS18B20工作原理:
DS18B20测温原理如下图所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1.高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。下图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
DS18B20工作原理图
5.键盘模块
键盘是有若干个按钮做组成的开关矩阵,是单片机系统中最常用的输入设备,用户通过键盘向系统输入指令或数据,实现对系统的调节和控制。本系统采用非编码键盘,设有五个按键,为了满足系统的可靠性和灵活性,必须考虑如何消除抖动,这里我们是用软件的方法来消除抖动的。
在键盘模块的实际连接中,我们将键盘的输出引脚直接与单片机的五个I/O口相连,另一端接地。对于按键处理程序,我们采用持续查询的方法,即始终检测有无按键闭合,如有,则消除抖动,判断键号并转入相应的按键处理。五个键的定义如下:
KEY1:系统强制开关;
KEY2:模式选择;
KEY3:LCD显示计数加1;
KEY4:LCD显示计数减1;
KEY5:确定键;