工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

UnifiedWater v1

コンポーネントと消耗品

>
Arduino MKR GSM 1400
× 1
Adafruit NeoPixelリング:WS2812 5050 RGB LED
× 1
GY21温度と湿度
× 1
濁度センサー、フォトトランジスタ出力
× 1
Adafruit防水DS18B20デジタル温度センサー
× 1
DFRobot Gravity:アナログスピアチップpHセンサー/メーターキット
× 1
SparkFunプッシュボタンスイッチ12mm
× 1
ジャンパー線(汎用)
× 1
抵抗220オーム
× 1

必要なツールとマシン

>
はんだごて(汎用)

アプリとオンラインサービス

>
ArduinoWebエディター
SORACOM AirIoT接続プラットフォーム
SORACOMハーベスト
SORACOMラグーン

このプロジェクトについて

概要

河川。私たちの生存、貿易などに不可欠です。過去10年間、世界の水域の汚染を減らすために多大な努力が払われてきました。人々はゴミを捨てるために海に行かないので、川は汚染の原因です。彼らはそれを川に捨てます。

その後、これらの川は海や海に流れ込み、かつて川に投げ込まれた歯ブラシは世界中を通り、その反対側に着陸します。

汚染と戦おうとしている世界では、データは非常に重要です。企業や企業が水質汚染を減らすためのグローバルプロジェクトに協力するのは簡単なはずです。これがUnifiedWaterの出番です。

このデータを簡単に収集して分析できる、十分に安価でスケーラブルなデバイスであるため、河川の汚染状況を知る必要があります。 WaterAidには2つのモードがあり、1つは企業に適合し、もう1つは個人に適合します。

複数のデバイスが一緒に機能し、小川のさまざまな場所またはさまざまな水域に配置できます。これらのデバイスは、同じデータベースにデータを送信する間隔でデータを収集します。これにより、企業はボタンをクリックするだけで、監視されている川や湖の状態を確認できます。

デバイスのポータブルバージョンも利用できます。このバージョンでは、個人がデバイスを携帯することができ、水サンプルを採取したい場合は、デバイスのボタンを押して、30秒間水中に置きます。その後、データはオンラインダッシュボードで利用できるようになります。

WaterAidは、水温、pH、湿度、および大気の温度と湿度を収集することにより、川の汚染を監視するために必要なすべてのセンサーを備えています。

ビデオ

画像

機能性

WaterAidを使用すると、ユーザー、企業、または個人が安全かつ正確にデータを収集し、Soracomのクラウドのおかげでこのすべてのデータを1か所で視覚化できます。プロジェクトはフロントエンドとバックエンドで構成されています。

フロント 終了

プロジェクトのフロントエンドは、データを収集してクラウドに送信するために使用される物理デバイスです。デバイスはモード1または2に設定できます。モード1では、デバイスはボタンを押すだけで一連のデータを記録します。これは、水域を時折監視するのに役立ちます。モード2は、定義された時間間隔で読み取りを行い、このデータをクラウドにプッシュするようにデバイスを設定します。

MKR GSMは、使いやすく信頼性が高いため、フロントエンドに使用されます。また、GSMを介してソラコムにアクセスすることもできます。以下は、データを収集するときにデバイスが実行する手順です。

バッテリー

デバイスは、複数の方法で電力を供給できます。デバイスの付属ポートを介してLiPoバッテリー、パワーバンク、またはデバイスのVINポートを介してバッテリーを接続することで電力を供給できます。

デバイスの寿命は、バッテリーの電力に大きく依存します。デバイスは、可能な限り多くのエネルギーを節約するために、読み取りの合間にスリープモードになります。

LED リング

デバイスには、LEDリングも装備されています。これにより、デバイスが現在実行していることに関するフィードバックがユーザーに提供されます。リングを使用できるモードは3つあります。

  • マルチカラー デバイスがデータをセットアップ中または処理中であることを示します
  • 赤く点滅 警告。通常、エラーを示している可能性もありますが、デバイスを水中に置く必要があることを意味します。
  • 進行中の青または緑 デバイスが現在サンプルを採取しているため、水中に置く必要があることを示します。

