胡 芳
江苏联合职业技术学院无锡机电分院 江苏无锡 214000
在手机、电话与计算机这些简单快捷的通信工具遍布全球的今天,大多数家庭依旧设置信报箱。对信报箱的使用,存在两种截然不同的态度。一种是以老年人居多,可能正好在等信或者等报纸,盼望心切,一天可能会开几次信报箱;与此相反,另一种是以年轻人居多,不订报纸,也不写信,觉得不会有信,就从来不开信报箱,然而可能哪天恰恰来一封通知,就会错过。因此,如果在信报箱内装一个系统,在书信或者报纸投入信报箱后,自动向信报箱主人的手机发送短信,提醒主人来取信报,这样可以减少无效开箱的次数,并提醒主人及时开箱取信。
随着科技的发展,能给特定的手机打电话、发短信或者远程监控的智能家居已经越来越多,将智能化应用到生活中是发展趋势[1]。
信报箱提示系统主要应用在独立用户的一对一通信情况下,目前全球移动通信系统(GSM)是应用最广泛、覆盖面最广、稳定性最高的通信系统,因此选择GSM作为通信媒介,来发送报信的短消息[2]。
根据用途要求,信报箱提示系统的工作流程如图1所示。
信报箱提示系统的硬件设计框图如图2所示,系统由传感器、控制芯片、通信模块、电源模块和显示模块等组成。
在信报箱底部最里侧放置一个传感器,此传感器一直处于开启状态,当感应到信报箱中有信件或报纸时,发出信号至控制芯片。传感器的感应范围应该是比较小的,最大感应值应能够调节为传感器位置至信箱门这段距离,否则传感器会因感应到信箱门外的无关动作而发出错误信号。
根据以上要求,笔者选择了感应范围为2~50 c m的漫反射光电开关传感器。
图1 信报箱提示系统工作流程
图2 信报箱提示系统硬件设计框图
这一传感器型号为E18-D80 NK[3],是一种集发射与接收于一体的光电传感器,检测距离在3~80 c m之间可调,为PNP常开型,响应时间短于2 ms,电源为5 V,输出端外加一个1 kΩ阻值的上拉电阻就可以连接到单片机的输入输出口上。当控制芯片判断端口有低电平时,延时10 ms,再次判断以避免有干扰信号。当判断结果还是低电平时,系统开始响应。
信报箱提示系统对控制芯片的性能要求不高,只要求能接收传感器信号,并输出信号使通信模块发送短消息,并且能接收信报箱主人所回发的关闭系统信号。很多信号控制芯片都能够实现这些功能,在满足系统要求的前提下,出于成本及节能考虑,采用基础入门级且应用最广的51单片机作为系统控制芯片,型号确定为AT89C51。
AT89C51单片机是一款低电压、高性能互补金属氧化物半导体(CMOS)8位单片机,内含4 KB可擦除只读存储器[4],器件采用AT MEL公司的高密度、非易失性存储技术制造,具备标准MCS-51指令系统及引脚结构。
信报箱提示系统要实现向信报箱主人发送提示短信的功能,就离不开通信模块。笔者选择GSM套件M590E和SI MCo m公司的SI M800C模块,作为系统通信模块。SI M800C模块不仅价格便宜,而且支持GSM标准和AT指令控制,工作频率有多种选择,性能稳定,尺寸为17.6 mm×15.7 mm×2.3 mm,体积小巧,满足系统设计要求[5]。
控制芯片通过串口方式与SI M800C模块进行通信。晶振时钟频率为11.059 2 MHz,传递速率可配置成9 600 Baud,和通信模块的通信误差比较小,几乎可以忽略。串口配置为9 600 Baud,无校验位,有8位数据位、1位停止位。相关寄存器配置如下[6]:
ACC=P_SW1;
ACC&= ~(S1_S0|S1_S1); ∥S1_S0=1 S1_S1=0
ACC|=S1_S0; ∥(P3.6/Rx D_2,P3.7/Tx D_2)
P_SW1= ACC;
SCON=0x50; ∥8位可变传输速率
T2L=(65536-(FOSC/4/BAUD)); ∥设置传输速率重装值
T2 H =(65536-(FOSC/4/BAUD))≫8;
AUXR=0x14; ∥T2为1T模式,并启动定时器2
AUXR|=0x01; ∥选择定时器2为串口1的传输速率发生器
利用SI M800C模块和M590E套件,在加载用户标志模块卡后,就可实现短消息提醒信报箱主人的功能。
AT89C51单片机的电源为3.8 V[7],通信模块的电压输入端范围为3.4~4.4 V[4],传感器的电源为5 V,因此选择5 V直流电源直接为传感器供电。考虑到3.8 V也在通信模块电压可选范围内,因此同时经过贴片式熔体、稳压芯片及钽电容滤波后为AT89C51芯片和通信模块供电[8]。为了方便使用,同时考虑到体积因素,选择可充电式大容量锂电池,配备充电器,并且电源为可拆卸形式。用XH2.54 2P插头连接系统与充电器,方便用户在电源低电量时将电源带回家充电。插头有防反插设计,可防止用户因插反而造成系统短路[9]。
为了方便用户判断信报箱提示系统电量剩余情况,以及用于发送短信的用户标志模块卡信号强弱,系统要求由显示模块来进行提示。显然,用显示屏来显示是不经济的方法,笔者采用发光二极管点亮的方法来告知用户。由AT89C51单片机驱动发光二极管,系统的电量显示和用于发送短信的用户标志模块卡的信号强弱分别采用三个发光二极管显示。三个全亮表示电量高、信号强,两个亮表示中等,仅一个亮表示需要充电或者用户标志模块卡信号弱,需调整。
基于查询AT指令的命令格式,查询电量的指令为AT+CBC\,查询信号的指令为AT+CSQ\[10]。通过单片机串口分别向电源、通信模块发送这两个AT指令,电源、通信模块会自动下发给单片机相关电量和信号强弱的信息,单片机通过中断接收后处理分析这两组下发的数据,就可以得到电量值和信号状态,然后再分别驱动表示电量和信号的各组发光二极管进行显示。
AT89C51单片机通过串口输出AT指令来对SI M800C模块进行相应控制,可极大方便软件的设计。软件设计主要包括传感器信号处理、通信及主控系统的程序设计。根据所选择的AT89C51单片机,采用C语言进行程序编写。
主函数的功能是信号触发,接收到传感器发送到的信号后响应,开始向设定手机号发信息,信息内容为“You have a new letter”,然后重新恢复到持续判断有无触发信号的状态[11]。主函数程序代码如下:
if((SBUF>=65&&SBUF<=90)||(SBUF>=48&&SBUF<=59)||(SBUF==44)||(SBUF==′*′)) ∥只存储“,”、“A-Z”大写字母、“0-9”数字、“:”和“;”
经测试,笔者设计的信报箱提示系统达到了预期的要求,依靠成熟的GSM技术,方便及时地提醒信报箱主人去开信箱,具有良好的实用性。系统未考虑到当系统电量低时发短信提醒用户,这是不足之处,有待后续弥补。