感应台灯的设计与实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1智能感应台灯电子科技大学微芯杯刘承文2简介本智能感应台灯控制系统基于超声波测距方式,利用单片机进行处理,能够感知一定范围内的人、或其他物体,当人或物进入其探测范围,台灯开启,并随着距离台灯距离减少。可利用PWM控制台灯亮度,以节约电能。目录一.项目背景·············································3二.方案设计·············································3三.设计过程·············································4四.实用化的可能性、推广价值·····························13五.创新点···············································14六.作品实物图片·········································14一·项目背景3随着科技的高速发展,各种各样的科技产品、家用电器开始走入人们的生活,这一切都大大地提高了人们的工作效率、改善了人们的生活,现在电器的发展趋势是智能化,这样会使人们使用起来更加方便。随着智能控制理论和人工智能研究的深入,各种更加逼真地模拟人类智能的家用电器会更多地出现,而单片机和智能理论的结合,将来不但更多地改进现行家用电器,而且将会产生全新的家用电器。家用电器因为单片机的加入而走向智能化,并且随着人们生活水平的提高日益走向平民化,我们的生活也随着家用电器的发展越来越方便、舒适。随着家用电器的发展,作为家用电器当中的小台灯也要顺应科技的发展步伐走向智能化。目前,灯具市场上出售的灯具种类繁多,一般台灯均采用220V交流电源供电,日光灯管、白炽灯泡为光源,手动开关或触摸感应式开光来控制。但这类台灯存在很多弊端,一是电压是不安全电压,给人们使用带来不安全因素;二是日光灯还具有频闪效应,经常使用会给人的眼睛带来一定的伤害;三是耗电量大、台灯通常都是以日光灯为主,在几瓦到几十瓦之间;四是人工化,人们由于手工操作,往往会忘记关灯,这也造成电能的浪费。正因如此,制作生产智能感应台灯具有很重要的意义二·方案设计2.1设计题目:制作一个基于超声波、红外等测距方式的智能感应台灯控制系统,系统能够感知一定范围内的人、或其他物体,当人或物进入其探测范围,台灯开启,并随着距离台灯距离减少,利用PWM控制台灯亮度,以节约电能。2.2基础要求:1、在控制系统2m范围内,能正常感知物体并开启台灯2、当人或物,移出其感应范围时,能够关闭台灯3、在人或物与控制系统距离变化超过20cm时,台灯光线应用明显变化2.3发挥部分:1、控制系统能同时控制2路或2路以上台灯2、控制系统能显示人或物体与控制系统距离3、控制系统能够实时显示系统开启时间4、其他三·设计过程43.1方案比较与选择3.1.1测距模块的选择方案一:红外线测距模块SHARP夏普原装红外测距传感器GP2Y0A21YK0F量程10-80cm红外测距模块虽然距离精准,但是最大距离不够,不能达到要求的2M距离。方案二:超声测距模块工作电压:4.5V~5.5V。功耗电流:最小1mA最大20mA谐振频率:40KHz;探测距离范围:4毫米~4米。误差:4%;经比较,超声测距模块的距离和工作电压都符合系统要求,而且超声测距模块比较便宜,所以本次设计采用超声测距模块。53.1.2台灯电路的选择方案一:采用三极管放大电路方案二:采用上拉电源的方式经比较,本次设计采用四组LED,没有必要采用三极管放大电路,三极管电路复杂,上拉电源的方法电路简单,而且灌入单片机的电流在可控范围内,所以本次设计采用方案二。3.2方案描述系统总体框图如图所示。超声测距模块测出超声波从发出到返回过程的时间,单片机通过计时器记录这一时间,并按照公式计算出物体到系统的距离。这个距离再通过显示模块显示出来,距离作为一个参数,PWM波参考距离的值开启或关闭LED灯。STC89C52单片机超声波测距模块计时器显示6当物体与系统间的距离为0-50cm时,开启四盏灯,距离为50-100cm时开启三盏灯,距离为100-150cm时开启两盏灯,距离为150-200cm时开启一盏灯,距离大于200cm时关闭台灯。3.3设计原理由单片机的P3^3引脚产生一个20us的脉冲信号,超声测距模块接收到此信号的时候,产生超声波,同时ECHO引脚产生高电平信号,当接收到超声波以后,echo引脚产生低电平信号,单片机通过定时器1中断来记录时间,以此来计算距离。单片机得出距离以后,通过定时器0中断来驱动计时数码管和距离显示数码管和PWM波,以此来控制LED灯。3.4程序#includereg52.h//包括一个52标准内核的头文件#defineucharunsignedchar//定义一下方便使用#defineuintunsignedint#defineulongunsignedlong//***********************************************sfrCLK_DIV=0x97;//为STC单片机定义,系统时钟分频//为STC单片机的IO口设置地址定义sfrP0M1=0X93;sfrP0M0=0X94;sfrP1M1=0X91;sfrP1M0=0X92;sfrP2M1=0X95;sfrP2M0=0X96;//***********************************************sbitTrig=P3^3;//产生脉冲引脚sbitEcho=P3^2;//回波引脚sbittest=P3^1;//测试用引脚sbitLED1=P3^4;sbitLED2=P3^5;sbitLED3=P3^6;sbitLED4=P3^7;//定义4个灯泡引脚staticunsignedcharsecond,minute,hour;//定义计时器计时变量unsignedinttcount;距离显示4个LED灯7unsignedcharm;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//计时用数码管显示0-9inttime_count=1;unsignedchardistances;ucharcodeSEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管0-9uintdistance[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;//启动定时器0IT0=0;//由高电平变低电平,触发外部中断ET0=1;//打开定时器0中断ET1=1;//打开定时器1中断EX0=0;//关闭外部中断EA=1;//打开总中断08while(1)//程序循环{EA=0;Trig=1;delay_20us();Trig=0;//产生一个20us的脉冲,在Trig引脚while(Echo==0);//等待Echo回波引脚变高电平succeed_flag=0;//清测量成功标志EX0=1;//打开外部中断TH1=0;//定时器1清零TL1=0;//定时器1清零TF1=0;//TR1=1;//启动定时器1EA=1;while(TH130);//等待测量的结果,周期65.535毫秒(可用中断实现)TR1=0;//关闭定时器1EX0=0;//关闭外部中断if(succeed_flag==1){distance_data=outcomeH;//测量结果的高8位distance_data=8;//放入16位的高8位distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据distance_data/=40;//微秒的单位除以58等于厘米}//为什么除以58等于厘米,Y米=(X秒*344)/2//X秒=(2*Y米)/344==》X秒=0.0058*Y米==》厘米=微秒/58if(succeed_flag==0){distance_data=0;//没有回波则清零test=!test;//测试灯变化}distance[i]=distance_data;//将测量结果的数据放入缓冲区i++;distances=distance_data;if(i==3){distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;9pai_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,用做判断回波电平INTO_()interrupt0//外部中断是0号{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;case0x01: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(distances5&&distances==5){LED1=0;LED2=0;LED3=0;LED4=0;10}if(5distances&&(distances50||distances==50)){if(time_countdistances){LED1=0;LED2=1;LED3=1;LED4=1;}else{LED1=1;LED2=1;LED3=1;LED4=1;}if(time_count50){time_count=1;}}//距离在0-50,1个台灯变化,其余三个都亮if(51distances&&(distances100||distances==100)){if(time_countdistances-50){LED1=

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功