智能照明系统的课程设计报告.docx

上传人:b****4 文档编号:4791453 上传时间:2022-12-09 格式:DOCX 页数:20 大小:344KB
下载 相关 举报
智能照明系统的课程设计报告.docx_第1页
第1页 / 共20页
智能照明系统的课程设计报告.docx_第2页
第2页 / 共20页
智能照明系统的课程设计报告.docx_第3页
第3页 / 共20页
智能照明系统的课程设计报告.docx_第4页
第4页 / 共20页
智能照明系统的课程设计报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

智能照明系统的课程设计报告.docx

《智能照明系统的课程设计报告.docx》由会员分享,可在线阅读,更多相关《智能照明系统的课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。

智能照明系统的课程设计报告.docx

智能照明系统的课程设计报告

题目名称:

智能照明控制系统设计

摘要:

本系统以光敏电阻的光强采集、A/D转换、单片机AT89C51为核心,组成最小控制系统,并和高亮LED显示电路共同构成。

外界光强的大小通过电压的线性转换,并用延时来控制灯亮度来体现。

该系统能够随环境光强的变化或软件所设定的时间自动控制灯的亮灭;同时系统可以根据光线强度自动控制灯的亮度,也可以手动调节灯的亮度。

 

关键词:

51学习板ADC0804光敏电阻中断定时延时

 

 

1方案设计与论证

1.1整体设计方比较和选择

本系统包括智能系统和照明系统。

这两个部分的具体的设计思路如下所示:

智能系统是基于学习板上的51单片机,理论结合实际的应用,故主要是软件程序的编写,其次是单片机的扩展口与A/D芯片和高亮发光二极管的连接。

其有4个并行I/O端口,分别是P0、P1、P2和P3,每个端口都有双向I/O功能。

P0口在学习板上控制数码管的显示,故在设计本系统时暂不考虑,P1口只能做I/O口使用,且其内部有上拉电阻,因P1.0-P1.3控制数码管、按键和学习板上的灯的使能端,故只剩P1.4-P1.7口,不妨将P1.5与高亮发光二极管相连(因为P1口有上拉电阻故可直接相连),P1.7控制A/D的使能端;P2口与A/D芯片的数字输出端相连,为单片机输入转化后的8位二进制;P3口实有特殊功能,直接与A/D芯片的

端口相连。

照明系统是基于光敏电阻的光线采集电路,光敏电阻器的阻值随入射光线的强弱变化而变化,在黑暗条件下,它的阻值(暗阻)可达1~10M欧,在强光条件下,它阻值(亮阻)仅有几百至数千欧姆。

只要人眼可感受的光,都会引起光敏电阻的阻值变化。

当外界光线强度变化时,可以将光敏电阻的电压值经过模数转换成8位二进制,送入单片机进行处理,再由程序根据这8位二进制数据来处理判断灯的亮灭或灯的亮度。

方案1:

方案的特点:

该电路采用的是基极分压式射极偏置电路该电路具有很好的稳定性,阻值很大的R1直接接在三极管的基极,起到很强的控制基极电流的作用,可以有效防止由于温度等原因造成的电阻阻值波动对测量结果的影响。

三极管将由光强变化引起的电流变化转化为电压变化输出,接入ADC0804数模转换的输入端口。

方案2:

方案特点:

该电路简单,利用光敏电阻与定值电阻R组成环境光检测电路,通过测量R两端电压的变化来体现环境光强弱的变化。

 

方案论证:

方案1的最大的特点是可以防止温度等其他原因造成的电阻波动对测量结果的影响,而考虑到此次的课程设计的目的是了解智能照明控制系统的基本原理,基于51学习板,掌握和夯实单片机的扩展和应用,故选择方案2这一简单的环境光采集电路,同样可以达到系统随时间和环境光线强度自动控制灯的亮灭。

而且,该电路简单,不容易被损坏。

2系统设计

2.1总体设计

本设计硬件电路包括电源模块、光线采集模块、模数模块、AT89C51单片机模块和LED显示电路模块等5部分组成。

各模块之间的关系如图1所示。

图1系统硬件结构框图

