基于嵌入式的智能窗簾控制系統(tǒng)設(shè)計(定 稿)_第1頁
基于嵌入式的智能窗簾控制系統(tǒng)設(shè)計(定 稿)_第2頁
基于嵌入式的智能窗簾控制系統(tǒng)設(shè)計(定 稿)_第3頁
基于嵌入式的智能窗簾控制系統(tǒng)設(shè)計(定 稿)_第4頁
基于嵌入式的智能窗簾控制系統(tǒng)設(shè)計(定 稿)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

.2系統(tǒng)整體方案設(shè)計2.2.1系統(tǒng)設(shè)計原則智能窗簾控制系統(tǒng)構(gòu)成了智能家居體系的關(guān)鍵環(huán)節(jié),它主要負(fù)責(zé)對家居設(shè)備的集中管理,通過整合各種設(shè)施,創(chuàng)造出一個環(huán)保、高效且宜人的居住空間。在設(shè)計智能家居控制系統(tǒng)時,應(yīng)當(dāng)遵循一系列核心原則。其系統(tǒng)應(yīng)以提供實(shí)用、便捷、舒適且高效的家居體驗(yàn)為核心。在設(shè)計上,我們應(yīng)著重于產(chǎn)品的實(shí)用性、易用性和人性化,避免追求華而不實(shí)的功能,確保每一項功能都能切實(shí)滿足用戶的實(shí)際需求。鑒于系統(tǒng)需要全天候運(yùn)行,其安全性、穩(wěn)定性和容錯機(jī)制至關(guān)重要。各子系統(tǒng)需設(shè)計相應(yīng)的容錯方案,確保在各種復(fù)雜環(huán)境下均能穩(wěn)定運(yùn)行,為用戶提供安全可靠的家居環(huán)境。在智能家居控制系統(tǒng)的設(shè)計中,我們還應(yīng)充分考慮經(jīng)濟(jì)成本。各設(shè)備節(jié)點(diǎn)在保障功能完備的同時,應(yīng)致力于節(jié)能降耗和成本控制,為用戶打造一個綠色、環(huán)保的家居空間。此外,設(shè)計方案需嚴(yán)格遵循國家和地區(qū)的相關(guān)標(biāo)準(zhǔn),確保系統(tǒng)的兼容性和互聯(lián)性,為未來的擴(kuò)充和擴(kuò)展提供便利,從而滿足不斷變化的智能家居需求。隨著家居環(huán)境的日益復(fù)雜和智能設(shè)備的不斷增加,智能家居控制系統(tǒng)應(yīng)具備良好的擴(kuò)展性,以適應(yīng)未來可能出現(xiàn)的新需求和技術(shù)變革。鑒于家居環(huán)境的多樣性和智能設(shè)備數(shù)量的不斷增長,智能家居控制系統(tǒng)需具備出色的功能擴(kuò)展能力。使得系統(tǒng)能夠靈活應(yīng)對未來可能出現(xiàn)的各種新需求和技術(shù)變革,為家居生活的智能化和舒適化提供有力保障。2.2.2系統(tǒng)整體框架結(jié)構(gòu)本文基于嵌入式ARM設(shè)計了智能窗簾控制系統(tǒng),包含ARM主控制器、紅外接收、語音識別、光照檢測、雨滴檢測、顯示屏等模塊,遵循相關(guān)標(biāo)準(zhǔn),確保兼容性和擴(kuò)展性,滿足智能家居需求。系統(tǒng)總體框圖如圖2-1所示。圖2-1智能窗簾控制系統(tǒng)框圖2.3紅外遙控技術(shù)紅外遙控接收技術(shù)REF_Ref25\r\h[4]是一種點(diǎn)對點(diǎn)的遙控通信技術(shù),利用紅外線實(shí)現(xiàn)遠(yuǎn)程控制。紅外接收裝置的核心組成包括紅外二極管和三極管等部件,它們的作用是把遙控器發(fā)出的紅外信號轉(zhuǎn)化成電信號,并由后續(xù)的放大器進(jìn)行處理。當(dāng)這些裝置接收到遙控器發(fā)出的經(jīng)過調(diào)制的信號后,會對這些信號進(jìn)行放大和解調(diào),轉(zhuǎn)換成原始的編碼信息。之后,編碼器將對這些信息進(jìn)行解碼,控制電路根據(jù)解碼后的指令來激活相應(yīng)的操作,以此完成遠(yuǎn)距離的設(shè)備操控簡單來說,紅外遙控技術(shù)通過特定電路元件將光信號轉(zhuǎn)為電信號,來實(shí)現(xiàn)無線控制功能。紅外接收頭是紅外遙控接收技術(shù)的核心組件,其設(shè)計簡潔,僅包含電源正、電源負(fù)和信號輸出三個引腳。內(nèi)部集成了多種電路,如接收二極管、放大器等,能夠高效地將紅外遙控器發(fā)出的信號轉(zhuǎn)化為電信號,進(jìn)而實(shí)現(xiàn)對設(shè)備的精確控制。紅外遙控接收技術(shù)無需特定頻率許可,因?yàn)槠涔牡?,體積小,非常適合家庭和辦公室環(huán)境使用。具有較強(qiáng)的抗干擾性以及準(zhǔn)確性,且成本相對較低。然而,該技術(shù)也存在一些局限性,如傳輸距離有限、對方向性要求較高,以及容易受到阻擋物的影響。此外,紅外線LED的耐用性也是其需要改進(jìn)的一個方面??傮w而言,紅外遙控接收技術(shù)以其簡單、可靠和經(jīng)濟(jì)的特點(diǎn),在電子設(shè)備遙控領(lǐng)域得到了廣泛應(yīng)用。2.4智能語音識別技術(shù)智能語音識別REF_Ref750\r\h[5]技術(shù)是通過機(jī)器的識別將語音信號轉(zhuǎn)化為相應(yīng)文本或操作指令的技術(shù)。它融合了數(shù)字信號處理、聲學(xué)、語音學(xué)、計算機(jī)科學(xué)、心理學(xué)和人工智能等多個學(xué)科領(lǐng)域的知識,展現(xiàn)出強(qiáng)大的交叉科學(xué)特性。智能語音識別的技術(shù)原理可以看作是一個搜索過程,即給定輸入特征X的情況下,搜索出最有可能的詞序列W。智能語音識別技術(shù)通常涉及幾個關(guān)鍵步驟。首先是預(yù)處理,這一步主要對輸入的原始聲音信號進(jìn)行清理,比如去除背景噪音,并確定語音信號的開始和結(jié)束點(diǎn)。接下來是特征提取,這個過程將聲音信號從時域轉(zhuǎn)換為頻域,并提煉出能夠代表信號特性的關(guān)鍵參數(shù)。隨后是模式匹配,即把提取的特征參數(shù)與聲學(xué)模型庫中的模型進(jìn)行對比,尋找最匹配的模型。最后,語言處理階段會對匹配結(jié)果進(jìn)行深入的語義分析和文本轉(zhuǎn)換,從而得出最終的識別結(jié)果。這些步驟共同確保了智能語音識別技術(shù)的準(zhǔn)確性和有效性。智能語音識別技術(shù)的應(yīng)用非常廣泛,包括語音聽寫、語音翻譯、社交媒體監(jiān)聽、聊天自動更正、語言翻譯、社交媒體監(jiān)視、聊天自動更正、語言學(xué)習(xí)、聽寫、自動客戶服務(wù)、智能家居控制等多個領(lǐng)域。隨著人工智能的發(fā)展,語音識別技術(shù)將會越來越成熟和普及,為人們的生活帶來更多的便利和智能化體驗(yàn)。2.5本章小結(jié)本文介紹了智能窗簾控制系統(tǒng)的設(shè)計要求與指標(biāo),以及整體方案設(shè)計。該系統(tǒng)旨在通過集成雨滴傳感器、光敏傳感器、紅外接收模塊、交互顯示模塊和步進(jìn)電機(jī)模塊等組件,實(shí)現(xiàn)窗簾的智能化控制,以構(gòu)建綠色、高效、舒適的生活居住環(huán)境。在系統(tǒng)設(shè)計要求方面,強(qiáng)調(diào)了實(shí)用便利、安全可靠、節(jié)約能源和降低成本、標(biāo)準(zhǔn)化以及可擴(kuò)展性等原則。這些原則確保了系統(tǒng)的實(shí)用性和可靠性,同時考慮了經(jīng)濟(jì)成本和未來擴(kuò)展的需求。系統(tǒng)整體方案設(shè)計包括ARM主控制器、紅外接收模塊、語音識別模塊、光照檢測模塊、雨滴檢測模塊、顯示屏模塊等組件。這些組件共同協(xié)作,實(shí)現(xiàn)了對窗簾的智能控制。此外,文章還介紹了紅外遙控技術(shù)和智能語音識別技術(shù)在系統(tǒng)中的應(yīng)用。紅外遙控技術(shù)通過接收紅外信號實(shí)現(xiàn)對設(shè)備的遠(yuǎn)程控制,具有簡單、可靠、成本低等優(yōu)點(diǎn)。而智能語音識別技術(shù)則將語音信號轉(zhuǎn)換為文本或命令,為系統(tǒng)提供了更加智能化的交互方式。然而,盡管智能語音識別技術(shù)取得了很大進(jìn)展,但在實(shí)際應(yīng)用中仍需不斷改進(jìn)和優(yōu)化,以適應(yīng)不同方言、口音和噪音環(huán)境等挑戰(zhàn)??偟膩碚f,本文介紹的智能窗簾控制系統(tǒng)通過集成多種傳感器和模塊,實(shí)現(xiàn)了窗簾的智能化控制,為家居智能化提供了重要支撐。同時,該系統(tǒng)遵循了實(shí)用便利、安全可靠等設(shè)計原則,確保了系統(tǒng)的實(shí)用性和可靠性。

