基於51控制的人體感應燈

2021-09-27 07:41:11 字數 3134 閱讀 9738

6 程式設計

7 成品模型展示

總結首先我先說說為什麼要做這個東西,這個是由於前幾天乙個朋友突然找我說要交乙個作業但又不知道要做什麼,我聽了作業要求後要求後給出的解決方法,做乙個人體感應燈,並答應她幫她做。

為什麼要做這個燈呢?由於現在大部分樓道燈仍採用聲光控制,這就導致晚上時你必須弄出點聲響才可以點亮樓道燈,但晚上聲音必然會造成擾民,所以這個設計一點也不人性化。因此提出一款基於51開發的人體感應貼心燈,本作品是基於stc89c52微控制器開發的人體感應貼心燈。當有人靠近時貼心燈會自動點亮,當人與感應開關距離越來越接近時,燈的亮度也會隨之增強。本作品可以用於樓道燈、學生智慧型檯燈、以及行人路的路燈的控制,以優化使用者的體驗,達到貼心的效果。

當人體靠近燈時,燈會自動點亮,此時微控制器通過超聲波來檢測人距離燈的位置,來控制燈的亮度,當人距離燈越近時燈越亮。當附近無人時8秒後燈會自動熄滅。

這裡設計電路就不多講了,我主要說說我的51的i/o口分配,電路可以自己設計去焊接。

其實整個作品對初學者來說也是不算難的

我們每個人都會釋放紅外,所以我們採用一種紅外熱釋電模組用來檢測是否有人體靠近。當有人靠近時,紅外熱釋電模組會產生高電平,當沒有人時該模組會產生低電平,基於這個原理,我們可以將這兩種訊號分別送入微控制器以控制燈的狀態。

距離感應我們可以採用超聲波模組,超聲波模組會自動產生40khz的方波,當方波遇到障礙物時會返回,我們只需用微控制器測出從發射方波到返回方波的時間就可以求出距離。測試距離=(時間*聲速(340m/s))/2。

方法一:燈的亮度跟燈的電壓有關,我們可以才用降壓法來改變燈的亮度。那麼如何實現自動降壓?由於51微控制器的i/o口只能固定輸出5v的電壓,所以我準備pwm來模擬電壓以實現自動調節燈的亮度。

方法二:乙個大的led是由許多小的led組成的,我們可以採用分塊控制來實現亮度調節,當需要最亮光強時我們將led全部點亮,當需要弱亮光強時我們點亮部分led以實現亮度調節的功能。

這個作品我才用方法一來實現。

#include

#include

//包涵了_nop_()函式宣告

typedef

unsigned

int unint;

typedef

unsigned

char unchar;

//trig 為控制端

sbit trig = p0^0;

//超聲波的 trig端 插在了p1.6口

//echo 為接收端

sbit echo = p0^1;

//超聲波的 echo端 插在了p1.7口

/*還有vcc,gnd 就直接插在了微控制器 vcc 和gnd 埠了

*也可以將其插在i/o引腳中 將插 vcc的引腳置高電平,gnd置低電平*/

sbit in1=p1^

1;

sbit in2=p1^

2;

sbit key=p2^0;

unsigned

int dgh,dgl,ddh,ddl,c;

unchar flag =0;

//標誌定時器是否溢位

void

delay_20us()

;// 延時20ms

void

init_time()

;//初始化定時器的函式

/*********中斷程式2****用於控制led亮度*********/

void

timer2

() interrupt 3 using 3

//中斷3 t1溢位中斷,使用工作組3

else

}void

off(

void

)// 關燈

void

play

(void

)//

void

play1

(void

)//

void

play2

(void

)//

void

play3

(void)//

void

init()

// 初始化函式

/*************程式主函式**********************/

void

main()

elseif(

(time_data>=41)

&&(time_data<=60)

)elseif(

(time_data>=61)

&&(time_data<=80)

)elseif(

(time_data>=81)

&&(time_data<=

110))}

else

if(key==0)

off();

}}/***********以下全為控制超聲波需要的函式**************/

void

timer0

() interrupt 1

//中斷函式

void

init_time()

void

delay_20us()

//延時20us

整體圖

主控電路

燈的電路

點亮效果

為什麼要用51?其實51的電路很好設計,現在主流的控制器一般都是stm32,但32的電路包括32最小系統都不好焊接,所以選用51。周4剛好我只有一節課,整個作品從設計電路到程式編寫,到成品完成只用了半天時間,所以這個作品適合初學者去diy。小半天就好了,51其實還挺好玩的。

突發奇想 基於重力感應的人體姿態控制型無人機

基於重力感應的人體姿態控制型無人機 初級階段目標 短距離重力感應控制 遙控器重力模組直接連線控制 手持遙控器不平穩問題?最終目標 控制系統遷移至人體,進行直接姿態操作 重力感應 壓電效應 當晶體受到固定方向外力作用時,內部產生電極化現象,同時在某兩個表面上產生符號相反的電荷,當外力撤去後,晶體又恢復...

Arduino製作乙個人體感應燈

現在的很多家庭中都裝有感應燈,人體感應燈比聲控感應燈的優點是不會影響別人休息,安靜。接下來就是簡單的製作過程。1.需要的裝置 1.arduino uno主控板乙個 2.人體紅外感測器乙個 3.電阻乙個 4.麵包板乙個 5.杜邦線若干條 6.led燈乙個 7.資料線一條 2.電路圖 3.程式 cons...

基於三個kinect的人體建模

單個 kinect 的人體重建,在 kinect sdk 1.8 中,kinect fusion 的效果已經很不錯了。其缺點顯而易見,一是掃瞄時間長,重建物件也需要長時間保持靜態 二是需要人體或者 kinect 轉動以實現全方位掃瞄,操作起來繁瑣。而運用三個 kinect 來進行人體重建,只需要將三...