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

MyRiver

コンポーネントと消耗品

>
Arduino MKR1000
× 1
水位センサー
× 1
Phセンサー
× 1
LED(汎用)
可能であれば白
× 1
抵抗221オーム
× 2
フォトレジスター
× 1
ジャンパー線(汎用)
× 1

必要なツールとマシン

>
はんだごて(汎用)
弓のこ

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

>
ArduinoWebエディター
Sigfox
Wia

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

概要

川や湖は、楽しさとリラクゼーションの素晴らしい源になることができます。しかし、川が汚れて汚染された場合、すべての楽しみは失われます。多くの人々は家畜を養うために川の水に依存しており、動物に汚れた水を与える余裕がありません。

川のすぐ隣に住んでいると想像してみてください(そうでない場合)。川のせいで家が浸水した状態で夜中に目覚めたくないでしょう。または、隣人が川にガソリンを捨てることを決めた場合、動物が病気にならないようにする必要があります。

MyRiverはこれらすべての問題を解決し、Sigfoxのおかげで孤立した領域で動作できるため、誰もがデバイスにアクセスできます。デバイスは、水のpH、革新的な方法を使用した汚染レベル、および水位を読み取ります。 Wiaのおかげで、どこにいても携帯電話やコンピューターで川をライブで監視できます。このようにして、ストリームに問題があるかどうかを知ることができ、手遅れになる前に行動することができます。川に問題があればすぐに通知します。

ビデオ

画像

機能性

このデバイスはArduinoMKR FOXに基づいており、リモートで使用するように設計されています。ユーザーはデバイスを川や湖に置き、どこからでも監視できます。 SAM Dの低電力モードのおかげで、デバイスは2AAバッテリーで長時間動作できます。

デバイスは30分ごとに読み取りを行い、その後スリープ状態になります。最小スリープ時間は20分である必要がありますが、スリープ期間をリセットできます。

MKR FOXは、pHセンサーを使用して川のpHを読み取り、水位センサーを使用して水位を取得します。また、フォトレジスターの読み取り値が低、それは固形物質(油、ガソリン、水銀など)が川に存在することを意味します。次に、デバイスはすべてのデータをSigfoxに送信し、そこでWiaに中継され、処理および視覚化されます。川の状態がユーザーに通知されます。以下は、機能の概要の画像です。

バッファはHEXとしてエンコードされたSigfoxに送信され、SigfoxはデータをWiaに中継し、データはフローを通過し、データは文字列に変換されてからセンサー値に変換されます。その後、それらは処理され、値が範囲外である場合はユーザーに通知されます。

以下は、プロジェクトのコードの概要を示す別の画像で、以下で説明します。

  • センサーの読み取り pH、水位、フォトレジスタセンサーの値を読み取り、変数に保存します。
  • フォーマットバッファ すべての値をSigfoxに送信できる12バイトのバッファにマージします。
  • データの解析 バッファをSigfoxに解析します。

MKR FOXはSigfoxを介して12バイトしか送信できません。つまり、すべてのセンサー値を12バイトにマージする必要があり、各センサーの最大raw値は1024(すべてアナログであるため)であるため、各センサーは3分の1を表します。バッファ(4バイト)。 Arduinoは、値が4バイトになるまで、値をマージし、各値の先頭にゼロを追加する必要があります。下の画像はこのプロセスを示しています。

Arduinoはセンサー値を整数として受け取り、整数を文字列に変換し、4バイトになるまで各値の先頭にゼロを追加します。たとえば、フォトレジスターの値が620の場合、1つのゼロが追加されます。 0 620.ただし、水位センサーが24に等しい場合は、2つのゼロが追加されます。 00 24.次に、デバイスは値を12バイトのバッファーにマージし、データをSigFoxに送信します。

動作中のデバイス

以下は、プロジェクトの機能を示すいくつかの写真です。それらをよりよく見るには、上のビデオを参照してください。

メリット

ユーザー 運用 これ プロジェクト します メリット in:

  • いつでもどこからでも川の水位、pH、汚染レベルを簡単に監視できます
  • 河川が可溶性または不溶性の物質で汚染されているか、洪水が発生している場合に通知を受け取る
  • 使いやすさと取り付け
  • Sigfoxの対象国で動作します

