フォーラムへの返信

16件の返信を表示中 - 1 - 16件目 (全16件中)
  • 投稿者
    返信
  • nori@kisyubitonori@kisyubito
    参加者
    #9275
    3
    返信先: プラファンオフ会 in IPF2023

    IPF29日行きます 朝早い便で関空から飛びますので
    終日 会場には居てる予定です お声がけしに行きますね
    他の皆様にもお会いできればお会いしたいです
    29日は宿泊して翌日 ビックサイトで開催されている「国際ロボット展2023」も観に行く予定にしています(IPF観きれない場合は2日もIPF延長戦もありで考えています)

    29日夜 オフ会できればしたいですね よろしくお願いします

    こんにちは 前回の予告とうり グラフの作成の説明をしたいと思います
    スプレッドシートに「グラフ」のシートを作ります
    概要としてプラファンロボから送られてきた データーを保存する「log」のシートから
    データーを読み取って 直近 72行分を グラフ表示します
    72行は 1時間=60分 ÷ 5分 = 12行  12行X6時間 = 72行となります

    以下が GASのコードになります
    1回実行すると 「グラフ」のシートにアクセスするたびに 「log」シートからデーターを読んできて
    グラフの更新がかかるようになります
    スマホなどから このシートを 読み込むだけでも 現在の状況がわかりますが 次は WEBページを
    作って もう少し見やすくしてみようと思います

    function createChart() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var logSheet = spreadsheet.getSheetByName(“log”);
    var graphSheet = spreadsheet.getSheetByName(“グラフ”);

    // 既存のグラフを削除
    var charts = graphSheet.getCharts();
    for (var i = 0; i < charts.length; i++) {
    graphSheet.removeChart(charts[i]);
    }

    // ログシートの最終行を取得
    var lastRow = logSheet.getLastRow();

    // グラフのデータ範囲を設定(最終行から上方向に72行分=6時間、または最大行数まで)
    var startRow = Math.max(1, lastRow – 72); // 最小値を1とする
    var endRow = lastRow;

    var range = logSheet.getRange(startRow, 1, endRow – startRow + 1, logSheet.getLastColumn());

    // グラフを作成する前にデータを四捨五入
    var data = range.getValues();
    for (var i = 0; i < data.length; i++) {
    data[i][1] = Math.round(data[i][1] * 10) / 10; // 温度データ
    data[i][2] = Math.round(data[i][2] * 10) / 10; // 湿度データ
    }
    range.setValues(data);

    // グラフを作成
    var chart = graphSheet.newChart()
    .setChartType(Charts.ChartType.LINE)
    .addRange(range)
    .setPosition(2, 2, 0, 0)
    .setOption(‘title’, ‘作業エリア’)
    .setOption(‘hAxis.title’, ‘時間’)
    .setOption(‘vAxis.title’, ‘値’)
    .setOption(‘series.0’, {labelInLegend: ‘温度’})
    .setOption(‘series.1’, {labelInLegend: ‘湿度’})
    .build();

    // シートにグラフを追加
    graphSheet.insertChart(chart);
    }

    続いて ウエブアプリを動くようにします
    ⑥「デプロイ」→「新しいデプロイ」→「ウエブアプリ」
    ⑦「ウエブアプリの実行」は自分
    ⑧「アクセスできるユーザ」は全員
    ⑨最後にウエブアプリの実行設定

    これで、マイコンから送られたデータを スプレッドシートの「log」のシートに書き込んでいくようになります

    次回は グラフの作成を説明したいと思います

       

    GASについて
    GASはGoogle Apps Scriptの略で、Googleのサービスの拡張・自動化や、
    サービス間連携などをJavaScriptで記述することができるプラットフォームです
    ググれば 色々な諸先輩方が説明してくれていますが 今回実行したいことをふまえて GASの説明です

    ①新しいスプレッドシートを作成
      スプレッドシートを 作成した時に このとき、URLが https://docs.google.com/spreadsheets/d/ユニークなID/edit#gid=0 」
    となっていると思いますので、コピーしておきます
    ②スプレッドシート名を変更(今回は「プラファン温度計」)
    ③「シート1」を「log」に変更
    ④拡張機能 の中で AppsScript を選択
    ⑤「コード.gs」の中身を書き換えてください

    var SS = SpreadsheetApp.openById(‘コピーしておいたユニークID’);
    var sheet = SS.getSheetByName(‘log’);
    var str = “”;
    function doPost(e) {
    var parsedData;
    var result = {};

    try {
    parsedData = JSON.parse(e.postData.contents);
    }
    catch(f){
    return ContentService.createTextOutput(“Error in parsing request body: ” + f.message);
    }

    if (parsedData !== undefined){
    switch (parsedData.command) {
    case “appendRow”:
    var dataArr = parsedData.values.split(“,”);
    var now = Utilities.formatDate(new Date(), “JST”, “yyyy/MM/dd HH:mm”);
    dataArr.unshift(now);
    SHEET.appendRow(dataArr);

    str = “Success(appendRow)”;
    SpreadsheetApp.flush();
    break;
    }

    return ContentService.createTextOutput(str);
    }

    else{
    return ContentService.createTextOutput(“Error! Request body empty or in incorrect format.”);
    }

    }

    GASについて
    GASはGoogle Apps Scriptの略で、Googleのサービスの拡張・自動化や、
    サービス間連携などをJavaScriptで記述することができるプラットフォームです
    ググれば 色々な諸先輩方が説明してくれていますが 今回実行したいことをふまえて GASの説明です

    プログラムは下記に置いておきます
    https://drive.google.com/file/d/1rASCg21tY7NnIa00joz8UrwdAx38ZyR4/view?usp=sharing
    次回は スプレッドシート側の説明をする予定にしています

    Attachments:

    マイコン側のプログラムの動きは こんな感じです
    Wifi接続時に時計を合わせて 5分毎に 温度、湿度を測定して スプレッドシートにデーターを送るようにしています
    WBGTの値の計算はマイコン側で計算した値でLEDを制御
    メールをするための計算はスプレッドシート上でGAS(google apps script)で制御してみます

    Attachments:

    前回のポストで実現したい機能が大体形になってきたので プログラムについて 公開します

    LINEで情報を開示していたロジックと似通っています
    違うのは、スプレッドシートに5分毎に温度・湿度情報を残していくのでスマホやパソコンで状態の変化が分かるようになります

    後はスプレッドシートのセルを監視して WBGTの値でスマホ(メールで送信)に情報を発信します

    Attachments:

    NoRITEC。です
    前回のポストから 間が空いてしまいました 
    最終 プラモデルに組み込む って 事で 油断していた部分もありますが
    プログラムを 公開できていませんでした すみません

    一旦 これまでの プログラムを公開させていただきます

    https://drive.google.com/file/d/1dTsW5nBZud-vg6WH7N1OlG2U4hRNDZAZ/view?usp=sharing

    で、今までのポストを踏まえて 下記に進んでみます

     
    最初の目的は達成出来きましたが テスト運用していると 以下の問題(改善案?)が出てきました

    ①アラーム発報しっぱなし問題
      本来 作業エリアの問題検知(熱中症対策)の為なので 改善するまでアラートが発報して当然ですがLINEのバッチが多すぎても注意喚起の意味が薄れるのでは?
    ②業務時間外(管理しなくてよい時間帯)にも情報発信問題
      週末など休業日や盆暮れ正月など情報発信が不要な時にも環境温度で発報します(電源OFFするだけで良いといえば良いですが)
    ③温度・湿度の変化を改善に繋げたい
     成形現場とゆうも少なからず 環境温度で製品品質に影響を受けると考えます
     せっかく 温度、湿度を計測するだから 変化を知ることは改善に繋げれるでのは?(問題発生時の調査に有効では?)

    主に③に有効活用できないかと考え ロジック構成を見直してみようと思います(プログラムの置き換えでいつでも元に戻せるのがマイコンの良いところ)

    本来ならば  Raspberry Pi とかでローカルサーバーを構えて温度、湿度ログを細かく取る事がデーターとしても有効ですが、
    今回は 下記の様な構成で実現できないか検討していきます

    情報を集めながら実現できる部分を共有していきたいと思います

    「1」 データーを測定する間隔は5分毎(何分毎が適正か悩ましいですが)
    「2」 データーをgoogle spreadsheetに記録する
    「3」 保存したデーターを用い 熱中症の閾値を用いてアラート(メールもしくはLINE)
    「4」 アラートのON/OFFを指定出来る様にする
    「5」 データーをグラフ化しで参照できるようにする
    「6」 データの保存期間は 3か月を目途に繰り越し(googleサービスの容量確保のため)

    興味のある方は もうしばらく お付き合いください。

    前回のポストから時間開いてしまいました 

    今回は 時間の制御の説明です
    今回のプログラムは 定期的に「温度」「湿度」「WBGT」をLINEに通知しています
    プログラムの内容は こんな感じ

    time_t t = time(NULL); として、現在の時刻を取得します

    struct tm *tm = localtime(&t); で取得した時刻をローカル時間に変換します

    int konkai = tm->tm_min; で現在の分を取得します

    (konkai % 30) == 0 と tm->tm_sec == 0 の条件を使用して、30分ごとの00秒のみ処理を実行します
    message の文字列結合には String() 関数を使用し、浮動小数点数を文字列に変換しました

    send_line() を呼び出して、LINE Notifyで通知を送信します

    これにより、毎時0分と30分の00秒になった時に警戒レベルとセンサーの測定値を含むメッセージが作成され、LINE Notifyで通知が送信されます

    情報の送信が頻度すぎるような気もしますね
    先日 書いたとおりですが、この時期 週末とかの工場は容赦なく温度が上がるので時間制限や1日当たりの送信回数の制御の検討した方が良いかもですね

    Attachments:

    前回の告知どうり LINEへ通知する 機能を説明
    最初にも書きましたが そもそも IoTの通知機能としてLINEが適正かとゆうのもありますが
    今回はLINEが提供してくれている プラットフォームを利用します
      ↓(サービスの紹介)
    https://notify-bot.line.me/ja/
    LINEのトークンの取得は参考にさせていただきました
      ↓(この記事ではAruduinoIDE以外でプログラムしてます)
    https://zenn.dev/iot101/articles/d8e26ac7be133b

    ここで取得したトークンをプログラムの「トークン」の部分にコピペします
    これをキーにして 先に設定した 「個人」もしくは「グループ」にメッセージを送ります
    工場のIoT目線では 「個人」⇒ライン長などの監督者に通知 「グループ」⇒チーム員などに通知に利用できます
    この辺が LINE への通知が良いのか?考える部分でもあります 小さい会社なら良いんでしょうけどね
    休日なども容赦なく通知が来ますし。。。
    そう考えると 会社用メールに送信するってのが良いかもです 

    Attachments:

    色々 試作はしてるのですが 少しづつ形になってきてるのでパート毎に説明していきます

    今回は IoTてことで インターネットに接続して情報を発信するとゆう事をチャレンジしてみたので、NTPCより時刻情報を取得する仕組みを採用してみました

    マイコンで時間を基準にして動くプログラムを作成する場合
    RTC(リアルタイムクロック)モジュール 時計機能を持ったユニットで時間を設定する事もあります

    NTPとは「Network Time Protocol」の略です
    インターネットの世界で提供されている 原子時計を元に正確な時間を取得する仕組みです
    まぁ 通信する過程で遅延が有るのですけど 

    下記ページで公開されているNTPClientライブラリを使います
    GitHub – arduino-libraries/NTPClient: Connect to a NTP server

    今回はここまで 次回は LINEへ通知する機能の予定です

    Attachments:

    プログラムを作成するにあたり 動きを整理してみます
    フローチャートはこんな感じです(自己流なので少し変ですが)
    これを 元にプログラムを作成していきます

    熱中症警戒指数の計算式(レベル判定のIF)は以下を組み込んでます
    wbgt = (温度 *0.725 + 湿度 *0.0368 + 0.00364* 温度 * 湿度 – 3.246)

    wbgt >= 25  ⇒ 緑色
    wbgt =28以上31未満の場合 ⇒ 黄色
    level = “警戒レベル2”
    wbgt >= 31以上の場合  ⇒赤
    level = “警戒レベル3”

    警戒レベル 2/3 に達すると LINEへ通知する
    LINEへ通知後 5分処理を止める
     ※環境を改善しないと 5分毎にメッセージ  

    Attachments:

    先ずはブレッドボードにて動作検証
    LEDは A-BRIGHTのフルカラーLEDをチョイス
    これは 赤/緑/青3色のLEDコアが入っていて 原理上は光の三原色の表現ができます

    黄色は 赤と緑の同時点灯で表現する事とします
    赤のLEDの抵抗は本来は値を変えないといけないのですが今回は200Ωでテストしてみます

    ※XIAO ESP32C3の端子図解は公式サイトより借用
    https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/

    最終ロボットの形で成立させたいので、電源ケーブルについては ロボの後ろ側に出るサイズ感のマイコンを物色したところ、Seeed Studio XIAO ESP32C3 がHit!!!

    使うのは初めてですが何とかなるでしょうッテことで、これにて進める事としました

    いやぁ ほんと小さい このサイズで WiFi + Bluetooth が使えて 極めつけは 外部アンテナが使えます(今回も内蔵できそう)

    以前作ったシステムでは Wifiが工場内のノイズで到達が厳しいとか経験しているので外部アンテナが使えるのは 工場 IoTの為のデイバイスみたいです

    プラ太郎さん コメントありがとうございます
    少しでも お役に立てるよう 私も勉強しながら 情報提供しますね

    それでは 少しづつ紹介していきます

    先ずは射出成形機ロボットプ・ラモデルに入るサイズのマイコンの選定から

    モデリングデーターを頂き とりあえず 3Dプリンターで出力してみました

    温度・湿度を測定するセンサーは sht30 向かって右側
    この時点のマイコンは esp8266D1mini 向かって左側

    内蔵できるサイズではありますが 電源の接続を考えると NG な感じでした

16件の返信を表示中 - 1 - 16件目 (全16件中)

-1

Copyright© Plastic Fan , 2024 All Rights Reserved Powered by AFFINGER5.