基于s3c2410的模拟智能家居系统设计.docx

上传人:b****5 文档编号:30366678 上传时间:2023-08-13 格式:DOCX 页数:36 大小:1.42MB
下载 相关 举报
基于s3c2410的模拟智能家居系统设计.docx_第1页
第1页 / 共36页
基于s3c2410的模拟智能家居系统设计.docx_第2页
第2页 / 共36页
基于s3c2410的模拟智能家居系统设计.docx_第3页
第3页 / 共36页
基于s3c2410的模拟智能家居系统设计.docx_第4页
第4页 / 共36页
基于s3c2410的模拟智能家居系统设计.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

基于s3c2410的模拟智能家居系统设计.docx

《基于s3c2410的模拟智能家居系统设计.docx》由会员分享,可在线阅读,更多相关《基于s3c2410的模拟智能家居系统设计.docx(36页珍藏版)》请在冰豆网上搜索。

基于s3c2410的模拟智能家居系统设计.docx

基于s3c2410的模拟智能家居系统设计

景德镇高等专科学校

数学与计算机系毕业设计

(2010届)

课题名称:

基于s3c2410的模拟智能家居系统设计

姓  名:

学  号:

  

专  业:

 计算机及其应用 

所在班级:

  

指导教师:

姓名:

  

职称:

   

时  间:

二零一二年二月二十三日

 

摘要

本系统基于智能家居发展的现状,结合家具系统的仿真模型,设计以S3C2410芯片为核心处理器的智能家居演示系统。

本系统利用嵌入式计算机技术、自动控制等技术,将与家庭生活有关的各种应用子系统有机地结合在一起,通过综合管理,让家庭生活更舒适、安全、有效和节能。

该系统包括模拟家电控制,模拟温度传感,模拟窗帘开关控制,利用多种传感器模拟报警提醒等功能,系统采用Linux内核,用Qt实现操作界面。

关键词:

S3C2410智能家居家电控制温度传感Qt

随着经济的快速增长,快节奏的生活状态得人们越来越注重生活的质量和品位,人们对舒适,方便,高效的生活环境的渴望愈来愈强烈。

如何建立一个高效率智能家居系统已经成为当今世界的一个热点问题。

本文以S3C2410cpu为例,探讨基于Linux的包含了家电控制,温度传感,窗帘开关控制等功能的模拟智能家居系统的设计。

 

1.引言

1.1智能家居的概念

智能家居,又称智能住宅,在国外常用SmartHome表示。

它一般是以住宅为基础平台,综合建筑装潢、网络通信、信息家电、设备自动化等技术,将系统、结构、服务、管理集成为一体的高效、安全、便利、环保的居住环境。

1.2智能家居出现背景

信息技术的发展迅速,己深入人类生活的各个领域,并对人类的居住环境和建筑业发展产生了巨大的影响,人们已开始追求充满信息技术、安全技术、高效节能、并具有丰富人文环境的绿色住宅。

不断加快的生活节奏,使人们有了掌握海量信息的需求,急需有一个方便快捷的系统平台,把人们从繁重的家务劳作和繁琐的家电操作中解放出来,并能自动协助人们生活的智能化系统,这就是智能家居系统。

智能家居是信息技术和建筑的完美结合,其目标是使人们拥有安全、舒适、便利、节能、娱乐和优美的生活环境,这是新世纪住宅发展的必然趋势。

传统的家居环境在满足人们最基本的需要的同时,也逐渐凸显了局限性。

比如:

传统的家居没有室内灯光的统一管理,进出房间开灯不方便,不能够方便的做到人走灯灭、节约能源;传统家居环境的安全性能差,不能够做到对于各种危险情况如煤气泄露、入室抢劫等的敏感反应;不能满足远程对家居的智能监控、实时监控、集中监控。

1.3智能家居发展意义

智能家居可以定义为一个目标或者一个系统。

利用先进的计算机、网络通信、自动控制等技术,将与家庭生活有关的各种应用子系统有机地结合在一起,通过综合管理,让家庭生活更舒适、安全、有效和节能。

与普通家居相比,智能家居不仅具有传统的居住功能,还能提供舒适安全、高效节能、具有高度人性化的生活空间;将一批原来被动静止的家居设备转变为具有“智慧”的工具,提供全方位的信息交换功能,帮助家庭与外部保持信息交流畅通,优化人们的生活方式,帮助人们有效地安排时间,增强家庭生活的安全性,并为家庭节省能源费用等。

1.4智能家居发展前景

随着社会经济水平的发展,现在人们的生活追求个性化、自动化,追求快节奏,追求充满乐趣的生活方式,家装要求的档次越来越高,生活家居要求一种人性化、智能化。

智能电子技术在现实生活中的智能家居电子产品中得到广泛应用。