主控系统模块采用基于51内核的AT89C51单片机及模数转换电路来完成信号采集、控制和通信功能,在本设计中AT89C51单片机模块担当了控制核心,首先通过光线采集电路对外部的光强参数进行数据采集,输出的电压值经过8位A/D转换器,将光敏电阻感应光强产生的模拟信号转换为数字信号采样,送至单片机AT89C51进行处理,再通过算法将其与内部参考数据进行分析与比对,实现当外界环境光强变化时LED灯能够随之变化的功能。

2.2各单元模块功能介绍及电路设计

2.2.1光线采集模块

光线采集模块通过ADC0804将光敏电阻感应光强产生的模拟信号转换为数字信号采样至单片机,实现对外界环境光强数据的采集。

电路连接如下:

由VCC=5V,则光敏电阻两端的电压,即VIN(+)=VCC

R光敏/(R光敏+R),而

01.V

其中,本课程设计中R光敏范围大约是在5k

-300k

之间,故由上不等式可以得出:

,即有6.1k

所以,我们在电路中与光敏电阻串联的电阻选择为10k

,符合上述的范围要求。

2.2.2模数转换模块

模数转换电路主要由ADC0804构成。

当温度值转换为电压后,还需要将电压值进行A/D转换,转换后的8位二进制才能送到单片机进行处理。

ADC0804芯片是典型的8位8通道逐次逼近式A/D转换器,可对8路模拟电压实现分时转换。

为了换算方便,设置基准电压为5V,即模拟量输入为+5.0时,ADC输出为0FFH,即255,系统分辨率为5/255=0.02V/LSB。

其外围设计电路为:

2.2.3AT89C51单片机

单片机主要通过程序来控制灯的亮灭或灯的亮度。

AT89C51单片机电路图如下:

 

2.2.4LED显示模块

LED显示模块主要由高亮LED灯构成。

主要是由单片机的外部中断来控制LED灯的亮度。

单片机每接收到一个同步信号后,就启动一个延时程序。

而延时的长短由按键或是外界光强来改变。

当延时结束后,单片机会产生一个触发信号,使灯发光。

电路连接如下:

2.2.5电源模块

电源模块主要是由学习板连接电脑所获得的电压,再分别连到所需电路中去。

3软件设计

根据智能照明系统的思想和原理,本次设计制作的电路比较简单。

系统重点在软件设计,硬件设计相对较简单。

主要和关键的问题是根据光敏电阻、A/D芯片和学习板上的51单片的工作原理来编写程序以达到所要求实现的照明系统和智能系统。

其流程图如下所示:

基本要求:

系统能够随时间和环境的光线强度自动控制灯的亮灭。

(先定时5s使灯不受外界环境变化的影响,5s结束后,灯随外界光强度变化,25s后,灯一直亮)

 

 

(a)主程序(b)中断程序

 

发挥部分:

1.灯的亮度由外界光线的变化调节;

 

发挥部分:

2.灯的亮度由学习板上的按键手动调节;

 

(a)手动调节的主程序

 

(b)数码管显示芯片

4系统测试

4.1测试方案

步骤1:

基于proteus和keil软件,根据基本要求实现仿真;

步骤2:

先安上元件后,焊接电路,用万用表测试电路是否正确连通,以确定无虚焊、漏焊和焊接错误等问题,然后将集成芯片安上。

以此可以防止集成芯片由于电压过大而烧坏;

步骤3:

将焊接好的电路与学习板上的51单片机相连,检查连接无误后,装载程序,调试,运行;

步骤4:

观察硬件反映情况,检查错误,调整程序,以达到实现所要求的功能和现象的目的。

4.2测试结果

当装载基本要求的程序后,数码管由5--0倒计时,在此期间高亮发光二极管灯灭,且当外界变暗或是变亮,都对灯没有影响;当数码管为0时,在接下来的25秒内,外界的变化会影响灯的亮灭;

当装载自动调节灯的亮灭的程序后,光线逐渐变强的时候,灯的亮度也会逐渐增加。

