1.簡介
本次主要是利用單片機設計並製作一套智能垃圾箱。要求以單片機爲控制核心,通過紅外傳感器檢測是否有人扔垃圾,並自動打開垃圾箱蓋,扔完垃圾後再自動關閉。
主要內容包括:
(1)紅外對管傳感器檢測是否有人扔垃圾
(2)垃圾桶滿報警
(3)步進電機驅動電路的設計
2.硬件設計
(1)總體硬件設計
硬件主要以單片機爲核心,通過軟件和硬件的結合實現檢測到人自動打開垃圾桶蓋的效果,並且垃圾桶滿了之後有聲光提醒。主要通過三大塊來設計,包括步進電機驅動電路、檢測電路和蜂鳴器報警電路等。
(2)步進電機驅動電路
步進電機驅動電路採用了ULN2003晶體管陣列芯片,它是一個單片高電壓、高電流的達林頓晶體管陣列集成電路。它是由7對NPN達林頓管組成的,它的高電壓輸出特性和陰極箝位二極管可以轉換感應負載。單個達林頓對的集電極電流是500mA。
(3)紅外檢測傳感器電路
本次設計採用了兩個反射式紅外傳感器。一個作爲周圍人體檢測,另一個作爲檢測垃圾是否裝滿傳感器。當紅外傳感器無檢測到目標對象時,傳感器爲低電平;當傳感器檢測到目標對象時,傳感器爲高電平。
(4)硬件電路圖
3.軟件設計
(1)軟件流程圖
智能垃圾桶系統的軟件需要同時是否有人、垃圾桶是否裝滿、步進電機驅動等任務。在本設計中,當紅外檢測到有人時,垃圾桶自動打開,從最後一次檢測到無人開始計時,5秒後自動垃圾桶關閉。垃圾桶滿了之後會聲光報警提醒。
(2)主程序源碼
void proc() //正反轉函數
{
if(open_flag==1&&!open_flag1) //關
{
P2=zz[loop];
loop=(loop+1)%8;
Delay800us();
m_i++;
if(m_i==1080)
{
m_i=0;
open_flag=0;
open_flag1=1;
}
}
else if(open_flag==2&&open_flag1) //開
{
P2=fz[loop];
loop=(loop+1)%8;
Delay800us();
m_i++;
if(m_i==1080)
{
m_i=0;
open_flag1=0;
open_flag=0;
}
}
}
void dis_pose()
{
if(!HW1)
{
led1=0;
if(!key1)
{
if(key1_flag)
{
key1_flag=0;
if(open_flag1)
{
hand_flag=1;
open_flag=2;
}
else
{
hand_flag=0;
open_flag=1;
}
}
}
else key1_flag=1;
}
else
{
led1=1;
if(!HW2)
{
if(HW2_flag)
{
HW2_flag=0;
if(open_flag1) open_flag=2;
}
}
else
{
HW2_flag=1;
}
}
}
void main()
{
TMOD=0x10; //定時器0,定時器1,16位工作方式
EA=1; //打開總中斷0
TH1=0x4c;
TL1=0x00;
TR1=1;
ET1=1;
while(1)
{
if(open_flag==0)
{
P2=P2&0xf0;
m_i=0;
}
else
{
proc();
}
}
}
void time_1() interrupt 3
{
TH1=0x4c;
TL1=0x00;
ms++;
dis_pose();
if(!HW1)
{
p_ms++;
if(p_ms>=200)
{
p_ms=0;
beep_num=8;
}
}
else
{
p_ms=199;
}
if(!open_flag1)
{
if(hand_flag==0)
{
if(HW2)
{
c_ms++;
if(c_ms>=100)
{
c_ms=0;
open_flag=1;
}
}
else
{
c_ms=0;
open_time++;
if(open_time>=200)
{
open_time=0;
beep_num=6;
}
}
}
else
{
if(HW2&&HW1)
{
c_ms++;
if(c_ms>=100)
{
c_ms=0;
open_flag=1;
hand_flag=0;
}
}
else
{
c_ms=0;
}
}
}
else
{
c_ms=0;
open_time=0;
}
if(ms>=2)
{
ms=0;
if(beep_num!=0)
{
beep_num--;
beep=~beep;
}
else
{
beep=1;
}
}
}
源碼+PCB+電路圖 下載:關注公衆號,首頁回覆“智能垃圾桶”獲取資料