熊國棟
(荊楚理工學院計算機工程學院,荊門 448000)
隨著現代城市和科學技術的不斷發展和進步,人們的生活水平與過去幾年相比有了很大提高,追求健康生活環境的時代已經開啟。因此,相關的環保產品和設備也不斷涌現。在日常生活中,有相當一部分的垃圾箱露天沒有蓋子或是蓋子需要手動打開。通常有蓋子的垃圾箱由于衛生狀況不佳,導致人們不愿意用手直接觸摸打開,甚至將垃圾直接放在一邊放任不管。在炎熱的夏天,如果清理不及時,垃圾會散發出難聞的刺鼻氣味,增加細菌擴散的機會。同時,一些醫療機構的廢物會滋生病毒和傳播疾病,從而危及人們的健康。但目前,市場上自動控制垃圾箱開閉及相關產品非常少見,因此,開發一種能自動控制開閉并具有一定智能程度的垃圾箱已成為當前迫切需要解決的問題之一。
目前世界上許多國家和地區已經實現了廢物的合理處置,一些太陽能設施得到了廣泛的應用。例如,英國劍橋大學結合當地環境,開發了符合當地實際需要的垃圾箱控制系統。該設備內置了一個小型壓縮機,垃圾被壓縮到一定大小以釋放更多的存儲空間,并由太陽能電池陣列供電。此外,通過手機和相關設備,附近的環衛工人可以快速了解垃圾存放情況,以便及時清理。
進入21 世紀,人工智能技術得到了廣泛應用,我國智能家居產業發展迅速。作為智能家居的細分市場,智能垃圾箱的市場規模也在不斷擴大。政策方面,隨著垃圾強制分類的實施,中國垃圾分類行業的快速發展帶動了智能垃圾桶的市場需求。就專利數量而言,中國約有3000 項與智能垃圾箱相關的專利,其中實用新型專利約占60%。自動包裝分類技術可以提高垃圾分類和垃圾處理的效率,備受青睞。
其目的是開發一種智能垃圾箱,主要實現紅外檢測、自動開關以及聲光提醒等多項功能,以避免其影響人們的日常生活環境,降低細菌傳播疾病的風險,保障人們的身心健康,而且也方便提供給人們衛生、清潔的垃圾投放環境。
本設計的控制芯片,可以選擇以STC89C52型單片機為中心,利用紅外傳感器檢測周圍是否有垃圾拋擲行為。如果有,它會自動打開垃圾箱的蓋子,然后在一段時間后自動關閉。本設計的主要框架包括:①紅外傳感器,用于檢測是否有人需要扔垃圾;②垃圾箱裝滿后,打開聲光報警器;③驅動步進電機的電路設計。
通過以上分析,基于單片機技術設計智能垃圾箱是可行的。
本設計經濟壓力小,設計成本低,市場上同類設施少。此外,如果這種設計被正式使用,它將在廢物的儲存和管理方面發揮積極作用。
該設計的實現有利于公共場所和家庭廚房、浴室垃圾的儲存,對于社會來說,具有一定的積極意義。
本設計的硬件主要基于STC89C52 單片機,采用軟硬件結合的方式實現蓋子打開的效果,并添加聲光報警器,提醒此時垃圾箱已滿。主要通過紅外檢測電路、電機驅動電路和聲光報警電路三部分來保證系統的正常運行。總體系統框圖如圖1所示。

圖1 總體設計框圖
3.2.1 STC89C52單片機簡介
STC89C52 單片機是近年來推出的新一代51核單片機,51 系列單片機均屬于8 位的CPU,為確保相應的代碼效率穩步提升,需要積極地關注變量長度的合理控制[1]。涵蓋閃存程序存儲器、脈寬調制、通用異步收發器、串行外圍接口模塊。由于采用了模塊化設計,因此該型號的單片機在擴展性和便攜性方面都有良好的性能,在各種工業控制領域都有廣泛應用。其封裝引腳圖如圖2所示。