而计算机网络与通讯技术的应用,给人们的家居生活带来了全新的感受。

家居智能化成为一种趋势,随着人们现在生活水平的提高及对家居功能的高级需求不断增加,利用智能家居平台还可以扩展更多的生活服务和健康服务,智能家居的功能将会越来越丰富,越来越精彩。

智能家居未来的发展前景不可限量

 

1.5本文所做的工作

本文主要是基于S3C2410处理器,以此为基础进行智能家居系统各个功能模块的模拟。

软件方面:

用Qt完成操作界面编写,利用触摸屏能对各个模块进行调用实现对各个模块的控制,对各个模块驱动函数以及控制函数进行编写编译实现各个模块的控制功能。

硬件方面:

利用S3C2410外扩板进行了详细硬件电路设计。

分析系统各功能模块的实现以及各主要组成芯片的主要特征,完成各个模块的接线工作。

2.系统总体设计

2.1系统总体设计概述

本系统硬件部分以S3C2410开发板为主体,外扩电灯模块(模拟家电控制),窗帘模块(继电器控制窗帘开关),风扇模块(继电器控制风扇开关),各个传感器模块和蜂鸣器模块(模拟自动报警)。

系统总体设计模块图如下:

系统总体设计模块图

软件部分以linux-2.6.24.4为系统核心,采用arm-linux-gcc-3.4.6编译器,各个模块应用程序分别调用各个模块的驱动程序驱动设备,前台界面采用Qt-4.4.0编写。

前台界面流程图

2.2系统构成模块说明

一.S3C2410系统控制模块:

(1)家电控制模块:

利用继电器控制外扩电灯的亮与灭,模拟家电开关的合上与闭合。

(2)窗帘开关控制模块:

利用继电器控制外扩窗帘的拉开与闭合,模拟窗帘的拉开与闭合。

(3)风扇开关控制模块:

利用继电器控制外扩风扇的开关,模拟风扇的开关。

(4)温度传感模块:

利用SHT10数字温湿度传感器获取当前温度和湿度显示到触摸屏上。

二.各个警报模块:

(5)光敏传感模块:

当光敏传感器感应强光或黑暗的环境变化,产生数字信号传递高低电平控制灯的亮灭。

(6)震动传感模块:

利用震动传感器感应到震动产生数字信号传递高低电平控制蜂鸣器警报。

(7)烟雾传感模块:

利用烟雾传感器感应到烟雾产生数字信号传递高低电平控制蜂鸣器警报。

(8)火焰传感模块:

利用火焰传感器感应到火焰产生数字信号传递高低电平控制蜂鸣器警报。

 

2.3主要模块的软硬件实现

2.3.1电灯模块的实现

电灯模块采用S3C2410上的GPG11I/O口控制继电器开合,由继电器控制电灯的亮灭。

2.3.1.1电灯模块的硬件实现

电灯模块模拟图如下:

2.3.1.2电灯模块的软件实现

一.电灯模块的驱动程序核心部分如下:

//定义设备名称和定义设备节点

#defineDEVICE_NAME"light"

#defineLED_MAJOR233

//指定GPG11引脚

staticunsignedlongled_table[]=

{

S3C2410_GPG11,

};

//定义设备驱动结构体

staticstructfile_operationsqq2440_leds_fops={

.owner=THIS_MODULE,

.ioctl=qq2440_leds_ioctl,

};

//定义设备配置函数

staticintqq2440_leds_ioctl(

structinode*inode,

structfile*file,

unsignedintcmd,

unsignedlongarg)

{

switch(cmd){

case0:

case1:

if(arg>2){

return-EINVAL;

}

s3c2410_gpio_setpin(led_table[arg],!

cmd);

return0;

default:

return-EINVAL;

}

}

//设置指定引脚的输出电平为0

s3c2410_gpio_setpin(led_table[i],0);

设置指定引脚的输出电平为1

s3c2410_gpio_setpin(led_table[i],1);

二.槽函数:

按pb_light_on按钮响应on_pb_light_on_clicked()函数

调用light_on执行程序

voidWidget:

:

on_pb_light_on_clicked()

{

QProcess*process=newQProcess;

process->start("/root/Smart_Home/light/light_on");

process->waitForStarted();

}

 

按pb_light_off按钮响应on_pb_light_off_clicked()

函数,调用light_off执行程序

voidWidget:

:

on_pb_light_off_clicked()

{

QProcess*process=newQProcess;

process->start("/root/Smart_Home/light/light_off");

process->waitForStarted();

}

三.控制程序主体:

控制电灯开light_on

fd=open("/dev/light",0);//打开驱动

ioctl(fd,0,0);//输出低电平,使继电器导通。

控制电灯关light_off

