基于 Android 和藍(lán)牙的遙控開關(guān)控制系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
0 引 言
家庭生活是人們?nèi)粘I畹闹匾M成部分,如何搭建一個(gè)方便使用、高效率、低成本的智能家居系統(tǒng),進(jìn)而為人們提供一個(gè)方便快捷、舒適安全的家庭生活環(huán)境,是近來(lái)信息技術(shù)從業(yè)者研究的一個(gè)熱點(diǎn)問(wèn)題。傳統(tǒng)的智能家居通信多采用有線方式,其缺點(diǎn)是布線繁雜、安裝成本高、系統(tǒng)升級(jí)困難、擴(kuò)展性和移動(dòng)性差。室內(nèi)常用的開關(guān)面板如圖 1 所示,由蓋板和翹板組成,按動(dòng)翹板可以實(shí)現(xiàn)開關(guān)的通斷。該面板使用廣泛,若要進(jìn)行智能化改造,必然需要改動(dòng)原有墻體線路 [1-4]。
針對(duì)上述情況,本文提供一種簡(jiǎn)單有效的開關(guān)面板無(wú)線控制方式如圖 2 所示。本體與基座采用螺釘連接,通過(guò)過(guò)盈配合罩扣在蓋板上。在本體中,以舵機(jī)為原動(dòng)機(jī),曲柄滑塊機(jī)構(gòu)為執(zhí)行部件,仿照手指按動(dòng)翹板 ;控制系統(tǒng)采用基于藍(lán)牙技術(shù)的無(wú)線通信方式 ;整個(gè)裝置采用放置在電池倉(cāng)中的可充電鋰電池供電。本裝置采用罩扣式安裝,安裝方便,不改動(dòng)原有接線,不需要專業(yè)技術(shù)便可安裝,可隨時(shí)拆卸并更換安裝位置。
1 系統(tǒng)概述
本家居控制器采用低功耗的微控單元和無(wú)線通信模塊,這樣保證了系統(tǒng)的穩(wěn)定性、低功耗和低成本 ;與無(wú)線通信模塊之間采用心跳鏈路工作模式,保證了設(shè)備響應(yīng)時(shí)效性。
系統(tǒng)工作時(shí),以手機(jī)等智能終端作為上位機(jī),利用藍(lán)牙功能發(fā)出指令,以單片機(jī)為核心的下位機(jī),通過(guò)藍(lán)牙透?jìng)髂K接收指令,經(jīng)處理后由數(shù)字引腳發(fā)出控制信號(hào)使機(jī)械結(jié)構(gòu)完成開關(guān)動(dòng)作。系統(tǒng)采用電池供電,為避免電池的快速消耗,下位機(jī)在與上位機(jī)連接后,如果在單位時(shí)間內(nèi)沒(méi)有接收到有效指令,則進(jìn)入休眠狀態(tài)。由單片機(jī)內(nèi)置定時(shí)器定期喚醒,發(fā)送一個(gè)同步幀至上位機(jī),上位機(jī)接收到同步幀之后才會(huì)進(jìn)行有效的數(shù)據(jù)交流,使執(zhí)行終端從休眠模式轉(zhuǎn)入工作模式執(zhí)行任務(wù),系統(tǒng)執(zhí)行完后繼續(xù)休眠以節(jié)省電量。系統(tǒng)總體設(shè)計(jì)如圖 3 所示 [5-7]。
2 硬件選型
單片機(jī)模塊采用 Arduino Nano,它是一種基于 ATMEGA328P 的小型單片機(jī)集成板,有 16 KB 的閃存用于存儲(chǔ)代碼。Arduino Nano 上的 14 個(gè)數(shù)字引腳都可以用作輸入或輸出,可以使用 pinMode(),DigalWrite() 和 DigalRead() 函數(shù)進(jìn)行操作,每個(gè)引腳工作電壓為 5 V,驅(qū)動(dòng)電流為 40 mA,并有內(nèi)部上拉電阻,A6,A7 針腳可以讀取模擬信號(hào)用來(lái)監(jiān)控電源模塊。ATMEGA 328P 有 8 種節(jié)電設(shè)置,SLEEP 指令可以使 MCU 進(jìn)入掉電模式,降低功耗。另外,該集成板具有 UART 串行通信引腳,可用于接收和發(fā)送 TTL 串行數(shù)據(jù)。
藍(lán)牙通信在生活中的應(yīng)用非常廣泛,大多數(shù)無(wú)線設(shè)備支持此功能。本設(shè)計(jì)中藍(lán)牙模塊采用 HC-05 藍(lán)牙透?jìng)髂K,其優(yōu)點(diǎn)是體積小巧、貼片生產(chǎn)、穩(wěn)定性好、易嵌入。HC-05 采用了 CSR 主流藍(lán)牙芯片,藍(lán)牙 V2.0 協(xié)議標(biāo)準(zhǔn),輸入電壓為3.6 ~ 6 V,可設(shè)置多種波特率,空曠地有效距離為 10 m,能滿足室內(nèi)使用??梢耘c各種帶藍(lán)牙功能的電腦、藍(lán)牙主機(jī),以及大部分帶藍(lán)牙的手機(jī)、PDA 等智能終端配對(duì)。其模塊上引出接口,包括 VCC,GND,TXD,RXD。調(diào)試時(shí)可以采用 AT 指令設(shè)置通信參數(shù),藍(lán)牙模塊發(fā)送端 TXD,接Arduino Nano 上的 RXD 引腳 ;藍(lán)牙模塊接收端 RXD,接Arduino Nano 上的 TXD 引腳。
電源模塊為可充電電池供電,用于向執(zhí)行裝置提供工作電源。本系統(tǒng) 24 h 連續(xù)工作過(guò)程中,處于低功耗休眠狀態(tài),無(wú)線接收模塊周期性喚醒,以激活系統(tǒng)進(jìn)行工作,進(jìn)一步降低了能耗,提高了系統(tǒng)可靠性。
電機(jī)驅(qū)動(dòng)模塊采用 MG996R 舵機(jī),以舵機(jī)為原動(dòng)機(jī)的機(jī)械裝置可以實(shí)現(xiàn)對(duì)開關(guān)面板的按動(dòng)操作。MG996R 舵機(jī)質(zhì)量輕,響應(yīng)速度快,控制精度適中,工作電壓為 4.8 ~ 7.2 V,可以與 MCU、藍(lán)牙模塊共用電源。
下位機(jī)硬件框圖及實(shí)物如圖 4 所示。
3 軟件設(shè)計(jì)
軟件部分主要是應(yīng)用計(jì)算機(jī)編程語(yǔ)言設(shè)計(jì)應(yīng)用程序?qū)Ω黝愋盘?hào)進(jìn)行處理計(jì)算,最終實(shí)現(xiàn)對(duì)硬件的控制。本系統(tǒng)需要在軟硬件協(xié)同工作實(shí)現(xiàn)對(duì)開關(guān)的遠(yuǎn)程控制,分為上位機(jī)軟件和下位機(jī)軟件。上位機(jī)軟件是安卓移動(dòng)端 APP,用戶通過(guò)APP 發(fā)送指令 ;下位機(jī)軟件在 Arduino Nano 中,用于接收指令驅(qū)動(dòng)舵機(jī)。
3.1 上位機(jī) APP 設(shè)計(jì)
以 Android 系統(tǒng)為例,系統(tǒng)中上位機(jī)與下位機(jī)之間由藍(lán)牙通信實(shí)現(xiàn)數(shù)據(jù)傳輸,上位機(jī)部分主要功能為 :打開應(yīng)用程序時(shí),與對(duì)應(yīng)的下位機(jī)藍(lán)牙模塊建立連接,將指令通過(guò)藍(lán)牙功能發(fā)送至下位機(jī)的藍(lán)牙模塊。啟動(dòng) APP 后,系統(tǒng)首先會(huì)判斷是否支持藍(lán)牙,如圖 5(a)所示 ;確認(rèn)支持后再判斷藍(lán)牙狀態(tài),此時(shí)應(yīng)使藍(lán)牙功能處于打開狀態(tài),并掃描搜索附近藍(lán)牙設(shè)備,如圖 5(b)所示 ;完成與硬件采集設(shè)備的匹配連接,連接成功后跳轉(zhuǎn)到操作界面進(jìn)行數(shù)據(jù)的傳輸,如圖 5(c)所 示。本系統(tǒng)使用安卓 Eclipse 設(shè)計(jì)了一款手機(jī) APP,使用方便,調(diào)試難度低。
3.2 下位機(jī)程序設(shè)計(jì)
下位機(jī)部分主要通過(guò)藍(lán)牙模塊接收指令,并驅(qū)動(dòng)舵機(jī)旋轉(zhuǎn)指定角度等動(dòng)作,故單片機(jī)的程序設(shè)計(jì)較為簡(jiǎn)單。
程序首先對(duì) Arduino Nano 的引腳、串口波特率等進(jìn)行初始化設(shè)置,將通信模塊設(shè)置為接收狀態(tài),并使 Arduino Nano進(jìn)入低功耗模式。當(dāng)接收到正確數(shù)據(jù)后產(chǎn)生中斷,對(duì)外圍電路開始供電,系統(tǒng)各模塊反饋信息給 Arduino Nano。而后Arduino Nano 退出低功耗模式,對(duì)數(shù)據(jù)進(jìn)行處理,一方面驅(qū)動(dòng)舵機(jī),另一方面通過(guò)藍(lán)牙串口將數(shù)據(jù)發(fā)送至上位機(jī)。數(shù)據(jù)發(fā)送完成后再次進(jìn)入低功耗模式。
使用 Arduino Nano 編寫藍(lán)牙通信程序簡(jiǎn)單快捷,完成串口通信波特率(本文采用 9 600 b/s)等參數(shù)初始化設(shè)置后,利用 Serial.read()函數(shù)讀取藍(lán)牙模塊傳入的數(shù)據(jù),根據(jù)讀到的數(shù)據(jù)執(zhí)行相應(yīng)的動(dòng)作。由于開關(guān)只有兩種狀態(tài),本文中,若藍(lán)牙模塊收到數(shù)據(jù)“1”,則舵機(jī)旋轉(zhuǎn)到 0°,然后返回到20° ;若讀到數(shù)據(jù)“2”,則舵機(jī)旋轉(zhuǎn)到 40°,然后返回到20°。需要注意,這里的“1”和“2”是由上位機(jī) APP 中的設(shè)定而決定,Arduino Nano 程序中的設(shè)定與上位機(jī) APP 端的編碼必須一致。Arduino Nano 串口通信程序如下 :
值得注意的是,組建系統(tǒng)之前需要用 AT 指令對(duì) HC-05藍(lán)牙模塊進(jìn)行設(shè)置,包括藍(lán)牙名稱、波特率、配對(duì)碼等參數(shù)。另外,系統(tǒng)軟件設(shè)計(jì)時(shí)應(yīng)采用模塊化設(shè)計(jì)思想,這樣有利于系統(tǒng)調(diào)試,而且便于在項(xiàng)目間進(jìn)行移植。
4 結(jié) 語(yǔ)
通過(guò)以上軟硬件構(gòu)成的一系列的接收、觸發(fā)動(dòng)作,可以較為理想地手動(dòng)與電動(dòng)控制開關(guān)。舵機(jī)驅(qū)動(dòng)的機(jī)械機(jī)構(gòu)運(yùn)行在指定位置按動(dòng)翹板后,立即自動(dòng)返回至初始位置以釋放翹板,解決了手動(dòng)與電動(dòng)兼具的問(wèn)題。無(wú)線通信裝置接收到移動(dòng)終端發(fā)來(lái)的指令信號(hào),通過(guò)其內(nèi)置的應(yīng)用軟件,根據(jù)開或關(guān)的動(dòng)作指令控制機(jī)械結(jié)構(gòu),行進(jìn)一定的距離按動(dòng)翹板,以達(dá)到本裝置的應(yīng)用目的 [2,8-9]。
該系統(tǒng)充分利用藍(lán)牙通信的廣泛性和智能終端的便捷性,安裝簡(jiǎn)單,無(wú)需布線,無(wú)用電隱患,通過(guò)合理布置,可以將整個(gè)室內(nèi)的開關(guān)組網(wǎng)控制。對(duì)系統(tǒng)的軟硬件進(jìn)行改裝,能夠?qū)崿F(xiàn)其他電器的無(wú)線控制組網(wǎng)功能,可廣泛應(yīng)用在不便于布線改線的居家辦公場(chǎng)合,具有一定的實(shí)用價(jià)值。