LoginSignup
3
2

More than 1 year has passed since last update.

【農家が作る】ビニールハウスの日射計(M5StickC,PVSS-03, Ambient)

Last updated at Posted at 2022-10-31

はじめに

太陽が大好きな植物栽培にとって日射量を把握することは非常に大切です。ところが日射センサーはとにかく高価で、センサーだけで10万以上する製品も少なくありません。今回は太陽光パネルを用いた安価な日射センサーを使い約2.5万円で日射計を作成します。

用意するもの

  1. M5StickC Plus(約3,700円)
  2. M5StickC ADC Hat(約1,700円)
  3. PVアレイ日射計 PVSS-03(約20,000円)
  4. USB TypeCケーブル(約650円)

プログラミング(UIFlow)

プログラミングは無償で使えるブロックプログラミングのUIFlow(M5Flow)を利用します。
flow_20221031001.png
flow_20221031002.png

Micro Python
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は磁石が内蔵されているため、ハウスの柱に張り付けています。
IMG-1422.jpg
IMG-1428.jpg

結果

Ambientに瞬間日射量(W/m2)が蓄積され、スマホでいつでもどこでも確認できるようになりました。栽培には積算日射(MJ)も必要なためawsなどの利用を検討中です。
ambient_20221031001.png

補足

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/

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2