專注電子技術(shù)學(xué)習(xí)與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

電子產(chǎn)品設(shè)計《智能臺燈》

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月04日   【字體:

 

一:引言

 

眾所周知我們生活中少不了臺燈,在日常生活中臺燈是我們的生活必需品,在使用中用戶經(jīng)常忘記關(guān)燈而造成資源浪費,夜晚摸黑要去開燈,非常不方便,臺燈使用者大多數(shù)是學(xué)生,如果坐姿不端正,就會影響人的視力,基于上述等情況,本人設(shè)計了一種具有以下功能的臺燈

 

(1) 該產(chǎn)品由220V交流電直接供電。通過POWER鍵可以開啟/關(guān)閉臺燈。

 

(2) 該產(chǎn)品有兩種工作狀態(tài)(AUTO/MENU,通過“AUTO/MENU”鍵切換,在MENU狀態(tài)時,可通過“+” 鍵及“-”鍵調(diào)整臺燈的亮度,并利用超聲波傳感器測量用戶與臺燈的距離,當距離小于30cm時,通過控制燈光閃爍(閃爍頻率為每秒鐘3次左右)提醒用戶注意保持與臺燈的距離;在AUTO狀態(tài)時,除具備有MENU狀態(tài)相同功能外,還具備室內(nèi)是否有人檢測的功能,當室內(nèi)沒有人時,自動關(guān)閉臺燈(為了便于測試,請將檢測時間定為5秒,即檢測到?jīng)]有人的時間超過5秒時,關(guān)閉臺燈,檢測距離為4m),當有人進入房間時(檢測距離為4m),自動開燈。

 

(3) 該產(chǎn)品由功率為3WLED燈提供照明,必須注意:3WLED燈工作電流為700mA左右,工作電壓為3.6V左右,請注意安全。]

 

(4) 該產(chǎn)品測距采用超聲波傳感器,當有物體移動時,超聲波接收的信號幅度會發(fā)生變化,利用這個原理來檢測是否有人。

 

二:硬件電路設(shè)計

 

  1)總體結(jié)構(gòu)

 

     智能臺燈是根據(jù)超聲波測距來實現(xiàn)功能,通過對220V加以變壓整流濾波得到+15V,+12V+5V,—12V電壓,然后通過555芯片產(chǎn)生一個40KHZ的脈沖信號經(jīng)過反向器74LS04驅(qū)動,再由超聲波探頭發(fā)射出去,接收部分通過TL084放大,分別輸出到兩路,一路是直接接LM393比較器比較,另一路先通過檢波二極管,通過電路上的電容C21,VR1進行濾波,濾除較高的高頻信號,再與LM393比較器比較,兩路都有觸發(fā)信號輸出單片機中,最后通過按鍵來實現(xiàn)LED的亮度調(diào)節(jié)以及LED的頻閃,
 

(2)電源電路



  電源電路具有多路輸出,并且具有高濾波作用,
 

(3)單片機電路


本次MCU采用AT89S52單片機,該單片機是一種低功耗高性能CMOS8位的控制器,內(nèi)部存儲器8K,

4)超聲波發(fā)射電路



 

超聲波發(fā)射電路采用555芯片進行驅(qū)動,由AT89S52發(fā)送驅(qū)動信號進行驅(qū)動,通過超聲波發(fā)射40KHZ,

 

(5)   超聲波接收電路


接收電路采用TL084芯片對超聲波信號放大,此次我設(shè)計中用到了兩級放大,再用LM393進行信號對比驅(qū)動三極管,單片機通過計算發(fā)射到接收完畢的時間可以得知臺燈與人的距離,

6LED驅(qū)動電路



 

AT89S52通過單片機的IO口控制與芯片PT4115DIM口相連,通過程序產(chǎn)生PWM脈沖信號,送出的輸出功率可以驅(qū)動LED,同時可以通過單片機的接口接入外部按鍵可以調(diào)節(jié)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--);

 

    }

 

 

關(guān)閉窗口

相關(guān)文章