2014年4月12日 星期六

Arduino 氣象站 Ver4.0 WIFI

第三次改版,最大的特色是他經由WIFI 模組,可以直接上傳資料,而不用像前兩代需要一個網路中繼器做資料上傳
Wifi模組使用的是Ti新出的低價Wifi模組CC3000,經由SPI連接到Arduino
搭載溫濕度計以及一個氣壓計,還有一個鋰電池電量計

 首先這版遇到了第一個問題就是CC3000的Driver非常容易當掉,DNS查詢也會當,送資料也會當,開Socket也會當,幾乎是送資料幾次就會出問題,所以為了解決問題,就用了AVR中的Watchdog reset,一旦某段程式碼超出時間,就會全部RESET,所以加上去就可以解決當機

但是當然沒這麼簡單......
我第一次用的是Arduino mini pro 3.3v 8MHZ的版本,上傳帶有WDT的程式碼之後,第一次的RESET就當機了,Pin 13一直閃阿閃的,結果是Mini Pro的Bootloader不會解除WDT,所以就一直RESET下去.....
於是我就刷了Optiboot,但是造成我沒辦法上傳程式碼....,問題解決不了的狀態阿...
但是同篇文章有提到,UNO的Bootloader沒有這個問題,於是我就拿了一個5V 16MHZ版本刷UNO的韌體後測試WDT,終於解決了一直RESET,但是這樣我就需要加一個轉接版,因為CC3000模組需要3.3V的介面,於是手邊的TXB0104上轉接版,就這樣繞了好大一圈解決CC3000當機的問題
程式碼到處都是wdt_enable(WDTO_8S) + wdt_reset() + wdt_disable好愉悅,

再來就是資料上傳的問題,我用的是Adafruit的DHT22+Xively的程式碼,但是他的上傳資料格式是.JSON,哩哩辣辣一堆字要上傳,徒增資料量,而且不好看.WDT最久也只有8秒,害我要切成三分資料上傳中間才能插_reset,於是我改成用.CSV的格式上傳,資料量從一百多變成五十幾,省下不少時間,最重要的是我看得懂該怎麼再加東西進去....

之後是耗電量的問題,CC3000是個耗電的怪獸,大約150mA,這等級的怪獸嚴重影響資料上傳的間格,從30s拖到800s,才能稍微接近和第二版的使用時間,而待機的時候,耗電量也需要降低,所以我把Mini pro的LED以及LDO通通拿下來,自己找了一個低耗電的LDO上場,然後DHT22切掉電源
最後待機大約0.5mA,應該還可以再低一些,我可能要把CC3000的電源也全部切掉剩下Mini Pro(單獨的話我量到10uA)

耗電量的問題也和最後的供電系統有關,我等等再來說明(你可以發現上面兩張圖的電源供應選擇其實不一樣)先這樣

沒有留言:

張貼留言