(上圖是在網路上找的)最近做了很多智慧家庭的應用,在這些應用之中使用者主要都是使用行動裝置(手機或平板)、電腦來對於家中的設備進行操控。不過想像一個情境,假如我現在急著要出門,這時我要拿出手機、解鎖畫面、打開應用程式、進行相關的控制,這其實是相當不方便的一件事,應該要有一個更方便的方式來進行控制,這樣才會符合智慧家庭的格調,哈哈哈!
像上面所提的狀況主要是需要進行情境的控制(例如要出門時,關閉瓦斯閥門、關閉所有房間燈光、打開走道燈、啟動防盗系統等一連串的行為),而且想要只用一個簡單的動作就可以完成,以這樣的應用狀況來說,可以使用NFC或RFID的卡片來完成,也就是每一張不同的NFC或RFID卡片代表不同的情境設定,使用者只要在出門時感應相對情境的卡片就可以了。
不過不管是用NFC或RFID感應來進行情境控制,都會需要買許多張NFC或RFID卡片,在這裡我有一個不同的設想,就是使用不同的顏色來進行情境控制,這樣的話只要使用手邊有的(多餘的)卡片或物品於系統中登錄顏色,就可以使用於不同的情境控制中。
既然是使用顏色識別來進行情境控制,當然要有顏色感應器了,這裡是使用Color sensor GY31
每次看到有很多針腳的感應器就會感到很傷腦筋,因為買這些零件都是沒有說明書的,通常不會接錯的只有VCC與GND而已,呵呵呵。這次主要是使用Color sensor GY31、HC-05 Bluetooth與Arduino Uno,使用藍牙的原因純粹只是方便測試而已,資料的傳送使用有線、無線或藍牙均可
藍牙與顏色感應器的接法如下
顏色感應器的程式碼是參考網路上的程式碼
在使用這個顏色感應器時,遭遇到一個很大的困難,那就是顏色校正的問題,由於我是先天性辨色力異常,本來就沒辦法正確分辨顏色,所以在這裡卡關了好久,一直沒辦法得到很好的顏色感應結果,不過後來我就放棄了,因為反正在這個應用中只要能抓到RGB的三個數值,登錄到系統中就能用這個物品的特定顏色數值的來進行情境控制了
寫了一個簡單的APP,利用藍牙連結Arduino,抓取RGB數值並顯示顏色(相關的作法可以參考之前的文章)
搞定,測試OK
這裡所使用的是手錶錶帶,想像中就是要出門前以錶帶感應一下就會切換到出門模式,回到家用公事包感應一下就會切換到回家模式,躺在床上要睡覺前把眼鏡放上去感應會切換到睡眠模式,Perfect!
***** 2015/10/10 補充 *****
在我設想中智慧家庭環境感測器、安全防範感測器及家用電器控制器所蒐集到的相關參數會流向智慧控制中心,這控制中心一般來說是電腦,不會是行動裝置,感覺應該要寫個Desktop Application才對味
拿出我在"WindowForm以藍牙控制智慧居家設備"中使用過的黏呼呼藍牙棒,插上家中電腦,Win 10一下子就抓到並正常運作,不愧是已經買了10年的黏呼呼藍牙棒,跟Win 10真配(什麼跟什麼啊!)
這次寫的控制中心感測數值接收程式有兩個要注意的重點,一是"跨執行緒作業無效"的問題,一個是由於接收資訊的延遲造成使用者界面無反應的狀況。
第一個"問題跨執行緒作業無效"原因是在應用程式中禁止利用跨執行緒去存取UI,因此必須利用委派的方式處理,由於要處理兩種不同的資料型態,所以我弄了兩個
第二個是接收資訊的延遲造成使用者界面無反應的狀況,這個問題我是利用BackgroundWorker來撰寫多執行緒應對,一般來說耗時的操作在長時間運行時可能會導致使用者介面(UI)似乎處於停止回應狀態,都可以使用BackgroundWorker來解決問題。這裡主要是用於取得由Arduino端藍牙回傳的數值
這兩個問題解決,其他程式就都很單純了,在Windows作業系統中,傳統的藍牙連上後都會出現一個COM可以用,只要Baud Rate不要弄錯,就可以正確傳送與接收資料了
在控制中心接收到情境控制的顏色訊號後,就可由控制中心透過有線或無線通路對於智慧家庭中的可控制裝置(例如智慧插座或電力線通信控制器)送出相關的控制信號以達到所需的情境狀況
搞定