基于stm32技術(shù)的教室智能照明控制系統(tǒng)設(shè)_第1頁(yè)
基于stm32技術(shù)的教室智能照明控制系統(tǒng)設(shè)_第2頁(yè)
基于stm32技術(shù)的教室智能照明控制系統(tǒng)設(shè)_第3頁(yè)
基于stm32技術(shù)的教室智能照明控制系統(tǒng)設(shè)_第4頁(yè)
基于stm32技術(shù)的教室智能照明控制系統(tǒng)設(shè)_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

摘要:選擇STM32F103C8T6作為系統(tǒng)控制模塊的核心部件,采用兩對(duì)紅外發(fā)射管和紅外接收管接收人員進(jìn)出教室產(chǎn)生的電信號(hào)從而判斷教室內(nèi)人員數(shù)量,利用光敏電阻構(gòu)成的電路檢測(cè)環(huán)境光的強(qiáng)度。根據(jù)教室內(nèi)的光照條件,通過(guò)處理上述電信號(hào)和光信號(hào),完成對(duì)教室燈光的智能控制,并在LCD屏幕上顯示實(shí)際控制效果,避免教室燈光濫開(kāi)濫用。系統(tǒng)還可在自動(dòng)運(yùn)行和手動(dòng)控制兩種模式間切換,同時(shí)采用了“看門狗”等抗干擾措施。系統(tǒng)的程序使用C語(yǔ)言進(jìn)行編寫,采用了模塊化的結(jié)構(gòu)設(shè)計(jì),邏輯分明,兼容性強(qiáng),易于進(jìn)行改進(jìn)和擴(kuò)展。該系統(tǒng)具備體積小、控制簡(jiǎn)便、高可靠性、明確的目標(biāo)性和優(yōu)異的成本效益比等特性,能夠迎合不同學(xué)校對(duì)于教室照明的控制需求,大幅實(shí)現(xiàn)節(jié)能目標(biāo)。關(guān)鍵詞:智能燈光控制;STM32F103C8T6;紅外發(fā)射管和紅外接收管;光敏電阻。緒論研究意義2020年9月,我國(guó)宣布力爭(zhēng)于2030年前實(shí)現(xiàn)碳達(dá)峰,于2060年前實(shí)現(xiàn)碳中和REF_Ref21769\r\h[1]。在能源需求越來(lái)越大的背景下,研究現(xiàn)狀國(guó)外研究現(xiàn)狀REF_Ref22389\r\h[2]從全球智能照明競(jìng)爭(zhēng)格局的角度來(lái)看,全球范圍而言,目前全球LED照明市場(chǎng)已形成了以美國(guó)、亞洲、歐洲為主導(dǎo)的三足鼎立的產(chǎn)業(yè)格局,并呈現(xiàn)出以日、美、德為產(chǎn)業(yè)龍頭的格局。REF_Ref19711\r\h[3]國(guó)內(nèi)研究現(xiàn)狀自20世紀(jì)90年代登陸中國(guó)后,智能照明產(chǎn)業(yè)的發(fā)展一直較為緩慢,受到了市場(chǎng)消費(fèi)觀念、環(huán)境因素、產(chǎn)品定價(jià)以及推廣活動(dòng)等多方面的影響。業(yè)內(nèi)人士普遍認(rèn)為,智能照明市場(chǎng)未能快速成長(zhǎng)的主要障礙在于消費(fèi)者對(duì)智能照明產(chǎn)品的認(rèn)知程度不夠。為了推動(dòng)照明行業(yè)的節(jié)能減排,2011年11月14日,中國(guó)國(guó)家發(fā)展和改革委員會(huì)聯(lián)合其他四個(gè)部門共同發(fā)布了“中國(guó)逐步淘汰白熾燈路線圖”。該路線圖明確規(guī)定,從2016年10月1日開(kāi)始,中國(guó)將禁止銷售和進(jìn)口15瓦及以上的普通照明白熾燈。這一政策的實(shí)施,旨在促進(jìn)高效節(jié)能照明產(chǎn)品的普及,包括節(jié)能燈和LED燈,同時(shí)為智能照明技術(shù)的發(fā)展和普及創(chuàng)造了良好的市場(chǎng)環(huán)境。隨著白熾燈淘汰政策的逐步實(shí)施,智能照明市場(chǎng)有望得到進(jìn)一步的發(fā)展。智能照明系統(tǒng)以其節(jié)能、環(huán)保、智能化控制等特點(diǎn),逐漸受到了消費(fèi)者的關(guān)注。未來(lái),隨著技術(shù)的進(jìn)步和市場(chǎng)的培育,智能照明有望在中國(guó)市場(chǎng)實(shí)現(xiàn)更快速的成長(zhǎng)。研究主要內(nèi)容本篇論文的研究背景立足于海南師范大學(xué)田家炳教學(xué)樓,研究的目標(biāo)在于提升高校教室照明系統(tǒng)的智能化水平,并解決電能浪費(fèi)的問(wèn)題。通過(guò)對(duì)田家炳教學(xué)樓照明系統(tǒng)的深入分析,論文探討了如何利用智能照明技術(shù),實(shí)現(xiàn)照明的自動(dòng)化管理,以提高能源使用效率,減少不必要的電能消耗。此外,本文還關(guān)注了照明系統(tǒng)的智能化對(duì)教學(xué)環(huán)境和學(xué)生學(xué)習(xí)效果的影響?;诖怂枷胛以O(shè)計(jì)并實(shí)現(xiàn)了一款基于STM32F103C8T6微控制器的控制系統(tǒng),該系統(tǒng)內(nèi)部整合了基礎(chǔ)的單片機(jī)控制功能。其內(nèi)有單片機(jī)最小控制系統(tǒng)、電源連接電路、人員數(shù)量統(tǒng)計(jì)模塊、系統(tǒng)顯示模塊、外部時(shí)鐘、按鍵模塊等基本電路,并完成以下功能:(1)檢測(cè)進(jìn)出人的數(shù)量;(2)在自動(dòng)模式下,燈光的亮度會(huì)根據(jù)人數(shù)的增減和環(huán)境光照強(qiáng)度的變化而自動(dòng)調(diào)整;(3)在手動(dòng)模式下,用戶可以通過(guò)按鍵來(lái)控制LED燈的點(diǎn)亮數(shù)量。(5)LCD液晶顯示功能;(6)實(shí)時(shí)顯示時(shí)間,并通過(guò)按鍵確定自動(dòng)模式時(shí)的工作時(shí)間范圍;(7)設(shè)計(jì)看門狗確保電路穩(wěn)定運(yùn)行;(8)創(chuàng)新點(diǎn):與傳統(tǒng)的燈光控制相比,增加了PWM調(diào)光、人員數(shù)量統(tǒng)計(jì)、自動(dòng)模式工作時(shí)間可控功能,使教室燈光控制的功能更具多樣性。人性化、智能化。教室智能照明控制系統(tǒng)硬件方案設(shè)計(jì)本章主要完成硬件系統(tǒng)總體設(shè)計(jì)方案,并從市面上挑選最合適完成本作品的電子器件包括:STM32F103C8T6單片機(jī)板、LM393電壓比較器、5mm紅外發(fā)射接收及配對(duì)紅外接收管、LCD1602液晶顯示模塊、DS1302時(shí)鐘芯片。系統(tǒng)總體設(shè)計(jì)方案在設(shè)計(jì)過(guò)程中,我充分考慮了整體系統(tǒng)的實(shí)用性、可行性以及經(jīng)濟(jì)性,以確保設(shè)計(jì)方案能夠在實(shí)際應(yīng)用中得到有效實(shí)施。經(jīng)過(guò)全面評(píng)估和多次優(yōu)化,最終確定的教室智能燈控硬件模塊方案如下所示。如圖1所示。圖1系統(tǒng)設(shè)計(jì)結(jié)構(gòu)圖系統(tǒng)元器件選擇單片機(jī)選型STM32單片機(jī)中STM32F103C8T6屬于ARMv7架構(gòu),具有高性能、低功耗的特點(diǎn),同時(shí)價(jià)格相對(duì)較低,意味著它在性能和成本之間取得了良好的平衡。此外其主頻為72MHz,可以滿足大部分應(yīng)用場(chǎng)景的處理需求,并且可以在低功耗模式下運(yùn)行。它的這些特性使其非常適合于各種小型項(xiàng)目和教育用途。而且它的設(shè)計(jì)考慮到了易用性和開(kāi)發(fā)便利性,支持KEIL開(kāi)發(fā)環(huán)境和C語(yǔ)言編程,方便初學(xué)者使用。這款單片機(jī)搭載了ARMCortex-M332位微處理器,具備12位模數(shù)轉(zhuǎn)換功能(最多10個(gè)通道),以及多種計(jì)時(shí)器,包括PWM計(jì)時(shí)器。同時(shí),它還擁有標(biāo)準(zhǔn)的和高級(jí)的通訊接口。其工作電壓介于2V至3.6V之間,內(nèi)置64K字節(jié)的閃存、20K字節(jié)的SRAM、7通道的DMA控制器、3個(gè)通用計(jì)時(shí)器以及1個(gè)高級(jí)控制計(jì)時(shí)器。兩個(gè)SPI,兩個(gè)I2C,三個(gè)USART,一個(gè)USB和一個(gè)CAN接口,使得該單片機(jī)能夠靈活地與多種外圍設(shè)備進(jìn)行通信,滿足不同應(yīng)用場(chǎng)景的需求。37個(gè)快速輸入輸出端口保證其足夠的靈活性和適用性。此外,還有一種綜合性的節(jié)能模式,使得設(shè)計(jì)者能夠開(kāi)發(fā)出低能耗的應(yīng)用程序。下面是引腳示意圖,如圖2所示。

