Open21

obniz×LINEbotでファミリー向けIoT制作

今回の目標

①obnizとLINEbotの技術を組み合わせる
②obnizはセンサまたはアクチュエータのいずれかを1つ以上使用
マトリックスLEDに文字描画させてみる
子育てママに刺さる企画・見せ方を狙う(Qiita記事 LGTM 30以上)

企画アイデア

センサーを使って子どもの身長を計る
結果はLINEとマトリックスLEDで帰ってくる
身長プラス子供の興味を引く何か 〇〇と一緒の身長だよ などで一工夫
最後に「お母さんに〇〇と言おう」の一言をつける
➡ひとことは固定しない 子供自身の気持ちを言わせる 母は本当に嬉しい

企画としては「身長計る」ではなく「お母さんに感謝」方向でいく

時事ネタも織り交ぜる

メモ

奥さんかが「ヒカキンの動画が面白い」というので見てみた
~スーパーカップで蒸しパン作ってみた~
なるほど~非線形だな~と思いつつよく考えるとヒカキンって
こんなとがったアイデアずっと出し続けてるんだなぁすごいと感嘆

ヒカキンの頭の中のアート思考 紐解いてみたい

多分「毎日更新」をやり続けて
どうやったらリスナーに刺さるのか をとんでもない回数試行錯誤してるのだろうな
それができるのも「好きだから」なんだろうな ヒカキンはすごい

文字が流れるようになった!

const Obniz = require('obniz');
const obniz = new Obniz('****-****');

obniz.onconnect = async function () {
 
    const matrix = obniz.wired("MatrixLED_MAX7219", {
        vcc: 4,
        gnd: 3,
        din: 2,
        cs: 1,
        clk: 0
      });
      matrix.init(8 * 4, 8);
      matrix.brightness(7);
    
      const ctx = obniz.util.createCanvasContext(matrix.width, matrix.height);
    
      x = matrix.width;
      obniz.repeat(async function() {
        ctx.fillStyle = "black";
        ctx.fillRect(0, 0, matrix.width, matrix.height);
        ctx.fillStyle = "white";
        ctx.font = "9px sans-serif";
        ctx.fillText("おきなかうたちゃん きょうはラーメンたべようね たのしみだね", x, 7);
        x--;
    
        matrix.draw(ctx);
      }, 1000 / 80);
    };

トラブル 距離センサーの結果をマトリクスに表示させられない

console.logではでるのになぜ。。

もしかしたら電力不足かも

io3: heavy output. output voltage is too low when driving high

いやきっと違う console.log は出ているし LEDもついているので 原因は別

先にラインボットとの連携を試す

https://forum.obniz.com/topic/26/サーボモーター接続時の不安定現象

距離センサー

const Obniz = require('obniz');
const obniz = new Obniz('****-****');

obniz.onconnect = async function () {
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    hcsr04.measure(function( distance ){
      console.log("distance " + distance + " mm")
    })
}

身長を計測

   var sinto=2220-distance
    }
      console.log("距離は" + sinto + " mm")

ターミナルには結果が返るがLINEで結果返らず

  // 距離センサーを呼び出す
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    hcsr04.measure(function( distance ){{
    var height=2220-distance
    }
      console.log("距離は" + height + " mm")
      })

    await client.pushMessage(userId, {
     type: 'text',
     text: "距離は" + height + " mm",
   })
  }

https://qiita.com/okinakamasayoshi/questions/71d3611aa7e6e1515cca

ターミナルで返ってくるエラー

text: "距離は" + height + " mm",
^
ReferenceError: height is not defined

LINEで結果が返ってきた!!

    // 距離センサーを呼び出す
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    const distance = await hcsr04.measureWait();{{
    var height=2220-distance
    }
      console.log("距離は" + height + " mm")
      }

    await client.pushMessage(userId, {
     type: 'text',
     text: "距離は" + height + " mm",

【自分なりの解釈】

obniz生データの[distance]は変数じゃなかったので表示できず
const distance =ではじめて『distance』という変数として利用できるようになった。

LINEでobniz起動 結果を返信 完成

'use strict';
const Obniz = require('obniz');
const obniz = new Obniz('****-****');

obniz.onconnect = async function () {
    obniz.display.clear();
    obniz.display.print("obniz meets LINE Bot!");
  }

const express = require('express');
const line = require('@line/bot-sdk');
const axios = require('axios');

const PORT = process.env.PORT || 3000;

const config = {
    channelSecret: '********',
    channelAccessToken: '********'
};


const sampleFunction = async (event) => {
    if (event.type !== 'message' || event.message.type !== 'text') {
      return Promise.resolve(null);
    }
  
    let mes = ''
    if(event.message.text === 'わたしおおきくなったかな・・・'){
      mes = 'はかってみるね!☻'; //処理するまでこちらを表示
      getkyori(event.source.userId);
    }else{
      mes = event.message.text;
    }
  
    return client.replyMessage(event.replyToken, {
      type: 'text',
      text: mes
    });
  }
  const getkyori = async (userId) => {
    // 距離センサーを呼び出す
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    const distance = await hcsr04.measureWait();{{
    var height=((2242-distance)/10)
    //天井の高さから距離を引いて身長を割り出す
    }
      console.log("身長は" + height + " cm")
      }

    await client.pushMessage(userId, {
     type: 'text',
     text: "身長は" + height + " cm",
   })
  }

いまここ LINEで返信後 マトリクスで表示させたいができない

LINEで結果がかえってきたその②

  // 距離センサーを呼び出す
var hcsr04 = obniz.wired("HC-SR04", { gnd: 8, echo: 9, trigger: 10, vcc: 11 });

hcsr04.measure(
  function(distance){
    var height = 2220 - distance;
    console.log("距離は" + height + " mm");

    client.pushMessage(
      userId,
      {
        type: 'text',
        text: "距離は" + height + " mm",
      }
    );
  }
)}

この方法でも返ってきました!!助けてもらって感謝( ;∀;)

https://qiita.com/okinakamasayoshi/questions/71d3611aa7e6e1515cca
ログインするとコメントできます