介绍
通过对红外遥感技术、GSM远程控制技术等研究,开发设计了交互式智能多功能插排,可以实现多通道分离远程与近程定时功能。设计的“近距离红外遥控系统”,在规定的空间距离范围内,可以用遥控器发出红外信号控制插排的开关和定时;
设计的“远程定时控制系统”,通过手机短信在“用户指令”与“预定控制系统”之间进行信息交互,把传统无线控制推广到手机通信公网的无线控制,实现远程控制插座的时间设定以及开关设置。
LED液晶显示屏可以引导和显示用户的指令设定,为用户提供最大的人机交互自由度。本智能插排功能完善且操作简单,不受通信线路及地区限制,具有可靠性高、抗干扰能力强、使用方便灵活等优点。
涉及理论
红外遥感技术
红外遥控的发射电路采用红外发光二极管来发出经过调制的红外光波,一般由指令键(或操作杆)、指令编码系统、调制电路、驱动电路、发射电路等几部分组成。当按下指令键或推动操作杆时,指令编码电路产生所需的指令编码信号,指令编码信号对载波进行调制,再由驱动电路进行功率放大后由发射电路向外发射经调制定的指令编码信号。
红外接收电路一般由接收电路、放大电路、调制电路、指令译码电路、驱动电路、执行电路(机构)等几部分组成。接收电路将发射器发出的已调制的编码指令信号接收下来,并进行放大后送解调电路,解调电路将已调制的指令编码信号解调出来,即还原为编码信号。指令译码器将编码指令信号进行译码,最后由驱动电路来驱动执行电路实现各种指令的操作控制(机构)。
红外遥控用红外线来传送控制信号,它的特点是有方向性、不能有阻挡、距离一般不超过7米、不受电磁干扰,不影响周边环境、不干扰其它电器设备。由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控器而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。红外遥控体积小、功耗低、功能强、成本低,在家用电器、室内近距离(小于10米)遥控中得到了广泛的应用。
GSM远程控制技术
GSM系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用最广泛的一种系统。其网络覆盖范围广,布线成本低,是我国目前主要使用的蜂窝数字移动通信系统,也是目前唯一的具有最大覆盏范围和通信可靠性的无线通信网。GSM能提供语音功能,数据传输服务(提供给固定(有线)用户和ISDN用户的大部份服务GSM都提供,包括分组交换资料网所提供的服务)和短消息服务。
GSM远程智能控制系统就是前端借助GSM的短信功能向异地的首发端发送控制指令,收发端依据控制指令操纵智能终端执行相应的指令。有时候根据需要,收发端也可以将信息以短信的形式发送至前端。利用GSM短消息进行远程无线通信,具有通讯成本低,不受通信线路及地区限制、保密性高、可靠性高、抗干扰能力强,使用方便、灵活,通讯快捷等特点。除此之外还具有双向数据传输功能,性能稳定,为远程数据传送和监控设备的通信提供强大的支持平台。
本交互式智能多功能插排,具有传输的信息基小、对传输速度要求不高和通信要求简单可靠的特点,使用GSM网络的短消息服务功能不必考虑信道的可靠性等因素,可以很好的满足对于插排远程控制的功能要求。
SIM300模块的原理
SIM300是一款三频段GSM/GPRS模块,可在全球范围内的EGSM900MHz、DCS1800MHz、PCS1900MHz三种频率下工作,能够提供GPRS多信道类型多达10个,并且支持CS-1、CS-2、CS-3和CS-4四种GPRS编码方案。
SIM300结构小巧,外形尺寸仅40mm33mm2.85mm,几乎可满足所有对产品尺寸有要求的工业应用,其主要功能有:语音通话、短信收发、GPRS网络数据收发、彩信收发。SIM300模块主要应用在通讯领域,如移动电话、远程数据监控、短信提醒发送、GPRS MODEN。
SIM300内部功能模块有:
键盘和SPI类型的LCD接口,方便用户开发自己的应用设备。
具有调试和数据输出两个串口,帮助开发人员更容易开发产品。
双音频通道,包含两个麦克风输入和两个话筒输出,由AT指令配置其工作模式。
SIM300具有低功耗设计,睡眠模式下的电流消耗仅为2.5mA。SIM300内部集成了TCP/IP协议栈,并且扩展了TCP/IP AT指令,使用户利用该模块开发数据传输设备变得非常简单方便。
SIM300使用串口通讯的方式和外部链接,通过串口数据的交换可以使其执行命。电源接口可接入5V-26V的直流电压,最大电流应大于2A以保持SIM300模块的正常工作。
使用时,将一张普通的SIM卡插入SIM模块的手机卡插槽,用户用手机按特定格式编辑短信息发送到SIM模块,SIM模块将所接收的数据进行解包校验,并将完整的命令通过串口连到微处理器,微处理器对收到的短信进行校验,首先检查是否是设定的用户号码,然后滤去PDU码的一些前缀,提出有用的信息码,然后从ROM中取出相应的遥控码,通过单片机发射控制信号。
设计
交互式智能多功能插座是一种定时、远近程控制交互装置,集红外遥感技术和GSM远程控制技术于一体。其设计主要包括系统硬件(红外遥控单元、GSM远程控制单元、LCD显示单元、控制器)和系统软件的设计。
近距离红外遥控接口电路的设计
红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作。发射部分包括键盘、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
利用WD6122型号红外遥控器,完成接收模块的接口电路设计。红外接收模块内部含有高频的滤波电路,专门用来滤除红外线合成信号的载波信号(38KHz),并送出接收到的信号。当红外线合成信号进入红外接收模块,在其输出端便得到原先发射器发出的数字编码,只要经过单片机解码程序进行解码,可以得知按下了哪一个按键,从而做出相应的控制处理,完成红外遥控的动作。若为有效信号,则响应该信号,并且蜂鸣器鸣一声,通过nokia5110显示用户的操作。
主控器的硬件设计
控制器电路以STC89C52RD+单片机为核心,由单片机电路,I/O接口驱动电路,系统参数存储电路,按键电路,LCD显示电路,GSM远程控制电路组成。单片机写有C语言程序,用于接收、分析和调控接收到的指令以控制外源设备,以满足用户对电器设备调节的需求;单片机电路通过I/O接口、串行数据接口和LED恒流驱动电路、按键电路、LCD显示接口电路、GSM远程控制电路、数据存储电路相连接。各组块有机结合,各司其职,协调合作。
主控器的软件设计
系统软件写在控制器的单片机内,用C语言编程,采用流行的模块法编程,主要包括人机接口(遥控键盘驱动模块、LCD驱动模块),液晶显示模块,设定参数存储模块。由主程序统筹协调各模块依存关系,达到了操作界面友好,控制效果理想,系统高度稳定的目标。
远程定时控制系统的设计
远程定时控制系统包括单片机系统芯片、时钟芯片、看门狗芯片、GSM接口、存储芯片及驱动芯片。主控器的重点是进行短信息的接收和PDU解码。利用GSM模块,我们基于OEM板,进行二次开发。通过手机“中文短信”,在“用户指令”与“预定控制系统”之间进行“信‘息交互”,实现远程控制插座的时间设定以及开关设置。
通过单片机发送AT指令对GSM模块进行初始化设置,对GSM的控制也通过AT指令完成,并由GSM对指令的响应值来做出相应的动作。关于信息的发送,采用PDU编码模式,预先将定位信息内容进行编译,并存储在单片机RAM中,方便随时调用、发送。
PDU相当于一个数据包,它由构成消息的信息组成。作为一种数据单元, 它包含了源/目的地址、有效时间、数据格式、协议类型和正文,正文长度可达140字节,它们都以十六进制表示。PDU结构根据短消息由移动终端发起或由移动终端接受而不同。
近距离红外控制系统的软件设计
红外遥控器共有18个按键,其中10个数字键,3个功能选择键,2个数字调节键,2个选项移位键以及1个电源开关键。发射的一帧码含有一个引导码,16位的用户编码和8位的键数据码、键数据码的反码也同时被传送。码型结构如图6。
通过红外遥控器按键操作与液晶显示屏实现定时功能。红外遥控器是将遥控信号(二进制脉冲码)调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。二进制脉冲码的形式有多种,其中最为常用的是PWM码(脉冲宽度调制码)和PPM码(脉冲位置调制码)。前者以宽脉冲表示1,窄脉冲表示0。后者脉冲宽度一样,但是码位的宽度不一样,码位宽的代表1,码位窄的代表0。每次8位的码被传送之后,它们的反码也被传送,减少了系统的误码率。
LCD显示单元的设计
该项目所选用的液晶显示屏型号为nokia5110,该模块采用84x48点阵LCD,可以显示四行汉字。采用串行接口与主处理器进行通信。模块的CS引脚实现片选信号功能(低电平有效),D/C引脚进行数据/命令切换,从DIN引脚输入数据。模块采用3.3V输入电压。
根据课题的要求,为液晶设置五个界面(时钟欢迎界面、通道选择界面、模式选择界面、定时设置界面、插排的工作状态界面),我们将红外信号和GSM远程命令短信作为触发信号来控制液晶界面的变化,引导和显示用户的指令设定。
样机模型的调试
交互式智能多功能插座有6个按键供用户操作,分别是电源总开关,单片机复位键(当单片机程序混乱时,可以复位单片机,这时各通道总开关闭合,可以当做普通插排使用),各通道单独电源键(该开关可以分别用单片机和按钮开关控制,避免用户在遥控器丢失情况下不能使用的情况)。
红外遥控器主要功能是近距离控制插排的定时功能,实现用户与插排的近距离交互功能。红外遥控器共有八个按键,分别为总电源开关键,菜单键(选择通道),确定键,返回键,选项移位键(左移与右移),数字调节键(数字加与数字减)。可以通过红外遥控器与液晶显示屏实现定时功能。
GSM模块,可以利用手机发命令短信的形式,通过TCP与串口通信协议实现远距离控制功能,具体发送形式为“通道1/2/3/4,开到关/关到开/常开/常关,时间(0-999)”通过单片机程序将用户的命令传送到插排中,进而实现远距离人机交互功能。
源程序
include "nokia_5110.h"
include "infrared.h"
include "mytype.h"
//*
define delay_time 25767
/*
/*------------------------------------------------
定时器0中断处理
------------------------------------------------*/
void tim0_isr (void) interrupt 1 using 1
{
irtime++; //用于计数2个下降沿之间的时间
}
/*------------------------------------------------
外部中断0中断处理
------------------------------------------------*/
void EX0_ISR (void) interrupt 0 //外部中断0服务函数
{
static unsigned char i; //接收红外信号处理
static bit startflag; //是否开始处理标志位
if(startflag)
{
if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms
i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{
irtime=0;
startflag=1;
}
}
/*------------------------------------------------
定时器0及外部中断0初始化
------------------------------------------------*/
此处省略部分程序
/*------------------------------------------------
键值处理
------------------------------------------------*/
void Ir_work(void)//红外键值散转程序
此处省略部分程序
/*------------------------------------------------
红外码值处理
------------------------------------------------*/
void Ircordpro(void)//红外码值处理函数
{
unsigned char i, j, k;
unsigned char cord,value;
k=1;
for(i=0;i<4;i++) //处理4个字节
{
for(j=1;j<=8;j++) //处理1个字节8位
{
cord=irdata[k];
if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
value|=0x80;
if(j<8)
{
value>>=1;
}
k++;
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
}
void main(void)
{
EX0init(); //初始化外部中断
TIM0init();//初始化定时器
LCD_init(); //初始化液晶
LCD_clear();
form1();
LCD_write_english_string(53,4," ");
LCD_write_english_string(5,2,"*");
while(1)//主循环
{
if(irok) //如果接收好了进行红外处理
{
Ircordpro();
irok=0;
}
if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
{
Ir_work();
}
}
}
/
void fun()
{
switch(k)
{
case(0):form1();fun1(); break;
case(1):form2();fun1(); break;
case(2):form3_1(); break;
case(3):form3_2(); break;
}
}
此处省略部分程序
/*-----------------------------------------------------------------------
LCD_init : 3310LCD显示
-----------------------------------------------------------------------*/
此处省略部分程序
/*-----------------------------------------------------------------------
LCD_write_byte : 使用SPI接口写数据到LCD
输入参数:data :写入的数据;
command :写数据/命令选择;
-----------------------------------------------------------------------*/
此处省略部分程序
void LCD_write_byte(unsigned char dat, unsigned char command)
{
unsigned char i;
//PORTB &= ~LCD_CE ; // 使能LCD
LCD_CE = 0;
if (command == 0)
// PORTB &= ~LCD_DC ; // 传送命令
LCD_DC = 0;
else
// PORTB |= LCD_DC ; // 传送数据
LCD_DC = 1;
for(i=0;i<8;i++)
{
if(dat&0x80)
SDIN = 1;
else
SDIN = 0;
SCLK = 0;
dat = dat << 1;
SCLK = 1;
}
// SPDR = data; // 传送数据到SPI寄存器
//while ((SPSR & 0x80) == 0); // 等待数据传送完毕
//PORTB |= LCD_CE ; // 关闭LCD
LCD_CE = 1;
}