圖2 STC89C52引腳圖
3.2.2 主要特點
(1)作為8051 單片微控制器的增強版,它有6 或12 個時鐘機器周期,并與以前的8051 型號的代碼完全兼容。
(2)工作電壓為5.5~3.3 V(5 V 微控制器)或3.8~2.0 V(3 V微控制器)。
(3)工作頻率在0~40 MHz,而普通8051微控制器的工作頻率在0~80 MHz,實際工作頻率甚至高達48 MHz。
(4)存儲程序的空間可以達到8 k 字節,并且有4096位的操作存儲空間。
(5)具有32 個公共導入和導出,P1~P4 復位后上拉較弱,可用作準雙向口。漏極開路時可以通過P0 端口輸出,當沒有上拉電阻時可以使用總線擴展,具有上拉電阻時可以輸入和輸出信號。
(6)該芯片不需要專業的編程/模擬器。通過引腳P3.0,P3.1 可以在幾秒鐘內將程序下載到芯片上。
(7)具有重復使用功能,并將提供監控能力。
(8)有3個16位定時/計數器。
(9)PowerDown 可通過下降沿或低電平外部中斷喚醒。
(10)通用異步串口、定時器軟件可以實現完整的多個UART。
3.2.3 引腳功能
VCC(40針):電源電壓。
VSS(20針):接地。
引腳32 至39 分別屬于芯片的P0 端口,為P0.0至P0.7,這是一個具有漏極開路功能的8位雙向I/O 端口。當所有引腳驅動8 個TTL 負載時,它們可以用作輸出端口。通過為端口P0 輸入“1”,端口P0 也可以用作高阻抗輸入端口。P0端口具有低8位地址和8位多路復用總線,可以在訪問外部程序和數據存儲時提供服務。由于該接口具有良好的通用性,被廣泛應用于各種設備,如計算機、打印機等。當需要從外圍設備或存儲過程讀取或寫入信息時,只需從端口將其插入即可。此時,內部上拉電阻將啟動電源。使用閃存編程時,此端口起到接收指令信號的功能。在驗證程序是否有問題時,需要使用外部上拉電阻來驗證指令信號輸出。
引腳1 至8 屬于端口P1,對應于P1.0 至P1.7。該端口是一個具有上拉電阻的8 位雙向輸入/輸出端口。通過輸出緩沖器的輸入和輸出電流可以實現4 個TTL 輸入。端口的“1”輸入通過內部阻力增加,然后可以用作輸入端口。當用作輸出端口時,外部下拉區域將由于內部下拉而輸出電流信號。P1 端口還具有一些附加功能,比如計時器。
引腳21 至28 統稱為P2 端口,對應于P2.0至P2.7。它們用作8 位雙向輸入/輸出端口,具有內部阻力以傳輸數據,必要時可用作更高的8位地址總線。
P3 端口作為標準傳輸接口,每個引腳也有其獨特的功能,詳見表1。

表1 P3引腳功能表
RST(9引腳):復位輸入。
表示允許的地址鎖存信號輸出(ALE)的引腳為30,當訪問其他外部ROM 時,可以鎖存較低的輸出脈沖。
引腳31 的VPP 是控制外部ROM 訪問的引腳。
引腳18 和19(XTAL1 和2)分別用于連接到外部時鐘電路的輸入和輸出端口。
為了在內部執行復位指令,單片機需要在RST 引腳上輸入高電平信號并保持兩個機器周期。一般情況下,電路中的復位電路會在通電時自動復位并手動復位按鈕。
在復位電路中,所謂的上電自動復位通常通過對外部電容器進行充電和放電來實現。一般來說,將電路電壓上升時間設置在一毫秒內可以達到自動上電復位的效果。
在某些情況下,通電復位的效果往往很差,因此需要選擇按鈕手動復位。本系統的設計是使用手動復位按鈕。按鍵手動復位有兩種方式,一種是電平復位,另一種是脈沖復位。電平復位可通過RST 和電源連接實現。按下按鈕手動復位電路如圖3 所示。時鐘頻率調整為12 M,電容器選擇為10 uF,電阻為10 KΩ。

圖3 復位電路圖
本設計所用的單片機可以由內部時鐘信號產生,也可以由外部來實現。內部時鐘電路圖見圖4。在石英晶體與XTAL1和2連接后,可以形成自激振蕩器以產生內部時鐘脈沖信號,此時形成振蕩電路。在電路中,圖4所示的兩個電容器C2和C3啟動穩定頻率并快速啟動振動。電容值可從5~300 pF 中選擇,典型值為30 pF。晶體振蕩的范圍通常為1.2~12 MHz,典型值設置為12 MHz。
本設計中的時鐘電路采用晶體振蕩器電路,具體電路圖如圖4所示。

