家庭智慧化是我們一直以來努力的目標,市面上也出現很多智慧的產品,大抵可以分為兩類
一類是大場作品如華碩、Google、Apple小米等等
一類是獨立購買的單一功能產品,如無線門鈴、智慧插座、無線燈控等等

大廠作品的好處是系統整合完整,可以互相支援連動,但是缺點也很明顯,就是『天地萬物﹐朕賜給你的才是你的﹐朕不給﹐你不能搶。 』,就是大廠沒出的你就不能用獨立購買單功能的好處是想要什麼買什麼,但是缺點就是,沒有整合,當設備一多起來,光遙控器就要搞死你

這個系列就要要來合併上面兩個優點整合起來,將家裡會用到的設備全部無線化,又有統一的介面可以管理。既然講到無線,當然要提到最適合DIY應用的LoRa無線技術,LoRa有4大優點
1.使用免授權費就可以使用的Sub1GHz頻段,繞射能力強,傳輸距離長,全家都收的到
2.尺寸小巧,而且省電,不用常常換電池
3.市面上唯一可以建構網路的IOT技術,適合家庭應用
4.設計圖與code原廠都開放網路可以查詢,建置成本低廉
這次為了簡化開發難度我們使用詮鼎代理群登的LoRa模組S76S。S76S的好處是尺寸小巧,只有11mm x 13mm,而且有開發版,腳位有外拉出來,方便開發。

前三集有溫濕度統計、照明統計與空氣品質統計
都是單方面的接收資訊,接下來我們就開始進階
在第四集中加入了雙向互動,除了可以收集電力資訊之外,還可以遠端控制

請看: 智慧家庭無線化四:智慧插座無線化

目標:
1. 電力控制
i. 透過繼電器模組控制電力開關來控制是否供應電力
ii. 整合網路校時進而提供定時開啟與關閉
2. 電流監控
i. 透過 ACS712 電流感測器模組進行使用電流之監控
ii. 透過 ACS712 電流感測器模組進行電流負載控制
4. 整合雲端系統
i. 整合 Node-Red,提供雲端控制電力開關的能力
ii. 整合 Node-Red,提供雲端使用電流之監控

使用元件:


實作:
一、感應器端硬體分析與設置一:
電流偵測:
一般來說要偵測電流,主要的重點當然是電流偵測電路,但是以常用的50A來說,都必須將之等比例下降到安全範圍內(約500mA)來偵測,一來比較安全,二來就可以使用一般的元件,不用特製元件,降低成本。
為了做到這一點一般電流偵測元件都會用類比數位轉換 IC,就 是所謂的 ADC,然後從線上的電阻分壓取出壓降,再從 ADC 轉換出相對的數值,因為要記錄數值與曲線,所以我們採用這樣的做法。

電流感測模組數值的誤差與校正:
為了測試方便我們採用Allegro ACS712 電流感測模組來加快速度與簡化流程,但是一般的電流偵測模組都無法讀取電壓的負值,以至於數值都會不正確,要解決這個問題有硬體跟軟體兩種解決方案,硬體為輸入端加一個橋氏整流電路將頻率變為兩倍,來解決這個問題,軟體方案就是,直接利用程式做校正,我們這裡使用軟體方案:我們利用電壓差來計算補償電壓頻率週期變化與消除雜訊,成功將誤差壓到30mA,但是還是太高,參考網路資料後,決定使用使用 方平均數(Quadratic mean),簡稱方均根(Root Mean Square,縮寫為 RMS), 是 2 次方的廣義平均數的表達式,也可叫做 2 次冪平均數。來計算,修正後差異值已經降到滿意的10以內,於是利用電流均方差來計算最終耗電的瓦特值
(資料來源可以參考 WiKi 平方平均數
http://zh.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E5%B9%B3%E5%9D%87%E6 %95%B0)
請參考圖片
修正前每次量測的數值差異很大,最多可以相差到30


利用電壓差來計算補償電壓後, 誤差已經低於10以內


Sensor_宣告+設定


電流讀取子涵式


計算方均根子涵式




二、感應器端硬體分析與設置二:電源控制
一般來說,要做電源控制使用繼電器是一個簡單、低成本整合性強的解決方案,利用小電力來控制大電力的開關在日常生活到處見的到。例如:電風扇的切換、燈泡的開關切換等等,在工業的應用上為了維護與安裝的方便,會使用插拔試繼電器模組配合繼電器底座使用,我們這裡為了方便演示,使用的是市面上買的繼電器模組,這個模組還有包含光耦合隔離線路,以免110V的大電影響到5V的控制設備

內部接線圖如下:


接線示意圖如下

實際接線圖如下




三、S76S設定:
S76S使用的是群登P2P的程式碼
這個程式碼的特點是已經定義好他的群組為1個Master對32個Slave,每一個Slave佔用的時間為0.5秒,所以詢問完一個群組為16秒鐘
32個Slave的設計是適合智慧家庭的
架構圖如下:


設定如下:
詳細設定可以參考第一集或是可以看附件的手冊
我們這裡直接寫好子函式,呼叫就可以設定設定


四、ATMEGA328+電流計+固態繼電器+LoRa:
以上全部設定完成之後,Arduino端就需要同時做兩件事情,一是將計算過的耗電資料透過S76S送出,二是監聽與分析S76S收到的資料是否包含控制指令,如果有收到控制指令,則透過固態繼電器去控制智慧插座的開關,並同時將狀態反饋

資料傳送子函式


感應器端主程式

完整的程式碼請看附件



五、接收器端硬體設置:

將S76S的3.3V與GND分別接到ESP-32S左右兩邊的pin19,再將S76S的TX、RX分別接到ESP-32S的pin17與pin16

接線示意圖如下


實際接線圖如下



六、S76S設定:
S76S的設定同上,差別是,改成設定為Master,在啟動即可
一樣已經寫成子函式直接呼叫即可設定
S76S_Master設定子函式



七、ESP-32S設定:

ESP-32S的部分,一樣可以利用ARduino編輯程式,
實際操作說明:
宣告設定


啟動設定



網路校時子函式


網路傳送子函式:


主程式:


展示:
因為這個方案是利用ESP-32S將資料用UDP的方式丟出 所以接收端就非常自由,只要可以接收UDP訊號的設備都可以當作 接收介面
在這裡是用IBM開發的Node-Red去做畫面演示

第一步:先將流程圖一一拉出來設定好:
如下圖



第二步跟第三部 就是將資料顯示出來並且利用Node-red做反向控制
利用按下Switch的按鈕,手動關閉電源,下圖分別代表開啟跟關閉