系統(tǒng)硬件方案設(shè)計智能家居控制系統(tǒng)的硬件層是實(shí)現(xiàn)整個系統(tǒng)功能的基石,它負(fù)責(zé)采集和處理各種輸入信號,執(zhí)行控制命令,并與系統(tǒng)中的其他組件進(jìn)行通信。一個完善的硬件設(shè)計能夠確保系統(tǒng)的穩(wěn)定性、可靠性和高效性。3.1系統(tǒng)硬件開發(fā)環(huán)境3.1.1嘉立創(chuàng)EDA簡介嘉立創(chuàng)EDA是一款應(yīng)用于PCB(即印刷電路板)領(lǐng)域的國產(chǎn)EDA工具,擁有自主知識產(chǎn)權(quán),且承諾向用戶免費(fèi),并共享多個器件模型。這款軟件依托于嘉立創(chuàng)集團(tuán)的元器件商城及PCB智造,為消費(fèi)者提供電子全產(chǎn)業(yè)鏈一站式服務(wù)。嘉立創(chuàng)EDA不僅縮短了PCB制作工藝,也較大壓縮了生產(chǎn)成本,讓國內(nèi)用戶和企業(yè)擺脫了使用盜版軟件的法律風(fēng)險,實(shí)現(xiàn)了PCB設(shè)計軟件的自主可控。因此,它深受國內(nèi)電子工程師、教育者、學(xué)生、電子制造商和愛好者的歡迎。在電子設(shè)計制造行業(yè),EDA(電子設(shè)計自動化)是利用計算機(jī)輔助來完成電子產(chǎn)品的設(shè)計、制造的綜合型工業(yè)軟件。盡管EDA市場規(guī)模不大,但它卻是電子行業(yè)上游的基礎(chǔ)工具。使用嘉立創(chuàng)EDA設(shè)計PCB的簡易流程可以概括為以下幾個步驟:原理圖參數(shù)設(shè)置:在開始設(shè)計之前,需要在原理圖編輯界面設(shè)置圖紙規(guī)格和原理圖系統(tǒng)編輯器的系統(tǒng)參數(shù),以確保原理圖的準(zhǔn)確性和一致性。繪制原理圖:將所需的元器件、導(dǎo)線和其他相關(guān)圖件,放置并連接以繪制出完整的電路原理圖。這一步驟是電路設(shè)計的基礎(chǔ),需要仔細(xì)考慮每個元件的連接和布局。生成PCB并進(jìn)行DRC檢查:完成原理圖繪制后,使用嘉立創(chuàng)EDA的功能將原理圖轉(zhuǎn)換為PCB布局。在此過程中,軟件會進(jìn)行DRC(DesignRuleCheck,設(shè)計規(guī)則檢查)以確保布局符合基本的電氣和物理規(guī)則。一旦檢查通過,軟件將自動切換到PCB繪制界面。PCB布局:在PCB繪制界面進(jìn)行布局時,應(yīng)遵循一些原則,比如“先大后小”的布局策略。這種策略有助于優(yōu)化PCB的空間利用、減少布線難度,并提高整體的可制造性和可靠性。這些大型元器件往往占據(jù)較多的空間,并且可能具有特定的放置要求(如方向、位置等)。通過優(yōu)先放置這些大型元器件,可以確保它們被正確地放置在PCB上,并且有足夠的空間進(jìn)行布線。連接器通常放置在PCB的邊緣,便于與外部設(shè)備連接。PCB布線:完成布局后,開始進(jìn)行PCB布線。布線時需要根據(jù)顯示的網(wǎng)絡(luò)飛線進(jìn)行,確保每條線路都正確連接。在此過程中,需要特別注意線寬的設(shè)置,以確保電流能夠順暢通過并滿足設(shè)計要求。再次進(jìn)行DRC檢查并存檔:完成布線后,再次進(jìn)行DRC檢查以確保PCB設(shè)計滿足所有規(guī)則和要求。檢查通過后,就可以將PCB文件存檔并準(zhǔn)備制板。這個流程提供了一個基本的框架,幫助設(shè)計師有序地進(jìn)行PCB設(shè)計。在實(shí)際操作中,可能還需要根據(jù)具體需求和設(shè)計復(fù)雜度進(jìn)行適當(dāng)?shù)恼{(diào)整和優(yōu)化。3.2主控制器模塊設(shè)計GD32F470ZGT6是一款32位通用微控制器REF_Ref2765\r\h[6](MCU),其核心采用了Arm的Cortex-M4架構(gòu)。這款內(nèi)核的特色在于內(nèi)置了浮點(diǎn)運(yùn)算器(FPU),這一設(shè)計顯著提升了單精度浮點(diǎn)運(yùn)算的效率。同時,它還全面支持ARM的單精度指令和數(shù)據(jù)類型,為復(fù)雜計算提供了強(qiáng)大的支持。在資源特性方面,GD32F470ZGT6提供了豐富的外設(shè)資源。在性能參數(shù)方面,GD32F470ZGT6的最大工作頻率可以達(dá)到240MHz,具有1024K的Flash存儲和512K的SRAM。它支持多達(dá)114個I/O,以及多個GPTM(通用定時器)和AdvancedTM(高級定時器)。GD32F470ZGT6系統(tǒng)板如圖3-1所示。圖3-1GD32F470ZGT6系統(tǒng)板總的來說,GD32F470ZGT6是一款功能強(qiáng)大、資源豐富、性能優(yōu)越的32位通用微控制器,適用于各種需要高性能控制和信號處理的應(yīng)用場景。通過對整個智能窗簾控制系統(tǒng)的分析,將硬件系統(tǒng)分為若干個模塊。其中主控制器模塊是硬件系統(tǒng)的大腦,負(fù)責(zé)數(shù)據(jù)處理和數(shù)據(jù)傳輸。此處我們使用以GD32F470ZGT6為主控的最小系統(tǒng)板。在拓展版上放置兩列2*20pin的排母,將需要用到的ADC、UART、SPI及GPIO數(shù)據(jù)引腳連接,可見圖3-2。圖3-2系統(tǒng)板接口原理圖3.3環(huán)境檢測模塊設(shè)計3.3.1雨滴檢測原理雨滴傳感器常見的工作原理是通過檢測水滴的導(dǎo)電性來判斷是否下雨。它是利用兩個電極之間的電導(dǎo)性變化來測量水滴的存在。這兩個電極之間會有一個空氣間隙,正常狀態(tài)下是斷路狀態(tài)。當(dāng)水滴接觸到電極上時,水滴的導(dǎo)電性會導(dǎo)致電流通過水滴形成電流回路,從而改變電極之間的電阻值。雨滴傳感器模塊實(shí)物圖見圖3-3所示。圖3-3雨滴傳感器模塊實(shí)物圖通過檢測電阻值的變化,我們能夠判斷是否有水滴存在。當(dāng)雨滴傳感器接通電源,其電阻的改變會導(dǎo)致電壓產(chǎn)生相應(yīng)變化。在這種情境下,我們可以將雨滴傳感器視作一個開關(guān)。若沒有雨滴接觸,傳感器不會因水滴導(dǎo)致短路,因此它處于斷開狀態(tài)。簡而言之,雨滴傳感器通過電阻變化來指示水滴的存在,無水滴時則表現(xiàn)為斷開狀態(tài)。當(dāng)有雨滴時,雨滴傳感器因?yàn)橛甑螌?dǎo)電,導(dǎo)致兩個電極短路,相當(dāng)于按鍵按下。因此我們可以測量雨滴傳感器的電壓變化就可以知道是否有雨滴。我們需要給雨滴傳感器的一極接正,一極接負(fù),才可以產(chǎn)生回路測量電壓變化。但是當(dāng)傳感器的雨滴過多時會導(dǎo)致兩極徹底短路。為了防止雨滴傳感器徹底短路,需要增加一個電阻R1作為負(fù)載,防止3.3V直接接入GND,形成電源短路。其接口電路圖如圖3-4所示。圖3-4雨滴傳感器接口電路3.3.2光照檢測原理擴(kuò)展板的光照檢測功能是通過光敏電阻進(jìn)行識別。當(dāng)受到光照時,光敏電阻中的材料吸收光子能量,使得內(nèi)部的電子狀態(tài)發(fā)生改變,進(jìn)而引發(fā)電阻值的降低。這一過程是動態(tài)的,隨著光照強(qiáng)度的變化,電阻值也會相應(yīng)調(diào)整。市場上用于檢測光照的模塊中,光敏電阻作為檢測光照的主要器件,其原理圖和工作機(jī)制如你所述。在原理圖中,U2.1是一個關(guān)鍵的電壓比較器,它根據(jù)輸入端(2腳和3腳)的電壓大小來決定輸出端(1腳)的電平狀態(tài)。當(dāng)光照強(qiáng)度變化時,光敏電阻R3的阻值會相應(yīng)調(diào)整。具體來說,當(dāng)周圍環(huán)境很亮?xí)r,光敏電阻R3的阻值變小,這會導(dǎo)致AO點(diǎn)的電壓降低。相反,當(dāng)周圍環(huán)境很暗時,R3的阻值變大,AO點(diǎn)的電壓則會升高。電壓比較器U2.1則根據(jù)AO點(diǎn)的電壓與R4滑動電阻設(shè)定的參考電壓進(jìn)行比較。如果AO點(diǎn)的電壓低于參考電壓(即2腳電壓小于3腳電壓),則比較器輸出高電平;反之,則輸出低電平。通過調(diào)整R4滑動電阻的阻值,可以改變參考電壓的大小,從而調(diào)整DO輸出(即整個模塊的靈敏度)。這使得光敏電阻模塊能夠適應(yīng)不同的光照環(huán)境和應(yīng)用需求,實(shí)現(xiàn)精確的光照檢測。其模塊實(shí)物圖和原理圖如圖3-5、圖3-6所示。圖3-5光照檢測模塊實(shí)物圖圖3-6光照檢測模塊電路原理圖此處將模塊原理圖簡化,直接使用一個分壓電阻加上一個光敏電阻即可。我們擴(kuò)展板直接檢測的是光敏電阻的電壓變化,其電路見模塊原理圖圖3-7所示。圖3-7光照檢測電路3.4步進(jìn)電機(jī)驅(qū)動模塊設(shè)計3.4.1步進(jìn)電機(jī)介紹步進(jìn)電機(jī)REF_Ref4185\r\h[7]作為一種工業(yè)控制用的特種電機(jī),以其無累計誤差(精度高達(dá)100%)的特性,廣泛應(yīng)用于各種開環(huán)控制系統(tǒng)中。此外,步進(jìn)電機(jī)還因其出色的精確控制和定位能力,被廣泛應(yīng)用于各種需要精確操作的場合,比如打印機(jī)、掃描儀、相機(jī)、機(jī)器人以及航空航天等領(lǐng)域。步進(jìn)電機(jī)的分類方法有多種,每種類型的步進(jìn)電機(jī)都有其獨(dú)特的特點(diǎn)和應(yīng)用領(lǐng)域。總的來說,步進(jìn)電機(jī)是一種功能強(qiáng)大、易于控制的電機(jī),它的精確度高、可靠性好、使用壽命長,使得它在各種需要精確控制和定位的場合中得到廣泛應(yīng)用。本設(shè)計使用的是28BYJ-48型步進(jìn)電機(jī),該電機(jī)的工作電壓通常為5VDC,并且具有足夠的轉(zhuǎn)矩。每個相位由兩個線圈組成,總共有八個線,可以通過ULN2003驅(qū)動模塊進(jìn)行控制的四相步進(jìn)電機(jī)。28BYJ-48型步進(jìn)電機(jī)是四相八拍,外徑28毫米,永磁減速。其工作電壓為5VDC,轉(zhuǎn)矩充足,每相含兩線圈,共八線,可由ULN2003驅(qū)動。步距角為5.625度/步,精確控制,適用于打印機(jī)、掃描儀、相機(jī)、機(jī)器人及航空航天等領(lǐng)域。此外,28BYJ-48步進(jìn)電機(jī)還具有安全保護(hù)功能,可以防止過載和過熱,并且具有防水、防塵和防沖擊的能力,使用起來更加可靠和安全。同時,它的轉(zhuǎn)速和轉(zhuǎn)矩通常取決于驅(qū)動電壓和驅(qū)動脈沖信號頻率,因此可以根據(jù)不同的需求進(jìn)行調(diào)節(jié)。3.4.2ULN2003驅(qū)動介紹ULN2003是一款集成了高電壓、高電流能力的達(dá)林頓晶體管陣列的集成電路,能夠驅(qū)動電機(jī)、繼電器等,它常被選作步進(jìn)電機(jī)的驅(qū)動器。這款集成電路的核心在于其七個NPN達(dá)林頓管,這使得它具備了強(qiáng)大的電流驅(qū)動能力,每個通道都能提供高達(dá)500mA的輸出電流。除此之外,ULN2003的另一亮點(diǎn)在于其內(nèi)部集成了續(xù)流二極管,這一設(shè)計巧妙地避免了反向電動勢對電機(jī)和驅(qū)動電路可能造成的損害,從而確保了整個系統(tǒng)的穩(wěn)定性和安全性。ULN2003作為步進(jìn)電機(jī)驅(qū)動器,能夠?qū)⒖刂菩盘栟D(zhuǎn)換為電機(jī)所需的驅(qū)動電流和方向信號,實(shí)現(xiàn)對步進(jìn)電機(jī)旋轉(zhuǎn)的精確控制。其高電壓、高電流能力確保電機(jī)穩(wěn)定運(yùn)行,簡化了電路設(shè)計。此外,ULN2003的結(jié)構(gòu)緊湊,占用的面積小,可以放置在小型電路板上,使得它在工業(yè)自動化、智能家居、移動機(jī)器人、3D打印機(jī)等領(lǐng)域得到廣泛應(yīng)用,其引腳圖如圖3-8所示。圖3-8ULN2003引腳結(jié)構(gòu)圖ULN2003的引腳功能:1腳至7腳為CPU脈沖輸入端,端口對應(yīng)一個信號輸出端;8號引腳接地;引腳9是內(nèi)部7個續(xù)流二極管的公共負(fù)極端。當(dāng)該引腳連接至感性負(fù)載的電源正極時,這些續(xù)流二極管能夠發(fā)揮續(xù)流作用,有效保護(hù)電路免受反向電動勢的損害。引腳9接地時,則達(dá)林頓管的集電極直接接地,實(shí)現(xiàn)電路連接。引腳10至16均為脈沖信號輸出端,分別對應(yīng)引腳7至1的信號輸入端??刂茖?yīng)的輸出端輸出脈沖信號,實(shí)現(xiàn)對步進(jìn)電機(jī)或其他設(shè)備的精確控制。根據(jù)上面的原理,ULN2003的驅(qū)動應(yīng)用電路的基本示例圖如圖3-9所示。圖3-9ULN2003驅(qū)動應(yīng)用電路示例ULN2003作為步進(jìn)電機(jī)驅(qū)動器,其對于超過2.5V的電平信號即可視為高電平。因此,3.3V單片機(jī)的IO口高電平輸出可直接用于ULN2003的控制輸入,實(shí)現(xiàn)步進(jìn)電機(jī)的精確控制。在應(yīng)用中需注意電壓匹配和穩(wěn)定性,確保電機(jī)穩(wěn)定運(yùn)行。除了通過CN1步進(jìn)電機(jī)接口輸出外,另外還將其余3個引腳分別引出至蜂鳴器、直流電機(jī)與繼電器,方便后期增加其他附屬功能。其電路原理圖見圖3-10所示。圖3-10ULN2003驅(qū)動模塊原理圖3.5語音識別模塊設(shè)計3.5.1語音模塊介紹HLK-V20是海凌科電子專為純離線控制場景和產(chǎn)品設(shè)計的語音識別模塊,其高性能和廣泛的適用性使其成為智能家居、小家電、醫(yī)療、物聯(lián)網(wǎng)、汽車、安防及照明等領(lǐng)域的理想選擇。該模塊為需語音操控的產(chǎn)品提供了強(qiáng)大支持,展現(xiàn)出其在多領(lǐng)域的廣闊應(yīng)用前景。值得一提的是,HLK-V20具備出色的離線識別能力,可支持150條本地指令的識別,而且用戶還能根據(jù)自己的需求自由定制喚醒詞、命令詞以及應(yīng)答播報詞,展現(xiàn)出極高的靈活性。此外,該模塊還配備了豐富的外圍接口,使得連接和集成變得更加簡單和方便。圖3-11展示了HLK-V20的實(shí)物圖,直觀地展現(xiàn)了其外觀和特性。圖3-11HLKV20實(shí)物圖3.5.2語音識別模塊硬件設(shè)計語音識別模塊是可以由我們自由設(shè)計命令詞的,可以通過在線配置平臺進(jìn)行配置。配置完成之后會生成一個語音識別固件,我們要將固件下載到模塊里,通過模塊的B6,B7引腳進(jìn)行下載。所以下方通過排針的方式引出了B6,B7引腳方便我們下載。還需要注意的是,在下載固件時,要先將模塊斷電。待下載工具識別到模塊之后,再給模塊通電,才可以正常下載。這個通斷電操作,由原理圖圖3-12中的SW1開關(guān)進(jìn)行控制。圖3-12語音識別模塊原理圖3.6紅外接收模塊設(shè)計3.6.1紅外協(xié)議介紹紅外協(xié)議是一種簡便且成本較低的無線數(shù)據(jù)傳輸技術(shù),其核心在于利用近紅外線來傳遞信號。這種協(xié)議擺脫了實(shí)體連線的束縛,使得它在小型移動設(shè)備間的數(shù)據(jù)交換以及電器設(shè)備的遠(yuǎn)程控制上得到了廣泛應(yīng)用。具體來說,無論是筆記本電腦、個人數(shù)字助理(PDA)還是移動電話,都可以利用紅外協(xié)議輕松實(shí)現(xiàn)數(shù)據(jù)交換。同時,電視機(jī)、空調(diào)器等家電設(shè)備也可以通過紅外協(xié)議實(shí)現(xiàn)便捷的遙控操作。紅外通信協(xié)議的數(shù)據(jù)傳輸基于脈沖寬度調(diào)制(PWM)或代表0和1的數(shù)字編碼。一般來說,紅外通信協(xié)議將脈沖寬度調(diào)制波形分為多個時間窗口,每個時間窗口表示一個數(shù)字或一個數(shù)據(jù)包。發(fā)送端通過改變每個時間窗口的脈沖寬度來傳輸數(shù)據(jù),接收端則根據(jù)時間窗口的脈沖寬度解碼數(shù)據(jù)。校驗(yàn)和用于檢測和糾正傳輸中的錯誤,而重復(fù)傳輸機(jī)制則可以提高數(shù)據(jù)傳輸成功率。常見的紅外協(xié)議有ITT、NEC、NRC17(Nokia)、Sharp和PhilipsRC-5等。每種協(xié)議都有其特定的應(yīng)用領(lǐng)域和使用場景。3.6.2紅外通信原理紅外通信REF_Ref4940\r\h[8]是一種利用近紅外光進(jìn)行信息傳輸?shù)耐ㄐ欧绞?。在發(fā)送端,單片機(jī)將二進(jìn)制信號編碼成特定的脈沖串,并通過紅外發(fā)射管發(fā)出這些脈沖。而在接收端,一體化紅外接收頭負(fù)責(zé)捕獲這些信號,經(jīng)過放大、檢波和整形處理后,轉(zhuǎn)化為TTL電平的編碼信號。這些信號再由單片機(jī)解碼,從而實(shí)現(xiàn)對相關(guān)設(shè)備的控制。紅外通信的數(shù)據(jù)傳輸主要依賴于PWM(脈沖寬度調(diào)制)或PPM(脈沖位置調(diào)制)技術(shù)。通過改變脈沖的寬度或位置,可以傳輸不同的數(shù)據(jù)。接收端則根據(jù)這些脈沖的特征來解碼數(shù)據(jù),實(shí)現(xiàn)信息的準(zhǔn)確傳遞。紅外通信協(xié)議具有清晰的層次結(jié)構(gòu),包括物理層、數(shù)據(jù)鏈路層和應(yīng)用層。物理層主要關(guān)注紅外信號的傳輸和接收機(jī)制,確保信號的穩(wěn)定性和可靠性。數(shù)據(jù)鏈路層則負(fù)責(zé)數(shù)據(jù)的幀結(jié)構(gòu)、錯誤檢測以及流量控制,保證數(shù)據(jù)在傳輸過程中的完整性和效率。而應(yīng)用層則更側(cè)重于具體的數(shù)據(jù)傳輸和應(yīng)用實(shí)現(xiàn),滿足各種設(shè)備和場景的需求。但紅外通信的傳輸距離和方向性有一定限制,且容易受到環(huán)境干擾和遮擋物的影響。因此,在實(shí)際應(yīng)用中需要充分考慮這些因素,以確保紅外通信的穩(wěn)定性和可靠性。此外,不同的紅外通信協(xié)議可能具有不同的特點(diǎn)和應(yīng)用場景。例如,ITT協(xié)議適用于傳輸速度較慢、數(shù)據(jù)量較小的場景;而NEC協(xié)議REF_Ref5805\r\h[9]則具有較高的傳輸速度和較強(qiáng)的抗干擾能力,適用于較為復(fù)雜的通信環(huán)境。因此,在選擇紅外通信協(xié)議時需要根據(jù)具體的應(yīng)用需求和場景來進(jìn)行選擇。本設(shè)計我們使用NEC協(xié)議,當(dāng)紅外線接收頭感應(yīng)到有紅外光引腳就輸出低電平,沒有感應(yīng)到紅外光就輸出高電平。所以,我們只要檢測OUT端,是否輸出低電平,就可以知道是否有接收到紅外數(shù)據(jù)。這里選擇接入PF7,沒有什么特殊要求,使用普通的GPIO即可,紅外接收電路見圖3-13所示。圖3-13紅外接收電路原理圖3.7oled顯示模塊電路設(shè)計本設(shè)計采用的是7針的0.96寸OLED顯示進(jìn)行講解,采用的是SPI協(xié)議,速度會比采用I2C協(xié)議的更快,但這兩者的顯示驅(qū)動都一樣,本質(zhì)上沒有太大差別。屏幕整體分辨率為128*64,驅(qū)動芯片為SSD1306,下面是其引腳功能介紹,如表3-1所示。表3-1oled屏引腳功能名稱注釋GND接地VCC3.3-5vD0SPI中的時鐘管腳——SCKD1SPI中的數(shù)據(jù)管腳——MOSIRES復(fù)位引腳(低電平有效)DC數(shù)據(jù)/命令控制腳CS片選引腳3.8本章小結(jié)在本章中,我們首先詳細(xì)闡述了系統(tǒng)整體的硬件設(shè)計開發(fā)環(huán)境,并成功設(shè)計了一個基于嵌入式的智能窗簾控制系統(tǒng)。以GD32F470ZGT6作為核心主控制器,包括環(huán)境檢測模塊、步進(jìn)電機(jī)驅(qū)動模塊、語音識別模塊、紅外接收模塊以及OLED顯示模塊。我們深入介紹了這些模塊的硬件電路設(shè)計細(xì)節(jié)以及它們各自的工作原理,從而構(gòu)建了一個功能全面、性能穩(wěn)定的智能窗簾控制系統(tǒng)。

