熊國(guó)棟
(荊楚理工學(xué)院計(jì)算機(jī)工程學(xué)院,荊門 448000)
隨著現(xiàn)代城市和科學(xué)技術(shù)的不斷發(fā)展和進(jìn)步,人們的生活水平與過(guò)去幾年相比有了很大提高,追求健康生活環(huán)境的時(shí)代已經(jīng)開(kāi)啟。因此,相關(guān)的環(huán)保產(chǎn)品和設(shè)備也不斷涌現(xiàn)。在日常生活中,有相當(dāng)一部分的垃圾箱露天沒(méi)有蓋子或是蓋子需要手動(dòng)打開(kāi)。通常有蓋子的垃圾箱由于衛(wèi)生狀況不佳,導(dǎo)致人們不愿意用手直接觸摸打開(kāi),甚至將垃圾直接放在一邊放任不管。在炎熱的夏天,如果清理不及時(shí),垃圾會(huì)散發(fā)出難聞的刺鼻氣味,增加細(xì)菌擴(kuò)散的機(jī)會(huì)。同時(shí),一些醫(yī)療機(jī)構(gòu)的廢物會(huì)滋生病毒和傳播疾病,從而危及人們的健康。但目前,市場(chǎng)上自動(dòng)控制垃圾箱開(kāi)閉及相關(guān)產(chǎn)品非常少見(jiàn),因此,開(kāi)發(fā)一種能自動(dòng)控制開(kāi)閉并具有一定智能程度的垃圾箱已成為當(dāng)前迫切需要解決的問(wèn)題之一。
目前世界上許多國(guó)家和地區(qū)已經(jīng)實(shí)現(xiàn)了廢物的合理處置,一些太陽(yáng)能設(shè)施得到了廣泛的應(yīng)用。例如,英國(guó)劍橋大學(xué)結(jié)合當(dāng)?shù)丨h(huán)境,開(kāi)發(fā)了符合當(dāng)?shù)貙?shí)際需要的垃圾箱控制系統(tǒng)。該設(shè)備內(nèi)置了一個(gè)小型壓縮機(jī),垃圾被壓縮到一定大小以釋放更多的存儲(chǔ)空間,并由太陽(yáng)能電池陣列供電。此外,通過(guò)手機(jī)和相關(guān)設(shè)備,附近的環(huán)衛(wèi)工人可以快速了解垃圾存放情況,以便及時(shí)清理。
進(jìn)入21 世紀(jì),人工智能技術(shù)得到了廣泛應(yīng)用,我國(guó)智能家居產(chǎn)業(yè)發(fā)展迅速。作為智能家居的細(xì)分市場(chǎng),智能垃圾箱的市場(chǎng)規(guī)模也在不斷擴(kuò)大。政策方面,隨著垃圾強(qiáng)制分類的實(shí)施,中國(guó)垃圾分類行業(yè)的快速發(fā)展帶動(dòng)了智能垃圾桶的市場(chǎng)需求。就專利數(shù)量而言,中國(guó)約有3000 項(xiàng)與智能垃圾箱相關(guān)的專利,其中實(shí)用新型專利約占60%。自動(dòng)包裝分類技術(shù)可以提高垃圾分類和垃圾處理的效率,備受青睞。
其目的是開(kāi)發(fā)一種智能垃圾箱,主要實(shí)現(xiàn)紅外檢測(cè)、自動(dòng)開(kāi)關(guān)以及聲光提醒等多項(xiàng)功能,以避免其影響人們的日常生活環(huán)境,降低細(xì)菌傳播疾病的風(fēng)險(xiǎn),保障人們的身心健康,而且也方便提供給人們衛(wèi)生、清潔的垃圾投放環(huán)境。
本設(shè)計(jì)的控制芯片,可以選擇以STC89C52型單片機(jī)為中心,利用紅外傳感器檢測(cè)周圍是否有垃圾拋擲行為。如果有,它會(huì)自動(dòng)打開(kāi)垃圾箱的蓋子,然后在一段時(shí)間后自動(dòng)關(guān)閉。本設(shè)計(jì)的主要框架包括:①紅外傳感器,用于檢測(cè)是否有人需要扔垃圾;②垃圾箱裝滿后,打開(kāi)聲光報(bào)警器;③驅(qū)動(dòng)步進(jìn)電機(jī)的電路設(shè)計(jì)。
通過(guò)以上分析,基于單片機(jī)技術(shù)設(shè)計(jì)智能垃圾箱是可行的。
本設(shè)計(jì)經(jīng)濟(jì)壓力小,設(shè)計(jì)成本低,市場(chǎng)上同類設(shè)施少。此外,如果這種設(shè)計(jì)被正式使用,它將在廢物的儲(chǔ)存和管理方面發(fā)揮積極作用。
該設(shè)計(jì)的實(shí)現(xiàn)有利于公共場(chǎng)所和家庭廚房、浴室垃圾的儲(chǔ)存,對(duì)于社會(huì)來(lái)說(shuō),具有一定的積極意義。
本設(shè)計(jì)的硬件主要基于STC89C52 單片機(jī),采用軟硬件結(jié)合的方式實(shí)現(xiàn)蓋子打開(kāi)的效果,并添加聲光報(bào)警器,提醒此時(shí)垃圾箱已滿。主要通過(guò)紅外檢測(cè)電路、電機(jī)驅(qū)動(dòng)電路和聲光報(bào)警電路三部分來(lái)保證系統(tǒng)的正常運(yùn)行??傮w系統(tǒng)框圖如圖1所示。
圖1 總體設(shè)計(jì)框圖
3.2.1 STC89C52單片機(jī)簡(jiǎn)介
STC89C52 單片機(jī)是近年來(lái)推出的新一代51核單片機(jī),51 系列單片機(jī)均屬于8 位的CPU,為確保相應(yīng)的代碼效率穩(wěn)步提升,需要積極地關(guān)注變量長(zhǎng)度的合理控制[1]。涵蓋閃存程序存儲(chǔ)器、脈寬調(diào)制、通用異步收發(fā)器、串行外圍接口模塊。由于采用了模塊化設(shè)計(jì),因此該型號(hào)的單片機(jī)在擴(kuò)展性和便攜性方面都有良好的性能,在各種工業(yè)控制領(lǐng)域都有廣泛應(yīng)用。其封裝引腳圖如圖2所示。
圖2 STC89C52引腳圖
3.2.2 主要特點(diǎn)
(1)作為8051 單片微控制器的增強(qiáng)版,它有6 或12 個(gè)時(shí)鐘機(jī)器周期,并與以前的8051 型號(hào)的代碼完全兼容。
(2)工作電壓為5.5~3.3 V(5 V 微控制器)或3.8~2.0 V(3 V微控制器)。
(3)工作頻率在0~40 MHz,而普通8051微控制器的工作頻率在0~80 MHz,實(shí)際工作頻率甚至高達(dá)48 MHz。
(4)存儲(chǔ)程序的空間可以達(dá)到8 k 字節(jié),并且有4096位的操作存儲(chǔ)空間。
(5)具有32 個(gè)公共導(dǎo)入和導(dǎo)出,P1~P4 復(fù)位后上拉較弱,可用作準(zhǔn)雙向口。漏極開(kāi)路時(shí)可以通過(guò)P0 端口輸出,當(dāng)沒(méi)有上拉電阻時(shí)可以使用總線擴(kuò)展,具有上拉電阻時(shí)可以輸入和輸出信號(hào)。
(6)該芯片不需要專業(yè)的編程/模擬器。通過(guò)引腳P3.0,P3.1 可以在幾秒鐘內(nèi)將程序下載到芯片上。
(7)具有重復(fù)使用功能,并將提供監(jiān)控能力。
(8)有3個(gè)16位定時(shí)/計(jì)數(shù)器。
(9)PowerDown 可通過(guò)下降沿或低電平外部中斷喚醒。
(10)通用異步串口、定時(shí)器軟件可以實(shí)現(xiàn)完整的多個(gè)UART。
3.2.3 引腳功能
VCC(40針):電源電壓。
VSS(20針):接地。
引腳32 至39 分別屬于芯片的P0 端口,為P0.0至P0.7,這是一個(gè)具有漏極開(kāi)路功能的8位雙向I/O 端口。當(dāng)所有引腳驅(qū)動(dòng)8 個(gè)TTL 負(fù)載時(shí),它們可以用作輸出端口。通過(guò)為端口P0 輸入“1”,端口P0 也可以用作高阻抗輸入端口。P0端口具有低8位地址和8位多路復(fù)用總線,可以在訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)時(shí)提供服務(wù)。由于該接口具有良好的通用性,被廣泛應(yīng)用于各種設(shè)備,如計(jì)算機(jī)、打印機(jī)等。當(dāng)需要從外圍設(shè)備或存儲(chǔ)過(guò)程讀取或?qū)懭胄畔r(shí),只需從端口將其插入即可。此時(shí),內(nèi)部上拉電阻將啟動(dòng)電源。使用閃存編程時(shí),此端口起到接收指令信號(hào)的功能。在驗(yàn)證程序是否有問(wèn)題時(shí),需要使用外部上拉電阻來(lái)驗(yàn)證指令信號(hào)輸出。
引腳1 至8 屬于端口P1,對(duì)應(yīng)于P1.0 至P1.7。該端口是一個(gè)具有上拉電阻的8 位雙向輸入/輸出端口。通過(guò)輸出緩沖器的輸入和輸出電流可以實(shí)現(xiàn)4 個(gè)TTL 輸入。端口的“1”輸入通過(guò)內(nèi)部阻力增加,然后可以用作輸入端口。當(dāng)用作輸出端口時(shí),外部下拉區(qū)域?qū)⒂捎趦?nèi)部下拉而輸出電流信號(hào)。P1 端口還具有一些附加功能,比如計(jì)時(shí)器。
引腳21 至28 統(tǒng)稱為P2 端口,對(duì)應(yīng)于P2.0至P2.7。它們用作8 位雙向輸入/輸出端口,具有內(nèi)部阻力以傳輸數(shù)據(jù),必要時(shí)可用作更高的8位地址總線。
P3 端口作為標(biāo)準(zhǔn)傳輸接口,每個(gè)引腳也有其獨(dú)特的功能,詳見(jiàn)表1。
表1 P3引腳功能表
RST(9引腳):復(fù)位輸入。
表示允許的地址鎖存信號(hào)輸出(ALE)的引腳為30,當(dāng)訪問(wèn)其他外部ROM 時(shí),可以鎖存較低的輸出脈沖。
引腳31 的VPP 是控制外部ROM 訪問(wèn)的引腳。
引腳18 和19(XTAL1 和2)分別用于連接到外部時(shí)鐘電路的輸入和輸出端口。
為了在內(nèi)部執(zhí)行復(fù)位指令,單片機(jī)需要在RST 引腳上輸入高電平信號(hào)并保持兩個(gè)機(jī)器周期。一般情況下,電路中的復(fù)位電路會(huì)在通電時(shí)自動(dòng)復(fù)位并手動(dòng)復(fù)位按鈕。
在復(fù)位電路中,所謂的上電自動(dòng)復(fù)位通常通過(guò)對(duì)外部電容器進(jìn)行充電和放電來(lái)實(shí)現(xiàn)。一般來(lái)說(shuō),將電路電壓上升時(shí)間設(shè)置在一毫秒內(nèi)可以達(dá)到自動(dòng)上電復(fù)位的效果。
在某些情況下,通電復(fù)位的效果往往很差,因此需要選擇按鈕手動(dòng)復(fù)位。本系統(tǒng)的設(shè)計(jì)是使用手動(dòng)復(fù)位按鈕。按鍵手動(dòng)復(fù)位有兩種方式,一種是電平復(fù)位,另一種是脈沖復(fù)位。電平復(fù)位可通過(guò)RST 和電源連接實(shí)現(xiàn)。按下按鈕手動(dòng)復(fù)位電路如圖3 所示。時(shí)鐘頻率調(diào)整為12 M,電容器選擇為10 uF,電阻為10 KΩ。
圖3 復(fù)位電路圖
本設(shè)計(jì)所用的單片機(jī)可以由內(nèi)部時(shí)鐘信號(hào)產(chǎn)生,也可以由外部來(lái)實(shí)現(xiàn)。內(nèi)部時(shí)鐘電路圖見(jiàn)圖4。在石英晶體與XTAL1和2連接后,可以形成自激振蕩器以產(chǎn)生內(nèi)部時(shí)鐘脈沖信號(hào),此時(shí)形成振蕩電路。在電路中,圖4所示的兩個(gè)電容器C2和C3啟動(dòng)穩(wěn)定頻率并快速啟動(dòng)振動(dòng)。電容值可從5~300 pF 中選擇,典型值為30 pF。晶體振蕩的范圍通常為1.2~12 MHz,典型值設(shè)置為12 MHz。
本設(shè)計(jì)中的時(shí)鐘電路采用晶體振蕩器電路,具體電路圖如圖4所示。
圖4 晶體振蕩器電路圖
3.5.1 步進(jìn)電機(jī)簡(jiǎn)介
步進(jìn)電機(jī)是一種通過(guò)脈沖信號(hào)產(chǎn)生角位移的機(jī)械式電機(jī)。電機(jī)的每個(gè)旋轉(zhuǎn)角度表示接收到一個(gè)脈沖信號(hào)。步進(jìn)電機(jī)是按照穩(wěn)定的角度一點(diǎn)點(diǎn)地旋轉(zhuǎn),為了達(dá)到精確的定位效果,可以利用輸入脈沖信號(hào)的個(gè)數(shù)來(lái)控制;同時(shí),可以通過(guò)改變輸入脈沖信號(hào)的頻率來(lái)操縱電機(jī)的速度和加速度,從而達(dá)到調(diào)速的效果。
本設(shè)計(jì)使用的步進(jìn)電機(jī)為28BYJ-48 型四相八拍混合式步進(jìn)電機(jī),工作電壓為直流電源電壓,5~12 V 之間。當(dāng)步進(jìn)電機(jī)需要保持旋轉(zhuǎn)時(shí),可以將脈沖信號(hào)連續(xù)輸入。轉(zhuǎn)子旋轉(zhuǎn)幅度是一個(gè)固定值,因?yàn)槊總€(gè)脈沖信號(hào)只改變步進(jìn)電機(jī)的功率狀態(tài)一次。當(dāng)轉(zhuǎn)子通過(guò)變槳時(shí),表明通電狀態(tài)已完成一個(gè)循環(huán)。四相電機(jī)的公共功率模式包括單相繞組四拍(A-B-C-D-A-…),兩相繞組四拍(AB-BC-CD-DA-AB-……)和八拍(A-AB-B-BC-C-CD-DA-A-…)。
驅(qū)動(dòng)模式如表2所示。橙色、黃色、粉色和藍(lán)色分別對(duì)應(yīng)A、B、C和D相。
表2 步進(jìn)電機(jī)驅(qū)動(dòng)方式
5伏電源連接到紅色線,單片機(jī)P1.3端口連接到橙色線,P1.2 端口連接到黃色線,粉色線連接到P1.1端口,藍(lán)色線連接到P1.0端口。
3.5.2 ULN2003芯片
STC89C52 單片機(jī)端口輸出信號(hào)小,無(wú)法支持電機(jī)操作,此時(shí)可以使用ULN2003 芯片將信號(hào)放大后再傳輸?shù)较鄳?yīng)的電機(jī)接口。
ULN2003 芯片是一種高壓大電流集成電路,包含7對(duì)達(dá)林頓管,通過(guò)高壓輸出和鉗位二極管實(shí)現(xiàn)電感負(fù)載的轉(zhuǎn)換。
芯片與MCU 的接口電路相對(duì)簡(jiǎn)單:1 針連接到MCU 的P2.3 端口,2 針連接到單片機(jī)的P2.2 端口,3 針連接到MCU 的P2.1 端口,4 針連接到MCU 的P2.0 端口,可用于單片機(jī)與電機(jī)驅(qū)動(dòng)器之間的數(shù)據(jù)傳輸。
ULN2003芯片特點(diǎn):
(1)輸出的額定集電極電流可達(dá)到500 mA。
(2)高壓輸出:50 V。
(3)與多種邏輯類型兼容的輸入。
(4)可作為步進(jìn)電機(jī)驅(qū)動(dòng)器使用。
圖5是系統(tǒng)的驅(qū)動(dòng)電路,它控制著作為整個(gè)系統(tǒng)核心的各個(gè)模塊的工作。
圖5 步進(jìn)電機(jī)驅(qū)動(dòng)電路
設(shè)計(jì)中使用的紅外傳感器具有同時(shí)發(fā)射和接收紅外線的功能,對(duì)環(huán)境光具有良好的適應(yīng)性。通過(guò)發(fā)射管發(fā)射一定頻率的紅外線,與障礙物接觸后,傳感器的接收管反射并接收到紅外線。在下一步中,經(jīng)過(guò)比較器電路的進(jìn)一步處理后,綠色指示燈將點(diǎn)亮,同時(shí),傳感器的信號(hào)輸出端口將輸出低電平數(shù)字信號(hào)。它具有安裝速度快、干擾因素少、應(yīng)用范圍廣的特點(diǎn)。
人體表面溫度通常穩(wěn)定在一個(gè)固定值,因此人體產(chǎn)生的紅外光的波長(zhǎng)是恒定的。身體釋放的紅外線被傳感器探頭吸收,然后菲涅耳透鏡將其聚集在熱釋電元件上,打破電荷平衡,然后輸出電荷信號(hào)。判斷電荷后,便可知周圍有人,通過(guò)電機(jī)打開(kāi)蓋子。在一段時(shí)間沒(méi)有感應(yīng)到人體后,垃圾桶將關(guān)閉蓋子。
為了防止人與其他障礙物混淆,可以調(diào)整傳感器安裝的位置,將其固定在垃圾桶的開(kāi)口處,并與垂直防線的箱壁形成適當(dāng)?shù)慕嵌?,使用電位器調(diào)整組件的檢測(cè)距離,從而大大降低誤判的概率。圖6是本設(shè)計(jì)中紅外傳感器的電路圖。
圖6 紅外傳感器模塊電路圖
3.6.1 配置模塊參數(shù)
(1)當(dāng)部件上的綠燈亮起時(shí),表示部件前面有障礙物。此時(shí),低電平信號(hào)將繼續(xù)從輸出端口輸出。該元件可以以35°的角度檢測(cè)2~30 cm的范圍。電位器順時(shí)針移動(dòng),檢測(cè)范圍會(huì)更大;否則,它會(huì)減少。
(2)傳感器的輸出口可以直接將信號(hào)傳輸?shù)絾纹瑱C(jī)的輸入口,也可以使5 V繼電器動(dòng)作。
(3)傳感器的工作電壓應(yīng)保持在直流3~5 V之間。紅色LED 燈亮起時(shí),表示電路已連接到電源。
3.6.2 模塊接口描述
(1)傳感器的VCC 端口可以連接到3.3~5 V的電壓(可以直接連接到5 V或3.3 V的單片機(jī));
(2)GND外接GND;
(3)OUT小板數(shù)字輸出接口(0和1)。
紅外傳感器將低電平信號(hào)導(dǎo)入單片機(jī),然后利用單片機(jī)使紅燈亮起,報(bào)警裝置的揚(yáng)聲器也啟動(dòng)。沒(méi)有輸入信號(hào)會(huì)自動(dòng)關(guān)閉。電路圖如圖7所示。
圖7 報(bào)警模塊電路圖
智能垃圾箱的軟件程序大致可分為三部分:步進(jìn)電機(jī)驅(qū)動(dòng)、紅外傳感器檢測(cè)和聲光報(bào)警。在本系統(tǒng)設(shè)計(jì)中,要對(duì)某人進(jìn)行傳感器檢測(cè),垃圾可以自動(dòng)打開(kāi);當(dāng)最后一次沒(méi)有檢測(cè)到人時(shí),時(shí)間將開(kāi)始5秒計(jì)時(shí),然后垃圾箱將自動(dòng)關(guān)閉。為了提醒人們垃圾桶已滿,系統(tǒng)還安裝了聲光報(bào)警器。系統(tǒng)程序的總體流程如圖8所示。
圖8 系統(tǒng)程序總體流程圖
為了實(shí)現(xiàn)垃圾箱的自動(dòng)抓斗功能,可以利用電機(jī)的正反轉(zhuǎn)來(lái)達(dá)到預(yù)期的效果。系統(tǒng)開(kāi)始工作后,需要確定電機(jī)是否需要向前旋轉(zhuǎn)。如有必要,AB、BC、CD 和DA 的電源應(yīng)實(shí)現(xiàn)正向旋轉(zhuǎn),并在一定延遲后變?yōu)榉聪?,即AB、AD、CD 和CB 充電。圖9 是系統(tǒng)驅(qū)動(dòng)子程序的流程圖。
圖9 驅(qū)動(dòng)子程序流程圖
本設(shè)計(jì)步進(jìn)電機(jī)驅(qū)動(dòng)器如下:
在日常生活中,垃圾箱常常是滿的。為了確保環(huán)境衛(wèi)生,當(dāng)垃圾箱裝滿時(shí),有必要將自動(dòng)模式切換到按鈕打開(kāi)。此時(shí),可以使用檢測(cè)內(nèi)部高度的紅外傳感器輸出低電平信號(hào),并通過(guò)判斷程序使垃圾箱只能通過(guò)按鈕打開(kāi)。按下按鈕打開(kāi)并清潔后,系統(tǒng)將切換回自動(dòng)模式。圖10是該程序的流程圖。
圖10 模式切換流程圖
切換程序的具體代碼如下:
該系統(tǒng)可以使用指示器和蜂鳴器警告人們垃圾桶已滿。蜂鳴器直接連接到微控制器的P3.4 端口,紅燈連接到P1.0,綠燈連接到P1.1。T0在主功能中配置為16位定時(shí)/計(jì)數(shù)器,并設(shè)置一定的初始值。模塊的程序代碼如下所示。
以上內(nèi)容完成了各模塊程序的設(shè)計(jì)。在這一部分,將幾個(gè)模塊的內(nèi)容結(jié)合起來(lái)形成一個(gè)整體,這是整個(gè)系統(tǒng)的核心主程序。以下是主程序的具體代碼。
在軟硬件設(shè)計(jì)完成后,有必要對(duì)關(guān)鍵部分進(jìn)行系統(tǒng)調(diào)試。通過(guò)系統(tǒng)調(diào)試,可以顯示和解決硬件焊接留下的故障和軟件編程中的錯(cuò)誤。
整個(gè)系統(tǒng)的硬件和軟件調(diào)試相輔相成。在調(diào)試過(guò)程中可以發(fā)現(xiàn)并糾正一些硬件錯(cuò)誤。一般來(lái)說(shuō),一些明顯的硬件故障需要先解決,然后用軟件程序進(jìn)行進(jìn)一步的調(diào)試和解決??梢缘贸鼋Y(jié)論,系統(tǒng)的基礎(chǔ)是硬件,如果硬件沒(méi)有通過(guò),軟件程序的設(shè)計(jì)就無(wú)法啟動(dòng)。
在硬件方面,找出制造過(guò)程中是否存在布線錯(cuò)誤是調(diào)試的重點(diǎn)。如果電路板存在錯(cuò)線、虛接或短路、斷開(kāi)等問(wèn)題,則需要注意電源和地線是否正確。檢查芯片和組件是否損壞等。
以上故障排除方法是基于原理圖,參考PCB,以確保原理圖與物理板一致。檢查電源是否異常,尤其是電源短路和正負(fù)極連接錯(cuò)誤。使用萬(wàn)用表檢查地址總線和控制總線是否正常工作。此外,還需要檢查組件是否出現(xiàn)故障。根據(jù)設(shè)計(jì)要求,檢查其型號(hào)、規(guī)格和安裝,確保部件不燒壞,安全。此過(guò)程可通過(guò)替換方法消除。
整個(gè)系統(tǒng)的原理圖如圖11所示。
圖11 系統(tǒng)示意圖
系統(tǒng)軟件負(fù)責(zé)管理整個(gè)系統(tǒng)中硬件的各個(gè)部分,使其能夠協(xié)調(diào)工作,也就是說(shuō),軟件決定了整個(gè)系統(tǒng)能夠?qū)崿F(xiàn)什么功能,所以軟件調(diào)試就顯得尤為重要。目前在單片機(jī)編程過(guò)程中主要有匯編語(yǔ)言和C 語(yǔ)言兩種[2]。該程序是靠C語(yǔ)言實(shí)現(xiàn)的。C語(yǔ)言的開(kāi)發(fā)工作是單片機(jī)開(kāi)發(fā)的基礎(chǔ),也是整個(gè)開(kāi)發(fā)環(huán)節(jié)的基本要素[3]。采用“自頂向下、逐步求精”的程序設(shè)計(jì)原則,才能使整個(gè)應(yīng)用系統(tǒng)程序結(jié)構(gòu)清晰,滿足單片機(jī)的系統(tǒng)需求[4]。因?yàn)橄到y(tǒng)的設(shè)計(jì)可以分為幾個(gè)部分,為了避免編程混亂帶來(lái)不必要的麻煩,設(shè)計(jì)采取模塊化編寫程序。確定每個(gè)模塊沒(méi)有問(wèn)題后,將幾個(gè)部分組合起來(lái),開(kāi)始全面準(zhǔn)備。
具體開(kāi)發(fā)步驟如下:
(1)安裝軟件。在KEIL 的網(wǎng)站上可以下載到軟件KEILC51 的安裝包,跟隨軟件提示安裝即可。
(2)創(chuàng)建C 源文件。首先,建立一個(gè)新項(xiàng)目,在新項(xiàng)目中添加已有的程序文件。然后,建立一個(gè)新的程序文件,在新文件的文字編輯窗口中編寫程序,生成C源文件。
(3)編譯并調(diào)試。軟件操作者將程序調(diào)整到調(diào)試模式,使用仿真器在源程序一級(jí)進(jìn)行程序調(diào)試,對(duì)已建立的源文件糾錯(cuò),同時(shí)編譯源程序,在使用C51編譯器的基礎(chǔ)上生成目標(biāo)文件。
(4)生成.hex文件[5]。
圖12 的外觀表明程序編譯正確,生成了硬件操作所需的.hex文件。
圖12 程序編譯圖
如果軟件程序編譯無(wú)誤,則表明語(yǔ)法正確,但不能保證程序能按預(yù)期運(yùn)行。這里測(cè)試邏輯是否正確,軟件模擬可以選擇keil進(jìn)行調(diào)試。
在調(diào)試主菜單中debug的start/stop debugSession,以進(jìn)入調(diào)試器的工作模式。調(diào)試界面中的按鈕控制程序的運(yùn)行,左邊是復(fù)位按鈕、程序的連續(xù)運(yùn)行、停止、單步執(zhí)行等。
如果要使程序從頭開(kāi)始運(yùn)行,可以單擊“重置”來(lái)模擬MCU 的重置功能。Keil軟件在調(diào)試模式下,程序可以在單個(gè)步驟中執(zhí)行,當(dāng)然也可以連續(xù)執(zhí)行語(yǔ)句。所有指令語(yǔ)句都是按順序執(zhí)行的,不會(huì)停止。優(yōu)點(diǎn)顯而易見(jiàn):執(zhí)行速度快,可以看到執(zhí)行的整體效果,即最終結(jié)果是對(duì)還是錯(cuò);缺點(diǎn)也很明顯:一旦程序中出現(xiàn)錯(cuò)誤,就很難確定問(wèn)題的確切位置。此時(shí),需要使用單步執(zhí)行,每執(zhí)行一條指令即停止,需要手動(dòng)單擊執(zhí)行按鈕將運(yùn)行以下指令,此時(shí)可以查看執(zhí)行此指令后獲得的結(jié)果,以及預(yù)期的數(shù)據(jù)比較和分析,以確定程序問(wèn)題。當(dāng)程序較大時(shí),效率低下變得更加明顯。因此,對(duì)于確認(rèn)無(wú)錯(cuò)誤的程序段,可以連續(xù)運(yùn)行;對(duì)于懷疑有錯(cuò)誤或容易出錯(cuò)的地方,可以逐步運(yùn)行。這樣,調(diào)試的效率將明顯高于逐行檢查錯(cuò)誤的效率。
本次設(shè)計(jì)的調(diào)試如圖13 所示。程序中未發(fā)現(xiàn)問(wèn)題,運(yùn)行正常。
圖13 程序調(diào)試圖
仿真可以在Protues軟件中進(jìn)行,作為對(duì)電路問(wèn)題的分析,物理仿真軟件特別可靠,功能極其優(yōu)秀,仿真分析各種模擬器部件以及集成電路等。為了保證芯片和元器件的合理使用,本設(shè)計(jì)利用它對(duì)整個(gè)系統(tǒng)進(jìn)行了全面的檢查和調(diào)試。
整個(gè)系統(tǒng)的仿真圖如圖14 所示。由于Protues軟件中沒(méi)有紅外傳感器,因此使用兩個(gè)按鍵開(kāi)關(guān)模擬更換。
圖14 系統(tǒng)仿真圖
系統(tǒng)軟硬件按預(yù)期運(yùn)行后,開(kāi)始系統(tǒng)設(shè)計(jì)的整體調(diào)試。在前一部分中,Keil 軟件用于模擬測(cè)試,但它畢竟是一個(gè)模擬環(huán)境。此時(shí),需要將導(dǎo)入的程序刻錄并記錄到單片機(jī)中,用電源來(lái)檢測(cè)系統(tǒng)是否能完成預(yù)期的效果。有些硬件問(wèn)題可能需要導(dǎo)入軟件程序才能發(fā)現(xiàn),軟件也需要硬件配合。
在整個(gè)調(diào)試過(guò)程中,發(fā)現(xiàn)系統(tǒng)開(kāi)始運(yùn)行后垃圾箱的蓋子沒(méi)有按預(yù)期工作,而且開(kāi)口太小,垃圾無(wú)法正常放入。在檢查電路圖并確保硬件連接正確后,確定電機(jī)運(yùn)行角度不夠,因?yàn)槌绦蜉敵龅拿}沖信號(hào)數(shù)量太少。經(jīng)過(guò)對(duì)輸入脈沖信號(hào)數(shù)的反復(fù)計(jì)算和調(diào)試,整個(gè)系統(tǒng)最終達(dá)到了預(yù)期的效果。
在整個(gè)調(diào)試完成后,對(duì)系統(tǒng)設(shè)計(jì)對(duì)象進(jìn)行了仿真實(shí)驗(yàn)。圖15 是設(shè)計(jì)的實(shí)物圖,杯子代表垃圾箱。在實(shí)驗(yàn)中,可以通過(guò)在垃圾箱前面放置物體來(lái)模擬人扔垃圾的情況,并且可以用廢紙覆蓋垃圾箱來(lái)檢測(cè)內(nèi)部傳感器。系統(tǒng)接通電源后,系統(tǒng)工作指示燈亮起,紅外傳感器感應(yīng)垃圾桶周圍的物體,電機(jī)旋轉(zhuǎn)90 度,表示垃圾桶自動(dòng)翻蓋,垃圾拋完后5秒內(nèi)未檢測(cè)到人,電機(jī)反轉(zhuǎn),從而實(shí)現(xiàn)人走后蓋子的閉合。
圖15 設(shè)計(jì)實(shí)物圖
該系統(tǒng)有兩個(gè)紅外傳感器,當(dāng)物體阻擋紅外傳感器盒的高度檢測(cè)時(shí),垃圾箱充滿光線,蜂鳴器開(kāi)始工作,以提醒垃圾箱已滿,應(yīng)進(jìn)行清理。電源關(guān)閉后,系統(tǒng)指示燈熄滅。
在本實(shí)踐中,設(shè)計(jì)了一種具有全報(bào)警、自動(dòng)開(kāi)閉的控制系統(tǒng)。本設(shè)計(jì)通過(guò)查閱網(wǎng)上相關(guān)資源和書(shū)籍,獲得有效的信息,最終確定了系統(tǒng)的總體設(shè)計(jì),并將其分為幾個(gè)模塊,以便于更詳細(xì)的分析工作。對(duì)系統(tǒng)的總體設(shè)計(jì)和各個(gè)組成部分進(jìn)行了詳細(xì)的分析和調(diào)試。該系統(tǒng)主要依靠紅外傳感器模塊、電機(jī)驅(qū)動(dòng)模塊、聲光報(bào)警模塊三部分來(lái)維持正常運(yùn)行,考慮到有垃圾箱裝滿的情形,還增加了手動(dòng)按鈕打開(kāi)功能。
當(dāng)然,智能垃圾箱的設(shè)計(jì)還有很多不足之處,本設(shè)計(jì)只是對(duì)智能垃圾箱內(nèi)部進(jìn)行了一個(gè)非常初步的設(shè)計(jì),也可以在此基礎(chǔ)上增加很多實(shí)用功能,比如垃圾自動(dòng)包裝可以利用電機(jī)驅(qū)動(dòng)的鏈條來(lái)實(shí)現(xiàn),可以通過(guò)相應(yīng)的傳感器和組件進(jìn)行自動(dòng)垃圾分揀,這在將來(lái)都是可能的。