- このトピックには22件の返信、2人の参加者があり、最後に
nori@kisyubitoにより1週前に更新されました。
-
作成者トピック
-
みなさん 初めまして NoRITEC。といいます
よろしくお願いします
自己紹介で少し書いていますが 本業はメーカの射出成形部門に所属しています
趣味の延長で作れそうなプロダクトを作って現場実装しています(小さくテストして有用な物はちゃんとお金をかけて外部業者も交えて製作するってゆうスタイルです)プラ太郎さんとお話してて、射出成形機のプラモデルに有用な機能を入れれたら良いよねッテことでこの企画に参加させてもらっています
機能について色々、考えたのですが 製造現場で身近な事の一つと思うので 「熱中症予防」のアラートを出す機能を内蔵してみようと思います
専門的に電機機器設計をしてる訳ではないので、出来る範囲で実装して その過程を公開したいと思いますのでよろしくお願いします
以下 要件定義的な物
1. 温度と湿度の計測機能:
– 内部のセンサーを使用して、現在の温度と湿度を計測します2. 熱中症指数の計算機能:
– 温度と湿度のデータを使用して、熱中症のリスクを示す指数を計算します
– 熱中症指数の計算には、Wet Bulb Globe Temperature指数を採用します3. LEDによる警戒レベルの表示:
– 計算された熱中症指数に基づいて、警戒レベルを示す色のLEDを点灯させます
– たとえば、緑色は安全範囲、黄色は注意範囲、赤色は危険範囲など、適切な色の設定を行います4. ユーザーへの状況通知機能:
– 状況の変化や警戒レベルの上昇をユーザーに通知するために、LINEのメッセージングプラットフォームを活用します5. 予防対策のアドバイス機能:
– ユーザーに熱中症の予防対策や注意事項を提供するための機能を追加しますユーザーへのメッセージ通知ががLINEが良いのかどうかの問題もありますが一旦これにて進めてみます
-
作成者トピック
-
投稿者返信
-
こんにちは 前回の予告とうり グラフの作成の説明をしたいと思います
スプレッドシートに「グラフ」のシートを作ります
概要としてプラファンロボから送られてきた データーを保存する「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);
}Attachments:
続いて ウエブアプリを動くようにします
⑥「デプロイ」→「新しいデプロイ」→「ウエブアプリ」
⑦「ウエブアプリの実行」は自分
⑧「アクセスできるユーザ」は全員
⑨最後にウエブアプリの実行設定これで、マイコンから送られたデータを スプレッドシートの「log」のシートに書き込んでいくようになります
次回は グラフの作成を説明したいと思います
Attachments:
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.”);
}}
Attachments:
GASについて
GASはGoogle Apps Scriptの略で、Googleのサービスの拡張・自動化や、
サービス間連携などをJavaScriptで記述することができるプラットフォームです
ググれば 色々な諸先輩方が説明してくれていますが 今回実行したいことをふまえて GASの説明ですAttachments:
NoRITECさん
資料のシェアありがとうございます。
倣って試作してみます。
ワクワクです!プログラムは下記に置いておきます
https://drive.google.com/file/d/1rASCg21tY7NnIa00joz8UrwdAx38ZyR4/view?usp=sharing
次回は スプレッドシート側の説明をする予定にしていますプログラム公開ありがとうございます✨
有益な情報です👏👏👏稼働してみた時に、不具合を自分で直せるのは頼もしいです!
今回の開発を再現することで、電子工作とIoTの素養を習得できますね👍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サービスの容量確保のため)興味のある方は もうしばらく お付き合いください。
ノリテックさん
マイコン、温湿度センサー、3色LED購入しました!
こちらでマネして再現してみます🧑🔧✨引き続きよろしくお願い致します。
Attachments:
前回のポストから時間開いてしまいました
今回は 時間の制御の説明です
今回のプログラムは 定期的に「温度」「湿度」「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に応用していけますね。プラモ完成前に私もIoTの基礎を身につけていきたいと思っています。
おすすめの参考書やネット教材などありましたら、ご紹介ください♪
前回の告知どうり 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:
ノリさん
温湿度から、計算して、Line出力🔥
この機能を学ぶと、その他色々なIoTが見えますね✨
素晴しい✨プログラムを作成するにあたり 動きを整理してみます
フローチャートはこんな感じです(自己流なので少し変ですが)
これを 元にプログラムを作成していきます熱中症警戒指数の計算式(レベル判定の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/Attachments:
ノリテックさん
いい感じですね✨
温湿度センサーと超小型マイコンボードが搭載できそうで嬉しいです。私もardino勉強してみます。
最終ロボットの形で成立させたいので、電源ケーブルについては ロボの後ろ側に出るサイズ感のマイコンを物色したところ、Seeed Studio XIAO ESP32C3 がHit!!!
使うのは初めてですが何とかなるでしょうッテことで、これにて進める事としました
いやぁ ほんと小さい このサイズで WiFi + Bluetooth が使えて 極めつけは 外部アンテナが使えます(今回も内蔵できそう)
以前作ったシステムでは Wifiが工場内のノイズで到達が厳しいとか経験しているので外部アンテナが使えるのは 工場 IoTの為のデイバイスみたいです
プラ太郎さん コメントありがとうございます
少しでも お役に立てるよう 私も勉強しながら 情報提供しますねそれでは 少しづつ紹介していきます
先ずは射出成形機ロボットプ・ラモデルに入るサイズのマイコンの選定から
モデリングデーターを頂き とりあえず 3Dプリンターで出力してみました
温度・湿度を測定するセンサーは sht30 向かって右側
この時点のマイコンは esp8266D1mini 向かって左側内蔵できるサイズではありますが 電源の接続を考えると NG な感じでした
ノリテックさん
企画賛同ありがとうございます❤️
ノリテックさんの電子工作見てて、ずっと興味があったんですよね✨
今回のプラモ実装を通して、電子工作・IoTを学び始めます🧑🔧
今後よろしくお願い致します。 -
投稿者返信
- このトピックに返信するにはログインが必要です。