圖2STM32F103C8T6芯片引腳圖人員數(shù)量統(tǒng)計(jì)系統(tǒng)選擇方案一:通過(guò)攝像頭計(jì)數(shù)通過(guò)攝像頭采集數(shù)據(jù)再用DSP處理器對(duì)圖像進(jìn)行分析可以很好的對(duì)教室人數(shù)進(jìn)行統(tǒng)計(jì)。但實(shí)際上出于能源消耗、個(gè)人隱私保護(hù)以及教學(xué)質(zhì)量等方面的考慮,攝像頭常開(kāi)是不合理的。該方式高應(yīng)用場(chǎng)景為特別重視安全問(wèn)題的場(chǎng)所如機(jī)場(chǎng)、邊境口岸、軍事管理區(qū)等場(chǎng)所。故舍棄該方案。方案二:熱釋電紅外傳感器計(jì)數(shù)法熱釋電紅外傳感器屬于一種特殊的紅外檢測(cè)設(shè)備,它本身無(wú)法發(fā)射紅外線,如果檢測(cè)對(duì)象本身帶有溫度,能夠釋放紅外輻射,便能夠被熱釋電紅外傳感器檢測(cè)到。例如,人體,電腦之類的都能使其發(fā)揮工作。當(dāng)檢測(cè)人時(shí),主要檢測(cè)人體隨傳感器距離變化產(chǎn)生的不同的紅外輻射。如果檢測(cè)到的紅外輻射發(fā)生變化,便代表有人路過(guò)。傳感器可以檢測(cè)到這些變化并將其轉(zhuǎn)換為電信號(hào)。這些信號(hào)經(jīng)芯片處理后,可以實(shí)現(xiàn)對(duì)微小人體移動(dòng)的檢測(cè)。并且其可以針對(duì)人體進(jìn)行計(jì)數(shù),針對(duì)性較高,受外界干擾較小。但是基于熱釋電紅外傳感的人員數(shù)量統(tǒng)計(jì)系統(tǒng)較貴,單獨(dú)以熱釋紅外傳感器進(jìn)行開(kāi)發(fā)也可以實(shí)現(xiàn)但較為復(fù)雜。另一個(gè)不足之處在于,如果環(huán)境溫度較高,諸如海南,廣東等溫度甚至能夠到達(dá)40℃,熱釋電紅外傳感器就會(huì)出現(xiàn)結(jié)果“失真”,探測(cè)反應(yīng)變慢等情況。當(dāng)溫度過(guò)高時(shí),其還會(huì)出現(xiàn)宕機(jī)的現(xiàn)象。故該方案在諸如海南氣溫較高的地區(qū)不合適REF_Ref3007\r\h[5]。方案三:紅外對(duì)管計(jì)數(shù)法基于紅外發(fā)射器和接收器的計(jì)數(shù)系統(tǒng)與熱釋電紅外傳感器的技術(shù)方法恰好相反。它并非主要通過(guò)檢測(cè)外界物體或人產(chǎn)生的紅外輻射,而是通過(guò)紅外發(fā)射器發(fā)射紅外線,然后由紅外接收器接收它。這個(gè)流程便完成了一次檢測(cè),檢測(cè)方式多種多樣,目前有通過(guò)紅外線被遮擋產(chǎn)生反射再被接收的方式。也有反其道行之的檢測(cè)紅外射線被阻擋產(chǎn)生的空窗期(紅外線沒(méi)被檢測(cè)到)再由紅外接收器接收這個(gè)“空信號(hào)”的方式。我采取第一種方式。該系統(tǒng)計(jì)數(shù)精確,電路簡(jiǎn)單便于維修。且基于該系統(tǒng)的計(jì)數(shù)產(chǎn)品多種多樣,價(jià)格低廉。本次畢業(yè)設(shè)計(jì)采用的紅外對(duì)管方案便屬于該方案。顯示器選擇方案一:LED數(shù)碼管顯示方案LED數(shù)碼管顯示技術(shù)是一種常見(jiàn)的顯示方式,它利用LED數(shù)碼管作為顯示元件,通過(guò)控制數(shù)碼管中的LED燈珠的亮滅來(lái)顯示數(shù)字、字母和符號(hào)等信息。本文將從以下幾個(gè)方面對(duì)LED數(shù)碼管顯示方案進(jìn)行分析。LED數(shù)碼管由多個(gè)LED燈珠組成,每個(gè)LED燈珠代表一個(gè)數(shù)字或一個(gè)段,通過(guò)控制各個(gè)LED燈珠的亮滅,可以顯示出不同的數(shù)字、字母和符號(hào)。LED數(shù)碼管通常包括7個(gè)段(a,b,c,d,e,f,g)和一個(gè)點(diǎn)(dp),通過(guò)不同的組合可以顯示出0-9的數(shù)字和A-F的字母。較之8段型7段型數(shù)碼管少用了一個(gè)發(fā)光二極管,意味著少了一個(gè)用于標(biāo)記小數(shù)點(diǎn)的二極管。此外,還可以通過(guò)控制多個(gè)數(shù)碼管來(lái)實(shí)現(xiàn)多位數(shù)的顯示。LED數(shù)碼管顯示方案具有許多優(yōu)勢(shì),如高亮度、低功耗、長(zhǎng)壽命、響應(yīng)速度快、綠色環(huán)保等。LED數(shù)碼管顯示方案廣泛應(yīng)用于各個(gè)領(lǐng)域,包括電子時(shí)鐘、電子計(jì)分器、溫度顯示、電子價(jià)格標(biāo)簽等。電子時(shí)鐘是LED數(shù)碼管顯示方案最為常見(jiàn)的應(yīng)用之一,通過(guò)控制數(shù)碼管中的LED燈珠的亮滅,可以顯示出當(dāng)前的時(shí)間。電子計(jì)分器也是LED數(shù)碼管顯示方案的重要應(yīng)用領(lǐng)域,如體育比賽、籃球比賽等都需要計(jì)分器來(lái)顯示得分情況。然而,LED數(shù)碼管顯示也存在許多不足之處。首先,LED數(shù)碼管顯示方案的顯示內(nèi)容相對(duì)有限,只能顯示數(shù)字、字母和符號(hào),無(wú)法顯示復(fù)雜的圖形和圖像。其次,LED數(shù)碼管顯示方案的顯示效果相對(duì)較簡(jiǎn)單,無(wú)法實(shí)現(xiàn)動(dòng)態(tài)顯示等較為復(fù)雜的效果。考慮到本次實(shí)驗(yàn)需要顯示的實(shí)時(shí)時(shí)間,光照強(qiáng)度等級(jí),模式選擇等信息。信息數(shù)據(jù)較多,LED數(shù)碼管無(wú)法勝任,最終只能放棄該方案。方案二:LCD液晶顯示方案LCD1602其核心控制芯片通常采用HD44780或與之相兼容的型號(hào),具備同時(shí)展示16列2行共32個(gè)字符的能力。它不僅能夠精確地展示ASCII碼內(nèi)的標(biāo)準(zhǔn)字符集,包括大小寫字母、數(shù)字和常見(jiàn)符號(hào),而且還能夠呈現(xiàn)一系列預(yù)定義的特殊符號(hào)。這些特殊字符可能包括貨幣符號(hào)、數(shù)學(xué)運(yùn)算符、度量單位標(biāo)識(shí)等,從而提供了更為豐富和靈活的信息展示能力。LCD1602還可以自定義8個(gè)字模,地址分別是00H-07H,其字形點(diǎn)陣存儲(chǔ)在CGRAM共64個(gè)字節(jié)中(8字節(jié)存1個(gè)字符),如圖3LCD1602字庫(kù)圖REF_Ref8549\r\h[6]。圖3LCD1602字庫(kù)圖這使得LCD1602在顯示字母、數(shù)字、符號(hào)等信息時(shí)非常方便,同時(shí)也為用戶提供了較大的靈活性,可以根據(jù)需要進(jìn)行定制。其次由于LCD引腳接口較為簡(jiǎn)單有連接方便的特點(diǎn)。這允許LCD1602工作時(shí)直接對(duì)其控制芯片的程序讀寫。故編程驅(qū)動(dòng)顯示器的操作很簡(jiǎn)單,對(duì)控制芯片和接口有足夠的了解就可讀寫時(shí)序及命令了,不用對(duì)其結(jié)構(gòu)、驅(qū)動(dòng)原理深入了解REF_Ref8212\r\h[7]。再者與傳統(tǒng)顯示屏相比,LCD1602在重量上具有顯著的優(yōu)勢(shì),相同顯示面積的情況下,液晶模塊的結(jié)構(gòu)更為輕巧。在設(shè)計(jì)和制造輕便電子產(chǎn)品時(shí),LCD1602液晶模塊的輕薄特性大大減少了設(shè)備的體積和重量,提高了用戶的攜帶便利性。這一特性使得LCD1602在便攜式電子設(shè)備中尤為受歡迎,例如手持游戲機(jī)、小型計(jì)算器、便攜式儀表等。同時(shí),其較低的能耗也有助于延長(zhǎng)電池的使用壽命,這對(duì)于便攜式設(shè)備來(lái)說(shuō)至關(guān)重要。因此,LCD1602液晶模塊在便攜式醫(yī)療設(shè)備、手持條碼掃描器、智能穿戴設(shè)備等多種場(chǎng)合中都有廣泛的應(yīng)用REF_Ref8212\r\hREF_Ref9887\r\h[8]。最后,考慮需要顯示信息的多少,以及對(duì)屏幕大小,便攜性,操作簡(jiǎn)便性等因素,我選擇LCD1602液晶顯示作為最終的顯示方案。LCD1602引腳說(shuō)明如表4。編號(hào)符號(hào)引腳說(shuō)明編號(hào)符號(hào)引腳說(shuō)明1VSS電源地9D2DataI/O2VDD電源正極10D3DataI/O3VL液晶顯示偏壓信號(hào)11D4DataI/O4RS數(shù)據(jù)/命令選擇(H/L)12D5DataI/O5R/W讀/寫選擇端(H/L)13D6DataI/O6E使能信號(hào)14D7DataI/O7D0DataI/O15BLA背光源正極8D1DataI/O16BLK背光源負(fù)極表4LCD1602引腳說(shuō)明外部時(shí)鐘芯片選擇為了適配教室照明的使用規(guī)律,本系統(tǒng)設(shè)計(jì)需要集成時(shí)間控制機(jī)制,這對(duì)時(shí)鐘電路有較高的要求既要時(shí)間運(yùn)行精準(zhǔn),也要求其穩(wěn)定運(yùn)行。那么如何對(duì)時(shí)鐘電路進(jìn)行設(shè)計(jì),時(shí)鐘芯片的挑選顯得尤為重要??紤]到系統(tǒng)在斷電情況下仍需為時(shí)鐘電路提供電源,并且盡量減少對(duì)STM32F103C8T6資源的占用,在我的畢業(yè)設(shè)計(jì)項(xiàng)目中,我精心選擇了DS1302實(shí)時(shí)時(shí)鐘芯片。它不僅具備精確的時(shí)間保持功能,而且還內(nèi)置了充電電路,能夠?yàn)闀r(shí)鐘電路提供電源。這一特性使得DS1302非常適合用于需要長(zhǎng)期運(yùn)行且不需要頻繁更換電池的應(yīng)用場(chǎng)景。此外,DS1302還包含了用于數(shù)據(jù)暫存的RAM寄存器,這些寄存器可以用來(lái)存儲(chǔ)臨時(shí)數(shù)據(jù),為我的項(xiàng)目提供了額外的數(shù)據(jù)存儲(chǔ)能力。DS1302是美國(guó)DALLAS公司開(kāi)發(fā)的一款實(shí)時(shí)時(shí)鐘電路,它不僅集成了RAM存儲(chǔ)器,而且以其卓越的性能和低功耗特性而聞名。這款芯片設(shè)計(jì)用于在電子設(shè)備中提供準(zhǔn)確的時(shí)間保持功能,同時(shí)還可以存儲(chǔ)少量的數(shù)據(jù),這使得它在各種需要時(shí)間管理和數(shù)據(jù)記錄的應(yīng)用中非常受歡迎。同時(shí)DS1302也是采用串行通信接口的實(shí)時(shí)時(shí)鐘(RTC)芯片,它不僅能夠提供精確的時(shí)間記錄功能,還具備為備用電源充電的特性,以實(shí)現(xiàn)掉電保護(hù),當(dāng)然,這一功能也可以根據(jù)需求被禁用。該芯片具備完善的時(shí)間管理能力,能夠獨(dú)立追蹤和更新年份、月份、日期、小時(shí)、分鐘和秒鐘。此外,DS1302還內(nèi)置了閏年自動(dòng)調(diào)整機(jī)制,確保了時(shí)鐘在長(zhǎng)時(shí)間運(yùn)行后的準(zhǔn)確性。它設(shè)計(jì)的工作電壓范圍寬廣,從2.5V到5.5V,適應(yīng)性強(qiáng),便于在不同電壓環(huán)境下穩(wěn)定工作。在硬件連接方面,DS1302與STM32F103C8T6微控制器核心板的對(duì)接異常簡(jiǎn)便,僅需三根導(dǎo)線即可完成,極大簡(jiǎn)化了電路設(shè)計(jì)和布線過(guò)程,滿足系統(tǒng)的要求REF_Ref12767\r\h[9]。各引腳的功能定義如下(其引腳圖如圖5所示):(1)VCC1:這一引腳是DS1302的主電源輸入端。當(dāng)設(shè)備正常運(yùn)行且有外部電源供應(yīng)時(shí),VCC1為芯片提供必要的電能,確保實(shí)時(shí)時(shí)鐘和RAM寄存器正常工作。(2)VCC2:作為備用電源輸入,VCC2引腳提供了一種電源冗余機(jī)制。當(dāng)VCC2的電壓水平超過(guò)VCC1的電壓加上0.2伏特時(shí),DS1302會(huì)自動(dòng)切換到由VCC2供電,這樣的設(shè)計(jì)確保了在主電源失效或電壓不足時(shí),DS1302仍能繼續(xù)運(yùn)行。相反,當(dāng)VCC2的電壓降至低于VCC1時(shí),DS1302會(huì)轉(zhuǎn)而由VCC1供電,保證了電源的穩(wěn)定性和可靠性。(3)SCLK:串行時(shí)鐘輸入引腳是DS1302數(shù)據(jù)傳輸?shù)男呐K。它控制著數(shù)據(jù)的同步輸入和輸出操作。在數(shù)據(jù)傳輸過(guò)程中,SCLK提供時(shí)鐘信號(hào),確保數(shù)據(jù)的正確讀取和寫入。每個(gè)時(shí)鐘周期內(nèi),DS1302都會(huì)根據(jù)SCLK的上升沿或下降沿來(lái)同步數(shù)據(jù)。(4)I/O:這個(gè)引腳在DS1302的三線接口中充當(dāng)雙向數(shù)據(jù)線。它用于數(shù)據(jù)的輸入和輸出,允許微控制器與DS1302之間進(jìn)行通信。無(wú)論是讀取實(shí)時(shí)時(shí)鐘數(shù)據(jù)、寫入新的時(shí)間信息,還是訪問(wèn)RAM寄存器,I/O引腳都是數(shù)據(jù)傳輸?shù)耐ǖ馈Mㄟ^(guò)這個(gè)引腳,可以實(shí)現(xiàn)時(shí)間的同步、鬧鐘的設(shè)置以及用戶數(shù)據(jù)的存儲(chǔ)。RST(5)X1、X2:外部晶振引腳,通常需要外接32.768K晶振。(6)輸入信號(hào),在讀或?qū)憯?shù)據(jù)過(guò)程中,必須保持高電平狀態(tài)REF_Ref12797\r\h[10]。