プロジェクトの構築

ステップ1:必要な装置

このプロジェクトでは、すべてのコンポーネントをはんだ付けする必要があります。センサー以外のものはそれほど多くありません。資料のリストを以下に示します。

  • 1、Arduino MKR FOX 1200
  • 1、pHセンサー
  • 1、水位センサー
  • 1、フォトレジスター
  • 1、白色LED
  • 2、抵抗器(220Ω)
  • ジャンパー線

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

コンポーネントがブレッドボードに配置されていないため、プロジェクトの回路図は少し混乱する可能性があります。問題がある場合は、以下のフリッツファイルをダウンロードして、コンピューター上でワイヤーを動かしてみてください。

  • 回路の概要

下の画像は、完成したときに回路がどのように見えるかを示しています。

  • 準備中 MKR FOX

以下の画像は、バッテリーボックスとアンテナをMKR FOXに接続する方法を示しています。センサーを接続した後、バッテリーボックスを接続する必要があることに注意してください。その他の配線とセットアップは、プロジェクトの構築/最終版にあります。

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

コードには3つの主要な部分があります:

  • センサーの読み取り
  • フォーマットバッファ
  • データの解析

これらのセクションについては、以下で説明します。

  • センサーの読み取り
  struct GetValue //ループを緩和するための構造体を作成{intriverLevel()//川のレベルを取得{const int val =analogRead(A2); if(proDebug){Serial.print( "River Level"); Serial.println(val); } return val; } int riverPh()//川のpHを取得{const int val =(analogRead(A1)/ 5 * 3.3); if(proDebug){Serial.print( "River Ph"); Serial.println(val); } return val; } int riverPol()//河川の汚染レベルを取得します{const int val =analogRead(A3); if(proDebug){Serial.print( "河川汚染"); Serial.println(val); } return val; }};  

上記の構造には、各センサー値を読み取るループが含まれており、値ごとに個別のループがあります。

  • フォーマットバッファ
  String data(int level、int ph、int pol)//センサー値をバッファーにマージ{int values [3] ={level、ph、pol};文字列newValues; for(int i =0; i <3; i ++)//すべての値を実行し、開始に0を追加します{if(values [i] <10){newValues + ="000"; Serial.println( "オプション1"); } else if(values [i] <100){newValues + ="00"; Serial.println( "オプション2"); } else if(values [i] <1000){newValues + ="0"; Serial.println( "オプション3"); } それ以外 {}; newValues + =values [i]; Serial.print( "実行"); Serial.print(i); Serial.print( "/ 3"); Serial.println(newValues); } return newValues; }  

上記のループは、3つのセンサー値を取り込み、それらを配列に配置します。次に、各値をループし、値のサイズが4バイトになるまで各値の先頭にゼロを追加し、次に各値を文字列に追加して返します。

  • データの解析
  void parseData(String data)//バッファをSigFoxに送信{SigFox.beginPacket(); SigFox.print(data); int ret =SigFox.endPacket(); }  

このセクションでは、解析する文字列を取得してから、値をSigfoxに送信します。

ステップ4:WiaSigfox統合の設定

このステップでは、Sigfoxからメッセージを受信するようにWiaを設定する方法を説明します。Wiaは、ユーザーがWebまたはモバイルアプリでウィジェットを使用してデータを視覚化できるようにするプロフェッショナルなIoTプラットフォームであり、ユーザーがと呼ばれるブロックコードを作成することもできます。ユーザーがデータを処理できるようにするフロー。データはイベントによって表されます。

開始するには、SigfoxアカウントとWiaアカウントを持っていることを確認してください。また、iOSまたはAndroidにWiaアプリをダウンロードして、通知を受信できるようにします。以下の画像は、SigfoxとWiaの接続を示しています。

  • タイプを設定します データアップリンク
  • チャネルを設定します URL
  • カスタムペイロード構成を入力する必要はありません
  • URL を設定します 「https://api.wia.io/v1/events」へのパターン
  • HTTPMethod を設定します POST
  • Authorization という名前のヘッダーを作成します 値が Bearer (この値は後で編集されます)
  • ContentType を設定します application / json
  • このリンクからWebhookの本体にコードをコピーします。
  • 最後に、[OK]をクリックして完了です。

