第8章家庭安防远程监控系统设计_第1页
第8章家庭安防远程监控系统设计_第2页
第8章家庭安防远程监控系统设计_第3页
第8章家庭安防远程监控系统设计_第4页
第8章家庭安防远程监控系统设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统原理与设计

第八讲家庭安防远程监控系统设计

本节提要123功能需求分析及总体设计系统硬件设计

软件设计

8.1功能需求分析及总体设计

家庭安防监控系统主要是通过远程安防监控器实现对家庭智能化系统中各种与信息相关的通讯设备、家用电器和家庭保安装置进行集中的或异地的控制和家庭事务性管理,实现对家庭中重要设备进行远程信息查询、安防报警、远程监控等功能。图8-1家庭安防系统总体结构图整个安防监控器的电路框图如图8-2所示,由电源电路、人机交互模块、主控模块、移动通信模块、设备控制模块、数据采集模块、PSTN模块、语音录放模块等电路组成。主控模块PSTN模块语音录放模块移动通信模块数据采集模块人机交互模块设备控制模块电源模块本节提要123功能需求分析及总体设计系统硬件设计软件设计

8.2系统硬件设计系统功能较多,考虑系统对实时性、功耗、成本、扩展性等要求,安防监控器采用S3C44B0X作为处理器,采用双音多频解码集成电路芯片MT8888和ISD4004语音芯片实现报警器的主要功能,PSTN模块主要由主控芯片电路、语音模块电路、振铃检测电路、摘挂机电路、双音频信号收发器电路、输出放大电路和输入放大电路等部分组成。表8-1S3C44B0X主要端口分配表端口号连接端口功能描述端口号连接端口功能描述GPF0K1继电器K1控制,接通电话通道nOEMT8888/RDMT8888读控制引脚GPF1K2继电器K2控制,选择播放录音通道nWEMT8888/WRMT8888写控制引脚GPF2K3继电器K3控制,选择录音通道ExINT0D4A74LS123/Q电话振铃输入检测GPF3ISD4004RARISD4004行地址时钟引脚ExINT1D4B74LS123/QMT8888按键输入信号检测GPF4ISD4004/SSISD4004片选ExINT2ISD4004/INTISD4004中断引脚D0-D3MT8888D0-D3MT8888数据引脚SIOCKISD4004SCLKISD4004时钟引脚A1MT8888RS0MT8888地址选择引脚SIOTxDISD4004MOSIISD4004数据输入引脚nGCS3MT8888/CSMT8888片选引脚SIORxDISD4004MISOISD4004数据输出引脚监控器所涉及的关键技术主要在以下几个方面:1.DTMF(DualToneMultiFrequency)收发芯片MT8888CE的电路设计;2.基于语音芯片ISD4004的录放音电路设计;3.电话控制模块家电控制语音提示信息的存放和寻址。本章主要对这几个模块的电路设计进行介绍,其它电路如电源、串口、键盘、LCD等电路设计参考第五章。8.2.1振铃检测电路设计8.2.2摘挂机电路设计8.2.3电话DTMF收发器电路设计8.2.4语音模块设计8.2.5GSM通信模块主控制器串口DC电源GSM模块SIM本节提要123功能需求分析及总体设计系统硬件设计

软件设计

8.3软件设计要实现家电(空调、电视、等)的远程开、关控制,家电状态的远程查询,必须对设备进行编号,设计规范的查询控制的命令格式,才能进行正确地监控家电设备。在一般家庭中电器类型有以下几种:1:空调2:电视3:热水器4:灯开关5:煤气监测器6:火焰监测器设备的监控命令设计为如下格式:监控命令格式:命令类型+命令分类+设备序号+设备状态。命令类型主要分为查询命令和控制命令两种;命令分类是指查询命令中的查询分类,控制命令中的分类,如0表示关、1表示开;设备序号是指家电设备的编号;设备状态是在查询和控制动作的返回结果,具体见表8-2。表8-2监控命令格式命令类型命令分类设备序号设备状态30查询命令1控制命令1开空调(控制1)1空调1开0关空调(控制、查询2)0关1开电视(控制)2电视1开0关电视(控制、查询)0关1开热水器(控制)3热水器1开0关热水器(控制、查询)0关1开灯(控制)4灯开关1开0关灯(控制、查询)0关1开煤气开关(控制)5煤气监测器1浓度高0关开煤气开关(控制、查询)0无煤气1开喷水开关(控制)6火焰监测器1有火焰0关喷水开关(控制、查询)0无火焰

