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