【原創】DIY Arduino 雲端空調控制 & 居家溫度監控 (智慧家電)

Posted by will on 十月 28, 2014 in 嗜好 |

今年夏天的時候,感覺到回家特別熱
所以幻想能夠在下班時直接在公司先遠端遙控家裡的冷氣打開
回到家剛好達成冷房,所以才開始動手打造這個作品
首先,這個裝置透過Wifi連網 (俗稱的物聯網)
使用者能夠在外直接透過網路連到家裡控制冷氣機開關
控制的方式是預先把冷氣機遙控器的訊號拷貝起來
由Arduino控制發射
也能監控最近12小時溫度變化
不過功能應該還會陸續增加
外觀圖
s_20140915_020058
下圖左邊是紅外線發射,右邊是溫度感測器
s_20141027_232820
內部拍一張
s_20141027_232735
必要材料:
1.Arduino Micro or Leonardo (Arduino其他兄弟姊妹應該也行的)
2.Wifi 轉 TTL 模組
3.USB 轉 RS232 線材
4.紅外線發射元件
5.溫度感測DS18B20
6.烙鐵
7.OK線若干
材料費應該千元有找!
非必要材料:
1.外盒 (剛好大小的盒子可遇不可求)
2.Web Server (自己架)
3.Logic Analyzer (有最好)
4.USB 轉 TTL 線材 (幫助Debug)
5.三用電錶 (能不用到當然最好)
本作品所有程式碼已經 Open source,請直接到 GitHub 下載
https://github.com/ccwillsu/SmartHomeAIR
Maker行前建議具備:
1.基本修改Code能力
2.基本Arduino開發經驗
3.基本網路知識
4.網站架設基礎
5.最基本的電路知識(照著說明不要短路或接錯線即可)
這樣我相信你就算遇到障礙,也能靠著google一下輕易排除了
6.許多的時間(前面5點都可以從0開始學,如果你沒有時間的話就很難完成了)
開始:
1.設定 Wifi 轉 TTL 模組
其實目前已經有結合 Wifi 的 Arduino 可以用
但因為價格太貴 CP 值不高又不靈活所以不採用
我是從淘寶上購買這個模組
s_RM042
當然也還有更便宜的選擇,但這個好處是已經提供adapter還有天線
按照商家提供的文件設定
s_RM041
先讓這個模組可以連上你家的無線網路
設定SSID,密碼這些是一定要的
建議將wifi模組開啟DHCP功能
另一方面再從Wifi AP設定DHCP固定IP,讓wifi模組固定用一個IP
如果Arduino在LAN,Web Server在WAN的話,需要再設定Wifi AP的虛擬伺服器
將一個對外的port mapping到你的Arduino的IP才能正常連線
最後,如果家裡沒有無線網路,我記得直接在這個模組連接網路線也可以work
但實際上我沒測試過
2.錄製冷氣遙控器發射訊號
老實說這個步驟花的時間比我預期多很多
網路上有教學直接用 Arduino 接 IR 接收器錄製訊號
可參考以下網址:
http://www.geek-workshop.com/thread-5146-1-1.html
http://www.geek-workshop.com/thread-3444-1-1.html
http://www.takobear.tw/201702608526356260322804024687/-arduino-irremote-homemade
但我試了許久都沒成功,最後索性買一台便宜的山寨LA
才總算正確的把冷氣遙控訊號錄製下來
擷取遙控器訊號
s_20140906_012153
s_la1
執行 Export Data
s_la2
開啟上一步匯出的 .csv
s_la3
C2 輸入 =INT((A3-A2)*1000000) 然後往下拉
s_la4
把得到的數據轉成陣列
第一個數字改成1000即可
陣列最後再加一個3000讓時間延長
再分別放進Arduino.ino內的rawCodes_ac_open,rawCodes_ac_close
s_la5
3.接線