根据系统功能将任务划分为GSM短信查询控制任务、报警任务、电话查询控制任务、键盘设置等任务,本章主要针对前3个任务进行设计分析,编程内容包括:主函数设计报警任务GSM短信查询控制任务PSTN电话查询控制任务串口中断服务程序外部中断0服务程序任务状态切换图8.3.1主程序设计开始系统初始化创建任务GSM查询控制任务报警任务……电话查询控制任务启动任务///******************任务优先级定义***************///#definePhone_Prio7#defineGSM_Prio6#defineAlarm_Prio5///******************任务堆栈定义***************///#defineSTACKSIZE50OS_STKPhone_Stack[STACKSIZE]={0,};//Phone_Task堆栈OS_STKGSM_Stack[STACKSIZE]={0,};//GSM_Task堆栈OS_STKAlarm_Stack[STACKSIZE]={0,};//Alarm_Task堆栈///******************任务定义***************//////******************任务定义***************///voidPhone_Task(void*Id);//GSM_TaskvoidGSM_Task(void*Id);//GSM_TaskvoidAlarm_Task(void*Id);//GSM_Task///*****************事件定义*****************///OS_EVENT*E_GSM_Mbox;//申明短信消息事件typedefstructgsm_cmd{//定义命令参数消息结构INT8Uphone_no[14];//手机号码INT8Udev_no;//设备编号INT8Ucmd_type;//instruction命令类型INT8Ucmd_class;//命令种类INT8Udev_status;//设备状态}*GSM­_CMD;structGSM_CMDGSM_Command;//定义命令短信消息//OSMboxPend(E_GSM_Mbox,0,&err);//OSMboxPost(E_GSM_Mbox,GSM_Command);OS_EVENT*E_PConnect_Sem;//申明电话连接消息事件//OSSemPend(E_PConnect_Sem,0,&err);//OSSemPost(E_PConnect_Sem);OS_EVENT*E_PRead_MBox;//申明电话按键读取消息事件INT8U*PRead_Message;//定义电话按键读取消息//OSMboxPend(E_PRead_MBox,0,&err);//OSMboxPost(E_PRead_MBox,PRead_Message);typedefstructgsm_msg{//定义短信消息结构INT8Uphone_no[14];//短信手机号码INT8Umsg_time[20];//短消息发送时间INT8*msg_data;//短消息内容}*GSM_MSG;voidmain(){ARMTargetInit();//开发板初始化OSInit();//操作系统初始化……//其他初始化操作OSTaskCreate(Phone_Task,(void*)0,(OS_STK*)&Phone_Stack,Phone_Prio);//创建电话监控任务OSTaskCreate(GSM_Task,(void*)0,(OS_STK*)&GSM_Stack,GSM_Prio);//创建短信监控任务OSTaskCreate(Alarm_Task,(void*)0,(OS_STK*)&Alarm_Stack,Alarm_Prio);//创建报警任务……//创建其他任务InitRtc();//初始化系统时钟E_GSM_Mbox=OSMboxCreate(GSM_Command);E_PConnect_Sem=OSSemCreate(1);E_PRead_Mbox=OSMboxCreate(PRead_Message);OSStart();//操作系统任务调度开始return0;}8.3.2报警任务系统报警任务功能是指系统定时查询各个设备的状态,并与设定的报警值进行比较,如果超出设定值则通过通信模块进行报警。开始读取各个设备状态判断是否超出设定范围读取手机电话号码任务挂起发送报警短信判断是否超出设定范围是否接收到短信回复是否是否手机电话是否读完否拨打有线电话号码是是否接起播放报警录音否挂机电话是否读完否是是voidAlarm_Task(void*Id){INT8Ui,j,k=0;INT8UDeviceStatus=0;INT8U*msg;for(;;){for(i=0;i<devnum;i++)//检查每个设备状态{DeviceStatus=DeviceCheck(i);GSM_Command->dev_no=i;if(DeviceStatus<Device[i].BottomStatus||DeviceStatus>Device[i].UpStatus)//如果状态超出设定范围,则报警。