圖5DS1302的引腳圖STM32單片機(jī)的最小系統(tǒng)是一個(gè)集成了必要組件的緊湊型電路,它由STM32單片機(jī)本身為主要核心、通過(guò)引腳連接著集成化的電路。這些引腳對(duì)著的電路包括時(shí)鐘、電源管理、調(diào)試下載以及復(fù)位電路。這個(gè)系統(tǒng)利用了STM32單片機(jī)內(nèi)部嵌入的ARMCortex-M3內(nèi)核,這是一個(gè)強(qiáng)大的處理核心,它能夠在保持低能耗的同時(shí)提供卓越的處理能力。這種設(shè)計(jì)不僅提高了能效,還極大地減少了編程的復(fù)雜度,使得開(kāi)發(fā)者能夠更加高效地進(jìn)行系統(tǒng)開(kāi)發(fā)和維護(hù)。圖6詳細(xì)展示了Cortex-M3內(nèi)核的內(nèi)部結(jié)構(gòu),揭示了其之所以有高效性能的原因。圖6Cortex-M3內(nèi)核結(jié)構(gòu)圖STM32F103C8T6芯片做單片機(jī)最小系統(tǒng)實(shí)現(xiàn)各部分電路功STM32F103C8T6芯片有40個(gè)引腳如圖7,每個(gè)引腳均分配了特定功能及可能的復(fù)用功能。充分理解和利用這些功能對(duì)于處理和顯示紅外對(duì)管、光敏電阻等傳感器電路的信號(hào)至關(guān)重要。這些引腳對(duì)應(yīng)維持系統(tǒng)運(yùn)行的電源管理、復(fù)位、晶振、液晶顯示、按鍵以及各類傳感器模塊所需的接口。圖7STM32F103C8T6芯片實(shí)物圖圖8主控電路