圖4 晶體振蕩器電路圖
3.5.1 步進電機簡介
步進電機是一種通過脈沖信號產生角位移的機械式電機。電機的每個旋轉角度表示接收到一個脈沖信號。步進電機是按照穩定的角度一點點地旋轉,為了達到精確的定位效果,可以利用輸入脈沖信號的個數來控制;同時,可以通過改變輸入脈沖信號的頻率來操縱電機的速度和加速度,從而達到調速的效果。
本設計使用的步進電機為28BYJ-48 型四相八拍混合式步進電機,工作電壓為直流電源電壓,5~12 V 之間。當步進電機需要保持旋轉時,可以將脈沖信號連續輸入。轉子旋轉幅度是一個固定值,因為每個脈沖信號只改變步進電機的功率狀態一次。當轉子通過變槳時,表明通電狀態已完成一個循環。四相電機的公共功率模式包括單相繞組四拍(A-B-C-D-A-…),兩相繞組四拍(AB-BC-CD-DA-AB-……)和八拍(A-AB-B-BC-C-CD-DA-A-…)。
驅動模式如表2所示。橙色、黃色、粉色和藍色分別對應A、B、C和D相。

表2 步進電機驅動方式
5伏電源連接到紅色線,單片機P1.3端口連接到橙色線,P1.2 端口連接到黃色線,粉色線連接到P1.1端口,藍色線連接到P1.0端口。
3.5.2 ULN2003芯片
STC89C52 單片機端口輸出信號小,無法支持電機操作,此時可以使用ULN2003 芯片將信號放大后再傳輸到相應的電機接口。
ULN2003 芯片是一種高壓大電流集成電路,包含7對達林頓管,通過高壓輸出和鉗位二極管實現電感負載的轉換。
芯片與MCU 的接口電路相對簡單:1 針連接到MCU 的P2.3 端口,2 針連接到單片機的P2.2 端口,3 針連接到MCU 的P2.1 端口,4 針連接到MCU 的P2.0 端口,可用于單片機與電機驅動器之間的數據傳輸。
ULN2003芯片特點:
(1)輸出的額定集電極電流可達到500 mA。
(2)高壓輸出:50 V。
(3)與多種邏輯類型兼容的輸入。
(4)可作為步進電機驅動器使用。
圖5是系統的驅動電路,它控制著作為整個系統核心的各個模塊的工作。

圖5 步進電機驅動電路
設計中使用的紅外傳感器具有同時發射和接收紅外線的功能,對環境光具有良好的適應性。通過發射管發射一定頻率的紅外線,與障礙物接觸后,傳感器的接收管反射并接收到紅外線。在下一步中,經過比較器電路的進一步處理后,綠色指示燈將點亮,同時,傳感器的信號輸出端口將輸出低電平數字信號。它具有安裝速度快、干擾因素少、應用范圍廣的特點。
人體表面溫度通常穩定在一個固定值,因此人體產生的紅外光的波長是恒定的。身體釋放的紅外線被傳感器探頭吸收,然后菲涅耳透鏡將其聚集在熱釋電元件上,打破電荷平衡,然后輸出電荷信號。判斷電荷后,便可知周圍有人,通過電機打開蓋子。在一段時間沒有感應到人體后,垃圾桶將關閉蓋子。
為了防止人與其他障礙物混淆,可以調整傳感器安裝的位置,將其固定在垃圾桶的開口處,并與垂直防線的箱壁形成適當的角度,使用電位器調整組件的檢測距離,從而大大降低誤判的概率。圖6是本設計中紅外傳感器的電路圖。

圖6 紅外傳感器模塊電路圖
3.6.1 配置模塊參數
(1)當部件上的綠燈亮起時,表示部件前面有障礙物。此時,低電平信號將繼續從輸出端口輸出。該元件可以以35°的角度檢測2~30 cm的范圍。電位器順時針移動,檢測范圍會更大;否則,它會減少。
(2)傳感器的輸出口可以直接將信號傳輸到單片機的輸入口,也可以使5 V繼電器動作。
(3)傳感器的工作電壓應保持在直流3~5 V之間。紅色LED 燈亮起時,表示電路已連接到電源。
3.6.2 模塊接口描述
(1)傳感器的VCC 端口可以連接到3.3~5 V的電壓(可以直接連接到5 V或3.3 V的單片機);
(2)GND外接GND;
(3)OUT小板數字輸出接口(0和1)。
紅外傳感器將低電平信號導入單片機,然后利用單片機使紅燈亮起,報警裝置的揚聲器也啟動。沒有輸入信號會自動關閉。電路圖如圖7所示。

