陳俊龍,魏小鎮(zhèn),黃堪杰,陳嘉欣,黃映欣
(廣東東軟學(xué)院,廣東佛山,528200)
隨著社會(huì)經(jīng)濟(jì)不斷發(fā)展以及人們生活節(jié)奏加快,智能家居的應(yīng)用場景越來越豐富,智能家居使用和方便越來越受人們青睞。智能家居泛指以一個(gè)網(wǎng)關(guān)為總節(jié)點(diǎn),多個(gè)傳感器和控制終端為子節(jié)點(diǎn),各子節(jié)點(diǎn)和總結(jié)點(diǎn)之間采用無線或有線方式進(jìn)行通信的嵌入式自動(dòng)化系統(tǒng)。旨在提高用戶的生活水平,帶給用戶愉快的生活體驗(yàn)。但市面上的智能家居系統(tǒng)普遍存在價(jià)格高昂,功能花哨而不實(shí)用的特點(diǎn),本課題針對這一痛點(diǎn)設(shè)計(jì)實(shí)驗(yàn),實(shí)現(xiàn)部分日常生活實(shí)用價(jià)值較高的功能,例如日程定時(shí)提醒,全屋聯(lián)動(dòng),家用電器的語音控制,線上控制,及定時(shí)開關(guān)等。
智能家居節(jié)點(diǎn)終端要求采用低功耗,分布式,允許有一定延遲的嵌入式系統(tǒng)及傳感器。本文介紹了以低功耗芯片CC2530 為無線模塊,STM32F103 芯片為總控(網(wǎng)關(guān))通過路由和節(jié)點(diǎn)終端(STM32F103)的連接,結(jié)合語音識(shí)別模塊,構(gòu)建一套智能家居系統(tǒng)。
本套智能家居系統(tǒng)共包括兩套主板和一個(gè)軟件。門控板和網(wǎng)關(guān)主板采用射頻通信,模擬物聯(lián)網(wǎng)通信過程,后期會(huì)改用Zigbee(CC2530)完成無線通信開發(fā)。
圖1 門控終端結(jié)構(gòu)框圖
門控終端采用12V 電池供電,通過LM2596 降壓芯片將電壓降為5V,3.3V 供入系統(tǒng);射頻模塊采用MFRC-522模塊進(jìn)行讀卡;2個(gè)獨(dú)立按鍵模擬門鈴(外側(cè))和開門按鍵(內(nèi)側(cè));綠色指示燈亮起表示識(shí)別成功,紅色指示燈提示識(shí)別失敗;電磁鎖采用12V 斜口電磁鎖,電磁鎖直接從電池取電;無線模塊采用Zigbee 模塊進(jìn)行數(shù)據(jù)收發(fā)。
圖2 網(wǎng)關(guān)終端結(jié)構(gòu)框圖
網(wǎng)關(guān)終端采用7.2V 電池供電,網(wǎng)關(guān)接收溫濕度傳感器(DHT11)的數(shù)據(jù),并顯示于OLED 屏幕上;獨(dú)立按鍵可控制門控端電磁鎖開關(guān);無線模塊接收門控終端的信息,照明電路可通過軟件和語音控制,也可以通過按鍵控制燈亮滅;揚(yáng)聲器可播放門鈴音樂和全屋鬧鐘,并發(fā)出語音提示;舵機(jī)電路控制窗戶開合。
本系統(tǒng)采用7.2V 電池供電,單片機(jī)及各元器件采用3.3V 電壓供電,且考慮到射頻模塊(Zigbee 模塊)工作電流較大,因此電源方案采用LM2596S 為主方案,并同時(shí)預(yù)備AMS1117 為備用方案。以下介紹LM2596S 的設(shè)計(jì)思路:電源輸入端接入7.2V 電池,輸入端并聯(lián)一個(gè)0.1μF 的濾波電容,將芯片的第5 腳接地使能輸出,在輸出端和GND 并聯(lián)一個(gè)1N5824 鉗位二極管,通過串聯(lián)一個(gè)47μH 的電感,將3.3V 電壓輸入至單片機(jī)系統(tǒng),為確保電壓穩(wěn)定,輸出端電壓要反饋至Feedback 腳,即芯片第4 腳。最后在輸出端與GND 之間接入一個(gè)0603 封裝的LED 和1k 的電阻,指示燈亮表示電壓正常輸出。為方便產(chǎn)品測試,將3.3V 電壓和GND 等電源腳引出排針。
圖3 大電流降壓模塊
圖4 RFID 射頻模塊
圖5 液晶屏接線
圖6 E18 模組
射頻模塊采用RC522,采用SPI 總線進(jìn)行通信,SPI 總線為全雙工通信,在SCK 引腳上升沿時(shí),將數(shù)據(jù)寫入芯片或者讀出數(shù)據(jù)。IC 卡靠近塊后,RFID 模塊將模寫入數(shù)據(jù)到IC 卡,再從IC卡中將數(shù)據(jù)讀出,然后將數(shù)據(jù)通過SPI總線發(fā)到單片機(jī)。
本項(xiàng)目采用中景園公司的OLED 液晶屏,屏幕SSD1306 驅(qū)動(dòng)芯片,可使用I2C 和SPI 接口連接單片機(jī)進(jìn)行通信。顯示屏支持藍(lán),白,黃三種顯示顏色。本項(xiàng)目使用I2C 接口的屏幕,減少驅(qū)動(dòng)代碼移植的難度,I2C 通信速度較低,主要用于顯示部分調(diào)試信息。
Zigbee 模組采用深圳EBYTE 公司的CC2530 集成模組——E18-MS1。模塊可支持4dBm 的發(fā)射功率,通信距離200 米內(nèi)。該模塊出廠默認(rèn)帶有自組網(wǎng)程序,支持上位機(jī)調(diào)試軟件二次開發(fā)。E18 多節(jié)點(diǎn)組成的Mesh 網(wǎng)絡(luò)具備組織、治愈功能,其路由可自動(dòng)建立和維護(hù);網(wǎng)絡(luò)覆蓋范圍大、吞吐率高、可靠性強(qiáng)是該產(chǎn)品獨(dú)特的優(yōu)點(diǎn)。模塊采用串口通信,連接到單片機(jī)USART3 進(jìn)行開發(fā)。
語音模塊采用JR6001,該模塊采用單片機(jī)串口控制。模塊1、2 腳為電源腳;3、4 腳分別連接單片機(jī)Tx 和Rx 引腳;第5 腳所接LED 為音頻輸出指示燈,當(dāng)音頻信號(hào)輸出到6、7 腳時(shí),指示燈會(huì)閃爍一次。U1 為排針接口,連接揚(yáng)聲器。
2 扇窗戶采用舵機(jī)進(jìn)行推拉開關(guān),由于單片機(jī)引腳的電流不夠,采用三極管構(gòu)成共發(fā)射極放大電路進(jìn)行電流放大。R2 和R3 為限流電阻,防止當(dāng)I/O 口為高電平時(shí),電流過大擊穿發(fā)射極,D_PWMx 引腳已通過外接排阻上拉為高電平。當(dāng)PWMx 引腳為高電平時(shí),三極管發(fā)射極與集電極導(dǎo)通,D_PWMx 輸出低電平;當(dāng)PWMx 引腳為低電平時(shí),三極管發(fā)射極與集電極截止,D_PWMx 輸出高電平。因此該電路可形成一個(gè)反相器,即PWMx 占空比為80%時(shí),D_PWMx 為20%。
指示燈采用排阻上拉連接單片機(jī),減少元器件焊接難度。3 個(gè)指示燈連接I/O 口,用于調(diào)試排阻的2、3 號(hào)腳連接舵機(jī)電路進(jìn)行上拉,LED4 為電源指示燈,排阻9 號(hào)腳連接單片機(jī)復(fù)位引腳RESET,同時(shí)并聯(lián)一顆104 電容濾波。
照明電路用于為外接的USB 燈管提供足夠的電流,本項(xiàng)目采用ULN2003 芯片,該芯片可提供每個(gè)輸出口最高0.5A 的電流,可為系統(tǒng)照明燈電路提供足夠的電流。LEDx網(wǎng)絡(luò)接入單片機(jī)的I/O 口,右側(cè)的輸出口連接到USB 插座的負(fù)極,USB 插座正極直連電源,當(dāng)LEDx 為高電平時(shí),對應(yīng)輸出端為低電平,此時(shí)LED 燈條會(huì)被點(diǎn)亮,反之熄滅。
圖7 JR6001 語音播報(bào)模塊
圖8 舵機(jī)驅(qū)動(dòng)電路
圖9 排阻構(gòu)成的指示燈電路
圖10 照明電路
圖11 門控板軟件框架
圖12 網(wǎng)關(guān)板軟件框架
門控板和網(wǎng)關(guān)板上層軟件驅(qū)動(dòng)軟件主要分為以下部分:
(1)GPIO 配置:主要控制LED 指示燈和檢測按鍵電平;
(2)RC522 射頻卡:用模擬SPI 總線配置射頻模塊的各項(xiàng)參數(shù),并實(shí)現(xiàn)尋卡,讀卡識(shí)別卡號(hào)的功能;
(3)OLED 顯示屏:使用模擬I2C 協(xié)議驅(qū)動(dòng)屏幕,用于顯示一部調(diào)試信息。
(4)電磁鎖驅(qū)動(dòng):配置同普通I/O 口,但由于電磁鎖通電時(shí)間不能過長,所以每次向鎖芯通電的時(shí)間都設(shè)置為0.8 秒。
(5) 語音模塊:JR6001 采用串口通信,AT 指令控制,采用單片機(jī)一路USART,配置為發(fā)送模式,波特率115200,通過串口AT 指令,可實(shí)現(xiàn)語音播報(bào)功能;
(6)舵機(jī)驅(qū)動(dòng):2 路舵機(jī)由單片機(jī)輸出2 路低頻率PWM驅(qū)動(dòng),初始化頻率配置定時(shí)器工作頻率,通過在循環(huán)函數(shù)中修改PWM 占空比可控制舵機(jī)打角。
(7)Zigbee 模塊:采用串口+AT 指令控制,使用一路USART 配置為收發(fā)模式,開啟接收中斷。
3.2.1 門控板主程序
門控板主要完成IC 卡識(shí)別,串口3(Zigbee)指令識(shí)別,繼電器開關(guān),卡號(hào)比對的功能,工作流程如下:
(1)單片機(jī)上電后,對各模塊進(jìn)行初始化配置。
(2)初始化模塊配置后,測試各模塊功能;
(3)IC 卡尋卡,如果識(shí)別到IC 卡,則刷新RC522_ID_Buff 數(shù)組的卡號(hào);
(4)串口3 識(shí)別指令,并配置相應(yīng)的標(biāo)志位;
(5)掃描按鍵狀態(tài),配置對應(yīng)的標(biāo)志位;
(6)識(shí)別Door_flg 標(biāo)志位,若為1,則繼電器通電0.8 秒;否則執(zhí)行下一個(gè)流程;
(7)對當(dāng)前IC 卡存儲(chǔ)數(shù)組RC522_ID_Buff 中的卡號(hào)與存儲(chǔ)在Card_One 數(shù)組中的卡號(hào)進(jìn)行比對,卡號(hào)相通則將Success 寫入顯示屏;否則執(zhí)行下一個(gè)流程;
(8)使用ReFlash 函數(shù)刷新屏幕數(shù)據(jù);
(9)重復(fù)執(zhí)行流程3-8。
圖13 門控板主流程
3.2.2 門控板中斷
門控板中斷程序主要為串口中斷,當(dāng)串口收到數(shù)據(jù)時(shí),自動(dòng)觸發(fā)。中斷處理流程如下:
(1)進(jìn)入中斷后,首先識(shí)別接收中斷標(biāo)志位USART_IT_RXNE,是否為1,不為1 則,直接退出中斷;
(2)若為1 則清除接收中斷標(biāo)志位USART_IT_RXNE;
(3) 將串口寄存器USARTx->DR 的數(shù)據(jù)進(jìn)行讀取;
(4)結(jié)束流程,退出中斷。
圖14 串口中斷流程
3.2.3 網(wǎng)關(guān)板主程序
網(wǎng)關(guān)板主要完成,串口指令發(fā)送,按鍵掃描,LED 燈顯示,ULN2003 驅(qū)動(dòng)(電器開關(guān))和PWM 輸出(窗戶舵機(jī))等功能,工作流程如下:
(1)單片機(jī)上電后,對各模塊進(jìn)行初始化配置,時(shí)鐘,定時(shí)器,GPIO,NVIC 中斷,串口,OLED 顯示屏;
(2)在初始化完成后,對各個(gè)模塊進(jìn)行功能測試,GPIO 全部拉為高電平,串口和OLED 顯示屏打印“Hello World”;
圖15 網(wǎng)關(guān)板工作流程
(3)對8 個(gè)按鍵依次掃描識(shí)別,識(shí)別到I/O 口為低電平則更新存儲(chǔ)按鍵號(hào),并進(jìn)行信號(hào)處理;
(4)識(shí)別串口緩存數(shù)組的內(nèi)容,識(shí)別出指令后,設(shè)置相應(yīng)電器的標(biāo)志位,隨后清空緩存區(qū);
(5)根據(jù)標(biāo)志位,對LED 燈的I/O 口進(jìn)行電平輸出;
(6)根據(jù)舵機(jī)標(biāo)志位,輸出相應(yīng)占空比的PWM 波形;
(7)根據(jù)標(biāo)志位,對ULN2003 進(jìn)行電平輸出;
(8)刷新OLED 顯示屏;
(9)重復(fù)流程3—8。
3.3.1 RC522 射頻卡配置
在RC522 初始化流程中,首先對SPI 的4 個(gè)重要I/O口進(jìn)行輸入輸出配置;然后通過SPI 總線對模塊進(jìn)行軟件復(fù)位,將CS引腳置于低電平作選通使能。接下來二次復(fù)位之后,開始寫入命令,配置模塊。
在尋卡子流程中,首先調(diào)用PcdRequest 函數(shù)進(jìn)行尋卡,尋卡結(jié)果返回到變量ucStatus 中。若ucStatus 為1,則表示尋卡成功,將卡號(hào)輸出到ID 指針變量中,否則結(jié)束尋卡,退出該流程;流程圖如圖16 所示。
圖16 RC522 模塊軟件初始化流程和尋卡流程
圖17 OLED 初始化及顯示流程示例
圖18 電磁鎖控制流程圖
圖19 舵機(jī)脈沖長度對應(yīng)打角角度
RC522 各參數(shù)配置如下:
(1)工作方式:ISO14443-A;
(2)工作模式:接收和發(fā)送;
(3)內(nèi)部定時(shí)器初值:30。
3.3.2 OLED 顯示屏
中景園的OLED 顯示屏,采用I2C 協(xié)議款,在初始化流程中,首先使能PB7 和PB8 所在的APB2 總線時(shí)鐘;隨后初始化2 個(gè)I/O 口為推挽輸出模式;對OLED 進(jìn)行軟件復(fù)位之后,開始向顯示屏芯片寫入指令。
在主程序使用屏幕顯示數(shù)據(jù)時(shí),流程如下:首先調(diào)用OLED_ShowString 函 數(shù), 指定字符串大小,坐標(biāo),字符串內(nèi)容,將字符串?dāng)?shù)據(jù)寫入OLED 的寄存器,在寫入多個(gè)字符串之后,再刷新屏幕。由于屏幕刷新的時(shí)間比字符串寫入的時(shí)間稍長,因此不建議每寫入一次字符串,就對屏幕進(jìn)行刷新,這樣會(huì)導(dǎo)致單片機(jī)運(yùn)行效率低下,將所有字符串更新到寄存器中,最后再對屏幕進(jìn)行刷新,不僅節(jié)省運(yùn)算資源,而且不會(huì)造成屏幕卡頓。經(jīng)測試,該方案可行。
3.3.3 電磁鎖驅(qū)動(dòng)
電磁鎖的初始化和LED 燈相同,采用推挽輸出模式即可,初始化默認(rèn)配置RELAY 引腳為高電平,此處不過多贅述;在電磁鎖通電時(shí),由于工作電流(0.7A)較大,為提高設(shè)備可靠性,鎖頭不可長時(shí)間通電。當(dāng)RELAY 引腳為低電平時(shí),繼電器閉合,電磁鎖通電,斜口舌收縮;反之亦然,因此控制單片機(jī)引腳高低電平,即可實(shí)現(xiàn)電磁鎖開合。本項(xiàng)目設(shè)置電磁鎖的通電時(shí)間為0.8 秒,程序流程如下:
(1)當(dāng)判斷到開門指令時(shí),主程序中其他模塊會(huì)將Door_flg 置1;
(2)當(dāng)Door_flg 為1 時(shí),首先將Door_flg 標(biāo)志位清0,將RELAY 電平拉低800ms 后升回高電平;否則保持原高電平狀態(tài);
(3)流程結(jié)束。
3.3.4 語音模塊
語音模塊采用串口控制,共存儲(chǔ)7 組指令,可播放7個(gè)音樂文件,指令表如下:
“A7:00001”——播放MP3 文件00001;
“A7:00002”——播放MP3 文件00002;
“A7:00003”——播放MP3 文件00003;
“A7:00004”——播放MP3 文件00004;
當(dāng)串口發(fā)出對應(yīng)指令給語音模塊時(shí),JR6001 播放對應(yīng)的語音文件,語音文件按照相關(guān)規(guī)范命名。
3.3.5 舵機(jī)驅(qū)動(dòng)模塊
根據(jù)舵機(jī)的數(shù)據(jù)手冊說明,舵機(jī)的脈沖周期約為2.5ms一個(gè)周期,通過不斷改變脈沖在一個(gè)周期內(nèi)的占空比,可調(diào)整舵機(jī)打角的角度,可由以下公式計(jì)算舵機(jī)的脈沖頻率:
因此,當(dāng)脈沖頻率接近400Hz 時(shí),舵機(jī)可穩(wěn)定工作,400Hz 的脈沖,是舵機(jī)的最佳頻率。STM32 的定時(shí)器輸出脈沖頻率公式如下:
fout:輸出頻率;SysClk:系統(tǒng)時(shí)鐘頻率,默認(rèn)80MHz;P:分頻系數(shù);Cnt:定時(shí)器計(jì)數(shù)值。
本項(xiàng)目系統(tǒng)始終頻率為80MHz,設(shè)輸出脈沖fout為500Hz 時(shí),計(jì)算出分頻系數(shù)P為199,定時(shí)器計(jì)數(shù)初值Cnt為799。由于單片機(jī)系統(tǒng)從0 開始計(jì)數(shù),所以Cnt為799 時(shí),定時(shí)器每完成一次計(jì)數(shù)周期,正好計(jì)數(shù)800 次,分頻系數(shù)取值同理。通過輸出不同占空比的方波,舵機(jī)可精確打角到不同的角度。輸出占空比的公式如下:
Value為比較寄存器(16bit)的數(shù)值,當(dāng)定時(shí)器當(dāng)前計(jì)數(shù)值小于Value時(shí),通道輸出為高電平;否則輸出低電平。使用LL_TIM_OC_SetCompare 可修改每個(gè)通道的Value值,即可切換不同的占空比。由此可見,STM32 的定時(shí)器設(shè)計(jì),在PWM不同占空比輸出時(shí),使用比51 單片機(jī)更簡便。
本項(xiàng)目定時(shí)器3 配置如下:
(1)時(shí)鐘源(Clock Source):內(nèi)部時(shí)鐘80MHz;(2)通道配置(Channel):通道3,通道4 配置為PWM 輸出模式;(3)PWM 模式(mode)配置:模式一(普通PWM);(4)輸出比較器(Output Compare):使能。
3.3.6 Zigbee 模塊
Zigbee 模塊預(yù)留USART 接口,通過串口通信實(shí)現(xiàn)數(shù)據(jù)無線透傳,STM32 串口參數(shù)配置:
(1)通信波特率:115200;(2)數(shù)據(jù)長度:8 位;(3)將停止位:1 位;(4)校驗(yàn)位:無;(5)工作模式:收發(fā)模式;(6)校驗(yàn)?zāi)J剑簾oCRC 校驗(yàn)。
備注:當(dāng)收發(fā)設(shè)備的串口參數(shù)配置一致時(shí),才能正常收發(fā)數(shù)據(jù),通信波特率通常采用115200 和9600;在完成串口配置后,需要使用USART_Cmd,開啟串口,并使用USART_ITConfig,使能串口接收中斷。
將ZigBee 無線通信技術(shù)、RFID 射頻識(shí)別技術(shù)與嵌入式技術(shù)融合,設(shè)計(jì)完成了一套智能家居控制系統(tǒng)。該系統(tǒng)的功耗低、性價(jià)比相對較高、操作簡單,實(shí)現(xiàn)了部分日常生活實(shí)用價(jià)值較高的功能,例如日程定時(shí)提醒功能,全屋家電聯(lián)動(dòng)功能,家用電器的語音控制,線上控制,及定時(shí)開關(guān)等。但該系統(tǒng)的硬件部分還需要進(jìn)一步完善,集成化的程度有待提高。