基于ARM平台的智能家居系统的设计与实现.docx
- 文档编号:11809724
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:28
- 大小:1.12MB
基于ARM平台的智能家居系统的设计与实现.docx
《基于ARM平台的智能家居系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于ARM平台的智能家居系统的设计与实现.docx(28页珍藏版)》请在冰点文库上搜索。
基于ARM平台的智能家居系统的设计与实现
目录
第1章绪论-1-
1.1开发背景-1-
1.2国内外研究动态-1-
1.3系统设计原则-1-
第2章系统设计平台-3-
2.1Linux介绍-3-
2.2虚拟机介绍-3-
2.3Qt介绍-4-
第3章功能分析-5-
3.1智能家居的主要功能-5-
3.2智能家居的界面-6-
3.3智能家居的流程图-7-
第4章硬件设计-8-
4.1ARM主板的介绍-8-
4.2DS18B20温度传感器的介绍-9-
第5章驱动的编译与加载-10-
5.1驱动程序的编译-10-
5.2驱动程序的加载-11-
第6章软件模块-12-
6.1视频监控模块-13-
6.1.1V4L采集模块-13-
6.1.2视频图像传输模块-14-
6.1.3视频图像的转换模块-15-
6.2温度传感器模块-16-
6.2.1DS18B20的初始化-16-
6.2.2DS18B20的写操作-17-
6.2.3DS18B20的读操作-17-
6.3室内灯光控制模块-18-
6.3.1led初始化-18-
6.3.2获取led的状态-19-
6.3.3设置led的状态-20-
6.4特定气体浓度监测模块-20-
6.4.1ADC驱动的初始化-21-
6.4.2注册ADC驱动-21-
第7章结束语-23-
7.1存在的问题-23-
7.2对未来的展望-23-
参考文献-24-
致谢-25-
摘要
随着社会的日益信息化,计算机和网络已经全面渗透到日常生活的每一个角落。
对于我们每个人来说,人们的家居生活除了追求装修别致以外,更加向往智能、便捷的智能家居。
人们家居生活中很多的电器都可以加入到智能家居的项目中,让家中的每一个角落都可以实现智能化,让物联网的技术迅速走进千家万户的便捷生活中。
本课题的设计是基于ARM平台的智能家居系统。
设计中采用友善之臂公司的Mini2440作为ARM主板,通过在ARM板上外接DS18B20温度传感器、LED灯、摄像头进行数据采集,利用UDP协议在客户端和服务器端进行数据传输来实现远程控制、远程监控、警报等功能,让智能家居系统变为人们生活中的好帮手。
针对智能家居的功能,本设计把supervivi作为bootloader,以具有可移植度高、免费、开放等特性的Linux内核做为kernel,把红帽系统作为PC机上客户端运行的系统,在ARM板加载ADC、温度传感器、LED二极管的驱动模块,在红帽上交叉编译服务器端的程序,然后移植到ARM板上运行,与PC机上的客户端进行数据传输,这样一个简单的智能家居系统就完成了。
关键字:
嵌入式;智能家居;Linux移植;S3C2440
Abstract
Increasinglyalongwiththesocialinformatization,computerandnetworkhaspenetratedintoeverycornerofourdailylife.Foreveryoneofus,thehouseholdofpeoplelivinginadditiontothepursuitofdecoratingchic,moreyearningintelligentandconvenientintelligenthousehold.Peoplelivinginthelifealotofelectricequipmentcanbeaddedtothesmarthomeproject,makeeverycornerinthehomecanrealizeintelligent,lettheInternetofthingstechnologyrapidlyintothousandsofhomesandconvenientlife.
ThedesignofthistopicisbasedonARMplatformofsmarthomesystem.AdoptedinthedesignofaffectionateARMMini2440asARMmotherboard,onanARMboardthroughanexternalDS18B20temperaturesensordatacollection,LEDlights,camera,ontheclientandserverusingUDPprotocolfordatatransmissiontoimplementremotecontrol,remotemonitoring,alarmandotherfunctions,tomakeagoodhelperinsmarthomesystemintopeople'slife.
Withthefunctionofsmarthome,thisdesignsuperviviasthebootloader,withhighdegreeofportability,freeandopenfeaturesoftheLinuxkernelasthekernel,theredhatsystemasaPCclientrunningsystem,loadtheARMboardADCdrivermodule,temperaturesensor,LEDdiodes,cross-compilationserver-sideprogramintheredhat,portedtorunonARMboard,datatransmissionwithPCclient,suchasimplesmarthomesystemiscompleted.
KeyWords:
embedded;Smarthome;thetransplantofLinux;S3C2440
第1章绪论
1.1开发背景
随着科学技术的的飞速发展和人民生活水平的不断提高,人们已经开始追求更加便捷、舒适、自动化的居住环境,也就是智能家居也称智能住宅(SmartHome)。
智能家居是以住宅为平台,它将基础建筑和网络传输、设备自动化控制进行系统集成。
智能家居利用先进的计算机技术、网络通讯技术、综合布线技术、将各个模块有机得结合在一起,让家居生活更加舒适、安全、有效。
智能家居不仅要拥有传统的居住功能,而且还要把传统家居中静止结构改变为智能工具,进行多层次的信息交换,通过外网可以实时访问家庭内部的信息参数,这样就可以使家庭生活智能、安全,优化家庭的生活方式。
1.2国内研究动态
智能家居在我国起步比较晚,目前家居网络的应用复杂而分散,没有统一的标准,但是伴随着高科技和信息技术智能家居已经走进一个个家庭。
如今的智能家居产品是基于互联网+GSM移动网双网平台设计的智能家居系统,双网设计大大提高了系统的可靠性,即使在某些互联网网速低或不稳定的地方使用也不会影响系统的主要功能。
客户可以根据自己的个性化的需求灵活地选择所需要的功能模块组装自己的智能家居,智能家居控制主机可以无缝连接各功能模块,包括智能家居控制网关、网络摄像机视频监控、各类报警器设备、无线红外线转发器、温度传感器、电动窗帘等,用户可以根据自己的需求和预算DIY自己的智能家居生活。
1.3系统设计原则
智能家居系统设计的内容应该符合用户的实际需求,要兼顾到经济的可行性和功能上的可行性。
不能为了片面追求系统的超前性,而造成成本过高,系统的实用性必须要考虑。
其次,由于智能家居控制系统需要不间断运行,并且和我们的正常生活、工作息息相关,所以系统的稳定性就显得尤为重要。
智能家居系统的技术不断向前发展,用户需求也在发生变化,因此智能家居控制系统的设计与实施应考虑到将来可扩展的实际需要,增减或者更新各个子系统,满足不同时期的需要,保持长时间的技术优势。
智能家居系统在运行过程中的维护应该尽量做到简单易行。
系统的运行要做到简单快捷,维护过程中无需使用过多专用的维护工具。
从硬件的配置到系统的配置,前端设备的配置都充分仔细地考虑了系统可靠性,确保故障率最低的同时,也要未雨绸缪,因为意想不到的原因发生问题时,确保有手动控制的功能,并且设备之间不可相互干扰。
第3章功能分析
本课题的智能家居系统,ARM是整个系统的控制核心,通过网络通信收发指令实现对家居环境的综合监控,可以让客户更加快捷、方便地远程获取家居中的情况,还可以远程控制家电,报警等功能。
3.1智能家居的主要功能
智能家居系统的实用性和易操作性非常重要,智能家居中的每一个功能都是为了客户方便快捷地查看家居中的各种信息,并且根据得到的信息通过网络对家居中的家电进行远程控制,让普通居民步入信息时代的步伐更加快速,这主要依托于家庭网络的兴起,以及传感器技术和家电的迅速发展,通过智能家居的模块化控制实现信息家电。
例如:
当煤气泄漏,发生火灾必须第一时间对客户或者小区管理中心发出警报,这是对客户的家居安全负责。
另外,客户可以远程对家居中的照明设施、监控设施进行远程操控,这是为了客户更加快捷、方便的进行家电管理。
如今已经发展到第五代住宅,如今已经不仅仅追求华丽的家居,更加智能化、更加快捷的家居环境已经成为人们的追求,这也是科技快速发展后的必然趋势。
本论文所实现的功能还很有限,目的只是模拟真正的智能家居系统。
随着传感器等技术的不断发展,智能家居势必会不断进行更新。
本论文中的功能还需要不断增加升级,使其功能性更加完善,下面是主要功能的介绍:
(1)室内环境信息采集:
通过温度传感器、摄像头、ADC转换以及程序中对LED发光二极管的状态的获取,再通过网络传输就可以实时地显示出各个监测数据。
(2)自动报警:
当检测到家居中特定气体等超标就自动报警,告知居室主人。
为了能够直观的展示报警功能,利用ADC转换来模拟气体浓度监测的传感器,当调节定位器的时候,ADC的数值会发生改变,当超过程序中的预设值时,程序会自动调用蜂鸣器的驱动,进行报警。
(3)远程控制:
用户可以通过登录客户端,通过网络远程对家居中的家电进行控制,此设计中主要可以远程控制模拟家居中各个电灯的LED发光二极管,当客户通过客户端对LED的状态进行改变的时候,客户端会通过网络对服务器发出请求,而服务器端在响应客户端的请求时,会根据收到的数据信息调用相应的函数做出不同的处理。
(4)远程监控:
这个功能是通过摄像头捕获视频信息,再对视频数据进行压缩和格式转化,然后把数据通过网络传输到客户端,再利用Qt中图片显示的函数,把图片数据显示出来。
此外,还要最近摄像头捕获到的图片,用于视频回放的功能。
3.2智能家居的界面
如图3-1所示,这是本设计智能家居的主功能界面,左面的框是实时监控的界面,这里是利用Qt中显示界面的函数把服务器端传来的数据,一帧一帧循环依次显示,这样就实现了远程监控功能。
右上角的第一个数据是通过温度传感器测到数据,然后进行显示,服务器端会不停对当前的温度进行更新。
温度下面的数据是煤气浓度的显示框,这里是用ADC数模转换来模拟的,通过定位器就可以设置该数据的大小,当数值大于预定值200时蜂鸣器就会发出警报。
右下角是各个功能的开关,有三个LED二极管的开关,这里模拟的是家居中不同的照明设备。
还有摄像头的开关,这个开关只是关闭画面的显示,服务器端会始终接受摄像头捕获的数据,并且会生成最新的监控视屏录像。
最下面的关闭按钮是程序的退出按钮,当点击该按钮时,系统会退出。
图3-1智能家居主界面
3.3智能家居的流程图
如3-2所示,这是智能家居的功能流程图,服务器端和客户端的数据传输采用UDP通信协议,服务器端主要的功能是捕获各个传感器的实时信息,客户端的主要功能是通过界面把获取的数据显示出来,另外,还有客户与界面的交互。
图3-2智能家居的流程图
第4章硬件设计
本课题智能家居系统的实现,硬件系统的搭建非常重要,程序的服务器端需要运行在ARM开发板上,与PC机上运行的客户端通过网线、串口线进行数据传输,另外还需要把温度传感器、摄像头、LED发光二极管连接到ARM板的CON4接口上,在这里主要介绍ARM主板和DS18B20温度传感器。
4.1ARM主板的介绍
智能家居系统的主要硬件是mini2440(如图4-1),这是一款低价实用的ARM9开发板,它采用SamsungS3C2440为微处理器,并采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行的稳定性。
图4-1ARM9开发板
智能家居系统属于嵌入式项目,嵌入式项目的开发一般选用ARM主板,选用ARM主板的优势很多。
其中最大的优势就是ARM主板的功耗,通常所见的X86的功耗都在40W左右,而ARM板的功耗只有1W左右,但是从性能角度讲,ARM主板的性能与X86主板的性能相当接近,视频、通信等方面基本和X86相似。
另外,智能家居这样的嵌入式项目需要长时间、全天候地运行,而ARM主板可以一直处于运行状态,不受任何时间的限制,并且在断电后来电ARM板会自启动。
X86的主板需要维护,也不能长期处于运行状态。
芯片采用贴片的方式也使ARM主板的安全性得到了极大的提高,当ARM板处于震动的情况下不会松动。
ARM不仅在硬件方面灵活轻巧,系统也可以根据项目的需求进行配置。
本设计采用的是友善之臂mini2440的开发板,它是一款性价比极高的开发板,它所采用的微处理器性能比较稳定,并且接口齐全,从开发角度讲资料丰富,技术支持强。
4.2DS18B20温度传感器的介绍
DS18B20温度传感器(如图4-2)是单总线的,该传感器出厂时的默认设置为12位数值,刻度值为0.0625℃,最长转换时间为750ms。
但是它可以设置为9-12位的数值位,所对应的精确值为0.5℃、0.25℃、0.125℃、0.0625℃。
如果把温度传感器的数值位设置地越低,他的转换时间久越短,反应速度也越快。
DS18B20温度传感器有三个主要的数据部件:
(1)64位的激光ROM
(2)温度灵敏元件(3)非易失性温度告警触发器TH和TL。
器件从单线的通信线取得其电源,在信号线为高电平的时间周期内,把能量贮存在内部的电容器中,在单信号线为低电平的时间期内断开此电源,直到信号线变为高电平重新接上寄生电源为止。
作为另一种可供选择的方法,DS18B20也可用外部5V电源供电。
图4-2DS18B20温度传感器
第5章驱动的编译与加载
在Linux系统内核中,驱动是不可分割的一部分,它屏蔽了硬件细节,是整个操作系统中必不可少的。
有两种方式可以实现驱动程序与Linux内核的结合:
在编译内核时,静态地链接进内核;在系统运行时,加载内核时用模块加载的方式。
5.1驱动程序的编译
将驱动程序.c文件传到宿主机中。
宿主机在这里指的是可以运行Linux任何PC机,可以是在虚拟机下使用的Linux系统的PC机,也可以是直接安装Linux操作系统的PC机。
因为在mini2440ARM板上进行程序的调试和开发时,会占用开发板很大的资源,而mini2440ARM开发板的开发资源师有限的,所以,必须要借用宿主机进行程序的交叉编译,在宿主机上交叉编译完成之后,通过USB下载的方式或者网络传输的方式把可执行文件放到mini2440ARM开发板上,其中网络传输的方式包括TFTP和NFS两种方式,但是事先需要把服务器搭建好。
要想在mini2440ARM开发平台上运行程序必须通过这种宿主机和开发板相互合作的方式,在宿主机上完成除运行之外的链接库、编译等所有的步骤,最后生成可执行文件。
本设计是在windows操作系统下搭建虚拟机,在虚拟机上运行RedHat红帽系统的宿主机。
通过串口线和网线把运行红帽系统的PC机和mini2440ARM板连接起来,其中通过超级终端可以实现人机交互。
超级终端实质上可以作为mini2440ARM开发板的终端显示器,要对ARM开发板进行一些操作的话,可以通过输入linux命令对开发板进行控制。
而用网线把宿主机和ARM开发板相连接,是进行数据传输、共享的通道。
如果利用NFS服务器进行数据传输的方式,PC机上红帽操作系统中的/home/armwork目录将作为数据共享目录,在超级终端中通过mount命令将此目录挂载到ARM开发板的/mnt目录中,打开ARM开发板后,/mnt目录中的内容就是红帽系统中/home/armwork目录中的内容。
交叉编译链是在程序编译过程中必不可少的工具,在这里交叉编译的目的就是在PC机上的红帽系统中编译出能在mini2440ARM开发板中运行的可执行文件,但是在PC机上的linux系统是不能运行的,必须放到ARM板上才可以运行,这种在不同平台移植和嵌入式开发是非常必要的。
我们经常用的编译工具大多数都是本地编译器,大多数情况我们只需要在本地编译本地运行。
而我们用mini2440ARM开发板运行程序时,就需要在性能比ARM板优越的PC机上编译要运行的程序。
5.2驱动程序的加载
在PC机上的linux系统中把驱动程序编译成可执行文件,这个可执行文件就是要在ARM板上加载的模块。
模块下载到ARM上,加载模块的工作在目标板上进行,因为驱动程序需要在ARM板上运行,所以必须加载到ARM板上的内核中。
PC机上的红帽操作系统和ARM板上都是Linux操作系统,但是它们的用途是不一样的,PC机上的Linux系统装有交叉编译系统,目的是编译C语言程序,生成目标文件和可执行文件,为了节省ARM板的空间,只在ARM板上运行程序。
首先运行超级终端,运行ARM板上的Linux系统,并且把红帽系统上的/home/armwork目录挂在到目标板的/mnt目录下。
目的是为了让目标板共享宿主机上的/home/armwork目录,即要想打开宿主机上的/home/armwork目录,只要通过超级终端打开的/mnt目录就可以了。
于是前面所编译生成的可执行文件就可以直接通过这个目录获取了。
然后要通过超级终端来操作mini2440ARM板,串口是实现人机交互的必须数据传输通道。
首先要接好串口线。
运行windows下的超级终端,打开超级终端(开始->所有程序->附件->通讯->超级终端),如果是新建超级终端必须配置参数使之与mini2440ARM相匹配。
如果在红帽Linux系统中,则启动minicom(调整好终端命令行的大小后,输入minicom命令)根据minicom的提示,按CTRL+A,松开后再按Z,进入minicom配置界面,同样要配置成与目标板相匹配的参数。
以下操作都是在超级终端或minicom下进行输入的。
在mini2440ARM板上创建设备节点,输入的指令为:
>cd/mnt/可执行文件名
>rm-f/dev/可执行文件名
>mknod/dev/可执行文件名c2540
如果有名称相同的设备节点必须进行强制清除;然后再添加新的设备节点,类型为字符型设备,主设备号为254,从设备号为0。
因为/mnt目录已经被挂在到PC机Linuux中的/home/armwork目录下了,那么查看/home/armwork目录下的文件就可以通过查看/mnt目下的文件方式实现了。
从命令中能够看出,设备节点是存储在/dev目录下的,可以通过下面命令查看系统已经建立了哪些设备节点。
>ls/dev
最后,必须加载模块到ARM板的内核中,使用insmod实现
>insmod驱动可执行文件名
第6章软件模块
为了智能家居功能的可扩展性,软件模块尽量要做到相互独立,有助于智能家居的不断更新功能,如果软件内的功能模块相互交叉,软件很难进行后期的更新,这就需要前期开发时,功能模块要划分清晰,每一个模块的硬件、驱动、功能代码都必须有独立的接口,以便于后期的扩展和维护。
6.1视频监控模块
本设计中摄像头的驱动是自动加载的,所以摄像头的驱动不用人工加载,直接在服务器的功能代码中对摄像头进行初始化,然后定义缓冲循环接受摄像头捕获的数据,再对接受的数据进行格式转化,最后通过网络传输到客户端处理。
6.1.1V4L采集模块
V4L(VideoforLinux)是Linux操作系统提供的一个标准化的视频采集接口,所有的音频和视频驱动的开发都需要Liunx提供这些接口。
本设计采用的是V4L2,V4L从2.4.1.x的内核版本中开始出现,现在开发使用的VideoforLinux2(V4L2)是V4L的加强版。
一般程序开发的图像捕获函数和处理程序都基于V4L2标准,通过对ioctl函数的调用来实现摄像头的打开,图像的数据捕获以及通过图片的格式呈现在软件上。
下面是一些ioctl函数:
(1)ioctl(fd,VIDIOC_S_FMT,&fmt):
图像格式的设置。
(2)ioctl(fd,VIDIOC_REQBUFS,&req):
申请缓冲,申请的缓冲区的个数存到计数器中。
(3)ioctl(fd,VIDIOC_QUERYBUF,&buf):
查询buffer的配置信息,其中有空间的偏移地址、buffer的大小、使用状态。
(4)ioctl(fd,VIDIOC_QBUF,&buf):
申请一个空的buffer放到队列中,程序执行后,视频设备启动以后,相应的数据流保存到输入队列的buffer中。
图像采集处理流程图如6-1所示:
图6-1图像采集处理流程图
对摄像头进行初始化的核心代码:
video->videofd=videofd=video_open(VIDEODEV);
v4l2_get_capability(videofd);
video_enum_format(videofd);
video_get_current_format(video);
video_set_current_format(video);
video_set_streamparam(videofd);
video_request_buffer(videofd);
video_query_buf(videofd);
6.1.2视频图像传输模块
视频图像传输在传输的实时性、同步性上要求很高,并且要求传输延迟小。
为了视频的实时性,可以忽略传输过程中数据包的丢失,但是不能因为传输的差错机制引起不连续或显示混乱。
智能家居系统鉴于视频传输的特点采用UDP协议。
发送端为服务器,接收端作为客户机。
客户端向服务器端提出连续请求。
服务器接受请求以后,开始向客户机发送视频数据。
服务器端首先要获取经压缩的一帧视频数据,写入传输缓冲区。
对一帧视频数据,在传输中他们要被分解为若干数据包,作为一个分组。
在网络传输视频时,发送端和接受端需要确定一个传输的协议。
UDP是一种简单的传输协议。
UDP是无连接的,不提供数据的重传和确认,可以提高传输的效率,并且UDP支持网络广播功能,适合进行网络视频传输。
6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 平台 智能家居 系统 设计 实现
![提示](https://static.bingdoc.com/images/bang_tan.gif)