電源連接電路。圖9電源連接電路人員數(shù)量統(tǒng)計(jì)物體或生物遮擋紅外對(duì)管致使紅外發(fā)射管發(fā)射的紅外線經(jīng)反射被紅外接收管接收,進(jìn)而使得紅外接收管兩端的電壓下降。教室一般有前后兩個(gè)門,取其中任意一個(gè)門作為研究對(duì)象。一組代表室外的紅外對(duì)管和一組代表室內(nèi)的紅外對(duì)管檢測(cè)到人員后產(chǎn)生的電壓信號(hào)經(jīng)過(guò)LM393芯片處理然后傳送給STM32控制器的內(nèi)置A/D進(jìn)行模數(shù)轉(zhuǎn)換的處理。是否有人進(jìn)出教室通過(guò)讀取STM32F103C8T6最小系統(tǒng)核心板接收這兩個(gè)電信號(hào)的兩個(gè)A/D轉(zhuǎn)換接口電平便可知。若兩者都為低電平即代表有人進(jìn)出。設(shè)計(jì)考慮一個(gè)門安裝兩對(duì)紅外對(duì)管是為了保證既能檢測(cè)通過(guò)這個(gè)門進(jìn)來(lái)的人員,亦能統(tǒng)計(jì)出去的人員數(shù)量。人員數(shù)量統(tǒng)計(jì)電路如圖10。為確保信號(hào)的采集,處理正常需對(duì)電路添加部分電阻起供給電路運(yùn)行,保護(hù)電路等作用。查表知我選購(gòu)紅外發(fā)射管最大工作電流為30mA,其正向壓降范圍為0.8~1.6V。于是我將一個(gè)電阻與其相作用為限流。經(jīng)計(jì)算,其阻值大小需滿足如下條件考慮紅外發(fā)射管的發(fā)光功率與其工作電流正相關(guān),故取R21和R22電阻值為100Ω。R12和R13作為上拉電阻取值為10K。又為了保證經(jīng)LM393處理的電信號(hào)正確的被被STM32F103C8T6最小系統(tǒng)核心板接收。故令D2和D3作為輔助判斷LED燈。當(dāng)LED燈亮說(shuō)明信號(hào)被正確處理,且當(dāng)D1和D2LED燈都亮說(shuō)明有人員進(jìn)出。若無(wú)人進(jìn)出則燈不會(huì)亮。當(dāng)有人靠近門口則亮其中一個(gè)燈,不會(huì)計(jì)數(shù)。這一設(shè)計(jì)能保證系統(tǒng)穩(wěn)定運(yùn)行增強(qiáng)了其可靠性。圖10人員數(shù)量統(tǒng)計(jì)電路

LCD1602各引腳連接對(duì)應(yīng)模塊電路的引腳,實(shí)現(xiàn)各模塊點(diǎn)的內(nèi)容顯IO口是控制液晶顯示屏的亮和滅的;1號(hào)引腳接一個(gè)10K是其 圖11LCD液晶顯示電路圖-S6共6個(gè)按鍵直接與STM32F103C8T6最小系統(tǒng)核心板相連構(gòu)成按鍵模塊,功能如下:S1為設(shè)置按鍵用來(lái)進(jìn)入修改模式與S3,S4共同實(shí)現(xiàn)調(diào)整實(shí)時(shí)時(shí)間顯示,和自動(dòng)模式工作時(shí)間段。S2為確定按鈕用來(lái)確定好修改后的LCD上顯示的的信息并跳轉(zhuǎn)至下一個(gè)待修改信息。S3按鍵為“增加/調(diào)亮”按鍵。“增加”功能在修改模式下對(duì)屏幕上的時(shí)間信息進(jìn)行上調(diào);調(diào)亮功能則是PWM調(diào)光變亮。S4按鍵為“下降/調(diào)暗”按鍵。“下降”功能是在修改模式下對(duì)屏幕上的時(shí)間信息下調(diào);“調(diào)暗”功能則是PWM調(diào)光“調(diào)暗”。S5按鍵則是“轉(zhuǎn)換”按鍵,可以切換系統(tǒng)整體電路的工作模式。S6按鍵是“手動(dòng)增加”按鍵,其功能是在手動(dòng)模式下增加亮的LED燈數(shù)當(dāng)LED燈群亮燈數(shù)量達(dá)到最大后亮燈數(shù)后重新變回亮0盞的狀態(tài)圖12按鍵電路

系統(tǒng)電路主程序設(shè)計(jì)教室智能燈控系統(tǒng)的主程序由延時(shí)程序、顯示子程序、人員數(shù)量顯示程序、按鍵子程序、時(shí)鐘顯示子程序、修改模式子程序以及PWM調(diào)光顯示子程序等程序協(xié)同工作,實(shí)現(xiàn)了系統(tǒng)的智能化控制和高效運(yùn)行。當(dāng)給系統(tǒng)電源接口供電后,首先進(jìn)行液晶顯示器的初始化,為用戶提供一個(gè)清晰的顯示界面。隨后,單片機(jī)檢測(cè)到按鍵操作,根據(jù)按鍵的不同,LCD1602顯示界面會(huì)切換到相應(yīng)的模塊顯示界面,以便用戶查看和操作不同的功能。在這個(gè)過(guò)程中,模擬量數(shù)據(jù)通過(guò)AD轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字量,然后在液晶顯示界面上顯示輸出結(jié)果。這樣的設(shè)計(jì)使得用戶能夠直觀地了解到當(dāng)前的照明狀態(tài)和環(huán)境參數(shù),同時(shí)也便于用戶根據(jù)需要進(jìn)行調(diào)整。為主程序流程圖。圖13主程序流程圖系統(tǒng)處于正常工作狀態(tài)時(shí),在程序掃描并接收到人員數(shù)量統(tǒng)計(jì)電路傳來(lái)的經(jīng)模數(shù)處理后的電平信號(hào)后對(duì)信息進(jìn)行處理。處理方法如下。為了準(zhǔn)確統(tǒng)計(jì)教室內(nèi)的人數(shù),我使用兩個(gè)標(biāo)志位:“內(nèi)”和“外”。當(dāng)系統(tǒng)檢測(cè)到人員進(jìn)入到教室門口的監(jiān)測(cè)區(qū)域時(shí),首先將“內(nèi)”標(biāo)志位設(shè)置為1。接著,系統(tǒng)檢查“外”標(biāo)志位是否已經(jīng)為1,如果是,這表明有人從外部進(jìn)入教室內(nèi)部,因此系統(tǒng)會(huì)將人數(shù)計(jì)數(shù)加1,并隨后清空兩個(gè)標(biāo)志位,為下一次統(tǒng)計(jì)做準(zhǔn)備。相反,如果系統(tǒng)先檢測(cè)到“內(nèi)”標(biāo)志位被設(shè)置為1,隨后“外”標(biāo)志位也被設(shè)置為1,這表明有人從教室內(nèi)部離開(kāi),走向外部。在這種情況下,系統(tǒng)會(huì)將人數(shù)計(jì)數(shù)減1,并同樣清空兩個(gè)標(biāo)志位。代表人員數(shù)量統(tǒng)計(jì)的流程圖如下圖所示。圖14人員數(shù)量統(tǒng)計(jì)程序流程圖