サンプルの取得

デバイスがサンプルを採取するときは、デバイスのセンサーをすべて水中に配置する必要があります。センサーをウォームアップするためにサンプルが取得される前に、6秒の遅延が設定されます。最良の結果を得るには、ウォームアップが行われているときにセンサーを水没させる必要があります。

データの解析

データは、JSON文字列の形式でSoracomに送信する必要があります。これにより、使用されるすべてのキーに値が与えられます。そうすれば、データはバックエンドで簡単に解釈できるようになります。以下は、送信されるペイロードの例です。

  {
"Latitude":53.3474617、
"Longitude":-6.2514529、
"waterpH":7.30、
"waterTurbidity":94、
"waterTemp":12.10、
"atmoTemp":14.50、
"atmoHum":82、
"deviceID":1、
"deviceName": "device1"、
"epoch":1559392636、
"mode":2
}

バックエンド

プロジェクトのバックエンドはソラコムを参照しています。データは収集され、ダッシュボードのバックエンドで視覚化されます。これらのダッシュボードは、SoracomLagoonを使用して作成されています。

ダッシュボード

ダッシュボードは、デバイスから収集されたすべてのデータを合計します。データが収集された場所を地図上にプロットします。色は水質の程度によって異なります。次に、データはその下の線グラフにグラフ化され、テーブルに完全に合計されます。

水のpHまたは濁度の値が異常である場合にも、ユーザーは電子メールでアラートを受け取ります。以下はダッシュボードのスクリーンショットです。

スケーラビリティ

デバイスは簡単に拡張でき、すべてのデータを収集して同じダッシュボードに表示できます。複数のデバイスでSoracomにデータをストリーミングし、ダッシュボードにデータを視覚化できます。

デバイスの価格と、デバイスの構築とプログラミングが非常に簡単なため、一連のデバイスを簡単に使用できます。これらのデバイスは、SoracomKryptonなどのツールを使用してSoracomに簡単に登録することもできます。

各企業または個人には、デバイスによって収集されたデータが視覚化される、パーソナライズされたダッシュボードがあります。近い将来、人々が同じダッシュボードで共同作業を行い、データを相互に共有できるようになることを願っています。

メリット

この製品を利用する個人または企業は、次のようなメリットがあります。

  • デバイスは非常に自給自足であるため、ランニングコストが削減されます。
  • スケーラブルであるため、このデバイスは単独で、または他の数十のフリートで簡単に動作できます。
  • データをクラウドにプッシュしてリアルタイムで視覚化できる高速データ収集。
  • 簡単に視覚化でき、オンラインダッシュボードを使用していつでもどこでもデータを視覚化できます。

プロジェクトの構築

ステップ1:必要な装置

このプロジェクトには、配置された水と大気に関連する多くのパラメータを監視する多くのセンサーが必要です。以下は、必要なすべての材料のリストです。

  • 1、Arduino MKR GSM
  • 1、16個のLED RGBLEDリング
  • 1、GY-21温度および湿度モジュール
  • 1、濁度センサー
  • 1、防水温度センサー
  • 1、pHセンサーおよびモジュール
  • 1、押しボタン
  • 1、抵抗(220Ω)
  • ジャンパー線

ステップ2:回路を接続する

コンポーネントは一緒にはんだ付けする必要があります。回路図の理解を容易にするために、ブレッドボードが使用されています。回路図は以下のとおりです。

MKRGSMの準備

センサーをデバイスにはんだ付けした後、SIMカード、GSMアンテナ、およびバッテリーをデバイスに接続する必要があります。 VINポートを介して2本のAA電池でボードに電力を供給しています。手順は次のとおりです。

ステップ3:コードの確認