fd=open("/dev/light",0);//打开驱动

ioctl(fd,1,0);//输出高电平,使继电器断开。

 

2.3.2风扇模块的实现

风扇模块采用S3C2410上的GPG0I/O口控制继电器开合,由继电器控制风扇的开关。

2.3.2.1风扇模块硬件实现如下

2.3.2.2风扇模块软件实现

一.风扇模块的驱动程序核心部分如下:

//定义设备名称和定义设备节点

#defineDEVICE_NAME"fan"

#defineLED_MAJOR239

//指定GPG11引脚

staticunsignedlongled_table[]=

{

S3C2410_GPG0,

};

//定义设备驱动结构体

staticstructfile_operationsqq2440_leds_fops={

.owner=THIS_MODULE,

.ioctl=qq2440_leds_ioctl,

};

//定义设备配置函数

staticintqq2440_leds_ioctl(

structinode*inode,

structfile*file,

unsignedintcmd,

unsignedlongarg)

{

switch(cmd){

case0:

case1:

if(arg>2){

return-EINVAL;

}

s3c2410_gpio_setpin(led_table[arg],!

cmd);

return0;

default:

return-EINVAL;

}

}

//设置指定引脚的输出电平为0

s3c2410_gpio_setpin(led_table[i],0);

设置指定引脚的输出电平为1

s3c2410_gpio_setpin(led_table[i],1);

 

二.槽函数:

按下pb_fan_on按钮响应on_pb_fan_on_clicked()

函数,调用fan_on控制程序。

voidWidget:

:

on_pb_fan_on_clicked()

{

QProcess*process=newQProcess;

process->start("/root/Smart_Home/fan/fan_on");

process->waitForStarted();

}

按下pb_fan_off按钮响应on_pb_fan_off_clicked()

函数,调用fan_off控制程序

voidWidget:

:

on_pb_fan_off_clicked()

{

QProcess*process=newQProcess;

process->start("/root/Smart_Home/fan/fan_off");

process->waitForStarted();

三.控制程序主体

控制风扇开fan_on

fd=open("/dev/fan",0);//打开驱动

ioctl(fd,0,0);//输出低电平使继电器导通,风扇开。

控制风扇关fan_off

fd=open("/dev/fan",0);//打开驱动

ioctl(fd,1,0);//输出高电平使继电器断开,风扇关

2.3.3窗帘模块的实现

本实验用的窗帘是市面上的成品,窗帘有三个控制端,其中有一个公共端与其他两端相接分别实现窗帘的电机正转和反转(窗帘拉开与闭合动作)用三路继电器控制窗帘的三个端,窗帘正转和反转都要控制一个端口导通其他两个端口断开。

窗帘模块采用S3C2410上的GPG9I/O,GPG8I/O,GPG10I/O口分别控制三个继电器开合控制窗帘的三个控制端,实现窗帘的拉开与闭合。

2.3.3.1.窗帘模拟实现图

2.3.3.2窗帘模块软件实现

#defineDEVICE_NAME"curtain"

#defineLED_MAJOR236

staticunsignedlongled_table[]={

S3C2410_GPG9,

S3C2410_GPG10,

S3C2410_GPG8,

};

//定义设备驱动结构体

staticstructfile_operationsqq2440_leds_fops={

.owner=THIS_MODULE,

.ioctl=qq2440_leds_ioctl,

};

//定义设备配置函数

staticint__initqq2440_leds_init(void)

{

intret;

inti;

ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&qq2440_leds_fops);

if(ret<0){

printk(DEVICE_NAME"can'tregistermajornumber\n");

returnret;

}

for(i=0;i<3;i++){

s3c2410_gpio_cfgpin(led_table[i],led_cfg_table[i]);

s3c2410_gpio_setpin(led_table[i],1);

}

printk(DEVICE_NAME"initialized\n");

return0;

}

//设置指定引脚的输出电平为0

s3c2410_gpio_setpin(led_table[i],0);

设置指定引脚的输出电平为1

s3c2410_gpio_setpin(led_table[i],1);

二.槽函数:

当点击pb_curtain_z按钮响应on_pb_curtain_z_clicked()函数

调用curtain_z执行程序。

voidWidget:

:

on_pb_curtain_z_clicked()

{

QProcess*process=newQProcess;

process->start("/root/Smart_Home/curtain/curtain_z");

process->waitForStarted();

}

当点击pb_curtain_off按钮响应on_pb_curtain_off_clicked()

函数,调用curtain_off执行程序。

VoidWidget:

:

on_pb_curtain_off_clicked()

{

QProcess*process=newQProcess;

process->start("/root/Smart_Home/curtain/curtain_off");

process->waitForStarted();

}

当点击pb_curtain_f按钮响应on_pb_curtain_f_clicked()