AD轉(zhuǎn)換程序的核心結(jié)構(gòu)包括幾個(gè)關(guān)鍵步驟。首先,需要針對(duì)特定的微控制器芯片定義ADC模塊將要使用的引腳。在STM32F10x微控制器中,這通常涉及到配置ADC1模塊的相關(guān)引腳為模擬輸入模式。接下來(lái),對(duì)STM32F10x微控制器的ADC1模塊進(jìn)行初始化。這一步驟包括配置ADC的時(shí)鐘、采樣時(shí)間、中斷設(shè)置等參數(shù),確保ADC1能夠按照預(yù)期的方式工作。一旦ADC1初始化完成,它就可以開(kāi)始將紅外數(shù)量檢測(cè)電路傳回的模擬信號(hào)轉(zhuǎn)換。轉(zhuǎn)換后的數(shù)字信號(hào)可以直接被微控制器讀取,用于后續(xù)的處理,即在液晶顯示界面上顯示教室內(nèi)的人員數(shù)量,進(jìn)而根據(jù)這些數(shù)據(jù)來(lái)控制LED群的亮燈行為。主要的初始化函數(shù)如下所示:voidGPIO_Configuration_ADC(void);//聲明了一個(gè)外部函數(shù)voidSet_ADC_Init(void);//聲明了一個(gè)外部函數(shù),用于初始化ADC。顯示程序主要結(jié)構(gòu)是STM32單片機(jī)驅(qū)動(dòng)LCD1602的基礎(chǔ)配置部分,確保STM32的GPIO引腳能夠正確地與LCD1602模塊的引腳連接,并按照所需的模式工作。緊接著是對(duì)LCD1206的指令和數(shù)據(jù)定義,初始化。最后則是將需要的實(shí)時(shí)時(shí)間信息,人員數(shù)量,光照強(qiáng)度,顯示在屏幕第一頁(yè)。在按下設(shè)置按鈕后,可以在屏幕第二頁(yè)和第三頁(yè)選擇要修改的數(shù)據(jù)進(jìn)行更改。調(diào)用方法為在需要顯示內(nèi)容的函數(shù)里調(diào)用對(duì)應(yīng)函數(shù),包括字符,數(shù)字。LCD1602顯示前主要的初始化函數(shù)如下所示:voidGPIO_Configuration_LCD(void);//LCDGPIO初始化voiddelay(uintz);//延時(shí)函數(shù)voidwrite_com(ucharcom);//LCD1602寫指令函數(shù),根據(jù)數(shù)據(jù)手冊(cè)的時(shí)序voidwrite_date(uchardate);//LCD1602寫數(shù)據(jù)函數(shù),根據(jù)數(shù)據(jù)手冊(cè)的時(shí)序voidWrite_Value(ucharadd,chardate);//待寫入字符voidWrite_3Value(ucharadd,intdate);/待寫入整數(shù)/*液晶屏顯示內(nèi)容,把要顯示的內(nèi)容寫到對(duì)應(yīng)的位置*/voidLCD_Display_String(unsignedcharline,unsignedchar*string);voidWeek_dispaly(ucharadd,chardat);voidLCD_Initinal(void);////LCD1602和定時(shí)器初始化函數(shù)按鍵程序主要分為兩個(gè)方面,一是在設(shè)置模式改變屏上的信息包括實(shí)時(shí)時(shí)間信息,以及自動(dòng)模式的工作時(shí)間段。二是控制4個(gè)代表教室燈光的LED燈。需要在改變屏幕信息的程序段完成后才可進(jìn)入設(shè)置模式,實(shí)際上這段過(guò)程是無(wú)感的。按鍵控制代碼設(shè)計(jì)流程為按鍵控制光標(biāo)移動(dòng),改變數(shù)字信息,確認(rèn)改變結(jié)果。在改變LED燈狀態(tài)的程序段則較為簡(jiǎn)單只需將亮燈數(shù)量與按下鍵盤的次數(shù)掛鉤。唯一需要注意的是當(dāng)燈全亮后再按按鈕使亮燈數(shù)量歸零。主要函數(shù)如下所示:voidGPIO_Configuration_KEY(void);//配置STM32的GPIO端口,用于檢測(cè)按鍵輸入voidKEY(void);//按鍵控制邏輯主體程序?qū)崿F(xiàn)上述功能voiddelay1(uintz);//延時(shí)程序該系統(tǒng)的整體原理圖主要由STM32F103C8T6單片機(jī)最小系統(tǒng)核心板、電源入口模塊、LCD1602顯示模塊、人員數(shù)量統(tǒng)計(jì)模塊、按鍵模塊、外部時(shí)鐘模塊、環(huán)境光線強(qiáng)度檢測(cè)模塊。系統(tǒng)能夠?qū)崿F(xiàn)所有設(shè)計(jì)功能,圖15為整體系統(tǒng)模塊的工作原理圖。圖15系統(tǒng)原理圖從光敏電阻電路收集電信號(hào),電壓經(jīng)過(guò)AD轉(zhuǎn)換得到的值即為環(huán)境光線的強(qiáng)度等級(jí),光照強(qiáng)度共分為10個(gè)等級(jí)為0-9。等級(jí)越高,教室的LED燈越暗。LED燈的亮度等級(jí)亦分為九等級(jí),對(duì)應(yīng)代數(shù)關(guān)系為光線強(qiáng)度等級(jí)與LED燈亮度等級(jí)之和為9。光線強(qiáng)度等級(jí)每0.5s通過(guò)中斷調(diào)用采集一次REF_Ref13443\r\h[11]。PWM調(diào)光主要函數(shù)如下:voidTIM2_IRQHandler(void);////0.5ms定時(shí)器中斷函數(shù)PWM調(diào)光PWM_Light();//PWM調(diào)光主程序具體功能如上述描述時(shí)鐘模塊程序結(jié)構(gòu)與本章4.4的LCD1602液晶顯示部分類似,先對(duì)STM32F103C8T6的GPIO引腳初始化以便能夠正確地與DS1302模塊的引腳連接,再初始化DS1302。然后通過(guò)SPI(SerialPeripheralinterface)通信協(xié)議的方式,DS1302就可以接收到STM32F103C8T6傳過(guò)來(lái)的讀取指令。接收到指令后DS1302返回給STM32F103C8T6有關(guān)時(shí)間的數(shù)據(jù),該數(shù)據(jù)經(jīng)由BCD碼轉(zhuǎn)換為十進(jìn)制后解析為十進(jìn)制的時(shí)間和日期信息,如年、月、周、日、時(shí)、分、秒。最終將這些信息顯示在LCD1602液晶屏幕上。如果在“修改模式”下需要更改信息向DS1302發(fā)送設(shè)置時(shí)間和日期的指令,更新實(shí)時(shí)時(shí)鐘的時(shí)間和日期即可。需要注意的有兩點(diǎn)。首先向DS1302寫入時(shí)間信息后記得開(kāi)啟寫保護(hù),避免時(shí)間不斷刷新。其次,讀取從DS1302傳來(lái)的數(shù)據(jù)時(shí)需要給一定延時(shí)等待電平穩(wěn)定,之后再讀取數(shù)據(jù)可以確保數(shù)據(jù)讀取不亂。主要函數(shù)如下所示:voidds1302_gpio_init(void);//Ds1302端口初始化voidds1032_init(void);//ds1302初始化函數(shù)voidds1032_read_time(void);//從DS1302讀取實(shí)時(shí)時(shí)間(BCD碼)voidds1032_read_realTime(void);//將BCD碼轉(zhuǎn)化為十進(jìn)制數(shù)據(jù)voidds1032_DATAOUT_init();//配置GPIOA.15為輸出模式,以便可以發(fā)送數(shù)據(jù)到//DS1032芯片voidds1032_DATAINPUT_init();//配置GPIOA.15為輸入模式,以便可以從DS1032//芯片接//收數(shù)據(jù)voidds1302_write_onebyte(chardata);//向DS1302寫入命令讀/寫模式voidds1302_wirte_rig(charaddress,chardata);//DS1032芯片向STM32C8T6發(fā)送數(shù)據(jù)chards1302_read_rig(charaddress);//讀取DS1032芯片傳來(lái)的數(shù)據(jù)