for(j=0;j<=MobileNum;j++){//从电话薄中取出电话号码进行报警*GSM_Command->mobile_no=MobilePhone[j];GSM_Command->dev_status=DeviceStatus;SendMessage(GSM_Command);msg=OSMboxPend(E_GSM_Mbox,2000,&err);//设定短信回复等待时间if(msg)break;//如果在规定时间内有短信回复,跳出循环}if(msg==NULL){//当短信没有回复,则认为短信报警信息失败,电话报警while(k<2){for(j=0;j<=PhoneNum;j++){phoneflag=CallPhone(PhoneNo[j]);if(phoneflag){//判断电话在规定时间内是否接通//接通则播放报警录音,否则拔下一个电话号码PlayRecord(i,DeviceStatus);//播放设备i的报警状态StopPhone();//挂机Break;}}if(phoneflag==0){OSTimeDly(18000);k++;}else{k=0;break;}}}}}}}8.3.3GSM短信查询控制任务查询任务主要功能是接收GSM通信模块传递的命令,解析命令参数,然后查询/控制各个电器设备,返回查询/控制状态。开始读取串口中断发送的消息查询命令控制命令查询设备状态发送设备状态控制设备动作发送设备状态任务挂起查询设备选择设备1设备2设备n控制设备选择设备1设备2设备n判断短信内容voidGSM_Task(void*Id){void*msg=NULL;INT8Uerror;for(;;){OSMboxPend(E_GSM_Mbox,0,&err);//等待短信到来switch(E_GSM_Mbox->OSEventPtr->cmd_type)//提取短信命令类型{case0://查询命令

GSM_Command->dev_status=DeviceCheck(E_GSM_Mbox->OSEventPtr->dev_no);//查询指定设备状态

SendMessage(GSM_Command);//发送查询结果

break;case1://控制命令

GSM_Message->dev_status=DeviceControl(E_GSM_Mbox->OSEventPtr->dev_no,\E_GSM_Mbox->OSEventPtr->cmd_class);SendMessage(GSM_Message);//控制设备动作,返回状态SendMessage(GSM_Command);//发送控制结果

break;}}}2.短信接收中断服务程序设计短信的接收是放在串口中断服务程序中执行的,需要编写串口接收中断服务程序。开始发出“AT+CMGR=0<CR>”命令读SIM卡中的短信结束发出“AT+CMGD=0<CR>”命令删除SIM卡中的短信解析短信内容通过消息邮箱发送消息voidUART0RD_GSM_ISR(){unsignedchardata[4];structGSM_MSGmsg;unsignedchari;ReadMessage(msg);//读取短信data=MessageAnalyze(msg->msg_data);//解析短信内容,获取有效控制或查询命令参数GSM_Command->phone_no=msg->phone_no;GSM_Command->dev_no=data[0];//保存短信参数GSM_Command->dev_type=data[1];GSM_Command->dev_class=data[2];OSMboxPost(E_GSM_Mbox,GSM_Command);//发送短信消息邮箱,激活GSM任务}8.3.4电话查询控制任务该任务负责有线电话线路的监听,将获取的数据放入消息数组中。电话查询控制是通过远程电话根据监控器提示音进行按键输入控制或查询命令来实现的。电话振铃检测与外部中断0相关联,如果出现打入电话,可采用在中断服务程序中加入信号量事件来传递接入电话信号。开始读取外部中断0发送的消息查询控制语音提示查询命令控制命令查询设备状态发送设备状态控制设备动作发送设备状态输入密码验证任务挂起无效有效挂机查询设备选择设备1设备2设备n控制设备选择设备1设备2设备n判断按键内容voidPhone_Task(void*Id){char*password;INT8Ui;INT8Uj=1;INT8Udata[3];INT8UCmdType=0;INT8UCmdClass=0;INT8UDeviceNo=0;INT8UDeviceStatus=0;for(;;){OSSemPend(E_PConnect_Sem,0,&err);//等待外部中断0发送电话接通信号量ConnectPhone();//摘机for(;;){PlayRecord(0,PasswordInstruction);//播放提示输入密码录音

password[i]=OSMboxPend(E_PRead_MBox,0,&err);//等待外部中断1发送消息

if(password[i]==’#’){strncpy(password,password,i)//密码取i个符号有效if(strcmp(password,PASSWORD)){i=0;break;}elseif(j<2){PlayRecord(0,PasswordReinput);//播放密码重新输入提示录音j++;}elsePlayRecord(0,PasswordError);//播放提示输入密码错误}i++;}if(!strcmp(password,PASSWORD)){for(i=0;i<3;i++){PlayRecord(0,InputInstruction[i]);//播放提示录音

&data[i]=OSMboxPend(E_PRead_MBox,0,&err);//等待外部中断1发送消息}PlayRecord(0,WaitRecord);//播放等待录音CmdType=data[0];//从PSTN电路中读取输入按键值CmdClass=data[1];DeviceNo=data[2];switch(CmdType){case0://查询命令DeviceStatus=DeviceCheck(DeviceNo);break;case1://控制命令

DeviceStatus=DeviceControl(DeviceNo,CmdClass);break;}PlayRecord(DeviceNo,DeviceStatus);}StopPhone();//挂机}}外部中断0中断服务程序负责监听电话

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论