圖7 報警模塊電路圖
智能垃圾箱的軟件程序大致可分為三部分:步進電機驅動、紅外傳感器檢測和聲光報警。在本系統設計中,要對某人進行傳感器檢測,垃圾可以自動打開;當最后一次沒有檢測到人時,時間將開始5秒計時,然后垃圾箱將自動關閉。為了提醒人們垃圾桶已滿,系統還安裝了聲光報警器。系統程序的總體流程如圖8所示。

圖8 系統程序總體流程圖
為了實現垃圾箱的自動抓斗功能,可以利用電機的正反轉來達到預期的效果。系統開始工作后,需要確定電機是否需要向前旋轉。如有必要,AB、BC、CD 和DA 的電源應實現正向旋轉,并在一定延遲后變為反向,即AB、AD、CD 和CB 充電。圖9 是系統驅動子程序的流程圖。

圖9 驅動子程序流程圖
本設計步進電機驅動器如下:

在日常生活中,垃圾箱常常是滿的。為了確保環境衛生,當垃圾箱裝滿時,有必要將自動模式切換到按鈕打開。此時,可以使用檢測內部高度的紅外傳感器輸出低電平信號,并通過判斷程序使垃圾箱只能通過按鈕打開。按下按鈕打開并清潔后,系統將切換回自動模式。圖10是該程序的流程圖。

圖10 模式切換流程圖
切換程序的具體代碼如下:


該系統可以使用指示器和蜂鳴器警告人們垃圾桶已滿。蜂鳴器直接連接到微控制器的P3.4 端口,紅燈連接到P1.0,綠燈連接到P1.1。T0在主功能中配置為16位定時/計數器,并設置一定的初始值。模塊的程序代碼如下所示。

以上內容完成了各模塊程序的設計。在這一部分,將幾個模塊的內容結合起來形成一個整體,這是整個系統的核心主程序。以下是主程序的具體代碼。


在軟硬件設計完成后,有必要對關鍵部分進行系統調試。通過系統調試,可以顯示和解決硬件焊接留下的故障和軟件編程中的錯誤。
整個系統的硬件和軟件調試相輔相成。在調試過程中可以發現并糾正一些硬件錯誤。一般來說,一些明顯的硬件故障需要先解決,然后用軟件程序進行進一步的調試和解決。可以得出結論,系統的基礎是硬件,如果硬件沒有通過,軟件程序的設計就無法啟動。
在硬件方面,找出制造過程中是否存在布線錯誤是調試的重點。如果電路板存在錯線、虛接或短路、斷開等問題,則需要注意電源和地線是否正確。檢查芯片和組件是否損壞等。
以上故障排除方法是基于原理圖,參考PCB,以確保原理圖與物理板一致。檢查電源是否異常,尤其是電源短路和正負極連接錯誤。使用萬用表檢查地址總線和控制總線是否正常工作。此外,還需要檢查組件是否出現故障。根據設計要求,檢查其型號、規格和安裝,確保部件不燒壞,安全。此過程可通過替換方法消除。
整個系統的原理圖如圖11所示。

圖11 系統示意圖
系統軟件負責管理整個系統中硬件的各個部分,使其能夠協調工作,也就是說,軟件決定了整個系統能夠實現什么功能,所以軟件調試就顯得尤為重要。目前在單片機編程過程中主要有匯編語言和C 語言兩種[2]。該程序是靠C語言實現的。C語言的開發工作是單片機開發的基礎,也是整個開發環節的基本要素[3]。采用“自頂向下、逐步求精”的程序設計原則,才能使整個應用系統程序結構清晰,滿足單片機的系統需求[4]。因為系統的設計可以分為幾個部分,為了避免編程混亂帶來不必要的麻煩,設計采取模塊化編寫程序。確定每個模塊沒有問題后,將幾個部分組合起來,開始全面準備。
具體開發步驟如下:
(1)安裝軟件。在KEIL 的網站上可以下載到軟件KEILC51 的安裝包,跟隨軟件提示安裝即可。
(2)創建C 源文件。首先,建立一個新項目,在新項目中添加已有的程序文件。然后,建立一個新的程序文件,在新文件的文字編輯窗口中編寫程序,生成C源文件。
(3)編譯并調試。軟件操作者將程序調整到調試模式,使用仿真器在源程序一級進行程序調試,對已建立的源文件糾錯,同時編譯源程序,在使用C51編譯器的基礎上生成目標文件。
(4)生成.hex文件[5]。
圖12 的外觀表明程序編譯正確,生成了硬件操作所需的.hex文件。

