Ameba Arduino: [RTL8195] 太陽能供電 – 上傳溫濕度到 LASS

材料準備

  • Ameba x 1
  • DHT11 x 1
  • Solar Panel (1W) x 1
  • Lipo rider pro x 1
  • Li-Po battery (1100 mAh) x 1
  • DS3231 RTC x 1
  • AMS1117-3.3V x 1 (Optional)
  1. 太陽能板
    官網使用的太陽能板是這一塊: http://www.seeedstudio.com/depot/1W-Solar-Panel-80X100-p-633.html
    功率大小的差別在於要花多久的時間將鋰電池充飽,一般來說1W的太陽能板在台灣晴朗微雲的天氣是夠用的。
  2. 鋰電池
    晚上時需要倚靠鋰電池度過晚上,加上考慮到可能會有連續2~3天陰天的情況,這邊鋰電池的大小選擇1100 mAh。一般來說不建議小於500 mAh。
  3. 鋰電池充放電模組
    在白天時,我們希望太陽能板供應電源給Ameba之外,如果有多餘的能量可以用來對鋰電池充電;但如果太楊能板供電不足,也可以從鋰電池供電給Ameba。所以我們須要一個鋰電池充放電模組。這裡我們使用Lipo Rider pro,它使用JST 2.0的接頭,在處理接頭上需要找對應的線材。
    充放電模組也有其它類似的產品:
    Lipo Rider: http://www.seeedstudio.com/depot/Lipo-Rider-v13-p-2403.html
    PowerBoost 500C: https://www.adafruit.com/product/1944
    PowerBoost 1000C: https://www.adafruit.com/product/2465
  4. DS3231 RTC
    我們使用的DS1307RTC library支援DS1307/ DS1337/DS3231,這邊我們使用DS3231。
  5. AMS1117-3.3V
    Lipo Rider Pro的輸出預設是5V,直接接Ameba的開發版就可以。但如果想要更省電,可以考慮使用AMS1117降壓至3.3V並直接供電給Ameba module。

範例說明

這個範例裡會使用太陽能板,當太陽能板供電超過Ameba,可以將多餘的電將鋰電池充電。到晚上時則使用鋰電池供電。
我們打開範例 “File” -> “Examples” -> “AmebaMQTTClient” -> “lass_for_dht_plus_ps_nfc”
1這邊要注意,當直接供電至Ameba Module時,開發板上的3.3V會因為預設並不是從Module供電,所以無法使用。此時其它需要3.3V供電的模組就需要直接從降壓模組供電。
另一個值得注意的是,圖中NFC的天線板是裁開的,中間與Amabe只用線材連結,只要線不要太長基本上感應的效率不會變太差。將連結的兩條線互相纏繞可以稍減線材變長的問題。如果不喜歡這個天線板,也可以接其它的天線,NFC的天線使用電磁感應的方式,官方網站曾試過直接用杜邦線繞幾圈,也試過悠遊卡的代幣,或其它NFC tag的天線,基本上感應的效果都不太一樣。另外,如果不想使用AMS1117,也可以直接供電至5V的地方
2

但是要注意,供應至5V的地方也會啟動DAP,造成額外的耗電。

要執行範例,需要修改幾個參數:

  • Wifi連線需要使用的ssid/password
  • LASS的clientId,預設是FT_LIVE_12345678,請改成不同的值。

編譯並上傳至Ameba之後,按下Reset按鈕,等待一會兒應該可以在 “零時空觀汙網” 看到資料: http://g0vairmap.3203.info/map.html
3

範例程式預設將位置填入瑞昱的位置,可以在新竹的地方找到這個點,或是由左下方條件篩選只留LASS。目前資料上雲端之後,有些小數點轉換的誤差,所以填入的位置可能會偏離,這個需要注意一下。

NFC的功能,官網有提供一個NFC的應用程式,如果你的Android手機已經打開NFC功能,去感應NFC天線,就會打開google play對應的應用程式網頁。
或是可以到這個地方下載: https://play.google.com/store/apps/details?id=com.realtek.sensortag
4

安裝完成後,用手機感應Tag,會出現最近一次量測的溫濕度。點下方的按鈕可以從網路端得到當天的溫濕度資料。

耗電分析
以下是一些細節的說明

  • 太陽能板的供電效率
    這裡我們測量亮度的單位為照度(LUX),照度是以人眼感受測量出來的亮度,不同波長的光線照度也不一樣。同時我們使用鹵素燈泡模擬太陽光,一般來說鹵素燈是常見用來模擬太陽光的光源。
    在臺灣晴天無雲的情況下 ,早上10點至下午兩點大約可以量到照度100K LUX左右,傍晚四點左右則可以量到照度10k LUX。
    改成使用100W的鹵素燈,距離20cm的地方照度為10k LUX,距離5cm的地方照度為100k LUX。但是距離燈泡太近會讓太陽能板太熱而造成效率降低,所以實驗中保持一定距離比較好。這裡我們使用20cm的距離做實驗。
    我們測量太陽能板實際供電的情況,當照度為100k LUX的時候,可以輸出210mA的電流,電壓為4.8V,4.8V x 0.21 A = 1.008 W。如果使用其它不同的太陽能板也可粗略估算可以輸出的電流。
    但是當照度為10K LUX的時候,太陽能板只能輸出40~60mA的電流。
  • NFC的耗電
    這個範例裡我們使用了NFC,並且當Ameba進入deepsleep省電模式時,也保留了NFC。NFC的耗電約7mA,這對deepsleep來說是相對高的耗電,這部份要留意。
  • RTC的耗電
    RTC平常使用電池維持時間的精準度,但是當Ameba接上RTC時,預設會啟用I2C做為溝通介面。這方面會量到2mA的耗電。
  • 總耗電
    如果是從AMS1117降壓至3.3V再對Ameba module供電,量到的電流在deepsleep的時候是12mA,長時間的平均值是13mA
    如果是從Ameba的5V供電,量到的電流在deepsleep的時候是17mA,長時間的平均值是18mA
    扣除NFC與RTC的耗電,有一部份的耗電來自於降壓損耗與點亮LED燈。
    在不考慮鋰電池充放電模組的耗電下,假設太陽能板供給40mA的電流,而1100mAh的鋰電池已用了一半。那麼在中午的陽光照射下,需要 550 mAh / (210mA - 13mA) = 2.8h可以將鋰電池充飽。
    那麼如果太陽能板一直未能對鋰電池充電,並且Ameba只由鋰電池供電,那麼1100mAh的鋰電池用了一半可以讓Ameba使用 550 mAh / 13mA = 42h,接近2天。

程式碼說明

整個程式都由之前的範例組成,程式碼流程如下:
5一開始的地方,我們啟動watchdog,並且啟動一個GTimer讓它每秒feed/kick watchdog,如果檢查發現整個流程經過30s秒還沒完成就直接進入deepsleep。
比較需要注意的是我們將WiFi連線的部份放在較後面的地方,因為啟動WiFi會消耗較多的電量,在設計省電的專案時,最好先將不需要WiFi的部份先做完。