精品文档人体感应智能风扇结题报告word范文模板 22页.docx

上传人:b****8 文档编号:29666208 上传时间:2023-07-26 格式:DOCX 页数:22 大小:24.36KB
下载 相关 举报
精品文档人体感应智能风扇结题报告word范文模板 22页.docx_第1页
第1页 / 共22页
精品文档人体感应智能风扇结题报告word范文模板 22页.docx_第2页
第2页 / 共22页
精品文档人体感应智能风扇结题报告word范文模板 22页.docx_第3页
第3页 / 共22页
精品文档人体感应智能风扇结题报告word范文模板 22页.docx_第4页
第4页 / 共22页
精品文档人体感应智能风扇结题报告word范文模板 22页.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

精品文档人体感应智能风扇结题报告word范文模板 22页.docx

《精品文档人体感应智能风扇结题报告word范文模板 22页.docx》由会员分享,可在线阅读,更多相关《精品文档人体感应智能风扇结题报告word范文模板 22页.docx(22页珍藏版)》请在冰豆网上搜索。

精品文档人体感应智能风扇结题报告word范文模板 22页.docx

精品文档人体感应智能风扇结题报告word范文模板22页

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!

==本文为word格式,下载后可方便编辑和修改!

==

人体感应智能风扇结题报告

大学生科技创新

“人体感应智能电风扇”结题报告

项目名称:

人体感应智能电风扇

负责人:

张祥

学号:

201X4010201X2

学院专业:

电信学院·10电气工程及其自动化

联系电话:

187********

电子信箱:

184542248@

指导教师:

郑笔耕

联系电话:

186********

人体感应智能电风扇

一:

引言:

在激烈的市场竞争下,虽然电风扇具有广阔的市场空间,但不断新生产品的出现,要使

产品更具市场优势,仅仅是靠传统型的电风扇是远远不够的,因此要对传统的电风扇根据市

场的需要进行不断的更新,不断的改进,以使自己的产品立于不败之地。

传统的电风扇较为

突出的缺点是:

①风扇的风力大小不能根据温度的变化自动的调节风速,对于那些昼夜温差

比较大的地区,这个自动调节风速就显得优其的重要了,特别是人们在熟睡时常常没有觉察

到夜间是温度变化,那样既浪费电资源又容易引起感冒。

②传统的风扇是用机械式的定时方

式,机械式的定时方式常常会伴随着很大的机械运动的声音,特别是在夜间影响人们的睡眠

质量,另个机械式的定时有一定的局限性,定时范围有限,而且机械式的容易坏。

③传统的

电风扇没有单片机控制电风扇的功能,对平时调节风扇风速或其它对风扇的调节,而又不想

走近风扇带来很多的不便。

鉴于以上方面的考虑,我们需要设计一种智能电风扇控制系统来

解决这些问题

本设计为一种人体感应温控风扇系统,具有灵敏的温度感测和人体感应功能,系统

stc89C52单片机作为控制平台对风扇转速进行控制。

人体红外感应可感知人的存在,自动开

关风扇。

可由用户设置高、低档位,测得温度值在高低温度之间时打开风扇强弱风档,当温

度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动降低风扇档

位,控制状态随外界温度而定。

同时,能够由人工设定风扇档位不受温度控制,灵活性强。

所设高低温值保存在温度传感器DS18B20内部E2ROM中,掉电后仍然能保存上次设定值,性

能稳定,控制准确。

关键词:

自动控制人体感应单片机温控手控风扇

二:

实验过程

本设计是以51单片机为主要控制核心,用51单片机系统对用户设定信号数据的采集以

及分析,能过各种可控型电子元器件对电风扇各种工作状态的控制,以达到用户需求。

设计的功能要求

①风速从高到低设置4个档位,并且每个档位都可以由用户设置或者根据温度自动调

节。

②风扇可以自动的根据环境的温度调节风扇风速的档位,温度上升2℃自动上升一个档

位,温度每降低2℃自动下降一个档位。

③设置数码管显示当前的工作状态以及温度,使其更具人性化。

④自动模式时,感应人的存在而自动控制风扇的开关。

方案论证

1传感器部分

方案一:

采用热敏电阻

采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可

靠性较差,对于检测1摄氏度的信号是不适用的。