Arduino Rx <-> Wifi Module Tx (圖中綠色那條線)
Arduino Tx <-> Wifi Module Rx (圖中藍色那條線)
Arduino Gnd <-> Wifi Module Gnd (圖中灰色那條線)
Arduino 5v <-> Wifi Module 5v (圖中橙色那條線)
整個作品只靠 Wifi Module 接的 12v adapter 供電
Arduino 的電直接由 Wifi Module 上的 5v 來供應
4.燒錄Arduino程式
我相信你已經玩過Arduino所以燒錄方法就不贅述了
燒錄完程式如果順利的話,你已經可以直接用瀏覽器連到你的Arduino開關冷氣
http://你的ArduinoIP/abcd1234.htm?cmd=1 (開冷氣)
http://你的ArduinoIP/abcd1234.htm?cmd=0 (關冷氣)
及取得目前溫度
http://你的ArduinoIP/abcd1234.htm?cmd=2 (取得目前溫度)
但我相信你不會只想要這麼陽春的系統,所以繼續往下看吧
補充:abcd1234 這個字串你可以在 SmartHomeAIR.h 裡面修改成只有你知道的一組字串
這樣才不會讓阿貓阿狗都能連到你的arduino控制你家冷氣
5.架設Server (上雲端)
本來是想直接把所有Web功能都在 Arduino 上面實做出來
但 Arduino Ram 實在太小,做不來,只好切開來做
Arduino 就只做基本的控制跟取得溫度功能
其他應用的功能交給 Apache + Mysql + PHP 三兄弟上陣
所以如果你不想架設 Server,只要直接用手機連 Arduino,就是這樣的方式
s_1
雲端架構:數據儲存在雲端,行動裝置是透過Server來控制Arduino
s_2
同樣 PHP 的部份也都 Open source 了,只要再改一下 server.conf.php 就可以動
你只要設定好DB的參數,第一次開啟網頁就會自動建好所有Table
另外你也需要設定一下 cron,每半小時去執行一次 cron_get_temp.php
系統會將溫度紀錄在 smarthome_temp_log 這個 table 內
模板的部份是從這個網站上下載來修改的
http://www.motemplates.com/mobile-website-templates.php
如果你不喜歡這個風格,可以自行找別的模板來套
6.外盒
外盒算比較不重要的,看人隨意發揮
我是在大創買的收納盒,一個39元
s_20140825_005508
比較重要的是,你必須把這個作品放在冷氣可以接收到紅外線的範圍內
我自己測試5~6公尺內沒問題
7.自行打包成Android App
雖然我目前沒有把這個系統寫成App的計畫
如果你嫌每次從手機裡面開網頁麻煩
也可以自行把網頁包成一個 App,爽度又更高了
http://www.appsgeyser.com/ (for Android)
成果演示:
1.Dashboard 可以看到目前即時的溫度,以及開關冷氣

Dashboard 上面的功能都用 AJAX 來做
所以操作時你可以看到即時在loading的效果
2.Stat 可以看到最近12小時溫度變化
s_2014-10-16-18-09-56-1s
3.Setting 的部份目前保留之後可以設定溫度達到某個條件自動開關冷氣
結語:
1.事實上這個作品的 Arduino Code 目前有一個限制,一次只能一個連線
而且每個動作之間還必須間隔個2秒比較不會出問題
不過我相信這個問題有時間會改善的
2.另外一個隱憂就是安全性議題,我相信這個系統安全性是不足的
所以如果你要出遠門長期不在家的話,最好將他斷電避免被搗亂
3.你還可以從 database 內的 smarthome_operation_log table 看到所有開關冷氣的 log
不過這只有紀錄到透過 Dashboard 上面開關冷氣的行為
如果駭客知道你的 Arduino IP 跟 AccessKey 直接連到你的 Arduino ,就沒有紀錄到了

 

編譯所需Library

1. http://cc.beingo.net/file/IRremote.zip

2. http://cc.beingo.net/file/Regexp.zip

3. http://cc.beingo.net/file/OneWire.zip

4. http://cc.beingo.net/file/DallasTemperature_372Beta.zip

6 則迴響

joskyo
四月 16, 2015 at 16:31:33

大大您好 最近正在使用你的範例 來做簡單的溫溼度上傳網頁

在您提供的Arduino範例主程式,我執行後會出現

/Arduino/web.ino:85: undefined reference to `MatchState::Target(char*)’
/Arduino/web.ino:86: undefined reference to `MatchState::Match(char const*, unsigned int)’
/Arduino/web.ino:93: undefined reference to `MatchState::Target(char*)’
/Arduino/web.ino:94: undefined reference to `MatchState::Match(char const*, unsigned int)’
/Arduino/web.ino:95: undefined reference to `MatchState::GetCapture(char*, int) const’
/Arduino/web.ino:96: undefined reference to `MatchState::GetCapture(char*, int) const’
collect2: error: ld returned 1 exit status’

“Regexp.h” 這個檔案我是從 http://forum.arduino.cc/index.php?topic=59917.0 下載的
請問是不是這個H檔不太一樣的關係?

Arduino主程式 只差這個部分一直搞不定 能請大大幫忙一下嗎 拜託了


 
will
五月 20, 2016 at 00:43:53

你好,文章最後已附上Regexp下載連結


 
bleu
四月 22, 2015 at 19:42:34

您好,我是剛接觸Arduino的新手
看了您這篇文章發現寫得很好,不過還是有一些小問題想要請教一下
因為照文章上買了HLK-RM04,但是對於怎麼接(HLK-RM04接arduino再透過USB接電腦嗎)?還有HLK-RM04的設定軟體串口的部分是選擇Arduino的COM Port嗎? (因為選了沒反應)。
能否mail留下聯絡方式(Like FB),感謝您撥冗解惑,謝謝。


 
just1421
四月 26, 2015 at 11:59:25

個人最近也在嘗試Arduino控制冷氣運作
但照著網路上的Arduino 接 IR 接收器錄製訊號 都無法成功
因此想請問山寨LA錄製訊號的詳細過程?


 
陳競
三月 4, 2016 at 10:50:36

請問一下
我找不到Regexp.h的檔案,請問要怎麼找??


 
will
五月 20, 2016 at 00:43:20

你好,文章最後已附上下載連結


 

迴響

*

http://cc.beingo.net