系統(tǒng)軟件方案設(shè)計硬件構(gòu)成了系統(tǒng)的物質(zhì)基礎(chǔ),為系統(tǒng)的運(yùn)行提供了必要的支撐;而軟件則賦予了系統(tǒng)以“靈魂”,通過精心的設(shè)計和編程,使得硬件能夠按照預(yù)定的方式運(yùn)行,實(shí)現(xiàn)各種復(fù)雜的功能。只有將這兩者緊密結(jié)合,系統(tǒng)才能發(fā)揮出其應(yīng)有的作用和效能。通過將系統(tǒng)劃分為不同的功能模塊,如主程序、語音識別程序、環(huán)境檢測程序、步進(jìn)電機(jī)驅(qū)動程序、顯示模塊程序以及各終端程序等,使得每個模塊都具有明確的功能和職責(zé),降低了軟件設(shè)計的復(fù)雜性,提高了軟件的可維護(hù)性和可擴(kuò)展性。4.1系統(tǒng)軟件開發(fā)環(huán)境在系統(tǒng)軟件的開發(fā)過程中,需使用對應(yīng)的開發(fā)環(huán)境,本系統(tǒng)的軟件開發(fā)環(huán)境為主要為KeiluVision5,因語音識別模塊需要與主控制器進(jìn)行通信,故語音識別固件部分使用海凌科官方在線版語音識別定制系統(tǒng)進(jìn)行個人定制開發(fā)。4.1.1KeiluVision5簡介KeiluVision5,作為Keil公司推出的集成開發(fā)環(huán)境(IDE),專為嵌入式系統(tǒng)開發(fā)者所設(shè)計,是一款功能強(qiáng)大且廣泛應(yīng)用的開發(fā)工具。它以其卓越的性能和豐富的特性,在嵌入式系統(tǒng)開發(fā)領(lǐng)域占據(jù)了重要的地位。它支持多種編程語言,包括C語言、C++語言和匯編語言等。該軟件專為嵌入式系統(tǒng)開發(fā)者設(shè)計,特別是那些基于ARM架構(gòu)的系統(tǒng)。它集成了功能強(qiáng)大的源代碼編輯器、編譯器、調(diào)試器和仿真器等工具,可以支持多種ARM微控制器,包括Cortex-M、ARM7和ARM9等器件,涵蓋了眾多品牌的芯片。GD32F470ZGT6是一款基于ArmCortex-M4內(nèi)核REF_Ref6452\r\h[10]的MCU,因此選擇KeiluVision5作為開發(fā)軟件是合適的。這款開發(fā)環(huán)境集成了代碼編寫、編譯、仿真和調(diào)試等功能,提供豐富的庫函數(shù)和調(diào)試工具,幫助開發(fā)者高效開發(fā)嵌入式應(yīng)用。在調(diào)試中,可以設(shè)置斷點(diǎn),精確定位錯誤。同時,KeiluVision5還支持多種高級功能組件,如GDI接口和Flash編程器。其模塊化設(shè)計使得系統(tǒng)維護(hù)和擴(kuò)展更加便捷。4.2主控制器軟件設(shè)計系統(tǒng)上電啟動后,主程序從main()函數(shù)開始執(zhí)行。首先,進(jìn)行中斷優(yōu)先級分組設(shè)置,這是為了確保系統(tǒng)在不同中斷事件發(fā)生時能夠按照預(yù)定的優(yōu)先級順序進(jìn)行處理。隨后,微控制器的滴答定時器和I/O端口被初始化,為后續(xù)的硬件操作提供基礎(chǔ)。緊接著,程序?qū)Ω髂K引腳初始化,包括語音識別、OLED顯示模塊、雨滴與光照傳感器、紅外接收模塊以及步進(jìn)電機(jī)等。這些初始化步驟確保了硬件能夠正確響應(yīng)軟件的控制指令。為了支持多任務(wù)并行運(yùn)行,程序?yàn)槊總€任務(wù)(如語音識別、OLED顯示、串口REF_Ref28042\r\h[7]接收等)分配了一個獨(dú)立的任務(wù)堆棧和任務(wù)優(yōu)先級。這樣的設(shè)計使得每個任務(wù)都能夠獨(dú)立運(yùn)行,互不干擾。任務(wù)間的通信是通過信號量來實(shí)現(xiàn)的。這是一種同步機(jī)制,用于協(xié)調(diào)不同任務(wù)之間的資源訪問和操作順序。通過信號量的控制,任務(wù)可以在需要時等待其他任務(wù)釋放資源,或者通知其他任務(wù)自己已經(jīng)完成某項操作。在系統(tǒng)運(yùn)行過程中,操作系統(tǒng)會根據(jù)任務(wù)的優(yōu)先級依次調(diào)用任務(wù)程序。這種優(yōu)先級調(diào)度機(jī)制確保了系統(tǒng)能夠及時響應(yīng)重要事件,提高了系統(tǒng)的響應(yīng)速度和穩(wěn)定性。其主程序流程圖如圖4-1所示。圖4-1系統(tǒng)主程序流程圖4.3環(huán)境監(jiān)測軟件設(shè)計4.3.1ADC介紹與配置ADC是一種用于將模擬信號轉(zhuǎn)換為數(shù)字信號的模擬數(shù)字轉(zhuǎn)換器REF_Ref7575\r\h[11]。模擬信號是連續(xù)的。而數(shù)字信號則是離散的,僅能取有限的值。ADC的工作原理是將模擬信號通過采樣轉(zhuǎn)換為離散的數(shù)字信號,然后再通過量化、編碼等處理,最終得到對應(yīng)的數(shù)字表示。簡單來說就是將電壓轉(zhuǎn)換為數(shù)字量,例如測量3.3V的電壓時數(shù)字量是4095,測量1.65V電壓時數(shù)字量是2047,測量0V電壓時數(shù)字量是0。我們兩個傳感器都需要采集它們的電壓變化,其中雨滴傳感器接入的引腳是PF8,光敏電阻傳感器接入的是PF6。要開啟ADC功能,必須確保引腳有ADC的采集通道,它們對應(yīng)的ADC通道如圖4-2所示。圖4-2ADC采集通道選擇F6的附加功能有ADC2的通道4,PF8的附加功能有ADC2的通道6其引腳宏定義如下:/*雨滴傳感器接口PF8ADC2_IN6*/#defineBSP_RAINDROP_GPIO_RCURCU_GPIOF#defineBSP_RAINDROP_GPIO_PORTGPIOF#defineBSP_RAINDROP_GPIO_PINGPIO_PIN_8/*光照傳感器接口PF6ADC2_IN4*/#defineBSP_LIGHT_GPIO_RCURCU_GPIOF#defineBSP_LIGHT_GPIO_PORTGPIOF#defineBSP_LIGHT_GPIO_PINGPIO_PIN_6#defineBSP_LIGHT_ADC_RCURCU_ADC2#defineBSP_LIGHT_ADCADC2#defineBSP_LIGHT_ADC_CHANNELADC_CHANNEL_4#defineBSP_RAINDROP_ADC_CHANNELADC_CHANNEL_6當(dāng)前的ADC配置為軟件觸發(fā)方式的單次掃描模式。就是通過我們編寫代碼的方式,去觸發(fā)ADC的采集。單次掃描模式指的是,觸發(fā)采集之后,采集一次配置的通道數(shù)據(jù),然后停止,等待下一次采集觸發(fā)。雨滴、光照傳感器ADC引腳配置如下:voidraindrop_and_light_config(void){//使能引腳時鐘rcu_periph_clock_enable(BSP_RAINDROP_GPIO_RCU);rcu_periph_clock_enable(BSP_LIGHT_GPIO_RCU);//使能ADC時鐘rcu_periph_clock_enable(BSP_ADC_RCU);//配置ADC時鐘adc_clock_config(ADC_ADCCK_PCLK2_DIV4);//配置引腳為模擬輸入模式gpio_mode_set(BSP_RAINDROP_GPIO_PORT,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,BSP_RAINDROP_GPIO_PIN);gpio_mode_set(BSP_LIGHT_GPIO_PORT,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,BSP_LIGHT_GPIO_PIN);//配置ADC為獨(dú)立模式adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT);//使能掃描模式adc_special_function_config(BSP_ADC,ADC_SCAN_MODE,ENABLE);//數(shù)據(jù)右對齊adc_data_alignment_config(BSP_ADC,ADC_DATAALIGN_RIGHT);//ADC0設(shè)置為12位分辨率adc_resolution_config(BSP_ADC,ADC_RESOLUTION_12B);//ADC0設(shè)置為規(guī)則組一共使用1個通道adc_channel_length_config(BSP_ADC,ADC_REGULAR_CHANNEL,1);//ADC外部觸發(fā)禁用,即只能使用軟件觸發(fā)adc_external_trigger_config(BSP_ADC,ADC_REGULAR_CHANNEL,EXTERNAL_TRIGGER_DISABLE);//ADC0使能adc_enable(BSP_ADC);//開啟ADC自校準(zhǔn)adc_calibration_enable(BSP_ADC);}之前使用的是掃描模式并使用的是軟件觸發(fā)方式,因此當(dāng)我們要采集信號時,需要配置好采集通道并開啟軟件轉(zhuǎn)換。開啟轉(zhuǎn)換后,等待EOC標(biāo)志位置1。其中EOC為轉(zhuǎn)換完成標(biāo)志位,我們可以通過判斷其是否置1,確定是否轉(zhuǎn)換完成。轉(zhuǎn)換完成后將數(shù)據(jù)從16位寄存器中取出。/***********************************************************函數(shù)名稱:Get_ADC_Value*函數(shù)功能:讀取ADC值*傳入?yún)?shù):ADC_CHANNEL_x=要采集的通道*函數(shù)返回:測量到的值**********************************************************/unsignedintGet_ADC_Value(uint8_tADC_CHANNEL_x){unsignedintadc_value=0;//設(shè)置采集通道adc_regular_channel_config(BSP_ADC,0,ADC_CHANNEL_x,ADC_SAMPLETIME_15);//軟件觸發(fā)方式,開始常規(guī)通道組軟件轉(zhuǎn)換adc_software_trigger_enable(BSP_ADC,ADC_REGULAR_CHANNEL);//等待ADC采樣完成while(adc_flag_get(BSP_ADC,ADC_FLAG_EOC)==RESET){;}//讀取采樣值adc_value=adc_regular_data_read(BSP_ADC);//返回采樣值returnadc_value;}4.3.1功能驗(yàn)證在main.c中,不斷采集雨滴值和光照值,再通過串口輸出。#include"gd32f4xx.h"#include"systick.h"#include<stdio.h>#include"bsp_usart.h"#include"bsp_adc.h"intmain(void){uint16_tvalue=0;//滴答定時器初始化1mssystick_config();//串口0初始化調(diào)試usart_gpio_config(9600U);//ADC接口初始化raindrop_and_light_config();while(1){//讀取光照值value=Get_ADC_Value(BSP_LIGHT_ADC_CHANNEL);//串口輸出光照值printf("illumination=%d\r\n",value);//讀取雨滴值value=Get_ADC_Value(BSP_RAINDROP_ADC_CHANNEL);//串口輸出雨滴值printf("raindrop=%d\r\n",value);delay_1ms(500);}}4.4步進(jìn)電機(jī)驅(qū)動軟件設(shè)計要想讓步進(jìn)電機(jī)動起來,我們需要先配置好引腳。引腳的配置直接配置為推挽輸出模式即可。其引腳宏定義如下:#defineAP_RCURCU_GPIOG#defineAP_PORTGPIOG#defineAP_PINGPIO_PIN_12#defineAM_RCURCU_GPIOG#defineAM_PORTGPIOG#defineAM_PINGPIO_PIN_10#defineBP_RCURCU_GPIOB#defineBP_PORTGPIOB#defineBP_PINGPIO_PIN_9#defineBM_RCURCU_GPIOB#defineBM_PORTGPIOB#defineBM_PINGPIO_PIN_6#defineAP(X)gpio_bit_write(AP_PORT,AP_PIN,X?SET:RESET)//A+#defineAM(X)gpio_bit_write(AM_PORT,AM_PIN,X?SET:RESET)//A-#defineBP(X)gpio_bit_write(BP_PORT,BP_PIN,X?SET:RESET)//B+#defineBM(X)gpio_bit_write(BM_PORT,BM_PIN,X?SET:RESET)//B-/*****************************************************************函數(shù)名稱:stepper_motor_config*函數(shù)說明:對步進(jìn)電機(jī)引腳初始化*函數(shù)形參:無*函數(shù)返回:無***************************************************************/voidstepper_motor_config(void){rcu_periph_clock_enable(AP_RCU);//開啟時鐘rcu_periph_clock_enable(AM_RCU);//開啟時鐘rcu_periph_clock_enable(BP_RCU);//開啟時鐘rcu_periph_clock_enable(BM_RCU);//開啟時鐘/*配置A+推挽輸出模式上拉模式*/gpio_mode_set(AP_PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,AP_PIN);gpio_output_options_set(AP_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,AP_PIN);/*配置A-推挽輸出模式上拉模式*/gpio_mode_set(AM_PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,AM_PIN);gpio_output_options_set(AM_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,AM_PIN);/*配置B+推挽輸出模式上拉模式*/ gpio_mode_set(BP_PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,BP_PIN); gpio_output_options_set(BP_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,BP_PIN);/*配置B-推挽輸出模式上拉模式*/ gpio_mode_set(BM_PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,BM_PIN); gpio_output_options_set(BM_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,BM_PIN);AP(0);BP(0);AM(0);BM(0);}4.5紅外接收驅(qū)動軟件設(shè)計4.5.1NEC協(xié)議介紹NEC協(xié)議是眾多紅外線協(xié)議中的一種(這里說的協(xié)議就是他們數(shù)據(jù)幀格式定義不一樣,數(shù)據(jù)傳輸原理都是一樣的),我們購買的外能遙控器、淘寶買的mini遙控器、電視機(jī)、投影儀幾乎都是NEC協(xié)議。像格力空調(diào)、美的空調(diào)這些設(shè)備使用的就是其他協(xié)議格式,不是NEC協(xié)議,協(xié)議解碼如圖4-3所示。圖4-3協(xié)議解碼時序圖NEC協(xié)議一次完整的傳輸包含引導(dǎo)碼、8位地址碼、8位地址反碼、8位命令碼、8位命令反碼。這里我們主要講解如何接收紅外發(fā)送端發(fā)送的NEC協(xié)議內(nèi)容。引導(dǎo)碼:由9ms的低電平+4.5ms的高電平組成。如圖4-4所示:圖4-4引導(dǎo)碼4個字節(jié)的數(shù)據(jù)為:地址碼+地址反碼+命令碼+命令反碼。反碼可以用來校驗(yàn)數(shù)據(jù)是否傳輸正確。數(shù)據(jù)發(fā)送0碼:0.56ms低電平+0.56ms的高電平,周期是1.20ms,如圖4-5所示。圖4-50碼數(shù)據(jù)發(fā)送1碼:0.56ms低電平+1.68ms的高電平,周期是2.24ms,如圖4-6所示。圖4-61碼所以,收到一個數(shù)據(jù)位的完整時間表示方法為:收到數(shù)據(jù)位0:0.56m低電平+0.56ms的高電平收到數(shù)據(jù)位1:0.56ms低電平+1.68ms的高電平重復(fù)碼,是由一個9ms的低電平和一個2.5ms的高電平組成。當(dāng)一個紅外信號連續(xù)發(fā)送時,可以通過發(fā)送重復(fù)碼的方式快速發(fā)送。如圖4-7所示。圖4-7重復(fù)碼4.5.2紅外接收軟件遙控解碼關(guān)于紅外遙控,是采購的淘寶的一款標(biāo)準(zhǔn)紅外遙控。使用前,只需拔出尾巴的塑料薄片,讓遙控器通電。這個遙控器內(nèi)部已經(jīng)集成了NEC紅外協(xié)議,我們可以直接使用,遙控器實(shí)物如圖4-8所示。圖4-8紅外遙控器實(shí)物圖當(dāng)紅外線接收頭感應(yīng)到有紅外光就輸出低電平,沒有感應(yīng)到紅外光就輸出高電平。因此我們配置紅外引腳為外部中斷下降沿觸發(fā)方式,當(dāng)紅外引腳有下降沿時,我們馬上進(jìn)入中斷處理并接收紅外信號。引腳宏定義如下:#defineIR_RCURCU_GPIOF#defineIR_PORTGPIOF#defineIR_PINGPIO_PIN_7#defineEXTI_XEXTI_7#defineEXTI_IRQEXTI5_9_IRQn#defineEXTI_SOURCE_PORTEXTI_SOURCE_GPIOF#defineEXTI_SOURCE_PINEXTI_SOURCE_PIN7引腳配置如下:voidinfrared_goio_config(void) //紅外引腳初始化{//開啟引腳時鐘rcu_periph_clock_enable(IR_RCU);//開啟系統(tǒng)配置時鐘rcu_periph_clock_enable(RCU_SYSCFG);//配置引腳為上拉輸入模式gpio_mode_set(IR_PORT,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,IR_PIN);/*使能NVIC中斷中斷分組為2位搶占優(yōu)先級,2位子優(yōu)先級*/nvic_irq_enable(EXTI_IRQ,2U,2U);//搶占優(yōu)先級2,子優(yōu)先級2/*連接中斷線到GPIO*/syscfg_exti_line_config(EXTI_SOURCE_PORT,EXTI_SOURCE_PIN);/*初始化中斷線下降沿觸發(fā)*/exti_init(EXTI_X,EXTI_INTERRUPT,EXTI_TRIG_FALLING);/*使能中斷*/exti_interrupt_enable(EXTI_X);/*清除中斷標(biāo)志位*/exti_interrupt_flag_clear(EXTI_X);}紅外信號的數(shù)據(jù),全部是以時間長度來確定數(shù)據(jù)是0還是1,而最小的單位要求有560us,已經(jīng)達(dá)到了us級的測量。我們將滴答定時器的時間設(shè)置為1us中斷一次。這樣我們就有了us級延時。4.6語音識別模塊軟件設(shè)計4.6.1固件的配置根據(jù)海凌科官方參考案列的配置流程,本設(shè)計的語音識別模塊引腳設(shè)置選擇的是B2P3作為串口1,如圖4-9所示。圖4-9語音識別模塊引腳配置界面喚醒詞設(shè)置如圖4-10所示:圖4-10語音識別模塊喚醒詞配置界面命令詞與控制:設(shè)置的控制參數(shù)如下。當(dāng)串口接收到0XAA0X010X55時,說明語音模塊觸發(fā)了開窗簾命令。其它同理。為了方便接收并解析多條命令,設(shè)置成為了幀頭幀尾的格式。當(dāng)串口接收到0X55說明語音識別模塊觸發(fā)了命令,分析上一個接收的數(shù)據(jù),則可以知道是識別的哪一個命令。if(RX_BUFF[DATA_LEN]==0X55)//接收到幀尾{if(RX_BUFF[DATA_LEN-2]==0XAA)//接收到幀頭,確定數(shù)據(jù)格式{V20_data=cRX_BUFF[DATA_LEN-1];//接收數(shù)據(jù)}}例如:語音識別模塊發(fā)來了命令:0XAA0X030X55,則說明觸發(fā)了打開自動模式命令,如表4-1所示:表4-1語音識別數(shù)據(jù)幀格式幀頭數(shù)據(jù)幀尾說明0XAA0X010X55識別到開窗簾命令0XAA0X020X55識別到關(guān)窗簾命令0XAA0X030X55識別到自動模式命令0XAA0X040X55識別到手動模式命令4.6.2語音識別模塊軟件設(shè)計語音識別模塊我們配置為了串口通信方式,在原理圖中我們接入的是PA2和PA3,它們是串口1的復(fù)用引腳。復(fù)用通道是AF7。其中PA2是串口1的TX,PA3是串口1的RX,如圖4-11所示。圖4-11串口通信引腳選擇引腳與串口1相關(guān)參數(shù)宏定義如下:#defineRCU_HLK_TXRCU_GPIOA//串口TX的端口時鐘#defineRCU_HLK_RXRCU_GPIOA//串口RX的端口時鐘#defineRCU_HLK_USARTRCU_USART1//串口1的時鐘#definePORT_HLK_TXGPIOA//串口TX的端口#definePORT_HLK_RXGPIOA//串口RX的端口#defineGPIO_HLK_TXGPIO_PIN_2//串口TX的引腳#defineGPIO_HLK_RXGPIO_PIN_3//串口RX的引腳#defineBSP_HLK_AFGPIO_AF_7//串口1的復(fù)用功能#defineHLK_USARTUSART1//串口1#defineHLK_USART_IRQUSART1_IRQn//串口1中斷#defineHLK_USART_IRQHandlerUSART1_IRQHandler//串口1中斷服務(wù)函數(shù)#defineHLK_RX_LEN_MAX200//串口接收最大長度串口1的初始化配置代碼如下:/*************************************************************函數(shù)名稱:hlk_usart_init*函數(shù)說明:語音識別模塊的初始化*型參:bund=串口波特率*返回值:無*備注:波特率根據(jù)設(shè)置的內(nèi)容來決定*************************************************************/voidhlk_usart_init(unsignedintbund){/*使能HLK_USART的時鐘*/rcu_periph_clock_enable(RCU_HLK_USART);/*使能時鐘*/rcu_periph_clock_enable(RCU_HLK_TX);rcu_periph_clock_enable(RCU_HLK_RX);/*配置引腳為復(fù)用功能*/gpio_af_set(PORT_HLK_TX,BSP_HLK_AF,GPIO_HLK_TX);/*配置引腳為復(fù)用功能*/gpio_af_set(PORT_HLK_RX,BSP_HLK_AF,GPIO_HLK_RX);/*配置TX引腳為復(fù)用上拉模式*/gpio_mode_set(PORT_HLK_TX,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_HLK_TX);/*配置RX引腳為復(fù)用上拉模式*/gpio_mode_set(PORT_HLK_RX,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_HLK_RX);/*配置PA2引腳為為輸出模式*/gpio_output_options_set(PORT_HLK_TX,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_HLK_TX);/*配置PA3引腳為為輸出模式*/gpio_output_options_set(PORT_HLK_RX,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_HLK_RX);/*設(shè)置HLK_USART的波特率為115200*/usart_baudrate_set(HLK_USART,bund);/*設(shè)置HLK_USART的校驗(yàn)位為無*/usart_parity_config(HLK_USART,USART_PM_NONE);/*設(shè)置HLK_USART的數(shù)據(jù)位為8位*/usart_word_length_set(HLK_USART,USART_WL_8BIT);/*設(shè)置HLK_USART的停止位為1位*/usart_stop_bit_set(HLK_USART,USART_STB_1BIT);/*使能串口1*/usart_enable(HLK_USART);/*使能HLK_USART傳輸*/usart_transmit_config(HLK_USART,USART_TRANSMIT_ENABLE);/*使能HLK_USART接收*/usart_receive_config(HLK_USART,USART_RECEIVE_ENABLE);/*使能HLK_USART接收中斷標(biāo)志位*/usart_interrupt_enable(HLK_USART,USART_INT_RBNE);/*使能HLK_USART空閑中斷標(biāo)志位*/usart_interrupt_enable(HLK_USART,USART_INT_IDLE);/*配置中斷優(yōu)先級*/nvic_irq_enable(HLK_USART_IRQ,2,2);}串口中斷服務(wù)函數(shù):當(dāng)接收到我們設(shè)置的格式,0XAA數(shù)據(jù)0X55時,rx_flag就設(shè)置為1。我們通過判斷rx_flag是否為1,確定是否有接收到語音識別模塊發(fā)送過來的數(shù)據(jù)。當(dāng)然,大家也可以自己設(shè)計一個格式,或者直接不要格式,直接發(fā)送數(shù)據(jù)0x01,0x02,0x03等等。/****************************************************************函數(shù)名稱:HLK_USART_IRQHandler*函數(shù)說明:連接HLK的串口中斷服務(wù)函數(shù)*函數(shù)形參:無*函數(shù)返回:無******************************************************************/voidHLK_USART_IRQHandler(void){if(usart_interrupt_flag_get(HLK_USART,USART_INT_FLAG_RBNE)!=RESET)//接收緩沖區(qū)不為空{(diào)//接收數(shù)據(jù)hlk_rx_buff[hlk_rx_len]=usart_data_receive(HLK_USART);#ifDEBUG//測試,查看接收到了什么數(shù)據(jù)printf("%c",hlk_rx_buff[hlk_rx_len]);#endif//0XAAX0X55if(hlk_rx_buff[hlk_rx_len]==0X55)//接收到幀尾{if(hlk_rx_buff[hlk_rx_len-2]==0XAA)//接收到幀頭,確定數(shù)據(jù)格式正確{rx_data=hlk_rx_buff[hlk_rx_len-1];//接收數(shù)據(jù)rx_flag=1;}}//接收長度限制hlk_rx_len=(hlk_rx_len+1)%HLK_RX_LEN_MAX;}if(usart_interrupt_flag_get(HLK_USART,USART_INT_FLAG_IDLE)==SET)//檢測到空閑中斷{usart_data_receive(HLK_USART);//必須要讀,讀出來的值不能要hlk_rx_buff[hlk_rx_len]='\0';//字符串結(jié)尾補(bǔ)'\0'hlk_rx_flag=1;//接收完成}}分析語音識別模塊發(fā)送過來的指令,并完成對應(yīng)操作:/***********************************************************函數(shù)名稱:voice_anakysis_data*函數(shù)功能:解析語音識別模塊發(fā)送過來的數(shù)據(jù)*傳入?yún)?shù):無*函數(shù)返回:1=接收到語音數(shù)據(jù)0=沒有接收到語音數(shù)據(jù)*備注:假設(shè)AA0355則printf("automaticmode\r\n");**********************************************************/unsignedcharvoice_anakysis_data(void){unsignedcharret=0;if(rx_flag==1)//接收到語音命令{rx_flag=0;switch(rx_data)//根據(jù)語音命令確定對應(yīng)的動作{case0x01://開窗簾printf("opencurtain\r\n");break;case0x02://關(guān)窗簾printf("closecurtain\r\n");break;case0x03://自動模式printf("automaticmode\r\n");break;case0x04://手動模式printf("manualmode\r\n");break;}ret=1;//清除當(dāng)前數(shù)據(jù)clear_hlk_rx_buff();}returnret;}4.7本章小結(jié)在本章中,我們首先概述了系統(tǒng)的軟件開發(fā)環(huán)境,并詳細(xì)介紹了所使用的開發(fā)軟件KeiluVision5。隨后,我們深入探討了環(huán)境監(jiān)測模塊、紅外接收模塊、步進(jìn)電機(jī)驅(qū)動模塊以及語音識別模塊在軟件層面的設(shè)計。此外,我們還針對每個模塊進(jìn)行了軟件驅(qū)動程序的詳細(xì)設(shè)計,以確保系統(tǒng)各部分的正常運(yùn)行和高效協(xié)同工作。

