感应台灯的设计与实现.docx
《感应台灯的设计与实现.docx》由会员分享,可在线阅读,更多相关《感应台灯的设计与实现.docx(17页珍藏版)》请在冰点文库上搜索。
感应台灯的设计与实现
电子科技大学微芯杯
刘承文
简介本智能感应台灯控制系统基于超声波测距方式,利用单片机进行处理,能够感知一定范围内的人、或其他物体,当人或物进入其探测范围,台灯开启,并随着距离台灯距离减少。
可利用PWM控制台灯亮度,以节约电能。
1.项目背景3
2.方案设计3
3.设计过程4
4.实用化的可能性、推广价值13
5.创新点14
6.作品实物图片14
项目背景随着科技的高速发展,各种各样的科技产品、家用电器开始走入人们的生活,这一切都大大地提高了人们的工作效率、改善了人们的生活,现在电器的发展趋势是智能化,这样会使人们使用起来更加方便。
随着智能控制理论和人工智能研究的深入,各种更加逼真地模拟人类智能的家用电器会更多地出现,而单片机和智能理论的结合,将来不但更多地改进现行家用电器,而且将会产生全新的家用电器。
家用电器因为单片机的加入而走向智能化,并且随着人们生活水平的提高日益走向平民化,我们的生活也随着家用电器的发展越来越方便、舒适。
随着家用电器的发展,作为家用电器当中的小台灯也要顺应科技的发展步伐走向智能化。
目前,灯具市场上出售的灯具种类繁多,一般台灯均采用220V交流电源供电,日光灯管、白炽灯泡为光源,手动开关或触摸感应式开光来控制。
但这类台灯存在很多弊端,一是电压是不安全电压,给人们使用带来不安全因素;二是日光灯还具有频闪效应,经常使用会给人的眼睛带来一定的伤害;三是耗电量大、台灯通常都是以日光灯为主,在几瓦到几十瓦之间;四是人工化,人们由于手工操作,往往会忘记关灯,这也造成电能的浪费。
正因如此,制作生产智能感应台灯具有很重要的意义
方案设计
2.1设计题目:
制作一个基于超声波、红外等测距方式的智能感应台灯控制系统,系统能够感知一定范围内的人、或其他物体,当人或物进入其探测范围,台灯开启,并随着距离台灯距离减少,利用PWM控制台灯亮度,以节约电能。
2.2基础要求:
1、在控制系统2m范围内,能正常感知物体并开启台灯
2、当人或物,移出其感应范围时,能够关闭台灯
3、在人或物与控制系统距离变化超过20cm时,台灯光线应用明显变化
2.3发挥部分:
1、控制系统能同时控制2路或2路以上台灯
2、控制系统能显示人或物体与控制系统距离
3、控制系统能够实时显示系统开启时间
4、其他
设计过程
3.1方案比较与选择
3.1.1测距模块的选择
方案一:
红外线测距模块
SHARF夏普原装红外测距传感器GP2Y0A21YK0F量程10-80cm
Risym
方案二:
超声测距模块
H¥-SRF05超声波测距摸块
附资料原理图
工作电压:
4.5V~5.5V。
功耗电流:
最小1mA最大20mA
谐振频率:
40KHz
探测距离范围:
4毫米〜4米。
误差:
4%经比较,超声测距模块的距离和工作电压都符合系统要求,而且超声测距模块比较便宜,所以本次设计采用超声测距模块。
3.1.2台灯电路的选择
方案一:
采用三极管放大电路
方案二:
采用上拉电源的方式
经比较,本次设计采用四组LED没有必要采用三极管放大电路,三极管电路复杂,上拉电源的方法电路简单,而且灌入单片机的电流在可控范围内,所以本次设计米用方案二。
3.2方案描述
系统总体框图如图所示。
超声测距模块测出超声波从发出到返回过程的时间,单
片机通过计时器记录这一时间,并按照公式计算出物体到系统的距离。
这个距离再通过显示模块显示出来,距离作为一个参数,PWM波参考距离的值开启或关闭
LED灯。
超声波测
计时器
距模块
J显示
STC89C5
2单片机
4个LED灯
当物体与系统间的距离为0-50cm时,开启四盏灯,距离为50-100cm时开启三盏灯,距离为100-150cm时开启两盏灯,距离为150-200cm时开启一盏灯,距离大于200cm时关闭台灯。
3.3设计原理由单片机的P3A3引脚产生一个20us的脉冲信号,超声测距模块接收到此信号的时候,产生超声波,同时ECH(引脚产生高电平信号,当接收到超声波以后,echo引脚产生低电平信号,单片机通过定时器1中断来记录时间,以此来计算距离。
单片机得出距离以后,通过定时器0中断来驱动计时数码管和距离显示数码管和PWM波,以此来控制LED灯。
3.4程序
#include//包括一个52标准内核的头文件
#defineucharunsignedchar//定义一下方便使用
#defineuintunsignedint
#defineulongunsignedlong
〃***********************************************
sfrCLK_DI'
V=0x97;//
//
为STC单片机定义,系统时钟分频为STC单片机的IO口设置地址定义
sfr
P0M1
=0X93;
sfr
P0M0
=0X94;
sfr
P1M1
=0X91;
sfr
P1M0
=0X92;
sfr
P2M1
=0X95;
sfr
P2M0
=0X96;
**********************************************
sbitTrig=
:
P3A3;//
产生脉冲引脚
sbitEcho
=P3A2;//
回波引脚
sbittest=
P3A1;//
测试用引脚
sbitLED仁卩3八4;
sbitLED2=P3A5;
sbitLED3=P3A6;
sbitLED4=P3A7;〃定义4个灯泡引脚
定义计时器计时变量
staticunsignedcharsecond,minute,hour;〃unsignedinttcount;
unsignedcharm;
uchar
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示0-9
code计时用
inttime_count=1;unsignedchardistances;
ucharcodeSEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管
0-9
uintdistance[4];//测距接收缓冲区
ucharge,shi,bai,temp,flag,outcomeH,outcomeL,i;//自定义寄存器
bitsucceed_flag;//测量成功标志
//********函数声明
voidconversion(uinttemp_data);
voiddelay_20us();
voidpai_xu();
voidmain(void)//主程序{
uintdistance_data,a,b;
ucharCONT_1;
CLK_DIV=0X03;//系统时钟为1/8晶振(pdf-45页)
P0M1=0;//将io口设置为推挽输出
P1M1=0;
P2M1=0;
P0M0=0XFF;
P1M0=0XFF;
P2M0=0XFF;
i=0;
flag=0;
test=0;
Trig=0;//首先拉低脉冲输入引脚
TMOD=0x11;//定时器0,定时器1,16位工作方式
TR0=1;//启动定时器0
IT0=0;//
ET0=1;//
ET1=1;//
EX0=0;//
EA=1;//
由高电平变低电平,触发外部中断打开定时器0中断打开定时器1中断关闭外部中断打开总中断0
while
(1)//程序循环{
EA=0;
Trig=1;delay_20us();Trig=0;//while(Echo==0);//
succeed_flag=0;//
EX0=1;//
TH1=0;//
TL1=0;//
TF1=0;//
TR1=1;//EA=1;
产生一个20us的脉冲,在Trig引脚等待Echo回波引脚变高电平清测量成功标志打开外部中断
定时器1清零
定时器1清零
启动定时器1
while(TH1<30);//
TR1=0;
EX0=0;//
等待测量的结果,周期
//关闭定时器1关闭外部中断
65.535毫秒(可用中断实现)
if(succeed_flag==1)
{
distance_data=outcomeH;//distance_data<<=8;//distance_data=distance_data|outcomeL;//位结果数据
distance_data/=40;//等于厘米
}//
米,Y米=(X秒*344)/2
//
/344==》X秒=0.0058*Y米==》厘米二微秒/58
if(succeed_flag==0)
{
distance_data=0;//
test=!
test;//
测量结果的高8位
放入16位的高8位
与低8位合并成为16
微秒的单位除以58
为什么除以58等于厘
X秒=(2*Y米)
没有回波则清零
测试灯变化
}distance[i]=distance_data;//i++;distances=distance_data;
将测量结果的数据放入缓冲区
if(i==3)
distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;
pai_xu();
distance_data=distance[1];
a=distance_data;if(b==a)CONT_1=0;if(b!
=a)CONT_1++;if(CONT_1>=3){CONT_1=0;b=a;conversion(b);
}i=0;
}
}
}//外部中断0,用做判断回波电平
外部中断是0号
取出定时器的值取出定时器的值至成功测量的标志关闭外部中断
INTO_()interrupt0//
{
outcomeH=TH1;//outcomeL=TL1;//succeed_flag=1;//EX0=0;//
//定时器0中断,用做显示timer0()interrupt1//定时器0中断是1号
{
TH0=(65536-5)/256;
TL0=(65536-5)%256;switch(flag)
{case0x00:
P0=ge;P1=table[minute/10];P2=0x17;flag++;break;
case
0x01:
P0=shi;P1=(table[minute%10]&0x7f);P2=0x2b;flag++;break;
case0x02:
P0=bai;P1=table[second/10];P2=0x4d;flag++;break;
case0x03:
P1=table[second%10];P2=0x8f;flag=0;break;
}//计时器显示和距离显示
time_count++;
if(distances<5&&distances==5)
{
LED1=0;
LED2=0;
LED3=0;
LED4=0;
}if(5{
if(time_count{
LED1=0;
LED2=1;
LED3=1;
LED4=1;
}
else
{
LED1=1;
LED2=1;
LED3=1;
LED4=1;
}
if(time_count>50)
{time_count=1;
}
}//距离在0-50,1个台灯变化,其余三个都亮
if(51if(time_count{
LED1=0;
LED2=0;
LED3=1;
LED4=1;
}
else
{
LED1=0;
LED2=1;
LED3=1;
LED4=1;
}if(time_count>50)
{time_count=1;
}
}//50-100一个灭一个变化两个常亮
if(101if(time_count{
LED1=0;
LED2=0;
LED3=0;
LED4=1;
}
else
{
LED1=0;
LED2=0;
LED3=1;
LED4=1;
}
if(time_count>50)
{
time_count=1;
}
}//100-150依次类推
if(151if(time_count{
LED1=0;
LED2=0;
LED3=0;
LED4=0;
}
else
{
LED1=0;
LED2=0;
LED3=0;
LED4=1;
}
if(time_count>50)
{
time_count=1;
if(distances>200)
{
LED1=0;
LED2=0;
LED3=0;
LED4=0;
}//以上为台灯显示,pwmt皮输出
tcount++;
if(tcount==5800)
{tcount=0;
second++;
if(second==60)
{second=0;
minute++;
if(minute==60)
{minute=0;
hour++;
if(hour==24)
{hour=0;
}
}
}
}//计时器时间变量增加
}
//*****************************************************************
//定时器1中断,用做超声波测距计时
timer1()interrupt3//定时器0中断是1号
{
TH1=0;
TL1=0;
}
//******************************************************************//显示数据转换程序voidconversion(uinttemp_data)
{
ucharge_data,shi_data,bai_data;
bai_data=temp_data/100;
temp_data=temp_data%100;//取余运算shi_data=temp_data/10;
temp_data=temp_data%10;//取余运算ge_data=temp_data;
bai_data=SEG7[bai_data];
shi_data=SEG7[shi_data];
ge_data=SEG7[ge_data]
EA=0;
bai=bai_data;
shi=shi_data;
ge=ge_data;
EA=1;
}
//******************************************************************
voiddelay_20us()
{ucharbt;
for(bt=0;bt<100;bt++);
}
voidpai_xu()
{uintt;
if(distance[0]>distance[1]){t=distance[0];distance[0]=distance[1];distance[1]=t;}
if(distance[0]>distance[2]){t=distance[2];distance[2]=distance[0];distance[0]=t;}
if(distance[1]>distance[2]){t=distance[1];distance[1]=distance[2];distance[2]=t;}
}
四•实用化的可能性、推广价值
到目前为止,在灯具市场上,很少见到采用+5V的直流电源供电的一种人体智能台灯,它具有既不会出现触电的意外,又具有使用寿命长、无辐射、又不污染等优点,有许多普通按键台灯所无法比及的优势,智能化台灯一方面可以更节省电能,有利于环保,另一方面,在黑暗的时候自动开关灯的功能也让使用者使用起来更方便,省去黑暗中摸灯的麻烦。
五•创新点
1.附带测距显示功能,可实时掌握距离大小。
2•附带时间显示功能,可即时了解台灯开启时间六•作品实物图片