而且在温度测量系统中,采用单片温度传感

器,比如AD590,LM35等.但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算

机,这样就使得测温装置的结构较复杂.另外,这种测温装置的一根线上只能挂一个传感器,不能进行多点测量.即使能实现,也要用到复杂的算法,一定程度上也增加了软件实现的难度。

方案二:

采用DS18B20

温度传感器采用DS18B20数字温度传感器。

DS18B20数字温度传感器芯片是以9位数字

量的形式反映器件的温度值。

DS18B20数字温度传感器通过一个单线接口发送或接受信息,

因此在中央微处理器和DS18B20之间仅需一条连接线(加上地线)。

用语读写和温度转换的电

源可以从数据线本身获得,无需外部电源。

它可以直接将模拟温度信号转化为数字信号,降

低了电路的复杂程度,提高了电路的运行质量。

综合考虑,选择方案DS18B20进行温度测量。

2调速方式的选择

方案一:

采用PWM控制

PWM是利用数字输出对模拟电路进行控制的一种有效技术,尤其是在对电机的转速控制

方面,可大大节省能量。

PWM具有很强的抗噪性,且有节约空间、比较经济等特点。

方案二:

采用可控硅控制

实际中通过控制双向可控硅的导通角,使输出端电压发生改变,从而使施加在电风扇的

输入电压发生改变,以调节风扇的转速,实现各档位风速的无级调速。

从本设计要求综合考虑实际中选择方案一。

3温度控制模块设计

方案一:

采用红外遥控器+红外遥控解码:

红外遥控器的使用大大方便了用户,使他们可以在一定

范围内实现对本系统的远程控制,符合当代人的生活习惯,而且红外遥控器的技术已经相当

成熟,使用也比较方便。

方案二:

选用键盘:

假如使用键盘,用户就只能走进本控制系统去控制该系统已完成自己想要的

操作。

此方案设计与制作比较简单,且能完全完成既定功能。

综合各方面因素,采用方案二。

4显示电路的设计

方案一:

LCD1602液晶屏:

LCD1602液晶屏是16*2的字符型液晶,可以显示英文26个字母的大

小写,阿拉伯数字0—9,及一些简单的符号。

该液晶屏操作简单,显示功能强大。

方案二:

数码管:

虽然数码管的显示位数有限,且只能显示一些简单的字符。

但是在本课程设计

中,所需要的数码管不多,少量数码管即可符合设计要求,估可采用。

综上所述,我们选择了数码管作为显示模块。

系统简述

本系统由人体红外感应、集成温度传感器、单片机、LED数码管、发光二极管、驱动芯片、直流电机及一些其他外围器件组成。

辅助元件包括发光二极管、电阻、晶振、电源、按键等。

使用具有价廉易购的stc89S52单片机编程控制,通过修改程序可方便实现系统升级。

主程序流程图

系统各器件简介

1、DS18B20单线数字温度传感器简介

有3引脚TO-92小体积封装形式。

温度测量范围为-55℃——+125℃,可编程为9位——12位A/D转换精度,测温分辨率可达0.0625℃。

被测温度用符号扩展的16位数字量方式串行输出。

工作电压支持3V——5.5V的电压范围,既可在远端引入,也可采用寄生电源方式产生。

DS18B20还支持“一线总线”接口,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信。

DS18B20内部结构及管脚

DS18B20内部结构如图3所示,主要由4部分组成:

64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

其管脚排列如图4所示,DQ为数字信号端,GND为电源地,VDD为电源输入端。

2stc89C52单片机简介

stc89C52是一种带4K字节闪存可编程可擦除只读存储器(FPEROM)256B片内RAM的低电压,高性能CMOS8位微处理器。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,stc89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

引脚接法:

P0口作为数码管段选,

P1.1到P1.3作为数码管位选,

P2.0到P2.3作为led显示,

P3.0到P3.3作为动合触点开关,

P3.4作为直流电机PWM驱动,

P3.5接DS18B20温度感应,

P3.6接红外人体感应。

3人体红外感应HC-SR501

4八段LED数码管

本系统使用四个八段LED数码管作为温度和风扇档位显示,前三位显示温度,最后一位显

示档位。

公共阳极。

5驱动芯片ULN2803