プロジェクトのコードには4つの主要なセクションがあります。

  • センサーデータを収集する
  • 日時を取得する
  • データの処理
  • データの送信

これらのセクションはすべて、以下で説明および詳細化されています。

センサーデータを収集する

  Serial.println( "Taking Sample"); 
Serial.println( "________________________________________");
Serial.println( "Taking Sample");
Serial.println ( "OK-ウォーミングアップ");
delay(6000); //センサーキャリブレーションの遅延
colourLED(50);
Serial.println( "OK-サンプルの取得");
Serial.print( "");
for(int i =0; i <16; i ++)
{
if(mode ==1)
{
strip.setPixelColor(i、strip.Color(0、255、0 ));
strip.show();
}
else
{
strip.setPixelColor(i、strip.Color(0、0、255));
strip.show();
}
//複数の水サンプルを取得します-センサーはそれほど正確ではありません
waterTurbidity + =getWaterTurbidity();
waterPh + =getWaterPh();
if(i> 14)
{
//高精度センサー用に単一のサンプルを取得
waterTemperature =getWaterTemp();
atmoTemperature =getAtmoTemp ();
atmoHumidity =getAtmoHumidity();
}
Serial.print( "。");
delay(500);
}
Serial .println( "");
Serial.println( "成功-取得したサンプル");
for(int i =0; i <=16; i ++)
{
strip.setPixelColor(i、strip.Color(0、0、0));
strip.show();
delay(30);
}
Serial.println( "________________________________________");
Serial.println( "");
delay(500);

上記のコードのセクションは、センサーが水中でキャリブレーションされるのを6秒間待つことから始まります。その後、デバイスは16回ループし、ループごとに新しいLEDがリングをオンにします。

値が変動するセンサーからのデータは16回収集され、平均が求められます。高精度センサーは最後のループで読み取られます。

時間と日付を取得

  void getCredentials()
{
Serial.println( "[1/2] Time");
Serial.println( "OK-RTCから時間を取得");
currentEpoch =processTime();
colourLED(50);
Serial.println( "[2/2] Geolocation");
Serial.println( "OK-Getting GPRSからのジオロケーション ");
while(!getLocation());
Serial.print("成功-ジオロケーションは "); Serial.print(latitude、7); Serial.print( "、"); Serial.println(longitude、7);
colourLED(50);
}

bool getLocation()
{
if(location.available( ))
{
緯度=location.latitude();
経度=location.longitude();
delay(500);
trueを返します;
}
else
{
delay(500);
falseを返す;
}
}

最初のループは資格情報を処理します。時間は、セットアップ時にGSMネットワークに同期されたときにオンボードRTCから抽出されます。ジオロケーションはGPRSから抽出されます。

データの処理

  void processData()
{
Serial.println( "OK-水のpHと濁度の平均値を取得");
waterPh =(waterPh / 16);
waterTurbidity =(waterTurbidity / 16);
Serial.println( "OK-データをシリアルにダンプする");
Serial.println( "");
Serial.print( "[水] pH "); Serial.println(waterPh);
Serial.print( "[水]濁度"); Serial.println(waterTurbidity);
Serial.print( "[水]温度"); Serial.println(waterTemperature);
Serial.print( "[Atmo] Temperature"); Serial.println(atmoTemperature);
Serial.print( "[Atmo]湿度"); Serial.println(atmoHumidity);
Serial.println( "");
Serial.println( "Success-Data Processed");
colourLED(50);
}