對(duì)作品經(jīng)過(guò)多次理論設(shè)計(jì)改善,焊接,調(diào)試后,實(shí)物圖終于調(diào)試成功。實(shí)物部分顯示效果如下:(1)給電源接口供電,打開(kāi)開(kāi)關(guān)后,LCD1206液晶顯示屏顯示初始時(shí)間并隨時(shí)間變動(dòng),人員數(shù),環(huán)境光線強(qiáng)度,LED燈光線強(qiáng)度。實(shí)際效果如圖16所示。圖16初始化界面(2)“修改模式”下首先選擇修改時(shí)間或修改自動(dòng)模式下的工作時(shí)間段。選擇狀態(tài)的實(shí)際效果如圖17至20所示。圖17修改模式選擇項(xiàng)圖18時(shí)間修改界面圖19自動(dòng)模式開(kāi)始時(shí)間界面圖20自動(dòng)模式結(jié)束時(shí)間界面自動(dòng)模式工作下,隨人數(shù)變化,LED亮的燈數(shù)隨之變化。兩者關(guān)系如下表表21人數(shù)與LED燈群亮燈數(shù)關(guān)系人數(shù)LED燈群亮燈數(shù)001-9110-19220-29330或以上4實(shí)際效果圖如圖22至圖26。圖22人數(shù)為0時(shí)亮燈數(shù)量圖23人數(shù)為1至9時(shí)亮燈數(shù)量圖24人數(shù)為10至29時(shí)亮燈數(shù)量圖25人數(shù)為20至29時(shí)亮燈數(shù)量圖26人數(shù)在30及以上時(shí)亮燈數(shù)量(3)手動(dòng)模式工作下,隨按鍵按下次數(shù)變化,LED亮的燈數(shù),和亮度也隨之變化。實(shí)際效果如圖27至31所示。圖27手動(dòng)模式按鍵次數(shù)為0圖28手動(dòng)模式按鍵次數(shù)為0圖29手動(dòng)模式按鍵次數(shù)為1圖30手動(dòng)模式按鍵次數(shù)為3圖31手動(dòng)模式按鍵次數(shù)為4

(4)自動(dòng)模式下LED燈亮度等級(jí)與環(huán)境關(guān)照強(qiáng)度負(fù)相關(guān),環(huán)境關(guān)照強(qiáng)度越高則LED燈亮度等級(jí)越低。環(huán)境光照強(qiáng)度為0與環(huán)境光照強(qiáng)度為9的對(duì)比實(shí)際效果如圖32與圖33。手動(dòng)模式下LED亮度等級(jí)由手動(dòng)控制。按一次“增加/變亮”按鍵(按鍵3)所有亮著的燈亮度增加一點(diǎn);按一次“減少/變暗”按鍵(按鍵4)所有亮著的燈亮度減少一點(diǎn)。按動(dòng)次數(shù)為1與按動(dòng)次數(shù)為9的亮度對(duì)比實(shí)際效果如圖34與圖35。圖32環(huán)境光照強(qiáng)度等級(jí)為9圖33環(huán)境光照強(qiáng)度等級(jí)為0圖34手動(dòng)模式控制LED燈亮度等級(jí)為1圖35手動(dòng)模式控制LED燈亮度等級(jí)為1(1)在電子電路設(shè)計(jì)中考慮各種影響因素還不夠完善,例如,在設(shè)置光敏電阻在PCB板上的時(shí)候,未考慮其與LCD1602顯示屏的距離太近,導(dǎo)致實(shí)物完成后其始終被LCD1602顯示屏遮擋。以至于環(huán)境光照強(qiáng)度等級(jí)這一參數(shù)不容易達(dá)到9。(2)在選購(gòu)紅外對(duì)管的時(shí)候,未選擇合適的功率的紅外發(fā)射管,致使實(shí)物調(diào)試時(shí)其感應(yīng)距離大大縮小。紅外發(fā)射管對(duì)應(yīng)的上拉電阻理論上為10K,實(shí)際上用萬(wàn)用表測(cè)量其所承擔(dān)分擔(dān)的電壓不夠,致使對(duì)應(yīng)LM393的一個(gè)比較器的輸入電壓始終高于2.5V大于基準(zhǔn)電壓2.5V,結(jié)果該比較器輸出為高電壓,STM32控制器始終接收不到這對(duì)紅外對(duì)管傳來(lái)的電信號(hào),整體電路無(wú)法運(yùn)行。解決的方法便是逐步提高該上拉電阻的阻值(實(shí)際在達(dá)到30K時(shí)便符合需求),提高其承擔(dān)電壓,對(duì)應(yīng)的比較器的輸入電壓便可降下來(lái)。具體位置如圖36

圖36解決問(wèn)題的上拉電阻系統(tǒng)設(shè)計(jì)總結(jié)此次的設(shè)計(jì)在傳統(tǒng)的燈光控制方面進(jìn)行了一些改進(jìn),加入自動(dòng)化,智能化的元素。進(jìn)而使得燈光控制更加人性化,教室照明環(huán)境得到改善。相信這種控制方式會(huì)成為今后燈光控制發(fā)展的趨勢(shì)。通過(guò)這次的設(shè)計(jì)我獲得了許多收獲:對(duì)STM32單片機(jī)的應(yīng)用原理認(rèn)識(shí)更加深刻,STM32單片機(jī)因其功能之強(qiáng),適用范圍之廣而受到電子設(shè)計(jì)者的歡迎;關(guān)于我國(guó)現(xiàn)在燈光領(lǐng)域的發(fā)展現(xiàn)狀有了一定理解,對(duì)于自動(dòng)化和智能化如何應(yīng)用在實(shí)際問(wèn)題上有了自己的想法;經(jīng)過(guò)原理圖的設(shè)計(jì)、PCB板的繪制,元器件的購(gòu)買,程序的編寫,進(jìn)一步熟悉了一個(gè)電子產(chǎn)品的開(kāi)發(fā)過(guò)程。同時(shí)對(duì)所學(xué)的軟件包括AltiumDesigner、KeilUV5、proteus等軟件也有了更高的熟練度;在整個(gè)設(shè)計(jì)流程中我更是明白綜合能力,和解決問(wèn)題的能力的重要性。正如我僅僅在元器件購(gòu)買方面出現(xiàn)紕漏,就對(duì)我整個(gè)電路功能完整性都產(chǎn)生了巨大影響;最重要的收獲便是深刻了解了目前的短板諸如程序編寫時(shí)難以將想法寫成代碼,PCB板繪制與焊接的經(jīng)驗(yàn)不足等等。今后在這方面可以通過(guò)自主學(xué)習(xí)并設(shè)計(jì)一些作品鍛煉自身的能力。

獻(xiàn)國(guó)務(wù)院關(guān)于印發(fā)2030年前碳達(dá)峰行動(dòng)方案的通知[A].中國(guó)企業(yè)改革發(fā)展2021藍(lán)皮書(shū)[C].2021:473-483.劉江,柯勇.智能照明產(chǎn)業(yè)發(fā)展研究[J].質(zhì)量與認(rèn)證,2023,(12):59-61.國(guó)家發(fā)展和改革委員會(huì)就《中國(guó)逐步淘汰白熾燈路線圖(征求意見(jiàn)稿)》向社會(huì)公開(kāi)征求意見(jiàn)[J].能源與環(huán)境,2011,(06):101.肖春華,張洪濤.基于GPRS與SMS技術(shù)教室LED節(jié)能系[J].國(guó)外電子測(cè)量技術(shù),2014,33(5):75-79.易金橋,黃勇,廖紅華,等.熱釋電紅外傳感器及其在人員計(jì)數(shù)系統(tǒng)中的應(yīng)用[J].紅外與激光工程,2015,44(04):1186-1192.趙亮.跟我學(xué)51單片機(jī)(七)——LCD1602液晶顯示模塊[J].電子制作,2011,000(7):74-77HaoH,DaiF.Designofsmarthomesecuritysystembasedon52MCU[J].JournalofAdvancesinArtificialLifeRobotics,2021,1(4):199-203.LiB,LiZ.THEIMPLEMENTOFWIRELESSRESPONDERSYSTEMBASEDONRADIOFREQUENCYTECHNOLOGY[J].ActaElectronicaMalaysia,2018,2(1):15-17.陳敏.基于51單片機(jī)的多功能電子鐘設(shè)計(jì)[J].輕工科技,2023,39(01):105-108.王善斌,范忠奇.基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)與實(shí)現(xiàn)[J].科技創(chuàng)新與應(yīng)用,2021,11(13):80-82.張峰.基于STM32的高校教室智慧照明系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安建筑科技大學(xué),2018.附錄附錄1PCB圖圖37PCB圖