当装载手动调节灯的亮度的程序,随着按键的变化,可以发现灯随着按键K0,数码管显示的占空比增加,灯变亮;若按K1键,数码管显示的占空比减小,灯变暗;若按K3键占空比清零。

4.3结果分析

在实现基本要求时,光敏电阻对光线比较敏感,外界光线变化会使灯亮灭明显,不足的是数码管显示系统控制灯的时间(t1)和外界控制灯的时间(t2)是同步的,限制了t2>t1;

在手动调节灯的亮灭的时候,数码管可以正确显示占空比的值,不足是灯的亮度改变等级不明显。

经过各项性能的测试,系统的指标和电路基本达到预期的效果,如果能考虑到实际的光敏电阻的感光性和灯的亮灭区间,系统将更加完善。

 

5结语

本报告详细讲述了系统设计方案,并给出了相关程序流程。

由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。

基于学习板系统进行软件调试很容易。

在自动调节灯的亮度时,通过延时用数码管显示灯的亮的占空比,从而改变了灯的亮度。

本系统的智能控制是以51学习板上的AT89C51单片机控制单元为核心,通过电脑的驱动,完成对系统灯的控制,采用一个高亮发光二级管的亮灭来显示整个系统的效果。

系统设计智能化控制的同时,还设计了手动按键的控制,达到了简单的智能照明。

附录:

附1:

元器件明细表

器件名称

规格

数量

电容

150PF

1个

光敏电阻

1个

电阻

10千欧

4个

芯片底座

20pin

1个

芯片

ADC0804

1个

学习板

1个

插针

若干

杜邦线

19根

LED灯

高亮灯

一个

附2:

电路图图纸

实物图

附3:

程序清单

基本要求的程序:

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitadcs=P1^7;

sbitadrd=P3^7;

sbitadwr=P3^6;

sbitled=P1^5;

sbitSeg_ce=P1^0;

sbitDig_ce=P1^1;

uchartab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0到9

uintad_data,m=0,n=0,t1=5,t2=25;//ad_data表示AD输出8位2进制,t1为定时5秒后启动光采集电路,t2为定时25秒后关闭光采集电路

voiddelay(uinti)

{

uintj;

for(i;i>0;i--)

for(j=124;j>0;j--);

}

voidkeyscan(uintnum)//显示5秒

{

uintge,shi;

ge=num%10;

shi=num/10;

P0=0;Seg_ce=1;Seg_ce=0;//清段选

P0=0xff;Dig_ce=1;Dig_ce=0;//清位选

P0=tab[ge];Seg_ce=1;Seg_ce=0;

P0=0xfe;Dig_ce=1;Dig_ce=0;//显示5秒

}

voidread_ad()

{

adcs=0;

adwr=0;delay

(1);adwr=1;delay

(1);//启动AD,开始采样(/wr低电平保持的最短时间为100ns启动转换后必须加入一个延时以等待AD采样结束

adrd=0;delay

(1);ad_data=P2;delay

(1);adrd=1;//读数据读取转换结果(/rd>200ns)

adcs=1;

}

voidmain()

{P0=0;

P1=0x2c;//初始化P1_5为低(灯一开始是灭的)

TMOD=0x01;//方式1,16位定时器

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//设置定时器初值

IE=0x82;//设置中断允许

TR0=1;//启动定时器

while

(1)

{

if(m==0)keyscan(t1);

if(t1==0)//5秒已完,启动光采集电路

{

while(t2)

{

read_ad();

if(ad_data<125)//当外界很亮的时候关灯

{

led=1;

}

else

{

led=0;//亮灯

delay

(1);

}

}

if(t2==0)led=0;//25秒已完,forever亮

}

}

}

voidT0_timer()interrupt1//定时器T0中断函数

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

if(t1!

=0)m++;//不为0说明光采集电路还未启动,还在5秒之内

if(m==20)//1秒时间

{

m=0;

t1--;

}

if(t2!

=0)n++;//不为0说明还在25秒之内

if(n==20)//1秒时间

{

n=0;

t2--;

}

}

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitDig_ce=P1^1;

sbitSeg_ce=P1^0;

sbitKey_ce=P1^3;