String makeLine()
{
Serial.println( "OK-文字列の作成");
String dataReturned; dataReturned + ="{"; dataReturned + ="\ n";
dataReturned + ="\" Latitude \ ":" + String(latitude、7); dataReturned + ="、\ n";
dataReturned + ="\" Longitude \ ":" + String(longitude、7); dataReturned + ="、\ n";
dataReturned + ="\" waterpH \ ":" + String(waterPh); dataReturned + ="、\ n";
dataReturned + ="\" waterTurbidity \ ":" + String(waterTurbidity); dataReturned + ="、\ n";
dataReturned + ="\" waterTemp \ ":" + String(waterTemperature); dataReturned + ="、\ n";
dataReturned + ="\" atmoTemp \ ":" + String(atmoTemperature); dataReturned + ="、\ n";
dataReturned + ="\" atmoHum \ ":" + String(atmoHumidity); dataReturned + ="、\ n";
dataReturned + ="\" deviceID \ ":" + String(deviceID); dataReturned + ="、\ n";
dataReturned + ="\" deviceName \ ":"; dataReturned + =String( "\" "); dataReturned + =String(deviceName); dataReturned + =String(" \ ""); dataReturned + ="、\ n";
dataReturned + ="\" epich \ ":" + String(currentEpoch); dataReturned + ="、\ n";
dataReturned + ="\" mode \ ":" + String(mode); dataReturned + ="\ n";
dataReturned + ="}";
Serial.println( "OK-データは下にあります");
Serial.println( "");
Serial.println(dataReturned);
Serial.println( "");
Serial.println( "Success-String is Ready");
colourLED(50);
return dataReturned;
}

processData() 変動する傾向のあるセンサーから収集されたデータの平均を取得し、すべてのデータをシリアルモニターにダンプします。

makeLine() すべてのデータをSoracomに送信されるJSON文字列にコンパイルします。すべての値は、バックエンドに送信する準備ができているJSONバッファーに解析されます。

データの送信

  void parseData(String dataToSend)
{
Serial.println( "OK-接続の設定");
if(client.connect(url、80))
{
Serial.println( "OK-接続が確立され、データを解析しています");
client.println( "POST / HTTP / 1.1");
client.println( "Host :harvest.soracom.io ");
client.println(" User-Agent:Arduino / 1.0 ");
client.println(" Connection:close ");
client.print ( "Content-Length:");
client.println(dataToSend.length());
client.println( "");
client.println(dataToSend);
Serial.println( "OK-Data Parsed");
}
Serial.println( "OK-Getting Responce");
Serial.println( "");
while(1)
{
if(client.available())
{
char c =client.read();
Serial.print(c);
}
if(!client.connected())
{
break;
}
}
Serial.println( "成功-データは解析されます ");
}

最後に、データはソラコムに送信されます。デバイスはサーバーとの接続を確立してから、資格情報を準備します。次に、データがサーバーに送信され、応答がシリアルモニターに出力されます。

その後、トリガーが起動するまでデバイスはスリープ状態になり、手順を繰り返します。

ステップ4:変数の設定

プロジェクトを使用する前に編集する必要のある特定の変数があります。これらは以下のとおりです。それらを設定する手順も以下にあります。

  • モード デバイスのモードによって、定期的にサンプルを取得するか、ボタンを押すだけでサンプルを取得するかが決まります。この変数が1に設定されている場合、デバイスはボタンを介して操作する必要があります。モードが2に設定されている場合、デバイスは定期的にサンプルを取得します。
  • deviceIDとdeviceName これらは、デバイスのフリートが使用されている場合にデバイスを識別するために使用されるカスタム変数です。使用する各デバイスには、簡単に識別できるように一意のIDと名前を付ける必要があります。
  • sleepTime デバイスが読み取りと読み取りの間にスリープする時間を格納します。コードでは5秒に設定されています。これはテストに適していますが、フィールドで使用する場合は変更する必要があります。 15分間隔でサンプルを採取できます。
  • proDebug デバッグ時に使用され、コードではfalseに設定されますが、デバッグ時にシリアルモニターが必要な場合は、trueに設定する必要があります。デバッグがオフの場合でも、デバイスはシリアルに出力することに注意してください。デバッグがオンの場合、シリアルモニターがオンになっていないとデバイスは実行されません。

ステップ5:コードをアップロードする

