iijimaのアイコン画像
iijima 2021年04月30日作成 (2021年04月30日更新)
製作品 製作品 閲覧数 1044
iijima 2021年04月30日作成 (2021年04月30日更新) 製作品 製作品 閲覧数 1044

熱中症を防ぐ「やさしいエアコン用学習リモコン」

熱中症を防ぐ「やさしいエアコン用学習リモコン」

目的

熱中症にかかる方の割合を多く占めるのは実は高齢者。夏の暑い日にもかかわらず、認知症などの影響でエアコンをつけたものの間違って暖房をかけてそのままにしてしまう方もいるそうです。そんなとき、操作が簡単で間違いもやさしく教えてくれるリモコンがあったら、より多くの人が暑い夏も快適に過ごせるのではと思い「やさしいエアコン用学習リモコン」を考えました。

デモ動画

ここに動画が表示されます

使い方と説明

  1. 電源を入れる
  2. webの画面に現在の天気や気温、おすすめのエアコン設定が表示される。
  3. エアコンのリモコンにある停止、冷房、暖房、除湿を学習させる
  4. 学習は基本的に初回のみ
  5. モード切替でリモコンモードにする
  6. 画面の好みのボタンを押す
  7. 冷房は青、暖房は赤、除湿は黄、停止は白と画面の色が変化
  8. 寒ければ冷房は体に良くない、暑ければ暖房は体に良くない、乾燥していれば除湿は良くないといった音声メッセージが流れる

部品

部品 金額
obniz 1Y ¥6,930
IRModule ¥935
TypeC対応電源 -
open weather API free

設計図

キャプションを入力できます

ソースコード

open weatherのAPIを使っています。
https://openweathermap.org/api
途中までブロックのみで作ろうとしていたため、不要なファイルを読み込んでいますがご愛嬌で。

