search
LoginSignup
3

More than 3 years have passed since last update.

Organization

夏の暑さ対策! NatureRemoから取得した温度と湿度、不快指数を電光掲示板で表現してミスト装置や日よけを動かす

概要

不快指数を電光掲示板に表示させて、
不快指数の値からミスト送風機や日よけ、ヒーターを動かすようにする。

作ったきっかけ

サービスエリアや公園、公共機関に暑さ対策として、ミスト送風機がたまに置いてあるが、管理の人が手動で電源入れていた。
管理人がいなければミストも動かないので、そこらへんの人の手間をなくしていきたい。
また、天気予報と連動してゲリラ雷雨の注意を電光掲示板で促すことができると良いと思った。

概念図(接続イメージ付き)

image.png

機能

①NatureRemoから温度・湿度を取得する 済
②取得した温湿度を電光掲示板に表示する 済
③天気予報APIを使用して天候の注意を表示させる 未完成
④不快指数の値によって送風機・ヒーターを動かす 未完成

課題

・温度から判定して送風機やヒーターを動かすので安全面で ☓
・室外に設置するため防滴・防水対応が必要

使用した部材

操作コントローラ・温度・湿度センサー

・NatureRemo 税込 10,778円
温度・湿度を捉えることができ、赤外線リモコンの代わりになって操作できるため。

購入先:Amazon https://nature.global/
IMG_3034.jpg

電光掲示板 操作用

小型パソコン LIVA Q2
image.png

有線LANポートで電光掲示板コントローラと繋ぐ
NatureRemo側のAPIはインターネット必須のため、無線LANでインターネットに繋げる
電光掲示板の操作ソフトはWindowsのみ対応

電光掲示板

①LEDマトリクスパネル P6 RGB 32×32 4枚 × 4,300円
購入先:akibaピカリ館LED https://www.akiba-led.jp/product/1162

②スイッチング電源 MEAN WELL 5V LRSシリーズ LRS100-5 1個 × 3,360円
 ※配線間違えると危ないので注意すること!
購入先:akibaピカリ館LED https://www.akiba-led.jp/product/1640

③LEDマトリクスパネルコントローラー 5A-75 [8052] 1台 × 7,980円
購入先:akibaピカリ館LED https://www.akiba-led.jp/product/1188

④プラグ付き電源コード VFF0.75mm2 [6224] 1本 × 390円
購入先:akibaピカリ館LED https://www.akiba-led.jp/product/383

⑤IDC フラットケーブル 16P 50cm コネクター付き [6486] 1本
 パネル購入すると付属で15cm×4本がついてくる?
購入先:akibaピカリ館LED https://www.akiba-led.jp/product/1201

⑥LEDパネル用RGB用電源線2コネクタ お兄さんに聞いたら出してくれた
購入先:akibaピカリ館LED

⑦赤黒平行線 これもお兄さんに聞いたら出してくれた
 スイッチング電源からコントローラに電源供給する線
購入先:akibaピカリ館LED https://www.akiba-led.jp/product/303

⑧LEDパネル取り付け用マグネットボルトM3 × 16個 × 25円
 ※磁力が強力なのでコントローラには近づけないこと!
購入先:akibaピカリ館LED https://www.akiba-led.jp/product/1197

配線

③のLEDマトリクスパネルコントローラーからLANポート経由でパソコンに繋げる
image.png

デモ ※クリックするとYoutube
http://www.youtube.com/watch?v=pJDLxknZCiY
デモ動画

元ネタを真似したところ
IMG_30284.jpg

プログラム側

・Node.js
・デプロイ環境はNowを使用
・NatureRemoAPI
明るさの値も取れるが、今回のテーマとしては使わない。

[今後の予定]
・天気予報API

 Server.js
const webClient = require('request');
const express = require('express');
const app = express();

module.exports = (req, res) => {

// 室温を取得
webClient.get({
 url: "https://api.nature.global/1/devices",
 headers: { "Authorization": "Bearer [API-KEY]" }
  }, function(error, response, body){
status=body;

const obj = JSON.parse(body);

// jsonを分解する処理
function getValue(obj) {
  if (typeof obj === 'object') {
      let strValue = '';
      let strTemp = obj['newest_events']['te']['val']
      let strHu = obj['newest_events']['hu']['val']
      let striL = obj['newest_events']['il']['val']
      let strFukai =0
      let strMessage="しょきち"

      strValue= '現在の温度:'+obj['newest_events']['te']['val'] + '\n' ;
      strValue += '湿度:' + obj['newest_events']['hu']['val'] + '% \n ' ;
      //strValue += '明るさ' + obj['newest_events']['il']['val'] + '\n' ;
      strFukai=Math.round(0.81 * strTemp + 0.01 * strHu *(0.99*strTemp-14.3)+46.3);

      if(strFukai<=55){
        strMessage="<span style='background-color:#0000ff' color:#ffffff;>寒い!((´д`)) ブルブル…</span>"
      }
      else if(strFukai >= 56 && strFukai <=60){
        strMessage=" 肌寒いよー"
      }
      else if(strFukai >=61 && strFukai <=65){
        strMessage="  いい感じの気候(*′∀`)v"
      }
      else if(strFukai >=66 && strFukai <=70){
        strMessage="  ちょうどよい~(´∀`~)スズスィー"
      }
      else if(strFukai >=71 && strFukai <=75){
        strMessage=" まだ我慢できる暑さかなー"
      }
      else if(strFukai >=76 && strFukai <=80){
        strMessage="<span style='background-color:#ff0000; color:#ffffff;'> ちょっとむしむしするねー</span>"
      }
      else if(strFukai >=81 && strFukai <=85){
        strMessage="<span style='background-color:#ff0000; color:#ffffff;'> 暑い!水分補給して!</span>"
      }
      else if(strFukai>=86){
        strMessage="<span style='background-color:#ff0000; color:#ffffff;'> ヤバい!!!!!!!!</span>"
      }else{
        strMessage="<span style='background-color:#ff0000; color:#ffffff;'> あつい!</span>"

      }
      strValue +="不快指数:" + strFukai ;
      strValue += strMessage;

      return strValue;
  } else {
      return obj;
  }
}

// 出力結果
console.log(getValue(obj[0]));
var strHTML ="";

strHTML ="<meta http-equiv='refresh' content='60' > <body bgcolor='#000000' text='#FF9900'><font face='MS P明朝,MS 明朝' size='+2'><Marquee scrollamount='2'>" + getValue(obj[0])+ "</Marquee></font>"
res.send(strHTML)
  });

}

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
What you can do with signing up
3