バックエンドを設定する前に、データをバックエンドに送信する必要があります。

これを行うには、MKR GSMをコンピューターに接続し、コードをデバイスにアップロードします。このセットアップでは、デバイスのモードが1に設定されていることを確認してください。コードがアップロードされたら、すべてのセンサーを水中に置きます。

次に、デバイスのボタンを押して、データが収集されて送信されるのを待ちます。これを数回繰り返して、SoracomAirにデータを入力します。

ステップ6:Soracomの設定

このステップは2つのセクションに分かれており、最初のセクションではSoracomでのアカウントの作成とSIMの登録について説明し、もう1つのセクションではAirからデータを収集するためのSoracomHarvestの設定について説明します。すでにソラコムのアカウントをお持ちの場合は、最初のセクションをスキップしてください。

セクション1:アカウントの作成

セクション2:グループと収穫

ステップ7:ラグーンの設定

Soracomで最後に設定するのはLagoonです。これは、データを視覚化し、データが適切でない場合に電子メールアラートを作成するために使用するツールです。以下の手順に従ってください。

Calibration Problems

The turbidity and pH sensors have to be calibrated to be used precisely, you might find that when running the code, the turbidity might by 105% or the pH of water 3. In this case, the sensors have to be calibrated. A quick guide into calibrating them is below.

  • pH Sensor The pH sensor can be calibrated using the potentiometers on the module, place the probe in still bottled water of pH 7 and wait for 5 minutes, now develop a code that prints the pH from the sensor to the serial monitor. Twist the potentiometer until the pH is 7.
  • Turbidity Sensor The turbidity sensor is not very precise and so a relative percentage, compared to pure water is taken. To refine the value of pure water, if your readings exceed 100% turbidity, you will need to place the turbidity sensor in pure water and develop a code that prints the voltage on the analog pin of the pH sensor to the serial monitor. A variable named calibration is found in sensors.h , change the value of that variable to the voltage received when the probe was placed in pure water.

Libraries

  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
  • Adafruit_Neopixel (c) Phil Burges Lesser General Public Licence this library is in the public domain
  • MKRGSM (c) 2016 Arduino AG GNU Lesser General Public Licence this library is in the public domain
  • Wire (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence this library is in the public domain
  • OneWire (c) 2007 Jim Studt GNU General Public Licence this library is in the public domain
  • DallasTemperature GNU General Public Licence this library is in the public domain
  • RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain

Final

Finally, I got an enclosure done for the project that could be easily portable but be fixed to collect samples both in mode 1 and 2. Steps are below.

Finally, ensure that the mode is set accordingly and start using the device on the field. Check out your local river or lake and see how clean it is. Play around with the dashboard and see what other widgets it has.

Background

Today, data is the new currency and collecting it easily and efficiently is key to a better environment. By measuring the pollution of rivers and lakes collectively, we can raise awareness that the waters are getting dirtier and something has to be done.

I was thinking of an idea for the Soracom contest and I felt like I had to make something beneficial for the environment, the idea of people and companies working together on collective dashboards to visualise the status of rivers and lakes globally inspired me to take this project on.

What will you do to stop water pollution? Because action has to be taken today, and tomorrow is a day too late.


コード

コード
The repo for the projecthttps://github.com/Andrei-Florian/UnifiedWater-v1

回路図

schematics_e7TRP6KJKI.fzz

製造プロセス

  1. O2センサーとは何ですか?
  2. RaspberryPiを使用したモーションセンサー
  3. ラズベリーパイ土壌水分センサー
  4. DS18B20センサーをテストする
  5. ラズベリーパイ温度センサー
  6. センサーテレメトリ2.0.1
  7. 感情センサー/ EEG
  8. Raspberry Pi2上のWindows10 IoT Core –Adafruitセンサーデータ
  9. MyRiver
  10. Arduinoクラウドセンサータワー
  11. モダンジュークボックス