<html lang="jp">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <!--script
      src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
      integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
      crossorigin="anonymous"
    ></script-->
    <script
      src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
      integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
      crossorigin="anonymous"
    ></script>

    <link
      rel="stylesheet"
      href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css"
    />
  </head>
  <body>
    <h3 id="bploading" style="text-align:center;">LOADING...</h3>
    <div id="OBNIZ_OUTPUT"></div>
    <br />
    
     <script
      src="https://unpkg.com/obniz@latest/obniz.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/iothome/index.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/airobot/index.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ui/index.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/howler2.1.2/howler.js"
      crossorigin="anonymous"
    ></script>
    
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/opencv3.4/opencv.js"
      crossorigin="anonymous"
    ></script>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.3.0"></script>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@2.1.0"></script>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/posenet@2.2.2"></script>
    
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/clmtrackr.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/emotion_classifier.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/emotionmodel.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/model_pca_20_svm.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/index.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/storage/index.js"
      crossorigin="anonymous"
    ></script>

    
    <script>
        $("#bploading").text("RUNNING...");
        (async function(){
  var obniz, mode, iothomekit, crima_icon,temp,  humidity, mode_label,recomend_label, disp,message;
  var button_stop, button_cooler, button_warmer, button_dry, mode_change, surbay, stop, cooler, warmer, dry;

  obniz = new Obniz('{xxxx-xxxx your obnizID}');
  await obniz.connectWait();
  iothomekit = obniz.wired("IoTHomeKit",{});

  /*weather_api*/
  //現在の天気データ呼び出し
    let data = await (await fetch(
     `http://api.openweathermap.org/data/2.5/weather?q={お住まいの地域名や都市名},JP&lang=ja&appid={your weatherAPI key}`
    )).json();
    console.log(data);
    crima_icon = data.weather[0].icon;
  var image;
  humidity = data.main.humidity;

  image = new ObnizUI.Image('http://openweathermap.org/img/wn/'+crima_icon+'@2x.png', '100px');
  temp = Math.round((data.main.temp-273.15)*10)/10;
  temp_label = new ObnizUI.Label('temp_label');
  temp_label.setText(data.weather[0].description+'/気温:'+temp+'℃/湿度:'+humidity+"%");
  recomend_label =  new ObnizUI.Label('データが取れませんでした。');
  
  if(temp < 20)message = '暖房がおすすめです。';
  if(temp > 25)message = '冷房がおすすめです。';
  if(humidity > 60 && temp > 25  && temp < 30)message = '除湿がおすすめです。';
  if(!message)message='エアコンつけなくてもいいかも';

   recomend_label.setText(message);

  mode_label = new ObnizUI.Label('リモコンモード');
  disp = new ObnizUI.Label(' ');
  button_stop = new ObnizUI.Button('停止');
  button_cooler = new ObnizUI.Button('冷房');
  button_warmer = new ObnizUI.Button('暖房');
  button_dry = new ObnizUI.Button('除湿');
  mode_change = new ObnizUI.Button('モード切替');
  
    stop = await ObnizUI.Util.loadFromStorage('signal_stop');
      await ObnizUI.Util.wait(0); 
    cooler = await ObnizUI.Util.loadFromStorage('signal_cooler');
      await ObnizUI.Util.wait(0);
    warmer = await ObnizUI.Util.loadFromStorage('signal_warmer');
      await ObnizUI.Util.wait(0);
    dry = await ObnizUI.Util.loadFromStorage('signal_dry');
      await ObnizUI.Util.wait(0);

/*どれか一つでも値が取れない場合は学習モードへ*/
 if(stop && cooler && warmer && dry) mode = 1;
 else mode = 0;

  while (true) {
  await ObnizUI.Util.wait(0);
    if (mode_change.isClicked()) {
      if(mode == 1)mode = 0;
      else mode = 1;
    }

/*リモコンの信号を学習する*/
    if (mode == 0) {
      //どれが設定されていないか表示*/
      mode_label.setText('学習モード');
      var not_set;
      if(!stop)not_set ='【停止】';
      if(!cooler)not_set +='【冷房】';
      if(!warmer)not_set +='【暖房】';
      if(!dry)not_set +='【除湿】';
      if(not_set)disp.setText(not_set+'が設定されていません');


      if (button_stop.isClicked()) {
        await ObnizUI.Util.saveToStorage('signal_stop',((await iothomekit.getIrWait())));
        stop = await ObnizUI.Util.loadFromStorage('signal_stop');
        disp.setText('停止の信号を設定しました');
      }
      if (button_cooler.isClicked()) {
        await ObnizUI.Util.saveToStorage('signal_cooler',((await iothomekit.getIrWait())));
        cooler = await ObnizUI.Util.loadFromStorage('signal_cooler');
        disp.setText('冷房の信号を設定しました');
      }
      if (button_warmer.isClicked()) {
        await ObnizUI.Util.saveToStorage('signal_warmer',((await iothomekit.getIrWait())));
        warmer = await ObnizUI.Util.loadFromStorage('signal_warmer');
        disp.setText('暖房の信号を設定しました');
      }
      if (button_dry.isClicked()) {
        await ObnizUI.Util.saveToStorage('signal_dry',((await iothomekit.getIrWait())));
        warmer = await ObnizUI.Util.loadFromStorage('signal_dry');
        disp.setText('除湿の信号を設定しました');
      }
    }
    if (mode == 1) {
      mode_label.setText('リモコンモード');
      if (button_stop.isClicked()) {
        iothomekit.irSend(stop);
        await _ai.say('停止します');
        $("body").css("background-color","rgb(255,255,255)")//停止時は画面を白くする
        disp.setText('停止中');
      }
      if (button_cooler.isClicked()) {
        iothomekit.irSend(cooler);
        await _ai.say('冷房をかけます');
        if(temp<20)await _ai.say('気温が20度を下回っています。冷房の運転は体によくありません。');
        $("body").css("background-color","rgb(0,0,255)")//冷房使用時は画面を青くする
        disp.setText('冷房中');
      }
      if (button_warmer.isClicked()) {
        iothomekit.irSend(warmer);
        await _ai.say('暖房をかけます');
       if(temp>25)await _ai.say('気温が25度を越えています。暖房の運転は体によくありません。');
        $("body").css("background-color","rgb(255,0,0)")//暖房使用時は画面を赤くする
        disp.setText('暖房中');
      }
      if (button_dry.isClicked()) {
        iothomekit.irSend(warmer);
        await _ai.say('除湿にします');
       if(humidity<50)await _ai.say('湿度が40%を下回っています。乾燥のし過ぎは体によくありません。');
        $("body").css("background-color","rgb(238, 247, 111)")//除湿時は画面を黄色くする
        disp.setText('除湿中');
      }
    }
  }

  
})();
    
    </script>
  </body>
</html>
ログインしてコメントを投稿する