陳俊龍,魏小鎮(zhèn),黃堪杰,陳嘉欣,黃映欣
(廣東東軟學院,廣東佛山,528200)
隨著社會經(jīng)濟不斷發(fā)展以及人們生活節(jié)奏加快,智能家居的應用場景越來越豐富,智能家居使用和方便越來越受人們青睞。智能家居泛指以一個網(wǎng)關(guān)為總節(jié)點,多個傳感器和控制終端為子節(jié)點,各子節(jié)點和總結(jié)點之間采用無線或有線方式進行通信的嵌入式自動化系統(tǒng)。旨在提高用戶的生活水平,帶給用戶愉快的生活體驗。但市面上的智能家居系統(tǒng)普遍存在價格高昂,功能花哨而不實用的特點,本課題針對這一痛點設(shè)計實驗,實現(xiàn)部分日常生活實用價值較高的功能,例如日程定時提醒,全屋聯(lián)動,家用電器的語音控制,線上控制,及定時開關(guān)等。
智能家居節(jié)點終端要求采用低功耗,分布式,允許有一定延遲的嵌入式系統(tǒng)及傳感器。本文介紹了以低功耗芯片CC2530 為無線模塊,STM32F103 芯片為總控(網(wǎng)關(guān))通過路由和節(jié)點終端(STM32F103)的連接,結(jié)合語音識別模塊,構(gòu)建一套智能家居系統(tǒng)。
本套智能家居系統(tǒng)共包括兩套主板和一個軟件。門控板和網(wǎng)關(guān)主板采用射頻通信,模擬物聯(lián)網(wǎng)通信過程,后期會改用Zigbee(CC2530)完成無線通信開發(fā)。