圖12 程序編譯圖
如果軟件程序編譯無誤,則表明語法正確,但不能保證程序能按預期運行。這里測試邏輯是否正確,軟件模擬可以選擇keil進行調試。
在調試主菜單中debug的start/stop debugSession,以進入調試器的工作模式。調試界面中的按鈕控制程序的運行,左邊是復位按鈕、程序的連續運行、停止、單步執行等。
如果要使程序從頭開始運行,可以單擊“重置”來模擬MCU 的重置功能。Keil軟件在調試模式下,程序可以在單個步驟中執行,當然也可以連續執行語句。所有指令語句都是按順序執行的,不會停止。優點顯而易見:執行速度快,可以看到執行的整體效果,即最終結果是對還是錯;缺點也很明顯:一旦程序中出現錯誤,就很難確定問題的確切位置。此時,需要使用單步執行,每執行一條指令即停止,需要手動單擊執行按鈕將運行以下指令,此時可以查看執行此指令后獲得的結果,以及預期的數據比較和分析,以確定程序問題。當程序較大時,效率低下變得更加明顯。因此,對于確認無錯誤的程序段,可以連續運行;對于懷疑有錯誤或容易出錯的地方,可以逐步運行。這樣,調試的效率將明顯高于逐行檢查錯誤的效率。
本次設計的調試如圖13 所示。程序中未發現問題,運行正常。

圖13 程序調試圖
仿真可以在Protues軟件中進行,作為對電路問題的分析,物理仿真軟件特別可靠,功能極其優秀,仿真分析各種模擬器部件以及集成電路等。為了保證芯片和元器件的合理使用,本設計利用它對整個系統進行了全面的檢查和調試。
整個系統的仿真圖如圖14 所示。由于Protues軟件中沒有紅外傳感器,因此使用兩個按鍵開關模擬更換。

圖14 系統仿真圖
系統軟硬件按預期運行后,開始系統設計的整體調試。在前一部分中,Keil 軟件用于模擬測試,但它畢竟是一個模擬環境。此時,需要將導入的程序刻錄并記錄到單片機中,用電源來檢測系統是否能完成預期的效果。有些硬件問題可能需要導入軟件程序才能發現,軟件也需要硬件配合。
在整個調試過程中,發現系統開始運行后垃圾箱的蓋子沒有按預期工作,而且開口太小,垃圾無法正常放入。在檢查電路圖并確保硬件連接正確后,確定電機運行角度不夠,因為程序輸出的脈沖信號數量太少。經過對輸入脈沖信號數的反復計算和調試,整個系統最終達到了預期的效果。
在整個調試完成后,對系統設計對象進行了仿真實驗。圖15 是設計的實物圖,杯子代表垃圾箱。在實驗中,可以通過在垃圾箱前面放置物體來模擬人扔垃圾的情況,并且可以用廢紙覆蓋垃圾箱來檢測內部傳感器。系統接通電源后,系統工作指示燈亮起,紅外傳感器感應垃圾桶周圍的物體,電機旋轉90 度,表示垃圾桶自動翻蓋,垃圾拋完后5秒內未檢測到人,電機反轉,從而實現人走后蓋子的閉合。

圖15 設計實物圖
該系統有兩個紅外傳感器,當物體阻擋紅外傳感器盒的高度檢測時,垃圾箱充滿光線,蜂鳴器開始工作,以提醒垃圾箱已滿,應進行清理。電源關閉后,系統指示燈熄滅。
在本實踐中,設計了一種具有全報警、自動開閉的控制系統。本設計通過查閱網上相關資源和書籍,獲得有效的信息,最終確定了系統的總體設計,并將其分為幾個模塊,以便于更詳細的分析工作。對系統的總體設計和各個組成部分進行了詳細的分析和調試。該系統主要依靠紅外傳感器模塊、電機驅動模塊、聲光報警模塊三部分來維持正常運行,考慮到有垃圾箱裝滿的情形,還增加了手動按鈕打開功能。
當然,智能垃圾箱的設計還有很多不足之處,本設計只是對智能垃圾箱內部進行了一個非常初步的設計,也可以在此基礎上增加很多實用功能,比如垃圾自動包裝可以利用電機驅動的鏈條來實現,可以通過相應的傳感器和組件進行自動垃圾分揀,這在將來都是可能的。