智能风扇.docx
- 文档编号:29690786
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:28
- 大小:186.44KB
智能风扇.docx
《智能风扇.docx》由会员分享,可在线阅读,更多相关《智能风扇.docx(28页珍藏版)》请在冰豆网上搜索。
智能风扇
目录
智能风扇3
摘要3
作品使用操作方法3
一、设计目标4
1、功能一4
2、功能二4
3、功能三4
二、设计方案4
三、硬件电路的设计5
1.硬件电路设计示意图6
2.电源单元电路的设计7
3.工作方式选择开关单元电路的设计7
4.继电器驱动单元电路的设计8
四、系统程序的设计8
1.系统主程序8
2.系统中断程序10
五、系统测试与调试11
1、系统的测试11
2、系统的调试11
六、结论11
七、参考文献11
智能风扇
摘要
本作品是一个集温度设定、定时关机、智能换挡与一体的智能电风扇。
该作品包含了感温系统、键盘输入系统、显示系统、信号处理系统和弱电控强电系统等五大系统。
其设计中多出体现了以人为本的设计理念,它不仅为用户提供了手动和自动两种风扇工作方式,可供用户自行选择,并且还可根据用户自身需求来设定每一档位所对应的温度区间,此外,还可实时显示外界温度。
作品使用操作方法
该作品的具体操作方式如下:
第一步:
按下控制面板总开关,激活控制面板(显示“P.—温度”)
第二步:
按下工作方式选择开关,确定风扇的工作方式。
1、手动方式:
旋转机械定时旋钮和换挡旋钮来分别定时和换挡,显示界面显示当前外界温度,并且此时自动操作按键无效。
(显示“—温度—”)
2、自动方式:
对键盘操作实现定时和温度设定功能。
(1)设定温度:
按下档位基值键进入温度设定状态界面(显示“温度梯度—温度基值”),然后再按档位基值键换位,通过加一键和减一键输入所要定的温度基值和温度梯度(如:
设定温度基值为20°C,温度梯度为4°C,则第一档至第三档分别为20°C~24°C~28°C),最后再按确认键确认执行(显示“当前档位—当前温度”)。
(2)定时:
按下定时键进入定时状态界面,然后通过定时设定键换位,通过加一键和减一键输入所要定的时间,最后再按确认键确认执行。
(交替显示“当前档位—当前温度”和“定时时间”)。
一、设计目标
1、功能一
电风扇的不同档位的风扇转速间接由温度控制。
每一个电风扇的档位对应一个温度区间。
2、功能二
通过键盘键入指定时间,实现电风扇定时关机的功能。
3、功能三
通过键盘键入指定温度,来改变每一档位对应的温度区间。
二、设计方案
通过对作品的功能目标的分析,我们规划出了该作品的总体框架图,如图1所示:
图1温控电风扇总体框架图
该系统分为六大模块,分别是温度采集模块,键盘输入模块,单片机信息处理模块,显示模块,弱电控强电模块和电风扇执行模块。
在该系统中,首先通过温度采集模块把采集来的外界温度传输给单片机信息处理模块做相应处理,然后再通过高、低电平信号来控制弱电控强电模块,从而间接控制电风扇的自动启停、定时和换挡功能。
显示模块则用来显示温度、档位和所定时间这些信息。
三、硬件电路的设计
根据设计方案的总体框架图及该系统模块,现将几大主要模块的主要器件介绍如下:
温度采集模块:
我们采用了DS18B20数字温度传感器,它的主要特点是体积小,使用方便,而且采用了独特的单线接口方式,在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,大大提高了系统的抗干扰性。
测温范围为-55℃~+125℃,固有测温分辨率0.5℃,使得温度采集具有准确性和实时性。
单片机信息处理模块:
我们采用的单片机芯片是AT89S52这款由ATMEL公司生产的芯片,它是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器,256字节RAM数据存储器。
它是一款集成度高、体积小、可靠性高,控制功能强,低电压、低功耗,高性价比的单片机芯片。
显示模块:
我们采用的是一个四位一体的八段共阳极数码管。
在实现功能二时,数码管前两位显示时钟两位,后两位显示分钟两位,中间用点隔开。
在实现功能三时,数码管第一位显示风扇的档位,后两位显示所要设定的温度。
中间一位用横杆”—“隔开。
弱电控强电模块:
我们采用的是电磁式常开触点继电器,其价格便宜、实用性强、动作快、工作稳定、使用寿命长、体积小等优点。
1.硬件电路设计示意图
具体硬件电路设计示意图如下图
(2):
图2智能风扇硬件电路示意图
2.电源单元电路的设计
下图为电源电路原理图:
图3电源电路原理图
在变压器后面并接两个整流、滤波、稳压元件,最后得到两个+5V的独立直流电压。
一个+5V(VCC1)直流电压专门接在继电器上,另一个+5V(VCC)则给单片机供电。
并且两个电源的接地GND和GND1也单独分开.
3.工作方式选择开关单元电路的设计
下图为工作方式选择开关电路原理图:
图4工作方式选择开关电路原理图
当开关打在关的档位上时,发光二极管不导通,从而继电器不吸合,强电部分不工作,并且P1.6和P1.7与GND地连接因此处于低电平状态。
当开关打在手动挡时,发光二极管导通,从而光敏三极管导通继电器吸合,带动手动挡强电部分电路工作。
此外,P1.6端口被拉高处于高电平状态。
当开关打在自动挡时,发光二极管导通,从而光敏三极管导通继电器吸合,带动自动挡强电部分电路工作。
此外,P1.7端口被拉高处于高电平状态。
另一方面,P1.6和P1.7的端口状态信号将会传给单片机做相应信息处理,使得能自由切换关机、手动和自动三种系统状态。
4.继电器驱动单元电路的设计
下图5是智能风扇继电器驱动单元电路原理图,其中光耦元件的作用是防止继电器产生瞬态浪涌电压造成对单片机信号的干扰,三极管起电流放大作用。
P3口接三极管T(S9013)基极,发射极接光耦发光二极管a脚,集电极通过电阻R1接VCC.线圈引脚1接光敏三极管c脚,线圈的2引脚端接+5V电源VCC上;继电器线圈两端并接一个二极管D(IN4148)用于吸收继电器线圈断电时产生的方向电动势,防止反向电势击穿光敏三极管及干扰其他电路;电阻R0和发光二极管LED组成一个继电器状态指示电路。
当继电器工作时,LED发亮,反之,LED不亮。
图5继电器驱动单元电路原理图
——注:
图中1、2为线圈两端3、4为常开触点,5、6为常闭触点
当AT89S52单片机的P3口输出高电平信号时,三极管T导通,电流流过光耦发光二极管而发光导通,从而光敏三极管导通,电源VCC1加到继电器线圈两端使继电器工作,状态指示灯点亮,从而使得继电器3、4常开触点闭合,强电电路导通。
当AT89S52单片机的P3口输出低电平信号时,三极管T截止,无电流流过发光二极管,从而光敏三极管截止,继电器停止工作,状态指示灯熄灭,从而使得继电器的常开触点释放,强电电路断开。
四、系统程序的设计
1.系统主程序
下图为系统主程序流程图
图6系统主程序流程图
2.系统中断程序
下图为系统中断程序流程图
图7系统中断程序流程图
五、系统测试与调试
1、系统的测试
作品完成后,我们对它进行了全面的测试。
经测试发现,风扇偶尔会在工作方式切换,继电器吸合与断开时不能正常工作。
2、系统的调试
基于对测试结果的分析,我们初步认为是工作方式选择开关在切换工作方式瞬间时或继电器吸合与断开转换的瞬间时,电路中会产生瞬态浪涌电压。
这种脉冲过电压能产生极大的能量泄放,会窜入控制回路,对系统中其它电子装置产生相当大的电能冲击和激励,会导致系统的基本计算和逻辑判断出错,干扰系统中其它电子装置的正常工作。
因此,我们针对这个原因,在硬件电路的工作方式选择开关和继电器的驱动电路中加上了光耦元件用来隔离瞬态浪涌电压对单片机系统的干扰。
经调试后,最终作品不再出现不正常工作现象,并且能实现设计目标中的全部功能。
六、结论
本作品采用温度传感器DS18B20采集温度数据,再用单片机AT89S52作信息处理,通过继电器弱电控强电间接实现对电风扇运转的控制,并且应用光耦元件对作品进行了防干扰措施保护。
通过测试与调试,该作品已符合设计目标,实现了智能风扇的所有功能。
经过将近一个月的从方案选定和方案模块的规划再到硬件、软件的设计再到最后的作品的测试与调试的这个设计过程,我们不仅仅使自身能力得到了锻炼,而且也学到了很多课本上没有的知识。
更重要的是,我们也深刻体会到共同协作和团队精神的重要性,是大家分工协作,共同努力才使得我们的设计能够顺利完成。
七、参考文献
1、李广弟,朱月秀,冷祖祁,《单片机基础》第三版,北京航空航天大学出版社,2007年6月
2、阎石,《数字电子技术基础》第四版,高等教育出版社,1998年12月
3、康华光,《电子技术基础.模拟部分》第五版,高等教育出版社,2006年1月
4、马忠梅,籍顺心,张凯,马岩,《单片机的C语言应用程序设计》第四版,北京航空航天出版社,2007年1月
附件:
程序清单
/*****************项目名称:
智能风扇的设计*****************//
/*设计时间:
2010年10月10日—2010年10月30日*****************************/
/************制作团队:
朱文,陈浩,邓智科**********************/
/*技术支持:
湖南工学院*****************************************/
/*********************硬件接口说明如下*************************/
/**风扇手动或自动之间单片机判别的标志:
P17==0&P16==1(手动状态),P17==0&P16==0(自动状态)*************/
/**P35,P36,P37是继电器的控制线,给相应的低电平接通电风扇自动时相应档位(P35一档,P36二档,P37三档)*/
#include
#defineucharunsignedchar
#defineuintunsignedint
/***************全局变量以及相应的位变量定义区***************/
ucharduan_kong[13]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xFF,0x0C};//数码管显示用段控数据
ucharwei_kong[4]={0xFE,0xFD,0xFB,0xF7};//数码管显示用位控数据
uchardang_wen[3]={20,24,28},disp_1[4],disp_2[4],flag,time_flag=0;
//dang_wen用于存储设定的三个档位温度临界值
//disp_1主要是显示定时时
//disp_2主要是用来显示当前档位和温度及作为温度梯度基值调节显示
//flag==1&time_flag==0时只显示当前档位和当前温度,flag==1&time_flag==1时当前档位、温度和定时倒计时交替显示
uinttime1,time2,wendu=20;//time1.time2用于定时时的倒计时换算,wendu用于存放用户设定的档位基值温度
ucharTT,TH,TL;//定义:
TT为两位温度值,TH为读18B20的高位值,TL为读18B20的低位值
sbitDQ=P3^0;//18B20数据位
sbitP16=P1^6;//手动标志
sbitP17=P1^7;//自动标志
sbitP_1=P3^5;//一档控制位
sbitP_2=P3^6;//二档控制位
sbitP_3=P3^7;//三档控制位
sfrWDTRST=0xA6;
/*******************子函数声明程序区****************************/
voiddelay(uintus);
voidwrite18B20_bit(ucharone_bit);
ucharread18B20_bit();
voidwrite18B20_byte(ucharone_byte);
ucharread18B20_byte();
ucharreset_18b20();
voiddisply_all(uchar*disp);
voidread_T_ready();
ucharkeyscan();
ucharkey();
voidfunction_tiao_wen();
voidshan_shuo(ucharshan_wei,uchar*p_x);
voidfunction_ding_shi();
/*********************定时器1中断服务程序区*********************/
voidservice_time1()interrupt3
{
TH1=0xE0;
TL1=0x0C;
WDTRST=0X01E;
WDTRST=0X0E1;
}
/*****************定时器0中断程序区******************************/
voidservice_time0()interrupt1
{
TH0=0x3C;
TL0=0xB0;
time2--;
if(time2==0)
{
if(disp_1[0]==0)
{
if(disp_1[1]==0)
{
disp_1[0]=9;
disp_1[1]=9;
disp_1[2]--;
}
else
{
disp_1[0]=9;
disp_1[1]--;
}
}
else
{
disp_1[0]--;
if(disp_1[0]==0)
{
disp_1[0]=9;
if(disp_1[1]==0)
{
disp_1[1]=9;
disp_1[2]--;
}
else
disp_1[1]--;
}
}
time2=20*60;
time1--;
}
if(time1==0)
{
TR0=0;
TH0=0;
TL0=0;
P_1=1;
P_2=1;
P_3=1;
time_flag=0;
while
(1)
{
P_1=1;
P_2=1;
P_3=1;
read_T_ready();
TL=read18B20_byte();
TH=read18B20_byte();
TT=(TH*256+TL)/16;
disp_2[0]=TT%10;
disp_2[1]=(TT/10)%10;
disp_2[2]=10;//显示“-”
disp_2[3]=10;
disply_all(disp_2);
if(P17==0)
break;
if(keyscan()==5)
break;
}
}
}
/************************主函数区*******************************/
main()
{
uchari,n;
P3=0xFF;
P2=0xFF;
IP=0X08;//设定中断优先级
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;//开定时器1中断
TMOD=0x11;//定时器0,工作方式1
TH1=0xE0;
TL1=0x0C;
WDTRST=0X01E;
WDTRST=0X0E1;
WDTRST=0X01E;
WDTRST=0X0E1;
TR1=1;
while
(1)
{
if(P16==0&P17==0)//关闭状态
{
P_1=1;
P_2=1;
P_3=1;
read_T_ready();
TL=read18B20_byte();
TH=read18B20_byte();
TT=(TH*256+TL)/16;
disp_2[0]=TT%10;
disp_2[1]=(TT/10)%10;
disp_2[2]=10;//显示“-”
disp_2[3]=12;//显示“P.”
disply_all(disp_2);
}
if(P16==1&P17==0)//手动状态
{
read_T_ready();
TL=read18B20_byte();
TH=read18B20_byte();
TT=(TH*256+TL)/16;
disp_2[1]=TT%10;
disp_2[2]=(TT/10)%10;
disp_2[3]=10;//显示“-”
disp_2[0]=10;
disply_all(disp_2);
}
if(P16==0&P17==1)//自动状态
{
flag=1;
while(flag)//如果自动状态人为切换到了手动状态时,flag会被置0,
//结束自动状态的程序执行再去判断手动与自动之间的标志位(P16,P17)
{
for(i=0;i<150;i++)
{
read_T_ready();
TL=read18B20_byte();
TH=read18B20_byte();
TT=(TH*256+TL)/16;
disp_2[0]=TT%10;
disp_2[1]=(TT/10)%10;
disp_2[2]=10;
if(TT<=dang_wen[0])
{
P_1=1;P_2=1;P_3=1;
disp_2[3]=0;
disply_all(disp_2);
}
if(TT>dang_wen[0]&TT<=dang_wen[1])
{
P_1=0;P_2=1;P_3=1;
disp_2[3]=1;
disply_all(disp_2);
}
if(TT>dang_wen[1]&TT<=dang_wen[2])
{
P_1=1;P_2=0;P_3=1;
disp_2[3]=2;
disply_all(disp_2);
}
if(TT>dang_wen[2])
{
P_1=1;P_2=1;P_3=0;
disp_2[3]=3;
disply_all(disp_2);
}
n=keyscan();
disply_all(disp_2);
switch(n)
{
case0:
break;
case1:
function_tiao_wen();break;
case2:
function_ding_shi();break;
default:
break;
}
disply_all(disp_2);
if(P17==0)//查自动与手动或关闭状态之间的标志给flag相应的置(0或1)
{
flag=0;
TR0=0;
time_flag=0;
i=150;
}
disply_all(disp_2);
}
if(time_flag)//当定时器开启时,对应time_flag会被置1,开始交替显示定时倒计时
{
for(i=0;i<200;i++)
{
if((P16==1&P17==0)||(P16==0&P17==0))//查状态
{
disply_all(disp_1);
time_flag=flag=0;
TR0=0;
i=200;
}
if(time_flag==0)//查时间
i=200;
disply_all(disp_1);
}
}
}
}
}
}
/*********************18b20基本读写操作程序***********************/
voidread_T_ready()//读18b20温度前准备子程序
{
reset_18b20();
write18B20_byte(0xcc);
write18B20_byte(0x44);
delay(100);
reset_18b20();
write18B20_byte(0xcc);
write18B20_byte(0xbe);
}
voiddelay(uintus)//延时子程序
{
uints;
for(s=0;s } voidwrite18B20_bit(ucharone_bit)//写一个二进制位子程序 { DQ=0; if(one_bit==1)DQ=1; delay(5); DQ=1; } ucharread18B20_bit()//读一个二进制位子程序 { uchari; DQ=0; DQ=1; for(i=0;i<3;i++); return(DQ); } voidwrite18B20_byte(ucharone_byte)//写一个字节子程序 { uchari,temp; for(i=0;i<8;i++) { temp=one_byte>>i; temp&=0x01; write18B20_bit(temp); } delay(5); } ucharread18B20_byte()//读一个字节子程序 { uchari,value=0; for(i=0;i<8;i++) { if(read18B20_bit())value|=0x01< delay(6); } return(value); } ucharreset_18b20()//18b20复位(或初始化)子程序 { ucharpre; DQ=0; delay(29); DQ=1; delay(3); pre=DQ; delay(25); return(pre); } /***************************数码管显示子函数**********************/ voiddisply_all(uchar*disp)//显示四位数码管 { uchari,j; for(i=0;i<4;i++) { j=disp[i]; P2=wei_kong[i]; P0=duan_kong[j]; delay(120); } } /***********************键扫描程序区****************************/ ucharkeyscan()//见扫子程序出口(键值: 0-5,注意,其中0为无键按下时的情况) { uchara,b; a=key(); if(a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 风扇