嵌入式 智能家居报告.docx
《嵌入式 智能家居报告.docx》由会员分享,可在线阅读,更多相关《嵌入式 智能家居报告.docx(14页珍藏版)》请在冰豆网上搜索。
嵌入式智能家居报告
课程设计
课程名称嵌入式系统课程设计
题目名称智能家居控制系统
学生学院自动化学院
专业班级电子信息科学与技术1班
学号
学生姓名
指导教师
2012年05月24日
广东工业大学课程设计任务书
题目名称
智能家居控制系统
学生学院
自动化
专业班级
电子信息科学与技术
姓名
学号
1.课程设计要求:
●团队任务
●熟悉实验面板的部件,包括:
LED调光
百叶窗控制模块
移动传感模块
亮度传感模块
继电器
外部输入模块,等。
●熟悉相关配置软件的使用
●熟悉嵌入式编程代码的书写
●在上述部件的基础上,构思一个家庭控制场景,利用上述或者外界的其它电子设备(当然,要以实验面板为主体)完成家庭控制的目的。
●要求使用实验面板上三种或以上部件
●完成相应课程设计报告
⏹课程设计报告需要对整个设计的目标、功能介绍、原理、实现方法、实验结果、总结等
⏹课程设计报告需有控制流程的原理图
⏹课程设计报告中需要明确小组成员每人的任务量和任务内容
2.课程设计的成果:
(1)实现家庭控制场景的相应配置文件和AVR源代码
(2)项目报告
发出任务书日期:
年月日指导教师签名:
计划完成日期:
年月日基层教学单位责任人签章:
主管院长签章:
目录
1课程设计目的与要求5
1.1设计要求5
2概述5
2.1家庭控制场景5
2.2实现此场景所要包括的功能5
3课程设计原理6
3.1原理6
4功能设计及实现6
4.1灯光亮度调节原理及实现方法6
4.2室内电器自动开关功能7
4.3自动报警功能8
5总结8
5.1实验结果8
5.2总体工作时间9
5.3工作分工9
6心得体会10
7附录10
7.1配置的参数图:
10
7.2修改的程序11
1课程设计目的与要求
1.1设计要求
1)团队任务
2)熟悉实验面板的部件,包括:
LED调光、百叶窗控制模块、移动传感模块、亮度传感模块继电器、外部输入模块,等。
3)熟悉相关配置软件的使用
4)熟悉嵌入式编程代码的书写
5)在上述部件的基础上,构思一个家庭控制场景,利用上述或者外界的其它电子设备(当然,要以实验面板为主体)完成家庭控制的目的。
6)要求使用实验面板上三种或以上部件
7)完成相应课程设计报告
2概述
2.1家庭控制场景
在这次课程设计中,为了很好地用到实验开发板所提供的功能,我模拟了这样一个智能家居家庭控制场景:
在傍晚的时候,夜幕降临,刚下班的我一打开家的大门,家里的温馨的灯自动打亮,空调自动打开,温馨的轻音乐响起,厨房的电饭煲、微波炉等电器全部打开。
为赶公车下班,拖着一身疲惫的我,送来清凉和新鲜的空气和舒适的环境及美味的佳肴。
我的精神为之一震,顿时从疲惫的状态走了出来,觉得光线不合心意,还可以进行调节。
而在我离开家去上班的时候,家里切换到报警系统。
忠心而又可靠的替我守护家园。
2.2实现此场景所要包括的功能
1)室内灯光亮度调节:
根据个人需求,对于外界光线的需求,利用按键进行对室内光线,灯光的亮度调节,分成8个亮度,可以自由的选择灯光的亮度,以调节室内的光线,适应个人的需求。
需要关闭时,按下关闭键,就可一键关闭。
2)家用电器自动开关功能:
家用电器用LED灯来代替,程序中它与检测主人回家连接在一起。
当主人回到家时,家用电器按需逐渐自动打开(即LED依次序点亮)。
3)自动报警系统:
自动报警系统通过移动探头检测是否外界有人或物进入、移动,一旦检测到有人进入警戒范围内,移动探头就会发出信号,促发警报系统,这里用继电器的开关演示,警报系统会一直发出警报直到主人关闭警报系统。
有人在家的话,可以关闭警报系统,睡觉或者外出时开启警报系统以防止被盗或者意外。
3课程设计原理
3.1原理
利用基于KNX总线协议的ETS4智能家居开发软件,设计出囊括所要实现的智能家居的所有可能性的数据库,然后在此基础上进行二度开发,编写运行数据库里面数据的程序,就好比物流,数据库里面的参数就是货物,程序就是搬运工,两者结合就组成了物流,所以我们可以通过修改以及编写不同运行的程序,在同一个数据库功能的前提下,实现不同的功能。
又或者通过数据库里面物理地址的不同链接,而模拟出不同的功能。
4功能设计及实现
4.1灯光亮度调节原理及实现方法
功能描述:
当觉得光线不合此时的气氛,想营造一个更加舒适的氛围。
这是个必不可少的功能,你可以通过按钮来进行调光功能。
程序流程图:
开发板实现方式:
使用按键触发,按键开关给对应端口发出豹纹,通过识别豹纹选定控制程序,每按一次按键,通过识别输入量,利用函数AboutSET判别输入为1时,对全局变量灯光设置LEDSET进行判别设置,小于8时加1,等于8时置1。
通过数组LD存储灯光亮度值,再根据LEDSET的值选择灯光亮度值LEDFLAG,然后调用灯光函数DimmerObjectOFIn,对灯光开关亮暗进行调节。
需要快速关闭时,按下关闭键,关灯并将所有的参数复位。
4.2室内电器自动开关功能
功能描述:
当主人打开门的时候,室内的电器,就会根据主人之前设定的情况,按照主人的生活习惯和爱好,把想要的电器在进门的时候,自己打开,给主人一个智能、舒适、温馨的家。
程序流程图:
开发板实现方式:
通过ETS4,给予继电器模块、开关模块等同一个物理地址,实现它们的同步工作,继电器模块的显示灯、LED等模拟室内电器,开关模块模拟主人回家的感应器,从而模拟室内电器自动开关功能。
4.3自动报警功能
功能描述:
自动报警系统通过移动探头检测是否外界有人或物进入、移动,一旦检测到有人进入警戒范围内,移动探头就会发出信号,促发警报系统,这里用继电器的开关演示,警报系统会一直发出警报直到主人关闭警报系统。
程序流程图:
开发板实现方式:
通过移动探头触发,发出豹纹,相应的端口接收豹纹选定控制程序,当输入为1的时候,则开启警报(继电器以及相连的灯),调用函数SwitchObjectOFIn,同时利用函数ObjectDisablePIR关闭移动探头使能端,使得警报系统一直处于警报状态。
确定要关闭警报时,手动按键,利用SwitchObjectOFIn清掉警报,然后根据需要选择是否再次开启警报系统。
用一个按键控制警报的清除与警报系统的开关,当按键输入0时,用ObjectDisablePIR关闭警报系统并清除警报,输入1时打开警报系统。
5总结
5.1实验结果
编写好程序,设置好实验版参数并下载到板上,按动控制灯光亮度调节的按键,按第一下其显示灯(PORTE端口的LED灯)点亮,但是调光的LED灯不亮,按第二次,调光的LED灯亮,继续按下去,LED灯亮度慢慢增强,直到按下第八次,显示灯暗,调光的LED灯也暗了。
对于主人回家家用电器自动打开,通过探测主人是否回家,即处于一直等待主人回家状态,此时电器关闭(即LED全灭),当主人回家时,电器依次打开(即LED依次点亮)。
实现预期效果。
对于警报系统,触发移动探头,继电器1打开,与其连接的灯也点亮,并且不会暗下去直至手动按下警报关闭键,再次打开警报系统,触发移动探头,出现一样的结果,重复多次,依然得到正确结果。
关闭了警报系统时,移动探头不接受任何触发,继电器及LED灯没有任何操作,打开警报系统,移动探头才能够触发,并且,触发后,在关闭警报并重新启动警报系统之前,移动探头不再触发。
5.2总体工作时间
熟悉软件和程序
3天
构建场景
1天
构建各个子模块
2天
填充和完善各个子模块
2天
完善和调试应用程序
1天
5.3工作分工
杨应聪、李子霖、张露
负责开发板硬件的了解和ETS4的使用
叶国林、刘运可
负责程序的了解和编写和AVR的使用
刘运可、叶国林、杨应聪、李子霖、张露
负责构建整个场景,完善与调试程序
程序的编写:
叶国林、刘运可
调光函数、LED依次点亮函数
杨应聪、李子霖、张露
自动报警函数
6心得体会
7附录
7.1配置的参数图:
7.2修改的程序
附录C语言源程序
UCHARLEDSET=0;//灯光设置选项
UCHARLEDFLAG,LD[]={0,1,2,3,4,5,6,7,0};//亮度
voidAboutSET(UCHARINPUT)//灯光设置选项函数
{
if(INPUT)
{
if(LEDSET<8)
{
LEDSET+=1;
}
else
{
LEDSET=1;
}
}
LEDFLAG=LD[LEDSET];
}
voidJingbao(UCHARchannel,UCHARIN)//警报器函数
{
if(IN==0x01)
{
SwitchObjectOFIn(channel,IN);
if(IN==0x01)
{
ObjectDisablePIR(0x00);
}
}
}
voidKuaiguan(UCHARIN)//一键关闭LED
{
if(IN==0x01)
{
PORTE=0xff;
DimmerObjectOFIn(0x01,0x00);
ProcessBSObjectIn(0x00);
LEDSET=0;
LEDFLAG=0;
}
}
voidJingbaokaiguan(UCHARIN)//警报器开关函数
{
ObjectDisablePIR(IN);
if(IN==0x00)
{
SwitchObjectOFIn(0x00,0x00);
}
}
voidBaiyechuang(void)
{
if(LEDFLAG==0)
{
ProcessBSObjectIn(0x01);
PORTE=0xff;
}
elseif(LEDFLAG==1)
{
ProcessBSObjectIn(0x00);
PORTE=0x00;
}
}
//DimmerSwitchobjectinON/OFF
voidDimmerObjectOFIn(UCHARchannel,UCHARDestValue)//LED调光函数
{
PrepareBrightness(channel,DestValue);
}
voidAppGetObjctPro(void)
{
UCHARTmpObjNo,TmpChnNo;
UCHARObjectInValue[2];
if(!
KnxAl_GetUpdatedCo(&TmpObjNo))return;
KnxAl_GetValue(TmpObjNo,ObjectInValue);
switch(TmpObjNo)
{
case0:
//警报器
Jingbao(TmpObjNo,ObjectInValue[0]);
break;
case1:
//一键关闭LED
Kuaiguan(ObjectInValue[0]);
break;
case2:
case3:
SwitchObjectSCIn(TmpObjNo%2,ObjectInValue[0]);
break;
case6:
break;
case10:
//LED调光
AboutSET(ObjectInValue[0]&0X01);
DimmerObjectOFIn((TmpObjNo-6)/4,LEDFLAG);
break;
case7:
case11:
//dimmer4bit
DimmerRelativeObjectIn((TmpObjNo-7)/4,ObjectInValue[0]&0x0F);
break;
case8:
case12:
//dimmer1byte
DimmerObjectBRTIn((TmpObjNo-8)/4,ObjectInValue[0]);
break;
case21:
//警报器开关
Jingbaokaiguan(ObjectInValue[0]);
break;
case23:
ObjectChangeSen(ObjectInValue[0]);
break;
case14:
Baiyechuang();
break;
case15:
ProcessLSObjectIn(ObjectInValue[0]);
break;
case4:
case5:
SwitchObjectSIn(TmpObjNo-4,ObjectInValue[0]);
break;
default:
break;
}
}