sbitled=P1^5;

uintz;

uchartab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0-9

voiddelay(uinti)

{

uintj;

for(i;i>0;i--)

for(j=19;j>0;j--);

}

voidkeyscan()

{

ucharTemp1,Temp2;

P0=0;Seg_ce=1;Seg_ce=0;

P0=0xfe;Dig_ce=1;Dig_ce=0;delay

(1);//扫描第一行,将第一行置低电平

Key_ce=0;//将P1_3口拉低,74LS244使能

Temp1=P0;//读P0口数据

Temp1=Temp1&0x0f;//提取按键相关数据-P0口的低四位

if(Temp1!

=0x0f)//判断是否有按键按下

{

delay(10);//延时消抖

Temp2=P0;Temp2=Temp2&0x0f;//再读P0口,并提取P0口低四位数据

if(Temp1==Temp2)

{

switch(Temp2)

{

case0x0e:

z=z+10;break;//按K0键每按一次键就增加10%的亮度,从而逐渐变亮,若低四位的值与0x0e相等,就执行其后的语句

case0x0d:

z=z-10;break;//按K1键每按一次键就减少10%的亮度,从而逐渐变暗

case0x07:

z=0;break;//按K3键清零

default:

break;

}//等待按键释放

while(Temp2!

=0x0f)

{

//不断地读取P0口数据,只要结果不等于0x0f,说明有按键没有被释放,直到释放,才退出

Temp2=P0;

Temp2=Temp2&0x0f;

}

}

}

Key_ce=1;//关使能端

if(z<=100)

{P0=0xff;Dig_ce=1;Dig_ce=0;//清段选

P0=tab[z%10];Seg_ce=1;Seg_ce=0;delay(5);//个位

P0=0xfe;Dig_ce=1;Dig_ce=0;delay(5);

P0=0xff;Dig_ce=1;Dig_ce=0;

P0=tab[(z/10)%10];Seg_ce=1;Seg_ce=0;delay(5);//十位

P0=0xfd;Dig_ce=1;Dig_ce=0;delay(5);

P0=0xff;Dig_ce=1;Dig_ce=0;

P0=tab[z/100]|0x80;Seg_ce=1;Seg_ce=0;delay(5);//百位

P0=0xfb;Dig_ce=1;Dig_ce=0;delay(5);

}

elsez=0;

}

voidmain()

{

P0=0;

P1=0x2c;

z=0;//100为100%的占空比//机器周期

led=1;

while

(1)

{

keyscan();

led=0;

delay(z);

led=1;

delay(100-z);

}

}

 

拓展2(自动控制灯的亮灭)

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitadcs=P1^7;

//A/D使能端

sbitadrd=P3^7;

sbitadwr=P3^6;

sbitled=P1^5;

uintad_data,num;

voiddelay(uintz)//50微

{

uintx,y;

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

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

}

voidread_ad()

{

adcs=0;

adwr=0;delay(10);adwr=1;delay(10);//启动AD,开始

adrd=0;delay(10);ad_data=P2;delay(10);adrd=1;//读数据读取转换结果(/rd>200ns)

adcs=1;

}

voidmain()

{

uintz[]={0,10,20,30,40,50,60,70,80,90};

P0=0xff;//初始化

while

(1)

{

read_ad();

if(ad_data<=50)

num=0;

//判断外界光的强弱从而判断灯应该亮的等级

elseif(ad_data>50&&ad_data<=60)

num=1;

elseif(ad_data>60&&ad_data<=73)

num=2;

elseif(ad_data>73&&ad_data<=87)

num=3;

elseif(ad_data>87&&ad_data<=120)

num=4;

elseif(ad_data>120&&ad_data<=140)

num=5;

elseif(ad_data>140&&ad_data<=160)

num=6;

elseif(ad_data>160&&ad_data<=180)

num=7;

elseif(ad_data>180&&ad_data<=215)

num=8;

elseif(ad_data>215&&ad_data<=255)

num=9;

led=0;delay(z[num]);

led=1;delay(100-z[num]);

}

}

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

当前位置:首页 > 求职职场 > 简历

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

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