1总体控制系统设计
智能家居红外控制系统主要由ARM控制端和Android平台客户端组成,系统框架如图1所示。ARM控制端包括ARM处理器模块和红外学习模块,ARM处理器模块接收来自Android平台的指令代码,对指令进行解析,将解析后的指令发送给红外学习模块,通过红外学习模块来完成家电设备红外的红外学习或红外控制。作为系统的智能终端,Android平台将学习到的各种红外家电设备家用电器配套遥控器的功能键映射到Android设备的应用程序界面中,用户可以在Android设备上实现对家电设备的集中控制。
2红外硬件控制系统设计
红外控制系统主要由ARM处理器、红外学习模块、串口电路模块、无线通信模块、和电源模块等几部分组成,系统硬件设计图如图2所示。本系统ARM处理器采用LinkSprite公司生产的ARMCortexA8嵌入式开发板pcDuino。它选用AllwinnerA10作为核心处理器,DRAM为1GB,板载存储达到2GBFlash,完全兼容Arduino接口。它是一种高性能、高性价比的迷你PC平台,可以通过内置HDMI接口输出视频到电视或显示器屏幕,能够运行PC操作系统,如Ubuntu和图2红外控制系统硬件设计Android的ICS等。
2.1串口电路设计
pcDuino开发板有两个USB接口,红外学习模块采用USB0接口,通过该接口进行命令交换及传输数据。由于pcDuino与红外学习模块之间的通信需要通过USB转串口模块实现。系统采用CH341T芯片对信号进行电平转换[3],其连接电路如图3所示。
2.2无线通信模块
pcDuino开发板没有自带的无线通信模块,需要外接模块实现无线通信。如今比较流行的无线技术主要有:Wifi、Bluetooth、ZigBee、RFID以及一些简单专用无线通信协议[4](如CC1100、NRF905、Si4432等),其中Wifi通信具有WPA2安全性能、覆盖范围大、传输速率高、支持所有具有Wi-Fi功能的设备等优势,比较适合在本系统中使用Android设备与ARM服务端的数据通信。选择pcDuino官方的WIFI_PCDUINO作为其无线通信模块,该模块内部采用的是RT5370芯片,支持IEEE802.11/b/g/n标准,支持USB2.0,最大数据传输速率达到150Mbps,工作频率2.412GHz-2.484GHz,可以运行在多种嵌入式操作系统下。
2.3红外学习模块
为了提高智能家居控制系统的稳定性,同时为减少开发时间、降低开发难度[5],本系统中红外学习模块直接采用重庆昊纳科技自主研发的全方位下载型红外遥控学习模块,该模块可以学习市面上98%的电视、空调、音响、VCD、投影机、电风扇、DV等的遥控器。大功率全方位发射需要另外配外接电源。两种组织形式以红外码为单位组织可以支持108个单码按键、36个双码按键。以电器为单位组织可以支持客厅里常用的六种电器,掉电数据不丢失,同时支持多个设备的控制,控制指令简单,标准UART接口,TTL电平,蓝色LED指示工作状态,模块在以电器为单位组织方式下具有红外码数据下载和上载功能。红外学习模块通过串口电路与pcDuino开发板连接,实现模块与控制平台的数据接收与发送,其主要功能一是学习功能,二是控制功能[6]。红外学习模块以自定义方式(红外码为单位)的指令,0x40-0xab为一键单码自定义区,可以支持108个按键,0xac-0xcf为一键双码自定义区,可以支持36个按键,以上指令主要用于用户自定义按键功能。0xf0为进入一般学习模式,0xf2为退出学习模式。自定义方式只能采用一般学习模式来学习。各指令模块的回复数据由模块发送给控制主机,单字节串口数据,波特率为9600,N81格式,命令错误返回0xff,发射时红外码空或无效返回0xff。发射红外码正确返回0x00,学习错误返回0xff,学习正确返回0x00,同时对于指令发错或超时模块指示灯会闪烁3下提示。
2.4电源模块
在本系统中,选用9V(6节+1.5V直流电池)直流电源供电,而红外学习模块和pcDuino供电电压为+5V,这里通过7805变压芯片将9V电压转为+5V输出,如图4电压转换电路。
3红外软件控制系统设计
设计红外控制系统的软件设计由内核定制、ARM服务器软件设计和Android红外软件设计三部分组成。
3.1内核定制
嵌入式Linux的内核源码为开源,用户可以根据自己的需要对内核做相应的调整,以适应自己的系统[7]。本系统选用了Ubuntu12.04嵌入式操作系统,内核版本为3.4.29。系统内核中包含了众多的功能模块,不仅占用大量的系统资源而且对事件响应速度和执行速度也有很大影响。为了节省硬件磁盘空间、提高红外控制系统的反应速度,需要对内核模块进行有针对性的定制和裁剪,需对内核的内存管理、系统调用、中断机制、进程和进程调度、文件系统、进程间通信、设备驱动等方面的源代码进行修改,删除不必要的代码以减小内核,使内核更加精小高效,目标应用性更强。设备驱动模块在内核中占有很大比例,所以这里内核定制主要是删除一些系统没有用到的驱动模块组件,保留红外控制系统必需的设备驱动模块如无线网卡RT5370驱动、USBHost驱动等。如图5所示内核定制流程。
3.2ARM服务器软件设计
在ARM端启动服务器程序,打开已连接红外控制模块的USB串口,监听Android设备客户端的连接请求,当有连接请求时,接受客户端连接,读取来自客户端发送过来的数据,判断服务器进行何种操作。通信协议规定:数据包第一个字节发送0表示ARM服务器进行指令代码的学习操作,发送1表示ARM服务器来控制红外家电设备。服务器将客户端发送的指令代码转发到红外控制模块,实现客户端软件对家电设备的学习与控制。ARM服务器的流程如图6所示。
3.3红外控制软件设计
通过Qt开发的红外控制软件,实现了在An-droid设备对家电设备的红外码的学习和控制,通信协议规定发送的数据包第一个字节须是0或1,用于标识ARM服务端进行红外学习或者红外控制。红外控制软件的流程如图7所示,作为客户端通过无线网络向ARM服务器发送连接请求,连接成功后,对应按键的操作,通过Android设备自带的无线装置[8],向服务器发送相应的操作命令。Android设备学习和控制红外模块的具体步骤如下:a)输入ARM服务器IP地址,点击“Connect”,开始连接,按钮状态为“Disconnect”,表示已连接,也可以点击“Disconnect”断开连接。b)按下“开始学习”按钮,发送命令0xf0模块灯亮,进入学习状态,同时主机也收到0xf0回应,“开始学习”按钮被设置为“结束学习”状态。c)在文本框中输入按钮名称,按下“Enter”按钮,发送命令0x40,模块灯闪一下然后等待学习。d)原配遥控器正对着模块的黑色红外接收管,距离在3~5cm左右,确认周围无强光或红外线和电磁干扰,按一下原配遥控器需要学习的按键,模块灯熄灭同时主机接收到0x00,大概1s后模块灯再次亮表示学习成功了(如果是双码键学习,则A码学完,开始等待学习B码,再按一下原配遥控器的按键,模块灯熄灭同时主机接收到0x00表示B码学习成功了)。e)完成后,Android端红外软件上的其中未被使用的Button按钮变为可用,可以对其重命名,对应为该红外码的遥控按钮。f)如果学习错误模块灯会闪三下同时主机接收到0xff一个字节,提示重新学习,重复步骤2,3。g)按照步骤2、3将所有码键一一学完。h)Android端按下“结束学习”按钮,发送命令0xf2,模块灯熄灭,退出学习状态,同时Android端收到0xf2回应,“结束学习”按钮被重新设置为“开始学习”状态。i)学习完成后,Android端红外控制软件则可以使用按钮的红外控制功能。j)红外模块正对家电设备,按下红外软件But-ton按钮(前提是其已变为红外码的遥控按钮),ARM端向红外模块发送Button下控制命令,模块蓝灯闪烁一下,红外学习模块向家电设备发送红外命令,返回0x00表示发送成功,实现了Android设备控制家电设备的效果。k)然后将室内多种家电设备的红外码依次学习到Android红外软件,通过Android端实现家电设备的集中控制。本系统采用Android终端的用户友好型界面作为与用户的接口,Android红外软件操作界面如图8图8Android端界面所示,主要由红外学习和红外控制两部分组成。当持有智能终端的客户打开智能终端的APP时[8],输入服务器IP地址连接上ARM端,Android端自定义输入红外码,学习各种家电红外码,红外码学习完成后,即可通过界面已学习成功的按钮对家电设备进行相应的集中红外控制。
4结语
本文设计了基于ARM的红外控制系统,介绍了系统的整体框架、硬件组成以及软件流程,系统采用嵌入式Linux,在Linux操作系统下完成了红外码的学习,实现了家电设备红外功能在Android客户端的集中控制。将智能家居红外控制系统软件安装在Android设备上,经过反复测试,系统能够在Android客户端实现家电设备红外码的学习,以及家电设备红外功能的集中控制。
作者:童江松 李仁旺 钱小燕 单位:浙江理工大学机械与自动控制学院