圖1 門控終端結(jié)構(gòu)框圖
門控終端采用12V 電池供電,通過LM2596 降壓芯片將電壓降為5V,3.3V 供入系統(tǒng);射頻模塊采用MFRC-522模塊進行讀卡;2個獨立按鍵模擬門鈴(外側(cè))和開門按鍵(內(nèi)側(cè));綠色指示燈亮起表示識別成功,紅色指示燈提示識別失??;電磁鎖采用12V 斜口電磁鎖,電磁鎖直接從電池取電;無線模塊采用Zigbee 模塊進行數(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 屏幕上;獨立按鍵可控制門控端電磁鎖開關(guān);無線模塊接收門控終端的信息,照明電路可通過軟件和語音控制,也可以通過按鍵控制燈亮滅;揚聲器可播放門鈴音樂和全屋鬧鐘,并發(fā)出語音提示;舵機電路控制窗戶開合。
本系統(tǒng)采用7.2V 電池供電,單片機及各元器件采用3.3V 電壓供電,且考慮到射頻模塊(Zigbee 模塊)工作電流較大,因此電源方案采用LM2596S 為主方案,并同時預備AMS1117 為備用方案。以下介紹LM2596S 的設(shè)計思路:電源輸入端接入7.2V 電池,輸入端并聯(lián)一個0.1μF 的濾波電容,將芯片的第5 腳接地使能輸出,在輸出端和GND 并聯(lián)一個1N5824 鉗位二極管,通過串聯(lián)一個47μH 的電感,將3.3V 電壓輸入至單片機系統(tǒng),為確保電壓穩(wěn)定,輸出端電壓要反饋至Feedback 腳,即芯片第4 腳。最后在輸出端與GND 之間接入一個0603 封裝的LED 和1k 的電阻,指示燈亮表示電壓正常輸出。為方便產(chǎn)品測試,將3.3V 電壓和GND 等電源腳引出排針。

圖3 大電流降壓模塊

圖4 RFID 射頻模塊

圖5 液晶屏接線

圖6 E18 模組
射頻模塊采用RC522,采用SPI 總線進行通信,SPI 總線為全雙工通信,在SCK 引腳上升沿時,將數(shù)據(jù)寫入芯片或者讀出數(shù)據(jù)。IC 卡靠近塊后,RFID 模塊將模寫入數(shù)據(jù)到IC 卡,再從IC卡中將數(shù)據(jù)讀出,然后將數(shù)據(jù)通過SPI總線發(fā)到單片機。
本項目采用中景園公司的OLED 液晶屏,屏幕SSD1306 驅(qū)動芯片,可使用I2C 和SPI 接口連接單片機進行通信。顯示屏支持藍,白,黃三種顯示顏色。本項目使用I2C 接口的屏幕,減少驅(qū)動代碼移植的難度,I2C 通信速度較低,主要用于顯示部分調(diào)試信息。
Zigbee 模組采用深圳EBYTE 公司的CC2530 集成模組——E18-MS1。模塊可支持4dBm 的發(fā)射功率,通信距離200 米內(nèi)。該模塊出廠默認帶有自組網(wǎng)程序,支持上位機調(diào)試軟件二次開發(fā)。E18 多節(jié)點組成的Mesh 網(wǎng)絡具備組織、治愈功能,其路由可自動建立和維護;網(wǎng)絡覆蓋范圍大、吞吐率高、可靠性強是該產(chǎn)品獨特的優(yōu)點。模塊采用串口通信,連接到單片機USART3 進行開發(fā)。
語音模塊采用JR6001,該模塊采用單片機串口控制。模塊1、2 腳為電源腳;3、4 腳分別連接單片機Tx 和Rx 引腳;第5 腳所接LED 為音頻輸出指示燈,當音頻信號輸出到6、7 腳時,指示燈會閃爍一次。U1 為排針接口,連接揚聲器。
2 扇窗戶采用舵機進行推拉開關(guān),由于單片機引腳的電流不夠,采用三極管構(gòu)成共發(fā)射極放大電路進行電流放大。R2 和R3 為限流電阻,防止當I/O 口為高電平時,電流過大擊穿發(fā)射極,D_PWMx 引腳已通過外接排阻上拉為高電平。當PWMx 引腳為高電平時,三極管發(fā)射極與集電極導通,D_PWMx 輸出低電平;當PWMx 引腳為低電平時,三極管發(fā)射極與集電極截止,D_PWMx 輸出高電平。因此該電路可形成一個反相器,即PWMx 占空比為80%時,D_PWMx 為20%。
指示燈采用排阻上拉連接單片機,減少元器件焊接難度。3 個指示燈連接I/O 口,用于調(diào)試排阻的2、3 號腳連接舵機電路進行上拉,LED4 為電源指示燈,排阻9 號腳連接單片機復位引腳RESET,同時并聯(lián)一顆104 電容濾波。
照明電路用于為外接的USB 燈管提供足夠的電流,本項目采用ULN2003 芯片,該芯片可提供每個輸出口最高0.5A 的電流,可為系統(tǒng)照明燈電路提供足夠的電流。LEDx網(wǎng)絡接入單片機的I/O 口,右側(cè)的輸出口連接到USB 插座的負極,USB 插座正極直連電源,當LEDx 為高電平時,對應輸出端為低電平,此時LED 燈條會被點亮,反之熄滅。

圖7 JR6001 語音播報模塊

圖8 舵機驅(qū)動電路

圖9 排阻構(gòu)成的指示燈電路

圖10 照明電路

圖11 門控板軟件框架

圖12 網(wǎng)關(guān)板軟件框架
門控板和網(wǎng)關(guān)板上層軟件驅(qū)動軟件主要分為以下部分:
(1)GPIO 配置:主要控制LED 指示燈和檢測按鍵電平;
(2)RC522 射頻卡:用模擬SPI 總線配置射頻模塊的各項參數(shù),并實現(xiàn)尋卡,讀卡識別卡號的功能;
(3)OLED 顯示屏:使用模擬I2C 協(xié)議驅(qū)動屏幕,用于顯示一部調(diào)試信息。
(4)電磁鎖驅(qū)動:配置同普通I/O 口,但由于電磁鎖通電時間不能過長,所以每次向鎖芯通電的時間都設(shè)置為0.8 秒。
(5) 語音模塊:JR6001 采用串口通信,AT 指令控制,采用單片機一路USART,配置為發(fā)送模式,波特率115200,通過串口AT 指令,可實現(xiàn)語音播報功能;
(6)舵機驅(qū)動:2 路舵機由單片機輸出2 路低頻率PWM驅(qū)動,初始化頻率配置定時器工作頻率,通過在循環(huán)函數(shù)中修改PWM 占空比可控制舵機打角。
(7)Zigbee 模塊:采用串口+AT 指令控制,使用一路USART 配置為收發(fā)模式,開啟接收中斷。
3.2.1 門控板主程序
門控板主要完成IC 卡識別,串口3(Zigbee)指令識別,繼電器開關(guān),卡號比對的功能,工作流程如下:
(1)單片機上電后,對各模塊進行初始化配置。
(2)初始化模塊配置后,測試各模塊功能;
(3)IC 卡尋卡,如果識別到IC 卡,則刷新RC522_ID_Buff 數(shù)組的卡號;
(4)串口3 識別指令,并配置相應的標志位;
(5)掃描按鍵狀態(tài),配置對應的標志位;
(6)識別Door_flg 標志位,若為1,則繼電器通電0.8 秒;否則執(zhí)行下一個流程;
(7)對當前IC 卡存儲數(shù)組RC522_ID_Buff 中的卡號與存儲在Card_One 數(shù)組中的卡號進行比對,卡號相通則將Success 寫入顯示屏;否則執(zhí)行下一個流程;
(8)使用ReFlash 函數(shù)刷新屏幕數(shù)據(jù);
(9)重復執(zhí)行流程3-8。

圖13 門控板主流程
3.2.2 門控板中斷
門控板中斷程序主要為串口中斷,當串口收到數(shù)據(jù)時,自動觸發(fā)。中斷處理流程如下:
(1)進入中斷后,首先識別接收中斷標志位USART_IT_RXNE,是否為1,不為1 則,直接退出中斷;
(2)若為1 則清除接收中斷標志位USART_IT_RXNE;
(3) 將串口寄存器USARTx->DR 的數(shù)據(jù)進行讀取;
(4)結(jié)束流程,退出中斷。

圖14 串口中斷流程
3.2.3 網(wǎng)關(guān)板主程序
網(wǎng)關(guān)板主要完成,串口指令發(fā)送,按鍵掃描,LED 燈顯示,ULN2003 驅(qū)動(電器開關(guān))和PWM 輸出(窗戶舵機)等功能,工作流程如下:
(1)單片機上電后,對各模塊進行初始化配置,時鐘,定時器,GPIO,NVIC 中斷,串口,OLED 顯示屏;
(2)在初始化完成后,對各個模塊進行功能測試,GPIO 全部拉為高電平,串口和OLED 顯示屏打印“Hello World”;

圖15 網(wǎng)關(guān)板工作流程
(3)對8 個按鍵依次掃描識別,識別到I/O 口為低電平則更新存儲按鍵號,并進行信號處理;
(4)識別串口緩存數(shù)組的內(nèi)容,識別出指令后,設(shè)置相應電器的標志位,隨后清空緩存區(qū);
(5)根據(jù)標志位,對LED 燈的I/O 口進行電平輸出;
(6)根據(jù)舵機標志位,輸出相應占空比的PWM 波形;
(7)根據(jù)標志位,對ULN2003 進行電平輸出;
(8)刷新OLED 顯示屏;
(9)重復流程3—8。
3.3.1 RC522 射頻卡配置
在RC522 初始化流程中,首先對SPI 的4 個重要I/O口進行輸入輸出配置;然后通過SPI 總線對模塊進行軟件復位,將CS引腳置于低電平作選通使能。接下來二次復位之后,開始寫入命令,配置模塊。
在尋卡子流程中,首先調(diào)用PcdRequest 函數(shù)進行尋卡,尋卡結(jié)果返回到變量ucStatus 中。若ucStatus 為1,則表示尋卡成功,將卡號輸出到ID 指針變量中,否則結(jié)束尋卡,退出該流程;流程圖如圖16 所示。

圖16 RC522 模塊軟件初始化流程和尋卡流程

圖17 OLED 初始化及顯示流程示例

圖18 電磁鎖控制流程圖

圖19 舵機脈沖長度對應打角角度
RC522 各參數(shù)配置如下:
(1)工作方式:ISO14443-A;
(2)工作模式:接收和發(fā)送;
(3)內(nèi)部定時器初值:30。
3.3.2 OLED 顯示屏
中景園的OLED 顯示屏,采用I2C 協(xié)議款,在初始化流程中,首先使能PB7 和PB8 所在的APB2 總線時鐘;隨后初始化2 個I/O 口為推挽輸出模式;對OLED 進行軟件復位之后,開始向顯示屏芯片寫入指令。
在主程序使用屏幕顯示數(shù)據(jù)時,流程如下:首先調(diào)用OLED_ShowString 函 數(shù), 指定字符串大小,坐標,字符串內(nèi)容,將字符串數(shù)據(jù)寫入OLED 的寄存器,在寫入多個字符串之后,再刷新屏幕。由于屏幕刷新的時間比字符串寫入的時間稍長,因此不建議每寫入一次字符串,就對屏幕進行刷新,這樣會導致單片機運行效率低下,將所有字符串更新到寄存器中,最后再對屏幕進行刷新,不僅節(jié)省運算資源,而且不會造成屏幕卡頓。經(jīng)測試,該方案可行。
3.3.3 電磁鎖驅(qū)動
電磁鎖的初始化和LED 燈相同,采用推挽輸出模式即可,初始化默認配置RELAY 引腳為高電平,此處不過多贅述;在電磁鎖通電時,由于工作電流(0.7A)較大,為提高設(shè)備可靠性,鎖頭不可長時間通電。當RELAY 引腳為低電平時,繼電器閉合,電磁鎖通電,斜口舌收縮;反之亦然,因此控制單片機引腳高低電平,即可實現(xiàn)電磁鎖開合。本項目設(shè)置電磁鎖的通電時間為0.8 秒,程序流程如下:
(1)當判斷到開門指令時,主程序中其他模塊會將Door_flg 置1;
(2)當Door_flg 為1 時,首先將Door_flg 標志位清0,將RELAY 電平拉低800ms 后升回高電平;否則保持原高電平狀態(tài);
(3)流程結(jié)束。
3.3.4 語音模塊
語音模塊采用串口控制,共存儲7 組指令,可播放7個音樂文件,指令表如下:
“A7:00001”——播放MP3 文件00001;
“A7:00002”——播放MP3 文件00002;
“A7:00003”——播放MP3 文件00003;
“A7:00004”——播放MP3 文件00004;
當串口發(fā)出對應指令給語音模塊時,JR6001 播放對應的語音文件,語音文件按照相關(guān)規(guī)范命名。
3.3.5 舵機驅(qū)動模塊
根據(jù)舵機的數(shù)據(jù)手冊說明,舵機的脈沖周期約為2.5ms一個周期,通過不斷改變脈沖在一個周期內(nèi)的占空比,可調(diào)整舵機打角的角度,可由以下公式計算舵機的脈沖頻率:
因此,當脈沖頻率接近400Hz 時,舵機可穩(wěn)定工作,400Hz 的脈沖,是舵機的最佳頻率。STM32 的定時器輸出脈沖頻率公式如下:
fout:輸出頻率;SysClk:系統(tǒng)時鐘頻率,默認80MHz;P:分頻系數(shù);Cnt:定時器計數(shù)值。
本項目系統(tǒng)始終頻率為80MHz,設(shè)輸出脈沖fout為500Hz 時,計算出分頻系數(shù)P為199,定時器計數(shù)初值Cnt為799。由于單片機系統(tǒng)從0 開始計數(shù),所以Cnt為799 時,定時器每完成一次計數(shù)周期,正好計數(shù)800 次,分頻系數(shù)取值同理。通過輸出不同占空比的方波,舵機可精確打角到不同的角度。輸出占空比的公式如下:
Value為比較寄存器(16bit)的數(shù)值,當定時器當前計數(shù)值小于Value時,通道輸出為高電平;否則輸出低電平。使用LL_TIM_OC_SetCompare 可修改每個通道的Value值,即可切換不同的占空比。由此可見,STM32 的定時器設(shè)計,在PWM不同占空比輸出時,使用比51 單片機更簡便。
本項目定時器3 配置如下:
(1)時鐘源(Clock Source):內(nèi)部時鐘80MHz;(2)通道配置(Channel):通道3,通道4 配置為PWM 輸出模式;(3)PWM 模式(mode)配置:模式一(普通PWM);(4)輸出比較器(Output Compare):使能。
3.3.6 Zigbee 模塊
Zigbee 模塊預留USART 接口,通過串口通信實現(xiàn)數(shù)據(jù)無線透傳,STM32 串口參數(shù)配置:
(1)通信波特率:115200;(2)數(shù)據(jù)長度:8 位;(3)將停止位:1 位;(4)校驗位:無;(5)工作模式:收發(fā)模式;(6)校驗模式:無CRC 校驗。
備注:當收發(fā)設(shè)備的串口參數(shù)配置一致時,才能正常收發(fā)數(shù)據(jù),通信波特率通常采用115200 和9600;在完成串口配置后,需要使用USART_Cmd,開啟串口,并使用USART_ITConfig,使能串口接收中斷。
將ZigBee 無線通信技術(shù)、RFID 射頻識別技術(shù)與嵌入式技術(shù)融合,設(shè)計完成了一套智能家居控制系統(tǒng)。該系統(tǒng)的功耗低、性價比相對較高、操作簡單,實現(xiàn)了部分日常生活實用價值較高的功能,例如日程定時提醒功能,全屋家電聯(lián)動功能,家用電器的語音控制,線上控制,及定時開關(guān)等。但該系統(tǒng)的硬件部分還需要進一步完善,集成化的程度有待提高。