射出成形機ロボットにIoT機能を搭載したい

プラスチックファン フォーラム 射出成形ロボ企画 射出成形機ロボットにIoT機能を搭載したい

  • このトピックには22件の返信、2人の参加者があり、最後にnori@kisyubitonori@kisyubitoにより7ヶ月前に更新されました。
  • 作成者
    トピック
  • nori@kisyubitonori@kisyubito
    参加者
    #7606
    3

    みなさん 初めまして NoRITEC。といいます
    よろしくお願いします
    自己紹介で少し書いていますが 本業はメーカの射出成形部門に所属しています
    趣味の延長で作れそうなプロダクトを作って現場実装しています(小さくテストして有用な物はちゃんとお金をかけて外部業者も交えて製作するってゆうスタイルです)

    プラ太郎さんとお話してて、射出成形機のプラモデルに有用な機能を入れれたら良いよねッテことでこの企画に参加させてもらっています

    機能について色々、考えたのですが 製造現場で身近な事の一つと思うので 「熱中症予防」のアラートを出す機能を内蔵してみようと思います

    専門的に電機機器設計をしてる訳ではないので、出来る範囲で実装して その過程を公開したいと思いますのでよろしくお願いします

    以下 要件定義的な物

    1. 温度と湿度の計測機能:
    – 内部のセンサーを使用して、現在の温度と湿度を計測します

    2. 熱中症指数の計算機能:
    – 温度と湿度のデータを使用して、熱中症のリスクを示す指数を計算します
    – 熱中症指数の計算には、Wet Bulb Globe Temperature指数を採用します

    3. LEDによる警戒レベルの表示:
    – 計算された熱中症指数に基づいて、警戒レベルを示す色のLEDを点灯させます
    – たとえば、緑色は安全範囲、黄色は注意範囲、赤色は危険範囲など、適切な色の設定を行います

    4. ユーザーへの状況通知機能:
    – 状況の変化や警戒レベルの上昇をユーザーに通知するために、LINEのメッセージングプラットフォームを活用します

    5. 予防対策のアドバイス機能:
    – ユーザーに熱中症の予防対策や注意事項を提供するための機能を追加します

    ユーザーへのメッセージ通知ががLINEが良いのかどうかの問題もありますが一旦これにて進めてみます

22件の返信を表示中 - 1 - 22件目 (全22件中)
  • 投稿者
    返信
  • nori@kisyubitonori@kisyubito
    参加者
    #8476
    3

    こんにちは 前回の予告とうり グラフの作成の説明をしたいと思います
    スプレッドシートに「グラフ」のシートを作ります
    概要としてプラファンロボから送られてきた データーを保存する「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);
    }

    nori@kisyubitonori@kisyubito
    参加者
    #8369
    3

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

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

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

       

    nori@kisyubitonori@kisyubito
    参加者
    #8363
    3

    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.”);
    }

    }

    nori@kisyubitonori@kisyubito
    参加者
    #8361
    3

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

    プラ太郎プラ太郎
    キーマスター
    #8341
    39

    NoRITECさん
    資料のシェアありがとうございます。
    倣って試作してみます。
    ワクワクです!

    nori@kisyubitonori@kisyubito
    参加者
    #8338
    3

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

    Attachments:
    nori@kisyubitonori@kisyubito
    参加者
    #8335
    3

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

    Attachments:
    nori@kisyubitonori@kisyubito
    参加者
    #8332
    3

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

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

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

    Attachments:
    プラ太郎プラ太郎
    キーマスター
    #8206
    39

    プログラム公開ありがとうございます✨
    有益な情報です👏👏👏

    稼働してみた時に、不具合を自分で直せるのは頼もしいです!
    今回の開発を再現することで、電子工作とIoTの素養を習得できますね👍

    nori@kisyubitonori@kisyubito
    参加者
    #8194
    3

    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サービスの容量確保のため)

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

    プラ太郎プラ太郎
    キーマスター
    #8114
    39

    ノリテックさん
    マイコン、温湿度センサー、3色LED購入しました!
    こちらでマネして再現してみます🧑‍🔧✨

    引き続きよろしくお願い致します。

    nori@kisyubitonori@kisyubito
    参加者
    #8014
    3

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

    今回は 時間の制御の説明です
    今回のプログラムは 定期的に「温度」「湿度」「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:
    プラ太郎プラ太郎
    キーマスター
    #7864
    39

    ノリテックさん
    進捗報告ありがとうございます。
    LINEとウェブを繋げられるんですね👏
    マイコンができることを学んでいくと、工場IoTに応用していけますね。

    プラモ完成前に私もIoTの基礎を身につけていきたいと思っています。

    おすすめの参考書やネット教材などありましたら、ご紹介ください♪

    nori@kisyubitonori@kisyubito
    参加者
    #7834
    3

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

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

    Attachments:
    nori@kisyubitonori@kisyubito
    参加者
    #7781
    3

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

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

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

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

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

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

    Attachments:
    プラ太郎プラ太郎
    キーマスター
    #7699
    39

    ノリさん
    温湿度から、計算して、Line出力🔥
    この機能を学ぶと、その他色々なIoTが見えますね✨
    素晴しい✨

    nori@kisyubitonori@kisyubito
    参加者
    #7688
    3

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

    熱中症警戒指数の計算式(レベル判定の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:
    nori@kisyubitonori@kisyubito
    参加者
    #7647
    3

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

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

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

    プラ太郎プラ太郎
    キーマスター
    #7641
    39

    ノリテックさん
    いい感じですね✨
    温湿度センサーと超小型マイコンボードが搭載できそうで嬉しいです。

    私もardino勉強してみます。

    アマゾンのこのスタートキットを購入してみます。
    https://www.amazon.co.jp/ELEGOO-%E3%82%AD%E3%83%83%E3%83%88-%E3%83%AC%E3%83%99%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E4%BB%98-mega2560-Arduino%E7%94%A8/dp/B06XF2HZGT/ref=sr_1_9?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=17L3OSGXSJWH7&keywords=ardino&qid=1686404061&sprefix=ardino%2Caps%2C212&sr=8-9

    nori@kisyubitonori@kisyubito
    参加者
    #7636
    3

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

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

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

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

    nori@kisyubitonori@kisyubito
    参加者
    #7633
    3

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

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

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

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

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

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

    プラ太郎プラ太郎
    キーマスター
    #7610
    39

    ノリテックさん
    企画賛同ありがとうございます❤️
    ノリテックさんの電子工作見てて、ずっと興味があったんですよね✨
    今回のプラモ実装を通して、電子工作・IoTを学び始めます🧑‍🔧
    今後よろしくお願い致します。

22件の返信を表示中 - 1 - 22件目 (全22件中)
  • このトピックに返信するにはログインが必要です。
  • この記事を書いた人
  • 最新記事
  • 最新フォト
nori@kisyubito

nori@kisyubito

電機機器メーカーの成形部門に所属 主に自社製品の成形部品の新規立ち上げ、量産を担当                        Twitter ID @NoRITEC 個人的にプロダクトを企画製作し現業にも実装しています                                                   

289

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