2014/07/06

小惡魔穿新衣
萊恩大兵對小惡魔溫度感測器做了些調整.

[1] 延長溫度感測器工作時間
  • 在 device 程式碼, 小惡魔 idle 時, 加了 server.sleepfor() 指令來省電.
     
耗電比較 (第一版做比較), 電池都是用 2S1P 7.4V 鋰聚電池 (電量為 1000 mAh). 看來新版本的效果還不錯.


  • 舊版: ~18hrs (每十分鐘記錄一次溫度)
  • 新版: ~48hrs (每五分鐘記錄一次溫度)

程式碼 (device)
// Based on TempBug Simple Example Device Code
// 
 
/* GLOBALS and CONSTANTS -----------------------------------------------------*/
const INTERVAL = 300;

/* CLASS AND GLOBAL FUNCTION DEFINITIONS -------------------------------------*/
function getTemp() {
 // schedule the next temperature reading
 //imp.wakeup(INTERVAL, getTemp);

 // hardware id is used to separate feeds on Xively, so provide it with the data
 //local id = hardware.getdeviceid();
    local data=temperature.read();     // Reading analog output
    local volt=hardware.voltage();     // Reading ADC ref. voltage
    local temp = data*volt/65536*100.0 // Calc. temp (16bits ADC)

 // tempreature can also be returned in Kelvin or Celsius
 local datapoint = {
     "id" : "ooo",
     "temp" : temp
 }
 server.log("Temp: " datapoint.temp);
 agent.send("data",datapoint);
}

/* REGISTER AGENT CALLBACKS --------------------------------------------------*/

/* RUNTIME BEGINS HERE -------------------------------------------------------*/
// Configure Pins
temperature <- hardware.pin9;
temperature.configure(ANALOG_IN);
//getTemp();

imp.onidle(function() {
    getTemp();
    server.sleepfor(INTERVAL);
});
[2] 加上防水保護殼, 讓小惡魔出門工作囉.
  • 去十元商店買個小保鮮盒, 用烙鐵燙出洞來, 再讓 LM35 露出在外, 最後用熱融膠封住縫隙.
  • 再把整個小惡魔溫度感測器吊在窗外.
    白天, 豔陽高照
    在大雨的夜裡

[3] 事件觸發
  • 利用 Zapier 的服務, 設定當溫度到達一定條件, 就做某件事. (可參考這篇設定步驟)
  • 萊恩大兵設定 Web Hook + Evernote, 每當溫度高於 34.5°C, 就在 Evernote 產生一則筆記, 記錄下當時的溫度值與時間.
    Web Hook + Evernote
    選擇要記錄哪些資訊
  • Evernote 真的有溫度/時間的筆記吔. (Zapier 說發出了 31 篇, Evernote 也真的收到了 31 篇)
    Zapier 的記錄
    Evernote 的記錄

檢討


雖然改善的成果頗為豐碩, 還但是有些缺失或靈異事件, 需要進一步澄清. 

(1) (靈異事件) 在上午這種時段, 照理溫度只升不降的, 竟然會測到短時間內的大幅振盪 (高低溫差接近 4°C).
8~9時, 10~11時中間, 溫測值大幅振盪.
  • 猜想這可能是風吹或陰影的影響. 

(2) (靈異事件) 雨勢加大的半夜, 已經工作超過 48hrs 的溫度感測器, 溫測值從平常的兩位數突然飆高到三位數.
三位數的溫測值.
  • 萊恩大兵觀測到電池的電壓值已接近低點 (7.76V). 不確定電池電壓的穩定與否, 會不會影響 LM35 的量測結果.
    電池濱臨過放.
  • 猜測另一個可能性, 是驟大的雨勢打在保鮮盒上, 讓 LM35 的杜邦頭腳位鬆脫了, 結果造成誤測.
    萊恩大兵第一次夾杜邦頭, 手藝不精.
  • 這問題在電池充飽電, 接腳線路重新安置好後, 就消失了.

(3) 透過 Zapier 的服務, 雖然有自動產出 Evernote 的溫度筆記. 可是, 萊恩大兵設定條件是 >34.5°C, 每五分鐘記錄一次溫度, 以 7/1 早晨為例, 10:01時的溫度是 35.147°C, 10:41時的溫度是 34.55°C, 照理應該 10:06, 10:11,... 10:36 都應該會觸發條件才對. 結果卻沒有.. 這之間的落差, 到底是 Xively 造成的, 抑或 Zapier 是凶手? 萊恩大兵還得再調查.
10:01, 35.147°C
10:41, 34.55°C

(4) (改善建議) 可以在 LM35 裝一片散熱片, 加大接觸面積, 可提高測量的敏感度.

(5) (改善建議) LM35 測得的數值會有偏差, 應該做 Kalman Filter 的調整. (可參考這篇的說明)

(6) 社群網友的分享
- (黃偉峻) Arduino WiFi 氣象站
- (Philip Zheng)(黃偉峻) 改用 MQTT 的方法來上傳資料, 會比用 HTTP + JSON 來得快又省電.
- BloomSky 智慧天氣監測相機


Okay, 暫時就這些心得了. 這題目萊恩大兵還會再往裡面鑽一點, 有興趣的朋友歡迎給意見交流交流. 謝謝.


[萊恩大兵的其它文章]

自動報球速的棒球



小惡魔 無線溫度感測器

108 大眼仔
Plot Clock

2 意見:

張貼留言