江蘇職業技術學院無錫機電分院的研究人員張超敏、王雪嬌,在2019年第3期《電氣技術》雜志上撰文(論文標題為“基于單片機的語音識別智能窗簾控制器的設計”),系統以單片機STC89C52芯片作為主控模塊,可以對窗簾實現光照度檢測、語音識別、按鍵手動等智能控制功能。
光照度模塊采集室外光照度數據上傳至單片機,單片機發送控制指令驅動步進電動機驅動模塊,控制步進電動機轉動實現窗簾的自動開合,LCD顯示屏顯示實時的溫度和時間。同時,系統還具備手動控制功能,通過語音識別模塊或按鍵控制窗簾的開合。通過仿真驗證該系統性能穩定、結構簡單、抗干擾能力強、成本低廉、能夠滿足智能家居的需求。
隨著物聯網技術的高速發展,智能化建筑悄然興起,傳統窗簾操作不方便,智能窗簾為人們提供了一個舒適的家居環境。在智能家居領域,電動智能窗簾克服了傳統窗簾操作不便的缺點,可以在設定的光線和溫度下,自動開啟窗簾和關閉窗簾,為人們提供了更方便、舒適的居住環境。因此,研究與設計智能窗簾控制系統具有深遠的現實意義。
一些學者在智能窗簾的設計方面進行了研究,比如孫勇等通過紅外遙控控制系統可實現窗簾的自動開合;孫勤設計窗簾光控智能控制系統;揚亞讓通過主從式多機通信協議可實現窗簾控制信號的遠距離傳輸。陳曉燕等通過串口多機通信實現了窗簾開合的遠程控制。市場上現有的智能窗簾控制器價格較昂貴且尚不具備語音功能,而基于單片機的語音智能窗簾控制器具有更好的穩定性、更適中的價格、功耗更低、更實用,就這也為智能窗簾系統的研發提供了市場價值。
單片機STC89C52作為系統的核心芯片,由光控模塊、按鍵模塊、步進電動機驅動模塊、語音識別模塊、和LCD顯示模塊等組成。光控模塊就是利用光照度傳感器實時檢測室外光照度的變化,從而控制窗簾自動開合,使室內保持恒照度控制。
當單片機接收到手動控制、自動控制、遠程控制信號后驅動步進電動機驅動模塊控制步進電動機的正反轉,從而實現窗簾的開合。語音識別模塊具有語言記憶功能,把語音“開關窗”的指令預先寫入程序中,程序植入語音識別模塊中,當有人發出相應語音指令時,通過與程序中原有指令比較,相符即控制窗簾開關。
系統硬件為模塊化設計,包括語音識別模塊、光控模塊、按鍵模塊、步進電動機驅動模塊,LCD液晶顯示模塊。整個系統硬件框圖如圖1所示。溫度檢測模塊和光照度檢測模塊主要完成溫度和光照度數據的采集,并且通過液晶LCD顯示屏顯示; 按鍵模塊主要完成人工手動控制功能;步進電動機驅動模塊通過控制步進電動機的正反轉來模擬窗簾的開合;采用單片機STC89C52作為主控芯片,完成對接收到的光照度、語音、按鍵輸入等數據進行處理,并通過驅動模塊實現窗簾的開合。
圖1 系統硬件框圖
2.1 語音識別模塊
語音識別模塊核心芯片采用LD3320芯片,是一種非特定人“語音識別”專用芯片。語音信號為模擬量信號,需嵌入在芯片內部A/D和D/A接口將語音模擬信號轉換為數字信號,操作者無需提前經過語音訓練,識別的關鍵語句如“開窗”指令以字符串的形式存入芯片中,識別的過程就是將操作者的語音與關鍵語句進行比較,若匹配,則執行相應控制功能。LD3320語音識別模塊硬件電路如圖2所示。
圖2 語音識別模塊電路
2.2 光控模塊
利用光控模塊,用戶可以根據日常需求自行設定室內光照度,通過光敏電阻實時監測室外光照度,單片機控制窗簾開合實現室內恒照度控制。窗簾實現光照度自動控制,天亮窗簾自動打開,室外光照度超過3000lx自動關閉,天黑窗簾自動關閉。光敏電阻監測到的光照度數據為4~20mA電流模擬量信號,需經過A/D模數轉換后輸出數字量信號給單片機。
A/D轉換器的功能是進行模數轉換,把LD3320語音芯片接收到的模擬信號轉換成數字信號輸出至ST89C52。為確保A/D轉換的精度和速度,A/D轉換位數與整個智能窗簾控制系統測量控制的范圍和精度有關。本系統中采用8位A/D轉換器ADC0832芯片。整個光控模塊硬件電路如圖3所示。
圖3 光控模塊電路
2.3 步進電動機驅動模塊
系統采用28BYJ-48型四相八拍步進電動機控制窗簾的開合,力矩較大、帶負載能力強、控制精度高。單片機控制步進電動機驅動模塊給電動機輸入一系列脈沖信號,控制電動機連續轉動,帶動窗簾在軌道上移動。
步進電動機的轉速、停止的位置取決于輸入脈沖信號的頻率和脈沖數,單片機控制發送一系列脈沖至步進電動機驅動模塊,當步進驅動器接收到一個脈沖信號時,它就驅動步進電動機按設定的方向轉動一個“步距角”0.62°,通過輸出連續脈沖信號控制窗簾的連續移動。
步進電動機的工作峰值電流大范圍為2.6~7A,若通過下拉電阻或三極管驅動產生的轉矩小難以帶動窗簾開合,通常需要專用驅動芯片驅動才能正常工作,本系統采用ULN2003專用驅動芯片驅動步進電動機。步進電動機驅動模塊硬件電路如圖4所示。
圖4 步進電動機驅動模塊電路
2.4 LCD顯示模塊
LCD顯示模塊采用LCD1602芯片,該模塊用來實時顯示室外光照度數據及窗簾工作狀態。由于STC89C52單片機P0口帶負載能力較差,故需先接10K上拉電阻排,再連接芯片LCD1602的DB1—DB7口作為數據輸入輸出端,傳輸光照度數據及窗簾開合狀態指令。單片機P2.7數據端口接顯示屏芯片LCD1602的使能端EN,P2.5口接液晶顯示的RS數據指令選通端,LCD1602的5腳R/W讀寫選通接單片機P2.6。并用電位器RV2用來調節LCD1602的亮度,LCD顯示模塊硬件電路如圖5所示。
圖5 LCD顯示模塊電路
3.1 主控模塊流程設計
軟件程序采用C語言編寫,為了便于修改和調試,采用模塊化設計,編程語言的開發工具用Keil C編程軟件。系統主程序的流程圖如圖6所示。
系統首先上電復位完成對單片機、傳感器、各端口模塊初始化和Y值及Y值優先級設置,其中Y=3的優先級小于Y=1或Y=2。然后單片機根據接收到的外界信息的類型,進行相應的數據分析和處理后,通過電動機控制器控制步進電動機完成對窗簾的控制。
圖6 主程序流程圖
若Y=2有開合窗簾語音信號輸入,則子程序驅動LD3320非特定人“語音識別”專用芯片,執行語音識別子程序,等待控制窗簾開合的語的輸入。當LD3320接收到“開關窗”語音信號時,先對語音信號進行分析提取語音特征值,并與芯片中預存的開關窗控制關鍵字符比較,若匹配,則驅動步進電動機控制窗簾的開合。
若Y=3需執行光控子程序,則光敏電阻實時監測室外光照強度是否大于3000lx,若條件符合,則步進電動機正向轉動,控制窗簾開起,直至碰到限位開關停止轉動。在條件要求不符合時,返回到子程序入口重新初始化。檢測窗簾開合狀態,在打開狀態下,光敏電阻檢測到室外光照強度小于500lx時,控制步進電動機反轉實現窗簾閉合。
顯示子程序,當LCD1602芯片的讀寫選通端RW為低電平時,執行寫操作;當數據指令選通端RS端工作狀態為高電平時,選擇指令寄存器;使能端EN為下降沿信號,顯示數據被送到ST89C52單片機P2.0-P2.7口,LCD執行數據指令,判斷數據指令是否執行完畢,若完畢,則在液晶屏顯示光照度數據及窗簾開合狀態,子程序退出。否則,返回到數據指令選擇寄存器繼續循環重復執行之前步驟。
3.2 系統仿真
利用Proteus軟件進行系統仿真,根據智能窗簾控制系統的原理圖,把相應的元件在庫編輯器中找出來,然后進行繪制。電路圖畫好后再選擇KEIL中已經編譯好的*.hex文件,點擊運行按鈕,仿真結果如圖7所示。
圖7 系統仿真圖
在整個系統設計過程中,光控模塊實時檢測室外光照度數據傳送至單片機,STC89C52作為主控芯片通過步進電動機驅動模塊控制步進電動機正反轉從而實現窗簾的開合,并通過LCD液晶顯示屏顯示光照度和溫度。在實現光照度自動控制基礎上,同時又添加了語音控制和按鍵控制功能,使智能窗簾的控制更加完善,更加人性化。