系統(tǒng)測試與分析本文的前幾章內(nèi)容主要闡述了智能窗簾的研究背景、系統(tǒng)設(shè)計的重要性、控制系統(tǒng)的總體布局、硬件平臺的構(gòu)建以及軟件平臺的設(shè)計流程。而本章將基于前面所設(shè)計的硬件和軟件,搭建一個測試平臺,旨在驗(yàn)證每個功能的有效性,并對測試結(jié)果進(jìn)行深入分析。5.1系統(tǒng)測試平臺的搭建在智能窗簾系統(tǒng)REF_Ref8907\r\h[12]的設(shè)計和構(gòu)建過程中,硬件和軟件的設(shè)計是相輔相成的。完成這些設(shè)計后,確保元器件的實(shí)物焊接正確無誤,是系統(tǒng)能夠正常工作的關(guān)鍵一步。在焊接元器件時,需要參照相關(guān)技術(shù)標(biāo)準(zhǔn),精確無誤地將主控制器、環(huán)境檢測模塊、語音識別模塊、步進(jìn)電機(jī)模塊以及紅外接收模塊的元器件焊接到相應(yīng)的電路板上。焊接完成后,對各模塊進(jìn)行上電前的測試是至關(guān)重要的。這不僅是為了確保電路的安全,更是為了驗(yàn)證系統(tǒng)的可靠性和穩(wěn)定性。使用電壓表和萬用表進(jìn)行測試時,需要仔細(xì)檢查每個焊接點(diǎn),確保沒有短路現(xiàn)象。同時,還要測試各模塊之間的連接是否正常,以及各模塊是否能夠正常工作。經(jīng)測試結(jié)果顯示,電路無短路現(xiàn)象,且各模塊均可以正常工作,那么就可以進(jìn)行下一步的系統(tǒng)集成和調(diào)試。在調(diào)試過程中,需要對系統(tǒng)的各項功能進(jìn)行測試和驗(yàn)證,確保系

溫馨提示

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

評論

0/150

提交評論