ULN2803,8个NPN达林顿晶体管,连接在阵列非常适合逻辑接口电平数字电路(例如TTL,CMOS或PMOS上/NMOS)和较高的电流/电压,如电灯,电磁阀,继电器,打印锤或其他类似的负载,广泛的使用范围:

计算机,工业和消费应用。

所有设备功能由集电极输出和钳位二极管瞬态抑制。

该ULN2803是专为符合标准TTL,而制造ULN2804适合6至15V的高级别CMOS或PMOS上。

该电路为反向输出型,即输入低电平电压,输出端才能导通工作。

各部分电路设计

1电源电路

电源电路采用LM7805集成稳压器作为稳压器件,用典型接法,220V电源整流滤波后送入

LM7805稳压,在输出端接一个470U和0.1U电容进一步滤除纹波,得到5V稳压电源。

电路如图4所示。

2数码管显示电路

数码管显示电路采用共阳极四位数码管以及9012三极管作为驱动数码管发亮。

其连接方

式如下:

应用单片机P0口连接八段数码管,用P1口的P1.0—P1.3四个端口作为数码管的片选信号输出端口,其中要用9012(PNP型)三极管做驱动。

为了防止烧坏数码管,所以给数码管各段各加一个50k的限流电阻。

要显示的数据通过P0口送给数码管显示,通过P1口的P1.0—P1.3四个端口分别对数码管进行位选,事实上数码管是间断被点亮的,只是其间断时间十分短,扫描周期在20ms以下,利用人眼视觉暂留,我们基本看不出它们的闪烁。

3温度采集、控制模式设定以及复位电路

这一部分主要是由DS18B20,四个按键。

开关设定主要是通过按键K1来设定的。

模式转换键由K2来完成,可以实现温度控制风速和手动设定风速的功能。

手动设定风扇档位由K3、K4来完成,按一下K3键可以实现档位增一,而按下K4键可以实现档位减一。

4电机驱动电路

驱动模块主要采用驱动芯片ULN2803,PWM脉冲信息通过I\O口P3^4输出,然后经过

ULN2803时由1B—7B输入至7C输出以驱动电机转动。

5开关、模式指示灯电路

分别通过P1^0—P1^2作为开关、两个模式指示灯,按下开关键K1时,开关指示灯亮,表明DS18B20一开始工作;若此时按下K2

选择模式一,转为到温度控制风速功能,当达到相应温

度范围,电机转速作相应改变;若按下K2选择模式二,转为手动控制风速,此时可以分别按K3或者K4键,以控制档位。

三:

结果与讨论

将本电路用硬件做出来,用编程器将KEIL软件对源程序编译生成的.HEX文件烧入

stc89C52单片机,将单片机插入到目标板中,连好线。

理想和现实总是很大差距,出了液晶显示可以正常显示外,其他功能都无法正常工作,接下来的事就是最关键的也是最难的,调试程序。

我们小组成员分块进行了每个模块的功能实现,然后在整合到一起,过然不出所料,离结果越来越近,最终在查资料,问老师,问同学之后。

结果终于出来了。

四:

参考文献

[1]郭天祥,51单片机c语言教程,电子工业出版社,

[2]张毅刚,单片机原理及应用,高等教育出版社,

[3]胡汉才.单片机原理及其接口技术.北京:

清华大学出版社,

[4]吴金戍,沈庆阳,郭庭吉.8051单片机实践与应用.北京:

清华大学出版社,

[5]王化详,张淑英.传感器原理.天津:

天津大学出版社,

[6]荣俊昌.新型电风扇原理与维修.北京:

高等教育出版社。

参考网站:

XX,电子发烧友网,单片机论坛,51单片机之家等。

五:

心得

大约在去年的这个时候,在无意间听到同学说,学校现在在弄什么科技创新,当时就比较感兴趣,听到这个消息后我就想,如果我也能参加就好了,于是班上问了下,大家都很想做这个,但是没有行动起来,听到这个消息后我就想自己组个队,来做一些小作品,就算是对大学无聊生活的一种慰藉吧。

说做就做,再联系了好多同学后,终于确定了人选,我,张月,黄业,操镭,吕超。

我们五个组成的小组就开始了我们即将为期一年的创新之旅,可能是初生牛犊不怕虎,尽管我们什么都不懂,当时也不知道51单片机是什么,但我们还是义无反顾了?

