1、CS模型的智能家居电源控制系统硕士毕业设计(此文档为word格式,下载后您可任意编辑修改!)基于CS模型的智能家居网络控制系统摘要几年前一些经济比较发达的国家提出了“智能住宅”的概念,住宅智能化是智能家居的先导,智能家居是住宅智能化的核心。智能家居是利用计算机、通讯与网络、自动控制、IC卡技术,通过有效的传输网络,将多元信息服务与管理、物业管理与安防、住宅智能化系统集成,为住宅小区的服务与管理提供高技术的智能化手段,以期实现快捷高效的超值服务与管理,提供安全舒适的家居环境”。 随着计算机技术,通信技术和嵌入式系统的发展,智能家居正逐步走进人们的生活。一个典型的现代智能家居系统提供安防、家电控制
2、、远程抄表和信息服务等功能。低功率和高性能CPU的发展,为开发智能家居提供了现实可能性。其内部构成包括嵌入式处理器、相关支持硬件、嵌入式操作系统以及应用层的软件包等。针对智能家居需求,本文设计并实现了智能家居中的控制系统。采用计算机网络控制方式,结合了基于ARM的嵌入式系统、单片机系统、计算机网络、WIN32编程等技术,实现了对开关型家电的控制。本文的智能家居控制系统设计方案是:以Philips LPC2103实验板为硬件平台,建立了嵌入式系统开发环境,移植了ucos内核;开发的应用软件分为单片机子系统、PC客户端和PC服务端三个模块。最终完成相关软硬件设计、调试,经测试,完全实现预期功能。最
3、后提出系统改进的方案和措施。在硬件方面着手于Philips LPC2103芯片的数据手册,通过对其针脚的定义,进行相关电路的设计,实现了单片机串口的通讯、电脑数据的接收和处理、继电器电路的开关和复位电路的实现。在软件方面,在Delphi 2007中实现了PC服务端和客户端的数据收发和处理,并使服务端在接收到特定字符后发送相应的指令到串口。基于LPC 2103的智能家居远程控制系统提供了一种对家庭普通家用电器进行远程控制的新思路,是嵌入式的一项有效的尝试和应用。关键词:LPC 2103,Indy 10,智能家居,远程控制Abstract A few years ago a number of e
4、conomically developed countries put forward the smart smart effective transport network, multi-information services and management, property management and security, for the residential district of order to achieve fast and efficient value for money services and management, providing a safe and comf
5、ortable technology and embedded system development, intelligent smart services functions. Low-power and , including embedded processors, related support layer software packages and so on. In response to this phenomenon, this paper designed and implemented one of the intelligent of software and order
6、 to experiment board for the Philips 2103 of uc os-core; developed application software, is divided into microcontroller subsystem, PC client and PC server-side three modules. Finalization of the relevant , debug, tested, fully achieve the desired functionality. Concludes with system improvements, p
7、rograms and measures. On the the Philips LPC2103 datasheet, through its pin definition of the related circuit design, implementation of the microcontroller serial port communication, computer data reception and processing circuit relay switch and reset circuit implementation. On the software side, i
8、n the Delphi 2007 to achieve a PC server and client for data transmission and processing, to enable the service to a specific character on the receiving end, after sending the appropriate commands to the serial port. LPC 2103-based Remote Control System for Smart Home provides a family for common ef
9、fective attempt to embed and applications. Key Words: LPC 2103, Indy 10, smart try IdTCPClient1.IOHandler.Writeln(Cmd);14 except if MessageBox(Form1.Handle, PChar(服务端已断开,是否重连?), PChar(系统提示), 1) = 1 then begin IdTCPClient1.IOHandler.Close;清除原来发送的命令,否则在发送命令失败后不能重新连接到服务端 IdTCPClient1.Disconnect; FormCr
10、eate(Form1); end else begin Application.Terminate; Exit; end; end;end;procedure TForm1.Button1Click(Sender: TObject);begin Sendinf(opencom);打开串口end;procedure TForm1.Button2Click(Sender: TObject);begin Sendinf(closecom);关闭串口end;procedure TForm1.Button3Click(Sender: TObject);begin Sendinf(openno1);发送指
11、令:打开1号开关end;procedure TForm1.Button4Click(Sender: TObject);begin Sendinf(closeno1); 发送指令:关闭1号开关end;procedure TForm1.Button5Click(Sender: TObject);begin Sendinf(openno2); 发送指令:打开2号开关end;procedure TForm1.Button6Click(Sender: TObject);begin Sendinf(closeno2);发送指令:关闭2号开关end;procedure TForm1.Button11Clic
12、k(Sender: TObject);begin Sendinf(readstatus1);读取1号开关状态end;procedure TForm1.Button13Click(Sender: TObject);begin Sendinf(readstatus2); 读取2号开关状态end;procedure TForm1.Button12Click(Sender: TObject);begin SendInf(edit1.Text); 发送16进制控制命令end;end.4.4 PC机服务端接收软件如图4.5所示,服务端PC数据接收、处理过程分为判断是否为6个指令中的一个并采取相应的操作。图
13、 4.4 服务端PC数据接收、处理过程图 4.5 PC机服务端接收界面如图4.5所示,本系统服务端PC机上采用Text控件用来显示接收自客户端PC的指令。服务端PC软件完成接收从客户端PC通过TidTCPClient控件发送的命令的功能。服务端PC软件使用TidTCPServer控件来接收命令。使用ListBox控件显示从客户端PC接收到的命令。15关键代码:procedure ReceiveCMD;procedure WriteCom(Command:DWORD);var Mode: string; AppDir: string; Cmd: string;implementation$R *
14、.dfmprocedure fillstruct(control: PMixerControl; var Cdetails: tMIXERCONTROLDETAILS);begin Cdetails.cbStruct := SizeOf(cdetails); cdetails.dwControlID := Control.dwControlID; cdetails.cbDetails := SizeOf(Integer); cdetails. while (StepInReceiveCmd) do 在 TForm2.FormCloseQuery 置False退出线程 begin if Rece
15、iveOrNot = true then 在 TForm2.IdTCPServer1Execute 置True begin 在 创建线程 和 下面 置Falsetext1.text:=cmd; 接收到客户端的指令后,服务端PC使用MSComm控件通过串口与LPC2103实验版进行通讯。关键代码:case Cmd of opencom: begin Mscomm1.PortOpen :=true; 打开串口 Mscomm1.InputMode:=comInputModeText;end; closecom: begin Mscomm1.PortOpen :=false; 关闭串口 Mscomm1
16、.DTREnable :=false; Mscomm1.RTSEnable :=false;end; openno1: Mscomm1.Output:=a; closeno1: Mscomm1.Output:=b; openno2: Mscomm1.Output:=c; closeno2: Mscomm1.Output:=d;readstatus1: Mscomm1.Output:=e;readstatus2: Mscomm1.Output:=f; end; Sleep(10); end;end;4.5 本章小结本章主要进行了服务端PC和客户端PC的软件编码。由客户端PC通过TidTCPCli
17、ent控件发送特定的指令到服务端PC,服务端PC用TidTCPCServer控件解析由客户端PC发送的指令,服务端PC根据接收到的指令对串口写入特定的字符,以达到控制单片机继电器的目的。16第1章 单片机软件设计5.1 单片机软件功能分析单片机软件完成对从服务端PC发送过来的指令的读取、分析并作相应的操作。由根据串口指令并作出相应操作的主程序、初始化串口子程序、读取从串口发送来的数据子程序和发送字符到串口子程序组成。5.2软件设计流程图 5.1 单片机数据接收、处理流程如图5.1所示,处理器软件主要完成数据接收和处理的功能。17从服务端PC机发送开和关的指令到串口,处理器软件触发中断,读取串口
18、数据,如果指令是开,置CPU 的SW_OUT0针脚为启用,使继电器实现通路,打开连接在实验版上的电器;如果指令是关,置CPU的SW_OUT0针脚为关闭,使继电器实现断路,关闭连接在实验板上的电器。5.3 单片机指令接收与处理子程序:初始化串口18关键代码:DWORD UARTInit( DWORD baudrate ) DWORD Fdiv; U0LCR = 0x83; * 8 bits, no Parity, 1 Stop bit * Fdiv = ( Fpclk 16 ) baudrate ; *baud rate * U0DLM = Fdiv 256; U0DLL = Fdiv % 25
19、6; U0LCR = 0x03; * DLAB = 0 U0FCR = 0x07; * Enable and reset TX and RX FIFO. * if ( install_irq( UART0_INT, (void *)UART0Handler ) = FALSE ) return (FALSE); U0IER = IER_RBR | IER_THRE | IER_RLS; * Enable UART0 interrupt * return (TRUE);子程序:读取从串口发送来的数据。关键代码:void UART0Handler (void) _irq BYTE IIRValue
20、, LSRValue; BYTE Dummy; IIRValue = U0IIR; UART0 中断标识寄存器U0IIR IIRValue = 1; * skip pending bit in IIR * IIRValue &= 0x07; * check bit 13, interrupt identification * if ( IIRValue = IIR_RLS ) * Receive Line Status 接收线状态 * LSRValue = U0LSR; UART0 线状态寄存器(U0LSR * Receive Line Status * if ( LSRValue & (LS
21、R_OE|LSR_PE|LSR_FE|LSR_RXFE|LSR_BI) ) 各种错误情况 * There are errors or break interrupt * * Read LSR will clear the interrupt * UART0Status = LSRValue; Dummy = U0RBR; * Dummy read on RX to clear interrupt, then bail out * VICVectAddr = 0; * Acknowledge Interrupt * return; if ( LSRValue & LSR_RDR ) * Rece
22、ive Data Ready * * If no error on RLS, normal ready, save into the data buffer. * * Note: read RBR will clear the interrupt * UART0BufferUART0Count = U0RBR; UART0Count+; if ( UART0Count = BUFSIZE ) UART0Count = 0; * buffer overflow * else if ( IIRValue = IIR_RDA ) * Receive Data Available 接收数据可用 * *
23、 Receive Data Available * UART0BufferUART0Count = U0RBR; UART0Count+; if ( UART0Count = BUFSIZE ) UART0Count = 0; * buffer overflow * else if ( IIRValue = IIR_CTI ) * Character timeout indicator 字符超时指示* * Character Time-out indicator * UART0Status |= 0x100; * Bit 9 as the CTI error * else if ( IIRVa
24、lue = IIR_THRE ) * THRE, transmit the LSR to see if valid data in U0THR or not * if ( LSRValue & LSR_THRE ) UART0TxEmpty = 1; else UART0TxEmpty = 0; VICVectAddr = 0; * Acknowledge Interrupt *子程序:发送字符到串口关键代码:void UARTSend(BYTE *BufferPtr, DWORD Length ) while ( Length != 0 ) while ( !(UART0TxEmpty &
25、0x01) ); * THRE status, contain valid data * U0THR = *BufferPtr; UART0TxEmpty = 0; * not empty in the THR until it shifts out * BufferPtr+; Length-; return;void Printf_UART(BYTE *str) UARTSend(str, strlen(str);主程序:根据串口指令并作出相应的操作关键代码:void DelayNS(int dly) int i; for (;dly0;dly-) for(i=0;i50000;i+);vo
26、id EINT2_Handler (void) _irq 键盘中断处理 EXTINT = EINT2; * clear interrupt * IENABLE; * (FALSE); return( TRUE );int main (void) init_VIC();20 init_timer(); 初始化定时器 enable_timer( 0 ); 定时器使能 UARTInit(9600); * baud rate setting * RTCInit(); if ( install_irq( RTC_INT, (void *)RTCHandler ) = FALSE ) while ( 1
27、); RTCSetAlarmMask(AMRDOW|AMRDOY); CIIR=0; RTCStart(); Printf_UART(nr); Printf_UART(Program starts ); else Printf_UART( Write EEPROM Failedrn); i = 0; IODIR = LED|SW_OUT0|SW_OUT1; EINTInit(); keyscan = 0; Int_Flag = 0; if (U0THR=a) IOSET=SW_OUT0; else if (U0THR=b) IOCLR=SW_OUT0; IOCLR=SW_OUT0; retur
28、n 0;Philips 2103芯片的实验板通过串口RS232与本机相连,使用Keil编写相应代码使单片机响应PC主机传输的指令。5.4 本章小结 本章主要使用KEIL软件进行单片机软件的编码,使单片机能够接收并处理由PC服务端通过串口发送的数据,根据相应的数据进行继电器的开与关,以实现对用电器的控制。第2章 测试6.1 测试方案的设计本项目从硬件电路到软件系统的设计、实现涵盖了嵌入式系统开发的各个方面。针对这两个方面,本项目设计人员从以下几个角度进行测试。1. 硬件测试。硬件设计包括:实验板电源是否稳定;电路设计是否完善;串口是否正常工作;USB转串口线是否正常使用等4个方面。硬件测试将从以
29、上几个方面详细进行。2. 软件设计合理性。软件设计合理性将采取白盒测试,客户端PC机和服务端PC机收发数据是否正常;服务端PC与实验板通讯是否正常;服务端PC接收到指令后是否正确处理;实验板接收到指令后是否正常处理。6.2 测试流程设计6.2.1 硬件测试硬件测试分为两个部分,第一部分,是用手动的视觉方法检测方法查看电路板是否存在以下问题,如:元器件缺失、元器件故障、元器件存在安装误差、元器件失效、沾锡不良、桥接、焊锡不足、焊料过多形成锡球、形成焊接针孔(气泡)、有污染物、不适当的焊盘、极性错误、引脚浮起、引脚伸出过长、出现冷焊接点、焊锡过多、;焊锡空洞、有吹气孔和印制线的内圆填角结构差。第二
30、部分,是实际测试各主要模块功能是否正常,如图6.1所示,具体分为以下四部分:1.实验板电源是否稳定;2.电路设计是否完善;3.串口是否正常工作;4.USB转串口线是否正常使用。图 6.1 硬件测试模块下面分别对各模块进行测试。1. 实验板电源。本项目的硬件系统需要提供5V的电源。本项目采用开关电源,经过长时间的使用,该开关电源可以提供给电路板稳定的电压。电路5V转3V电压采用AS1117低压差线性调压器。其压差在1.2V输出,负载电流800mA时为1.2V。输出端加10UF钽电容来改变瞬间响应和稳定性。经测量,3V电源可以稳定输出。2. 电路设计是否完善。本系统布线合理,CPU电路、继电器电路、复位电路、串口电路均工作正常。3.串口直接通过打印文字到计算机屏幕的程序测试串口使用正常。4.USB转串口USB转串口是通过Keil生成HEX文件,通过PC串口下载到电路板上。经测试,可以正常下载程序。6.2.2 软件设