ステップ5:Wiaフローの設定

このセクションの完了には少し時間がかかります。フローはHEXから受信したデータを文字列に変換し、文字列を3つのセンサー値に解析してから整数に変換し、河川汚染の値を変換します。河川レベルをHighまたはOk記述子に、生のph値を実際のph値に設定すると、値が範囲外であるかどうかがユーザーに通知されます。

以下のガイドでは、このプロセスを段階的に説明します。 Wia関数に特定のコードを挿入するように指示されます。これらのコードは下に挿入されます。コードをコピーして関数に貼り付けるだけです。メールに含めるデータも下に挿入され、関数と同じように機能します。

Wia関数

  • processPayload
  if(input.body){output.body.name ="value"; output.body.data =toByteArrayStr(input.body.data.sigfoxData);} function toByteArrayStr(sigfoxData){let result =Buffer(sigfoxData、 'hex'); result.toString( 'utf8');} を返します 
  • processPollution
  if(input.body.data){let data =input.body.data; if(data =="POLLUTED"){output.body.name ="waterLevel"; output.body.data =データ; } else {while(1); }}  
  • processPh
  let minVal =6.5; let maxVal =8.5; if(input.body.data){let data =input.body.data; if(data> maxVal || data  
  • processLevel
  if(input.body.data){let data =input.body.data; if(data =="HIGH"){output.body.name ="waterLevel"; output.body.data =データ; } else {while(1); }}  
  • riverPollution
  let minVal =200; let maxVal =0; if(input.body.data.sigfoxData){let data =input.body.data.sigfoxData;処理されたデータ=toByteArrayStr(data); newData =cutString(processedData); output.body.name ="waterPollution"; output.body.data =processData(newData);} function toByteArrayStr(sigfoxData){let result =Buffer(sigfoxData、 'hex'); return result.toString( 'utf8');} function cutString(data){let newVal =data [8]; newVal + =data [9]; newVal + =data [10]; newVal + =data [11]; finalVal =parseInt(newVal); return finalVal;} function processData(data){if(data  
  • riverPh
  let minVal =300; let maxVal =600; if(input.body.data.sigfoxData){let data =input.body.data.sigfoxData;処理されたデータ=toByteArrayStr(data); newData =cutString(processedData); finalVal =(newData / 73.1428571); valueToSend =finalVal.toFixed(2);とします。 output.body.name ="waterPh"; output.body.data =valueToSend;} function toByteArrayStr(sigfoxData){let result =Buffer(sigfoxData、 'hex'); return result.toString( 'utf8');} function cutString(data){let newVal =data [4]; newVal + =data [5]; newVal + =data [6]; newVal + =data [7]; finalVal =parseInt(newVal); newVal;} を返します 
  • riverLevel
  let minVal =0; let maxVal =200; if(input.body.data.sigfoxData){let data =input.body.data.sigfoxData;処理されたデータ=toByteArrayStr(data); newData =cutString(processedData); output.body.name ="waterLevel"; output.body.data =processData(newData);} function cutString(data){let newVal =data [0]; newVal + =data [1]; newVal + =data [2]; newVal + =data [3]; finalVal =parseInt(newVal); return finalVal;} function toByteArrayStr(sigfoxData){let result =Buffer(sigfoxData、 'hex'); return result.toString( 'utf8');} function processData(data){if(data> maxVal){return "HIGH"; } else {return "OK"; }}  

Wiaメール

  • riverPollutionEmail
 自動メッセージングSystemDataWarning-myWaterデバイス$ {trigger.source.device.id}がストリームの問題を検出しました。警告-水は不溶性物質によって汚染されています。InformationDevice$ {trigger.source.device.id}生データ$ {input.body.data}  
  • riverPhEmail
 自動メッセージングSystemDataWarning-myWaterデバイス$ {trigger.source.device.id}がストリームで問題を検出しました。警告-WaterPhが適切ではありません。水が汚染されています。InformationDevice$ {trigger.source.device.id}生データ$ {input.body.data}  
  • riverLevelEmail
 自動メッセージングSystemDataWarning-myWaterデバイス$ {trigger.source.device.id}がストリームの問題を検出しました。警告-水位が高すぎるため、川が氾濫している可能性があります。InformationDevice$ {trigger.source.device .id}生データ$ {input.body.data}  

変数の設定

Wiaがデータを受信した場合、データを処理する必要があります。データが最小値と最大値の間にある場合、値は安全であり、pHおよび水位センサーの制限が設定されていますが、ユーザーはフォトレジスターの値を手動で設定する必要があります。制限、この値を決定するためにテストを行う必要があります。以下の手順でこれを行う方法を説明します。

  void setup(){pinMode(1、OUTPUT); Serial.begin(9600); while(!Serial){}; digitalWrite(1、HIGH);} void loop(){const int val =analogRead(A3); Serial.println(val); delay(5000);}  

ユーザーが設定する必要のある別の変数、 proDebug があります 、有効になっている場合、ArduinoはUSB経由でコンピューターに接続する必要があり、シリアルモニターが開いている必要があります。このモードでは、Arduinoはシリアルモニターに印刷します。トラブルシューティングに最適です。 proDebugのデフォルトは false フィールドでの操作用。

ライブラリ

  • Sigfox-copyright(c)2016 Arduino LLC GNU Lesser General PublicLicenseこのライブラリはパブリックドメインにあります
  • ArduinoLowPower(c)2016 Arduino LLCGNU劣等一般公衆利用許諾契約書このライブラリはパブリックドメインにあります

最終

最後のステップは、ArduinoをPC / Macに接続してスケッチをアップロードし、バッテリーボックスがArduinoに接続され、回路に問題がないことを確認することです。次の手順では、プロジェクトのエンクロージャを作成する手順を説明します。

ボトル入り飲料水からエンクロージャーを作成することにしました。これは、プロジェクトを受け入れるための優れた環境に優しい方法だと思います。デバイスは下の写真のようになります。

エンクロージャーのアイデアが気に入った場合は、下の画像をスクロールして、エンクロージャーがどのように作成されたかを示してください。自分で作成してください。

The last thing to do is place the device in the river. To do this, go to the river you wish to implement MyRiver on during High Tide , this is essential to ensure that the device is not alerting that the river is flooding when it is actually just the tide.

Place some tape on the top of the water bottle to prevent water from seeping into the bottle and destroying everything.

We went to a local, dirty river to test the project out, all the alarms went off correctly.

When placing the probe in the water, ensure that the water is at the bottom of the water level sensor but is covering the photoresistor entirely. Secure the project to the shore using tape or a hammer and screws, and it should look like this (or better).

背景

Relaxing in your house, looking out the window at the once beautiful and delightful river rushing in front of you. But instead of the beautiful fresh river, you see a green slimy one, you might want to move house in that case.

And if the river decides to flood into your house in the middle of the night while you are sleeping, you will certainly decide to move.

I thought of these problems and how to solve them all in one device, and I came up with MyRiver.

If you are in the city and living beside a river, it will warn you in time if the river decides to ruin your day in any way or if your neighbour is dumping oil in the river. Or if you are on a farm, MyRiver will warn you that the river is dirty before you give the water to your animals, and will give you time to bring the animals in before the river floods.

But just reading the pH of the river was not enough, as insoluble substances like mercury or other metals do not effect the Ph of the water. So we came up with a new method to detect those substances, unique to this project, a photoresistor reading the amount of light from an LED penetrating the water. This way any water impurity can be detected.

コード

MyRiver
The Full Code

回路図

schematics_lXO5SiusZO.fzz

製造プロセス

  1. O2センサーとは何ですか?
  2. ラズベリーパイ温度センサー
  3. 感情センサー/ EEG
  4. アナログセンサーを備えた圧力気流測定装置
  5. LEDとピエゾスピーカーを備えたDHT11センサー
  6. UnifiedWater v1
  7. 3D RGB Arduclock
  8. Arduinoを搭載したシンプルな障害物センサー
  9. ジョイスティックゲーム
  10. Find Me
  11. リトルローバー