?

队员是有了,可是,我们做什么呢?

困扰了我,由于我们班之前有同学参加过全国大学生电子设计大赛,所以我就打算做一个和51单片机这一块相似的东西,至少在不懂的情况下还可以问一下他们,当时我就在心里默默这么定了,尽管都没争取组员的同意。

大体范围是有了,可是,具体做什么还是没方向,那几天我就想热锅上的蚂蚁,记得团团转,心里非常烦躁,回到宿舍打开风扇就趴在椅子上小睡了,睡到一半被冻醒了,我想,哎要是能自动调节温度就好了。

“自动调节温度”突然这几个词在我脑海中浮现,为何我不自己做一个自动调节温度的风扇呢,对,就这么搞。

经过酝酿,讨论,人体感应只能风扇就这样出来了?

?

购买材料,焊接板块,集中学习单片机,c语言?

?

我们小组每位成员都忙的如火如荼,从将开发板上的每一个LDE灯点亮到数码管的动态显示,从ds18b20的温度读取到电机的占空比调转。

我们一直忙碌着,从来不敢怠慢。

尽管我们遇到很多困难,尽管一次次的失败,我们依然在前线。

记得刚开始学习定时器计数器一块时候,我总是搞不清楚为什么可以通过寄存器的通知可以决定选什么,该怎样工作,直到后来秦昌研把电路图拿给我看时候,我才恍然大悟,此事深刻感觉到了原理的重要性,我们学习只是应该扎实,不能只知道其表面,不知其根本。

在学习温度感应模块时候,我们之前已经把郭天祥书上的类似程序看的很明白了,可是移植到自己的程序上时候,还是不知道为什么,温度显示不出来,后来查了好久才发现是参数设置问题,由此可见,相同的东西,我们不能照搬照抄,要有自己的独立性。

另外,每个细节都是很重要的,细节决定成败,不是嘴上说说。

在经历和查资料,学软件,分析程序,调试。

最终的成品看起来却只有巴掌大,就这巴掌大的东西里面却蕴含着很多心血,真是台上一分钟,台下十年功。

当初,学校给我们一年的时间我觉得蛮长的,现在想起来不仅不长,还是挤挤的,要是还有时间,我得要做的更好。

设计得更优化,功能更多。

在这里我想感谢我们的指导老师郑笔耕老师,记得有好几次遇到困难了,我都有想放弃的冲动,这个时候,郑老师总能给我正能量。

例如上次中期检查时候,我有种不想接着做下去的冲动,老师还是给了我继续的动力。

很多事情老师都事先替我想好了,我想,如果没有老师的教导和监督,我们小组也就胎死腹中了。

不仅是学习了很多东西,最重要的一点就是合作,我们小组的成员都有同感,合作和分工是成功的必备法则。

很多东西在书上看了后不以为然,可是每当自己经历后才深刻体会到了他的真谛。

总之,本次科技创新将是我人生的一大财富。

感谢学校给了我们这次机会,感谢郑老师的帮助,还得感谢帮助我们小组的秦昌研同学。

有人说成功男人后一定有一个贤惠的女人,我想说,成功的小组背后少不了一群人的帮助?

?

六:

图片

七:

程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

floatf_temp;

uinttemp;

ucharbai,shi,ge;//温度显示百、十、个位;

ucharnum;

uintwarn1=200;//温度警示值;

uintwarn2=220;

uintwarn3=240;

uintwarn4=260;

uintpower,mode,flag;//开关、模式转换标志;

sbitwx1=P1^0;//温度显示位选;

sbitwx2=P1^1;

sbitwx3=P1^2;

sbitwx_dang=P1^3;//风扇档位显示数码管位选;

sbitled0=P2^7;//相关模式指示灯;

sbitled1=P2^6;

sbitled2=P2^5;

sbitled3=P2^4;

sbiton_off=P2^3;//开关;

sbitmodeswitch=P2^2;//模式转换标志;

sbitjia_key=P2^1;//档位增;

sbitjian_key=P2^0;//档位减;

sbitds=P3^5;//DS18B20的DQ端;

sbitren=P3^6;//红外

sbitdianji=P3^7;//电机驱动端;