函数,调用curtain_f执行程序。

voidWidget:

:

on_pb_curtain_f_clicked()

{

QProcess*process=newQProcess;

process->start("/root/Smart_Home/curtain/curtain_f");

//qDebug()<<"Execledsapp...";

process->waitForStarted();

}

三.控制程序主体

控制窗帘拉开curtain_z

fd=open("/dev/curtain",0);//打开驱动。

ioctl(fd,0,0);//将第一个I/O口GPG9输出低电平使继电器导通。

//使其他两个I/O口输出高电平是继电器断开

ioctl(fd,1,1);

ioctl(fd,1,2);

控制窗帘关闭curtain_off

fd=open("/dev/curtain",0);//打开驱动。

//将第二个I/O口GPG8输出低电平使继电器导通。

//使其他两个I/O口输出高电平是继电器断开

ioctl(fd,1,0);

ioctl(fd,0,1);

ioctl(fd,1,2);

控制窗帘闭合curtain_f

fd=open("/dev/curtain",0);//打开驱动。

//将第二个I/O口GPG10输出低电平使继电器导通。

//使其他两个I/O口输出高电平是继电器断开

ioctl(fd,1,0);

ioctl(fd,1,1);

ioctl(fd,0,2);

2.3.4温湿度传感模块

当温湿度传感器获取当前温度和湿度时,将温湿度显示到触摸屏上。

本实验使用的芯片是SHT11数字温湿度传感器,SHT11系列为贴片型温湿度传感器芯片;全量程标定,两线数字输出;湿度测量范围:

0~100%RH;湿度测量范围:

-40~+123.8℃;湿度测量精度:

±2%RH;温度测量精度:

±0.3

℃响应时间:

<8s;低功耗(typ.30μW);可完全浸没。

2.3.4.1温湿度传感模块硬件图如下:

2.3.4.2温湿度传感软件实现如下

#include

#include

#include

#include

#include

#defineTEMP0

#defineHUMI1

voidcalc_sht11(float*p_humidity,float*p_temprature)

{

constfloatC1=-0.40;//针对于12为测量精度

constfloatC2=0.0405;

constfloatC3=-0.0000028;

constfloatT1=0.01;//相对湿度的温度补偿

constfloatT2=0.00008;

floatrh=*p_humidity;

floatt=*p_temprature;

floatrh_lin;

floatrh_true;

floatt_C;

t_C=t*0.01-40;//温度值(14为测量数据精度时)

rh_lin=C3*rh*rh+C2*rh+C1;//临时湿度值

rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;//修正后的湿度值

if(rh_true>100)rh_true=100;

if(rh_true<0.1)rh_true=0.1;

*p_temprature=t_C;

*p_humidity=rh_true;

}

floatcalc_dewpoint(floath,floatt)//空气的露点值

{

floatk,dew_point;

k=(log10(h)-2)/0.4343+(17.62*t)/(243.12+t);

dew_point=243.12*k/(17.62-k);

returndew_point;

}

voiddelay(inttime)

{

inti;

for(i=0;i

i++;

}

intmain(void)

{

intfd,ret,i;

unsignedintvalue_t=0;

unsignedintvalue_h=0;

floatfvalue_t,fvalue_h;

floatdew_point;

fd=open("/dev/sht11",0);

if(fd<0)

{

printf("open/dev/sht11error!

\n");

return-1;

}

for(;;)

{

fvalue_t=0.0,fvalue_h=0.0;value_t=0;value_h=0;

ioctl(fd,0);

ret=read(fd,&value_t,sizeof(value_t));

if(ret<0)

{

printf("readerr!

\n");

continue;

}

sleep

(1);

value_t=value_t&0x3fff;//温度:

14位测量数据

//printf("value_t=%d\n",value_t);

fvalue_t=(float)value_t;

ioctl(fd,1);

ret=read(fd,&value_h,sizeof(value_h));

//printf("value_h=%d\n",value_h);

sleep

(1);

if(ret<0)

{

printf("readerr!

\n");

continue;

}

value_h=value_h&0xfff;//湿度:

12位测量数据

fvalue_h=(float)value_h;

calc_sht11(&fvalue_h,&fvalue_t);//将输出转换为物理量

dew_point=calc_dewpoint(fvalue_h,fvalue_t);//空气的露点值

printf("temp:

%fchumi:

%fdewpoint:

%fc\n",fvalue_t,fvalue_h,dew_point);

sleep

(1);

}

}

3.前台界面设计

本系统前台操作界面采用Qt-4.4.0设计,利用开发板自带的触摸屏驱动实现触屏控制。

前台界面框架如图:

3.1.前台界面操作软件

#include

#include

#include

#include

#include

#include"widget.h"

#include"ui_widge

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1