はじめに
太陽が大好きな植物栽培にとって日射量を把握することは非常に大切です。ところが日射センサーはとにかく高価で、センサーだけで10万以上する製品も少なくありません。今回は太陽光パネルを用いた安価な日射センサーを使い約2.5万円で日射計を作成します。
用意するもの
プログラミング(UIFlow)
プログラミングは無償で使えるブロックプログラミングのUIFlow(M5Flow)を利用します。
from m5stack import *
from m5ui import *
from uiflow import *
import ntptime
import wifiCfg
import time
from machine import WDT
import hat
import hat
setScreenColor(0x000000)
hat_adc_0 = hat.get(hat.ADC)
sol = None
wifiCfg.autoConnect(lcdShow=False)
wifiCfg.reconnect()
unit = M5TextBox(72, 141, "Text", lcd.FONT_DejaVu18, 0xffffff, rotate=0)
value = M5TextBox(11, 81, "Text", lcd.FONT_DejaVu56, 0xffffff, rotate=0)
date = M5TextBox(10, 210, "Text", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)
circle0 = M5Circle(20, 20, 10, 0xFFFFFF, 0xFFFFFF)
# NTPサーバから時刻取得
def getDate():
global sol, wdt
ntp = ntptime.client(host='ntp.jst.mfeed.ad.jp', timezone=9)
rtc.setTime((ntp.year()), (ntp.month()), (ntp.day()), (ntp.hour()), (ntp.minute()), (ntp.second()))
# 液晶描画
def ScreenDraw():
global sol, wdt
date.setText(str((str((rtc.now()[3])) + str(((str(':') + str(((str((rtc.now()[4])) + str(((str(':') + str((rtc.now()[5]))))))))))))))
value.setText(str(sol))
unit.setText('W/m2')
# 初期化処理
def Initialize():
global sol, wdt
axp.setLcdBrightness(50)
sol = 0
getDate()
@timerSch.event('CloudSend')
def tCloudSend():
global sol, wdt
circle0.setBgColor(0xff0000)
import urequests
def ambientSend(_channelId, _writeKey, _data):
if isinstance(_data, list):
__d = _data
else:
__d = [_data]
try:
req = urequests.request(method='POST', url=((('http://ambidata.io/api/v2/channels/' + str(_channelId))) + '/dataarray'),json={'writeKey':_writeKey,'data':__d}, headers={'Content-Type':'application/json'})
_ret = True
except:
_ret = False
return _ret
ambientSend(******, '**************', {'d1':sol})
wait_ms(2000)
circle0.setBgColor(0x000000)
pass
lcd.clear()
date.setText('Now Starting')
timerSch.run('CloudSend', 30000, 0x00)
wdt = WDT(timeout=1000000)
Initialize()
while True:
if not (wifiCfg.wlan_sta.isconnected()):
pass
sol = int(((hat_adc_0.voltage) * 1000))
ScreenDraw()
wait_ms(1000)
wdt.feed()
wait_ms(2)
ポイント
- Ambientブロックの入手先→ https://github.com/AmbientDataInc/UIFlow
- Ambientブロックはファイルを開くたびに読み込む必要がある
- AmbientのwriteKeyはシングルクォートで括る
- WDTは約16分間ハングアップしたら強制リブート
- wifiは毎ループで再接続判定
- タイマーを使いAmbientへ50秒毎に送信(Ambientのデータ数上限対応)
- 時刻は公開NTPサーバから取得
- 内蔵ADを使用する際は減衰量を0dbにする(参考:ESP-WROOM-32に関するTIPS)
設置
日射センサーは元々設置されていたセンサーのパイプを使いホームセンターのステーを加工して取り付けました。M5StickCは磁石が内蔵されているため、ハウスの柱に張り付けています。
結果
Ambientに瞬間日射量(W/m2)が蓄積され、スマホでいつでもどこでも確認できるようになりました。栽培には積算日射(MJ)も必要なためawsなどの利用を検討中です。
補足
PVアレイ日射計PVSS-03は1.0[V]=1,000[W/m2]とシンプルな仕様で、アレイ接続により精度向上が望めます。デンソー社やトヨタネ社、アルスプラウト社のセンサーにも採用されており、性能・信頼性の面で安心して使用できます。
https://www.sanko-web.co.jp/pb/59-2
https://www.sanko-web.co.jp/wp/wp-content/uploads/2018/02/180225.pdf
https://www.denso.com/jp/ja/about-us/business-fields/newbusiness/profarm_lp/