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的应用程式,如果你的Andr​​oid手机已经打开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的部份先做完。