(上圖是網路上找的)最近實作了很多有關於物聯網的應用,這些應用可能是用藍牙、WIFI、行動網路或有線網路等。在智慧家庭裡的應用中,最方便的就是利用藍牙來連結各樣的設施,透過行動網路來進行與雲端的通訊。但藍牙的實用距離比較短,所以有些應用中是以有效範圍比較遠的WIFI來做智慧家庭的主要連結媒體,一般而言距離越遠表示能量越強,雖然沒有明顯証據說明WIFI這樣的無線電波對人體有什麼負面的影響,不過有許多人的想法是能避免就避免。在這樣減少無線電波或電磁波的想法下,那就只能以實體線路來連結需控制的各項設備了,但在實際應用上,應該沒有人為了控制天花板上的日光燈,而特別去拉網路線,這時在家中既有的電力路線就派上用場了。

電力線通信(英語:Power Line Communication,簡稱PLC),又稱電力線網路,指利用既有電力線,將數據或資訊以數位訊號處理方法進行傳輸。PLC技術使用既有低頻(50/60赫茲)的電力線路傳送寬頻的網路訊息,相對於ADSL使用電話線路,一般的應用可分為兩種,FTTx使用光纖線路,Cable Modem使用有線電視的線路。使用電力線通信技術,基本上不需要另外重新鋪設網路線路,且電力線路涵蓋的地區範圍之廣,遠大於其他種載體的線路。(維基百科)

今天玩的這一套電力線通信的器材是美麗蓮股份有限公司陳老闆特別熱情提供的,這一套設備的系統架構如下圖

目前拿到的組件有

電力控制器:可對500W以下的燈具,T8或T5日光燈,鹵素燈,鎢絲燈,LED燈...甚至其他家電,例如電扇或音響...等 進行二段(開或關)控制。制器除了可接收同一迴路上的PLC電力線控制訊號,在不同迴路上也可以單獨使用,接受IR紅外線訊號進行個別控制。

調光驅動控制器:接收回路上的PLC電力線控制訊號,對於驅動外掛的LED崁燈或投射燈,可進行調光或開關控制,最高輸出電壓可達43V(最多可驅動14顆串聯的白光LED),最大輸出功率為15W

電力橋接器:把接收到的控制訊號,編碼後再轉送到電力線上,經由電力線傳送訊號到迴路上的燈光控制器,這個橋接器除了可以接收IR紅外線訊號,還預留一個UART接收介面,可以接受使用傳輸線的線控方式,或者也可以接上WiFi或RF模組,接收WiFi或RF的無線電波控制訊號。

把所有零件秒接完成

最左邊是電力控制器,我把它接上檯燈,中間是調光驅動控制器,已接上可調亮度的LED燈以及紅外線接收器,最右邊是電力橋接器,已接上藍牙以及紅外線接收器。紅外線這一次沒用到,等有空再做一個Arduino的萬用控制器來試試。

這一次的應用是幫美麗蓮這些組件,在原有功能上加以延伸,由行動裝置,透過藍牙連結(原本是透過紅外線),以電力線來傳送資訊,控制燈光的開、關與調光等相關動作。把APP的畫面安排了一下


主要的功能是:藍牙的連結,各路燈光的開關,三路燈光的亮度調整,各路燈光的開關定時器。由於大部分的程式內容與前面的範例相類似,所以不再重覆說明了。在調光的部分是用拉桿(Slider)來控制,隨著接拉桿位置的變化,燈光也會即時變化

在定時開關的部分是使用Spinner做下拉式選單給使用者設定多少時間後開或關

實際放到手機上來玩玩看,藍牙連線OK

全關、全開、各路的開關OK

隨著手指的拖曳,燈光會即時跟著變化,OK

設定各線路的定時開關,OK

美麗蓮的這一套Silacs燈光控制系統,除了這次藍牙控制之外,應可再加上如我在居家環境參數偵測所提到的光敏電阻、火焰感測、煙霧感測、溫濕度感測等等,以便自動控制相關設施,光線太暗時自動開燈(或調整亮度),濕度太高時啟動除濕機,溫度太高時啟動空調等等,降低災害可能造成的損害(例如火焰偵測、煙霧偵測等等即時發出警訊與啟動相關設施)

PS

其實我應該把這些組件裝到我的辦公室中,直接用來控制燈光或相關的設備,但我怕還沒裝好就把自己電死,有誰能夠來幫我搞定呢?



********** 2014/4/21 補充 **********

美麗蓮陳老闆又幫他們的設備加了一些功能,如蜂鳴器功能及亮度調光的記憶等。所以我再把APP修改了一下

接下來想說既然要修改了,就把APP中加入TinyDB來保留APP中使用過的變數以供下次執行時使用。關於TinyDB的使用在之前的讀取檔案做為離線資料來源有介紹過,那時是使用TinyDB模擬成手機中的小型資料庫來用。

有了TinyDB的幫忙,就可以把如使用者調光的數值、使用者自定的各線路名稱、連結藍牙的MAC等各類的數值保留下來,下次執行APP時能呈現出最後使用的狀況。例如說在用Slider調光時就即時將數值存入TinyDB中

下次在APP執行時在initialize事件中由TinyDB中讀出資訊

接下來,判斷是不是空值,若不是(表示使用者有改變過),把資訊還原到對應的物件中

其他如使用者自定的各線路名稱、連結藍牙的MAC等的做法都是同樣的處理程序,不過在藍牙的部分有做了一點特別的處理,就是在使用上希望只要使用者有連上電力線通信的控制器後,未來只要執行APP,就能自動連上線,在使用者連上電力線通信控制器會將資訊記錄到TinyDB中

下次在APP執行時在initialize事件中由TinyDB中讀出資訊

接下來,判斷是不是空值,若不是(表示使用者有連上電力線通信控制器過了),把資訊還原到對應的物件中,並且呼叫自定BTAutoConnect函數連上電力線通信控制器,這樣只要有連上過電力線通信控制器,未來執行APP就會自動連上電力線通信控制器

自定BTAutoConnect函數,主要是檢查目前藍牙是否為連線狀況、是否曾連上電力線通信控制器、連線電力線通信控制器、顯示連上線了

由於藍牙有效距離大概是十米左右,因此有可能會在連上電力線通信控制器後,走離開藍牙有效距離(或其他原因)而造成斷線,所以在APP中會每十秒去檢查藍牙是否斷線,若沒有連線就嘗試再去連上電力線通信控制器(呼叫BTAutoConnect函數)以便使用者在有效距離內隨時都可以對相關設備進行控制

不知不覺又寫了好多程式碼,我終於知道為何我右眼中的血管會一爆再爆了!