ucharcodetable[]=//共阴数码管;

{0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

ucharcodetable_dot[]={//带小数点共阳数码管

0x40,0x79,0x24,0x30,

0x19,0x12,0x02,0x78,

0x00,0x10};

ucharcodetable_dang[]=//风扇档位数码管;

{0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,

0x90};

voiddelay(uintz)//延时函数;

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voiddsreset(void)//DS18B20复位,初始化函数

{

uinti;

ds=0;

i=103;

while(i>0)i--;

ds=1;

i=4;

while(i>0)i--;

}

bittempreadbit(void)//读一位数据函数

{

uinti;

bitdat;

ds=0;i++;

ds=1;i++;i++;

dat=ds;

i=8;

while(i>0)i--;

return(dat);

}

uchartempread(void)//读1个字节数据函数

{

uchari,j,dat;

dat=0;

for(i=1;i<=8;i++)

{

j=tempreadbit();

dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在dat里}

return(dat);

}

voidtempwritebyte(uchardat)//写入温度字节;

{

uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)

{

ds=0;

i++;i++;

ds=1;

i=8;while(i>0)i--;

}

else

{

ds=0;

i=8;while(i>0)i--;

ds=1;

i++;i++;

}

}

}

voidtempchange(void)//DS18B20开始获取温度并转换

{

dsreset();

delay

(1);

tempwritebyte(0xcc);//写跳过读ROM指令

tempwritebyte(0x44);//写温度转换指令

}

uintget_temp()//读取寄存器中存储的温度数据

{

uchara,b;

dsreset();

delay

(1);

tempwritebyte(0xcc);

tempwritebyte(0xbe);

a=tempread();//读取低8位

b=tempread();//读取高8位

temp=b;

temp<<=8;

temp=temp|a;

f_temp=temp*0.0625;

temp=f_temp*10+0.5;

f_temp=f_temp+0.05;

returntemp;

}

voiddisplay_dang()//档位显示函数;

{

wx_dang=0;

P0=table_dang[num];

delay(3);

wx_dang=1;

}

display(uinttemp)//显示温度;

{

bai=temp/100;

shi=temp/10%10;

ge=temp%10;

wx1=0;

P0=~table[bai];//显示百位;

delay(3);

wx1=1;

wx2=0;

P0=table_dot[shi];//显示十位;

delay(3);

wx2=1;

wx3=0;

P0=~table[ge];//显示个位;

delay(3);

wx3=1;

}

voidallot(uintt)

{

if((t>warn1)&&(t<=warn2))//大于25度小于27度

{num=0;

}

elseif(t<=warn1)//小于25度

{

num=0;

}

elseif((t=warn3))//小于32度大于30度

{num=2;

}

elseif(t>=warn4)//大于32度

{num=3;

}

else//在27度和30度之间时是调用显示函数延时{num=1;

}

}

voidkey()//键盘读取,显示num;

{

if(jia_key==0)

{

delay(5);

if(jia_key==0)

{

num++;

if(num==4)

num=3;

while(!

jia_key);

}

}

if(jian_key==0)

{

delay(5);

if(jian_key==0)

{

if(num==0)

num=1;

num--;

while(!

jian_key);

}

}

}

voidt0_time()interrupt1

{

flag++;

if(flag==3)

flag=1;

if(flag==1)

{

dianji=1;

switch(num)

{

case0:

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

break;

case1:

TH0=(65536-201X)/256;

TL0=(65536-201X)%256;

break;

case2:

TH0=(65536-3000)/256;

TL0=(65536-3000)%256;

break;

case3:

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

break;

}

}

if(flag==2)

{

dianji=0;

switch(num)

{case0:

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

break;

case1:

TH0=(65536-3000)/256;

TL0=(65536-3000)%256;

break;

case2:

TH0=(65536-201X)/256;

TL0=(65536-201X)%256;

break;

case3:

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

break;

}

}

}

voidmain()

{

TMOD=0X01;//定时器初始化

TH0=0;//(65536-4000)/256;

TL0=0;//(65536-4000)%256;

EA=1;ET0=1;

power=0;

mode=0;

dianji=0;

num=0;

while

(1)

{tempchange();

display(get_temp());

if(on

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

当前位置:首页 > 职业教育 > 职业技术培训

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

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