专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

电子产品设计《智能台灯》

作者:huqin   来源:本站原创   点击数:  更新时间:2014年04月04日   【字体:

 

一:引言

 

众所周知我们生活中少不了台灯,在日常生活中台灯是我们的生活必需品,在使用中用户经常忘记关灯而造成资源浪费,夜晚摸黑要去开灯,非常不方便,台灯使用者大多数是学生,如果坐姿不端正,就会影响人的视力,基于上述等情况,本人设计了一种具有以下功能的台灯

 

(1) 该产品由220V交流电直接供电。通过POWER键可以开启/关闭台灯。

 

(2) 该产品有两种工作状态(AUTO/MENU,通过“AUTO/MENU”键切换,在MENU状态时,可通过“+” 键及“-”键调整台灯的亮度,并利用超声波传感器测量用户与台灯的距离,当距离小于30cm时,通过控制灯光闪烁(闪烁频率为每秒钟3次左右)提醒用户注意保持与台灯的距离;在AUTO状态时,除具备有MENU状态相同功能外,还具备室内是否有人检测的功能,当室内没有人时,自动关闭台灯(为了便于测试,请将检测时间定为5秒,即检测到没有人的时间超过5秒时,关闭台灯,检测距离为4m),当有人进入房间时(检测距离为4m),自动开灯。

 

(3) 该产品由功率为3WLED灯提供照明,必须注意:3WLED灯工作电流为700mA左右,工作电压为3.6V左右,请注意安全。]

 

(4) 该产品测距采用超声波传感器,当有物体移动时,超声波接收的信号幅度会发生变化,利用这个原理来检测是否有人。

 

二:硬件电路设计

 

  1)总体结构

 

     智能台灯是根据超声波测距来实现功能,通过对220V加以变压整流滤波得到+15V+12V+5V,—12V电压,然后通过555芯片产生一个40KHZ的脉冲信号经过反向器74LS04驱动,再由超声波探头发射出去,接收部分通过TL084放大,分别输出到两路,一路是直接接LM393比较器比较,另一路先通过检波二极管,通过电路上的电容C21VR1进行滤波,滤除较高的高频信号,再与LM393比较器比较,两路都有触发信号输出单片机中,最后通过按键来实现LED的亮度调节以及LED的频闪,
 

(2)电源电路



  电源电路具有多路输出,并且具有高滤波作用,
 

(3)单片机电路


本次MCU采用AT89S52单片机,该单片机是一种低功耗高性能CMOS8位的控制器,内部存储器8K

4)超声波发射电路



 

超声波发射电路采用555芯片进行驱动,由AT89S52发送驱动信号进行驱动,通过超声波发射40KHZ,

 

(5)   超声波接收电路


接收电路采用TL084芯片对超声波信号放大,此次我设计中用到了两级放大,再用LM393进行信号对比驱动三极管,单片机通过计算发射到接收完毕的时间可以得知台灯与人的距离,

6LED驱动电路



 

AT89S52通过单片机的IO口控制与芯片PT4115DIM口相连,通过程序产生PWM脉冲信号,送出的输出功率可以驱动LED,同时可以通过单片机的接口接入外部按键可以调节LED的亮度,

 

 

 

总电路图如下:



 

PCB如下:




程序清单如下:

 

#include<reg52.h>

 

#define uchar unsignedchar

 

#define uint unsignedint

 

sbit key=P2^2;

 

sbit key1=P2^3;

 

sbit led=P1^0;

 

uint PWM=0x7f;

 

void delayms(uint xms);

 

void delay(uint t) ;

 

void main()

 

{

 

    TMOD=0x21;

 

    TH0=0xfc;

 

    TL0=0x66;

 

    TH1=PWM;

 

    TL1=0;

 

    EA=1;

 

    ET0=1;

 

    ET1=1;

 

    TR0=1;

 

    while(1)

 

    {

 

    do

 

      if(PWM!=0xff)

 

        {

 

            PWM=PWM+1;

 

            delayms(10);

 

            }

 

    while(key==0);

 

    do

 

      if(PWM!=0x02)

 

      {

 

            PWM=PWM-1;

 

            delayms(10);

 

            }

 

     while(key1==0);

 

     }

 

     }

 

void timer0 interrupt 1

 

{

 

    TR0=0;

 

    TH0=0xfc;

 

    TL0=0x66;

 

    TH1=PWM;

 

    TR1=1;

 

    led=1;

 

    }

 

void timer1 interrupt 3

 

{

 

    TR1=0;

 

    led=0;

 

    }

 

void delayms(uint xms)

 

{

 

    uint i,j;

 

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

 

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

 

    }

 

void delay(uchar t)

 

{

 

    while(t--);

 

    }

 

 

关闭窗口

相关文章