基於51單片機的智能垃圾桶

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+電路圖 下載:關注公衆號,首頁回覆“智能垃圾桶”獲取資料
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章