附錄2系統(tǒng)主程序(包括人員數(shù)量統(tǒng)計(jì),PWM調(diào)光,光照強(qiáng)度等級(jí)信號(hào)采集等主控程序)main.c//頭文件#include"stm32f10x.h"#include"GPIOLIKE51.h"#include"display.h"#include"ds1302.h"#include"key.h"#include"timer.h"#include"ADC.h"#include"iwdg.h"#defineIN1GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)//紅外對(duì)管接口#defineOUT1GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)//紅外對(duì)管接口#defineAUTO_LEDBIT_ADDR(GPIOB_ODR_Addr,5) //自動(dòng)模式燈接口#defineHAND_LEDBIT_ADDR(GPIOB_ODR_Addr,4)//手動(dòng)模式燈接口#defineLAMP1BIT_ADDR(GPIOB_ODR_Addr,6)//照明燈接口#defineLAMP2BIT_ADDR(GPIOB_ODR_Addr,7)//照明燈接口#defineLAMP3BIT_ADDR(GPIOB_ODR_Addr,8)//照明燈接口#defineLAMP4BIT_ADDR(GPIOB_ODR_Addr,9)//照明燈接口intValue1; //人數(shù)charIN1_flag;//內(nèi)觸發(fā)標(biāo)志位charOUT1_flag;//外觸發(fā)標(biāo)志位charMiao;//防止誤觸發(fā)延時(shí)3秒charnum; //PWM中斷次數(shù)intpwm;charLight; //光線強(qiáng)度intdat; //AD值voidGPIO_Configuration(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //*初始化GPIOA模塊所需的時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//在時(shí)鐘配置中打開(kāi)復(fù)用時(shí)鐘 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//對(duì)PA15PB3PB4引腳進(jìn)行重映射 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_11; //選中管腳1011 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //上拉輸入 GPIO_Init(GPIOB,&GPIO_InitStructure); //以上設(shè)結(jié)構(gòu)體置應(yīng)用到GPIOB GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); LAMP1=1; LAMP2=1; LAMP3=1; LAMP4=1; AUTO_LED=0; //默認(rèn)自動(dòng)模式 HAND_LED=1; Hour_L=8; Hour_H=23;//定時(shí)時(shí)間默認(rèn)在8-23點(diǎn)內(nèi)有效}/************************************定時(shí)時(shí)間轉(zhuǎn)化***********************************************************/voidOpen(void){ longNow; longSet_L,Set_H; Now=hour*3600+minute*60+second; //把實(shí)時(shí)時(shí)間化成秒為單位 Set_L=Hour_L*3600+Minute_L*60+Second_L; //把設(shè)置下限時(shí)間化成秒為單位 Set_H=Hour_H*3600+Minute_H*60+Second_H; //把設(shè)置上限時(shí)間化成秒為單位 if(Auto_flg==0) //自動(dòng)模式 { if(Set_H>=Set_L) //上限大于下限,比如下限18點(diǎn)到上限23點(diǎn) { if((Now>=Set_L)&(Now<=Set_H)) //實(shí)時(shí)時(shí)間在上下限時(shí)間范圍內(nèi) { Timer=1; //進(jìn)入定時(shí)模式 } if((Now<Set_L)|(Now>Set_H)) //實(shí)時(shí)時(shí)間不在范圍內(nèi) { Timer=0; //退出定時(shí)模式,根據(jù)光線強(qiáng)度進(jìn)行亮滅燈 } } if(Set_H<Set_L) //上限小于下限,比如下限18點(diǎn)到上限6點(diǎn) { if(((Now>=Set_L)&&(Now<86400))||(Now<=Set_H)&&(Now>=0))//實(shí)時(shí)時(shí)間在上下限時(shí)間范圍內(nèi)24*3600=86400 { Timer=1; //進(jìn)入定時(shí)模式 } else //實(shí)時(shí)時(shí)間不在范圍內(nèi) { Timer=0; //退出定時(shí)模式,根據(jù)光線強(qiáng)度進(jìn)行亮滅燈 } } }}voidPWM_Light(void) //PWM調(diào)光{ num++; //中斷次數(shù) if(num>9) // { num=0; } if(num<pwm) //前半周期開(kāi)通 { if(Auto_flg==0) //自動(dòng)模式 { if(Timer==1) //實(shí)時(shí)時(shí)間在上下限時(shí)間范圍內(nèi) { if(Value1==0) { LAMP1=1; //全滅 LAMP2=1; LAMP3=1; LAMP4=1; } if((Value1>0)&(Value1<10)) { LAMP1=0; //亮一個(gè)燈 LAMP2=1; LAMP3=1; LAMP4=1; } if((Value1>=10)&(Value1<20)) { LAMP1=0; //亮二個(gè)燈 LAMP2=0; LAMP3=1; LAMP4=1; } if((Value1>=20)&(Value1<30)) { LAMP1=0; //亮三個(gè)燈 LAMP2=0; LAMP3=0; LAMP4=1; } if(Value1>=30) { LAMP1=0; //亮四個(gè)燈 LAMP2=0; LAMP3=0; LAMP4=0; } } else //實(shí)時(shí)時(shí)間不在范圍內(nèi) { LAMP1=1; //全滅 LAMP2=1; LAMP3=1; LAMP4=1; } } if(Auto_flg==1) //手動(dòng) { if(Switch_num==1) //按下一次,開(kāi)一盞燈 { LAMP1=0; LAMP2=1; LAMP3=1; LAMP4=1; } if(Switch_num==2) //按下二次,開(kāi)二盞燈 { LAMP1=0; LAMP2=0; LAMP3=1; LAMP4=1; } if(Switch_num==3) //按下3次,開(kāi)3盞燈 { LAMP1=0; LAMP2=0; LAMP3=0; LAMP4=1; } if(Switch_num==4) //按下4次,開(kāi)4盞燈 { LAMP1=0; LAMP2=0; LAMP3=0; LAMP4=0; } if(Switch_num==5) //按下5次,開(kāi)0盞燈 { LAMP1=1; LAMP2=1; LAMP3=1; LAMP4=1; } } } else //后半周期關(guān)閉 { LAMP1=1; //全滅 LAMP2=1; LAMP3=1; LAMP4=1; }}//=============================================================================//文件名稱:Delay//功能概要:延時(shí)//參數(shù)說(shuō)明:nCount:延時(shí)長(zhǎng)短//函數(shù)返回:無(wú)//=============================================================================voidDelay(uintz) //延時(shí)約3ms{uintx,y; for(x=z;x>0;x--) for(y=5000;y>0;y--);}/*******************人數(shù)統(tǒng)計(jì)************************************************************/voidCount_Value(void){ if(IN1==0) { Delay(10); if(IN1==0) { while(!IN1); if(OUT1_flag==0) { IN1_flag=1;//防止誤觸發(fā) } if(OUT1_flag==1) { Value1++; //人數(shù)增加 if(Value1>=999) //如果人數(shù)計(jì)數(shù)到999,變?yōu)樽畲?99 Value1=999; OUT1_flag=0; //清零 IN1_flag=0; Miao=0; } } } if(OUT1==0) { Delay(10); if(OUT1==0) { while(!OUT1); if(IN1_flag==0) { OUT1_flag=1;//防止誤觸發(fā) } if(IN1_flag==1) { Value1--; //人數(shù)減少 if(Value1<0) //如果人數(shù)計(jì)數(shù)小于0,變?yōu)樽钚? Value1=0; IN1_flag=0; //清零 OUT1_flag=0; Miao=0; } } } }//=============================================================================//文件名稱:main//功能概要:主函數(shù)//參數(shù)說(shuō)明:無(wú)//函數(shù)返回:int//=============================================================================intmain(void){ GPIO_Configuration(); GPIO_Configuration_LCD(); Set_ADC_Init(); TIMER_Init(); TIMER4_Init(); NVIC_Config(); Delay(100); GPIO_Configuration_KEY(); ds1302_gpio_init(); //初始化ds1302端口 ds1032_read_realTime();//讀取實(shí)時(shí)數(shù)據(jù) IWDG_Configuration(); LCD_Initinal(); while(1) { KEY();//!按鍵控制 Count_Value();//人數(shù)統(tǒng)計(jì) if(Adjust==0) //非調(diào)節(jié)模式下顯示時(shí)間 { ds1032_read_realTime(); //讀取此時(shí)時(shí)刻 Open(); //燈光控制 Write_3Value(0x40+2,Value1); //顯示人數(shù) if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //每0.5s讀取一次 { TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除定時(shí)器中斷 ADC_RegularChannelConfig(ADC1,ADC_Channel_9,1,ADC_SampleTime_7Cycles5);//選取通道和采樣周期 ADC_SoftwareStartConvCmd(ADC1,ENABLE); //使能指定的ADC的軟件轉(zhuǎn)換啟動(dòng)功能 dat=ADC_GetConversionValue(ADC1); //12位ADC的AD值為0-4095,0-2.2V的AD值則是0-2750平均分為10份 if(dat<150) Light=9; //根據(jù)采到的電壓值給定光線強(qiáng)度,電壓越高,光線強(qiáng)度越低,從最亮到最暗電壓約是0-2.2V,平均分10份 if((dat>=150)&(dat<400)) Light=8; if((dat>=400)&(dat<650)) Light=7; if((dat>=650)&(dat<900)) Light=6; if((dat>=900)&(dat<1150)) Light=5; if((dat>=1150)&(dat<1400)) Light=4; if((dat>=1400)&(dat<1650)) Light=3; if((dat>=1650)&(dat<1900)) Light=2; if((dat>=1900)&(dat<2150)) Light=1; if(dat>=2150) Light=0; if((Auto_flg==0)&(Value1>0)&(Timer==1)) //自動(dòng)模式下,處于定時(shí)時(shí)間內(nèi)并且有人,根據(jù)光線情況自動(dòng)調(diào)節(jié)亮度 { if(Light==9)pwm=0; if(Light==8)pwm=1; if(Light==7)pwm=2; if(Light==6)pwm=3; if(Light==5)pwm=4; if(Light==4)pwm=5; if(Light==3)pwm=6; if(Light==2)pwm=7; if(Light==1)pwm=8; if(Light==0)pwm=9; } if(((Auto_flg==0)&(Value1==0))|((Auto_flg==0)&(Timer==0))) //自動(dòng)模式下,沒(méi)人或不在定時(shí)時(shí)間內(nèi)燈不亮 pwm=0; Week_dispaly(0x80+2,Light);//顯示光線亮度等級(jí) Week_dispaly(0x80+4,pwm); //顯示亮度等級(jí) if((IN1_flag==1)|(OUT1_flag==1))//紅外對(duì)管有觸發(fā) {Miao++; if(Miao>=6) //0.5*6=3秒內(nèi)無(wú)觸發(fā)另一個(gè),全部清零 { Miao=0; OUT1_flag=0; //清零 IN1_flag=0; } } } } IWDG_Feed();//10秒喂狗一次 } }voidTIM2_IRQHandler(void)//0.5ms定時(shí)器中斷函數(shù)PWM調(diào)光{//判斷TIM2更新中斷是否發(fā)生if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){ TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除定時(shí)器中斷 PWM_Light();}}usart.h#ifndef__USART_H__#define__USART_H__#include"stm32f10x.h"#include"stm32f10x_usart.h"externintpwm; //脈寬參數(shù)#endif附錄3LCD602顯示程序模塊display.c#include"display.h"#include"GPIOLIKE51.h"#definersBIT_ADDR(GPIOC_ODR_Addr,13)#definerwBIT_ADDR(GPIOC_ODR_Addr,14)#defineeBIT_ADDR(GPIOC_ODR_Addr,15)uchartable3[]=""; //清屏內(nèi)容uchartable4[]="L:-|2000/00/00";uchartable5[]="C:000|00:00:000";//=============================================================================//文件名稱:GPIO_Configuration//功能概要:LCDGPIO初始化//參數(shù)說(shuō)明:無(wú)//函數(shù)返回:無(wú)//=============================================================================voidGPIO_Configuration_LCD(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能GPIOBAPB2外設(shè)時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //選中管腳0110,即GPIOB0 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //最高輸出50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出 GPIO_Init(GPIOC,&GPIO_InitStructure); //以上設(shè)結(jié)構(gòu)體置應(yīng)用到GPIOB RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOAAPB2外設(shè)時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//選中管腳 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //最高輸出50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出 GPIO_Init(GPIOA,&GPIO_InitStructure); //以上設(shè)結(jié)構(gòu)體置應(yīng)用到GPIOA}voiddelay_LCD(uintz) //延時(shí)函數(shù){ uintx,y; for(x=z;x>0;x--) for(y=500;y>0;y--);}voidwrite_com(ucharcom) //LCD1602寫指令函數(shù),根據(jù)數(shù)據(jù)手冊(cè)的時(shí)序{ rw=0; delay_LCD(5); rs=0; delay_LCD(5); e=1; delay_LCD(5);// GPIO_Write(GPIOA,com); //把指令賦給GPIO口 GPIOA->ODR=GPIOA->ODR&0xff00|com;//低八位 delay_LCD(5); e=0; delay_LCD(5); }voidwrite_date(uchardate) //LCD1602寫數(shù)據(jù)函數(shù),根據(jù)數(shù)據(jù)手冊(cè)的時(shí)序{ rw=0; delay_LCD(5); rs=1; delay_LCD(5); e=1; delay_LCD(5);// GPIO_Write(GPIOA,date); //把數(shù)據(jù)賦給P0口GPIOA->ODR=GPIOA->ODR&0xff00|date;//低八位 delay_LCD(5); e=0; delay_LCD(5); }voidLCD_Initinal(void) //LCD1602和定時(shí)器初始化函數(shù){ ucharnum; e=0; //時(shí)序表e初始為0 write_com(0x38); //設(shè)置為16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 write_com(0x0c); //設(shè)置光標(biāo) write_com(0x06); //光標(biāo)自動(dòng)加1,光標(biāo)輸入方式 write_com(0x01); //清屏 write_com(0x80); //設(shè)置初始顯示位置 for(num=0;num<16;num++) //顯示第一行內(nèi)容 { write_date(table4[num]); delay_LCD(5); } write_com(0x80+0x40); for(num=0;num<16;num++) //顯示第二行內(nèi)容 { write_date(table5[num]); delay_LCD(5); } }voidWrite_Value(ucharadd,chardate) //括號(hào)里:第一個(gè):參數(shù)的地址;第二個(gè):參數(shù)的內(nèi)容{ ucharshi,ge; shi=date/10; ge=date%10; write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge); }voidWrite_3Value(ucharadd,intdate) //括號(hào)里:第一個(gè):參數(shù)的地址;第二個(gè):參數(shù)的內(nèi)容{ ucharbai,shi,ge; bai=date/100; shi=date%100/10; ge=date%10; write_com(0x80+add); write_date(0x30+bai); write_date(0x30+shi); write_date(0x30+ge); }voidWeek_dispaly(ucharadd,chardat) //第一個(gè):參數(shù)的地址,第二個(gè):參數(shù)的內(nèi)容{ write_com(add); //要寫的地址 write_date(0x30+dat); //十位的內(nèi)容1602字符庫(kù)} voidLCD_Display_String(unsignedcharline,unsignedchar*string){ //液晶屏顯示內(nèi)容,把要顯示的內(nèi)容寫到對(duì)應(yīng)的位置 unsignedchari; unsignedcharaddress=0; if(line==1) { address=0x80; //0X80是第1行的第1個(gè)位置,0x81第2位 } elseif(line==2) {address=0x80+0x40; //0X80+0x40是第2行的第1個(gè)位置,0X80+0x40+1是第2行第2位 } for(i=0;i<16;i++) { write_com(address); write_date(string[i]); address++; }}voidLCD_Display_PhoneNumber(unsignedcharline,unsignedchar*string){ //液晶屏顯示內(nèi)容,把要顯示的內(nèi)容寫到對(duì)應(yīng)的位置 unsignedchari; unsignedcharaddress=0; if(line==1) { address=0x80+2; //0X80是第1行的第1個(gè)位置,0x81第2位 } elseif(line==2) {address=0x80+0x40+2; //0X80+0x40是第2行的第1個(gè)位置,0X80+0x40+1是第2行第2位 } for(i=0;i<11;i++) { write_com(address); write_date(string[i]); address++; }}display.h#ifndef__DISPLY_H__#define__DISPLA_H__#include"stm32f10x.h"#defineucharunsignedchar#defineuintunsignedintexternvoidGPIO_Configuration_LCD(void);externvoiddelay(uintz);externvoidwrite_com(ucharcom);externvoidwrite_date(uchardate);externvoidLCD_Initinal(void);externvoidWrite_Value(ucharadd,chardate);externvoidLCD_Display_String(unsignedcharline,unsignedchar*string);externvoidWeek_dispaly(ucharadd,chardat);externvoidWrite_3Value(ucharadd,intdate);#endif附錄4按鍵電路程序模塊key.c#include"key.h"#include"GPIOLIKE51.h"#include"display.h"#include"ADC.h"#include"ds1302.h"#include"usart.h"#defineSELT GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)#defineENTER GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)#defineUP GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)#defineDOWN GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)#defineMODE GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)//切換按鍵接口#defineSWITCH GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)//手動(dòng)開(kāi)關(guān)#defineLAMP1BIT_ADDR(GPIOB_ODR_Addr,6)//照明燈接口#defineLAMP2BIT_ADDR(GPIOB_ODR_Addr,7)//照明燈接口#defineLAMP3BIT_ADDR(GPIOB_ODR_Addr,8)//照明燈接口#defineLAMP4BIT_ADDR(GPIOB_ODR_Addr,9)//照明燈接口#defineAUTO_LEDBIT_ADDR(GPIOB_ODR_Addr,5) //自動(dòng)模式燈接口#defineHAND_LEDBIT_ADDR(GPIOB_ODR_Addr,4)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論