MKR1000とARTIKクラウドを使用した水質モニタリング
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
I.目的
このプロジェクトの主な目的は、Samsung ARTIKCloudを使用してプールのpHと温度レベルを監視することです。
II。 ARTIKクラウドセットアップ
ステップ1.新しいデバイスを作成する
ARTIKクラウドにサインアップします。開発者サイトにアクセスして、新しい「デバイスタイプ」を作成します。
<図>希望の表示と一意の名前を入力します。
<図>新しいマニフェストを作成する
<図>フィールド名とその他の説明を入力してください
<図>[保存]をクリックして、[マニフェストタブをアクティブ化]に移動します
<図>[アクティブマニフェスト]ボタンをクリックして終了すると、ここにリダイレクトされます
<図>デバイスタイプの作成が完了しました!
次に、そのデバイスを使用するアプリケーションを作成しましょう。
ステップ2.アプリケーションを作成する
ARTIKクラウドアプリケーションに移動します。
新しいアプリケーションをクリックします
<図>目的のアプリケーション名と認証リダイレクトURLを入力します。
認証リダイレクトURLが必要であることに注意してください。このアプリケーションのユーザーを認証するために使用されるため、ログインが必要な場合はこのURLにリダイレクトされます。
サンプルにはhttp:// localhost / index /を使用しました。
<図>次に、アプリケーションの読み取りと書き込みの権限を設定し、デバイスに移動して保存します。
<図>おめでとうございます。これでアプリケーションが完成しました。
<図>それでは、そのアプリケーションを接続しましょう。
ステップ3.デバイスを接続します
デバイスに移動し、[別のデバイスを接続]をクリックします。
<図>以前に作成した新しいデバイスタイプをクリックしてから、[デバイスの接続]をクリックします。
<図>接続されているデバイスの設定をクリックします。
<図>プログラムで必要になるため、これらの情報に注意してください。
<図>次に、接続されているデバイスに移動します
<図>ARTIKクラウドのセットアップが完了しました。ハードウェアが起動すると、グラフにデータが表示されます。
<図>
III。ハードウェアセンサーのセットアップ
手順1.温度センサーとpHセンサーをMKR1000に接続します。
図は次のとおりです。
- TempGNDからMRK1000GND
- MKR1000デジタルピン1への温度出力
- TempVCCからMKR10005V
- 4.7K抵抗をTempVCCとTempOUTに接続します
- pHGNDからMRK1000GND
- MKR1000アナログピン1へのpHOUT
- pHVCCからMKR10005V
これが私のサンプル配線です
<図> <図>お気づきの方は、温度センサーを簡単に取り外せるようにオーディオジャックを追加しました。ただし、これはオプションです。
温度センサーのジャックへの接続は次のとおりです。
<図> <図>
ステップ2.必要なソフトウェアをセットアップする
Arduino IDEに移動し、MKR1000ボードを追加します。
<図>mkr1000を検索し、[インストール]をクリックします
<図>必要なライブラリを追加する
<図>インストールするライブラリを検索します:
- ArduinoJson-これを使用してJSONデータをARTIKCloudに送信します
- ArduinoHttpClient-APIに接続するためのホスト
- OneWire-温度センサーからのデジタル入力を読み取るために必要
- DallasTemperature-ダラス温度センサーに必要なライブラリ
必要なソフトウェアの追加を完了してください!
ステップ3.プログラムをアップロードする
次に、MKR1000をPC /ラップトップに接続します。
<図>ここからGitHubでソフトウェアをダウンロードします
次の情報を変更します:
<図>次に、ソフトウェアコードをMKR1000にアップロードし、監視を開始します。
注:WiFiにはインターネット接続が必要です。
<図>
IV。フィールドテスト
私たちは、私立、公立、学校のプールでハードウェアセンサーをテストしました。これらの回答者のプールからデータを収集することで、ハードウェアの機能を分析することができました。
MKR1000とセンサーをボックスに置き、水質汚染から離れたプールに置くことができます。これを行うことにより、水質を監視し、目的の化学物質を配置して水質を正常化することができます。
<図><図>
すぐに、このボックス内にすべての回路を配置する方法と実際のテスト映像に関するチュートリアルをアップロードします。
V.結果
このチュートリアルが、人々が独自のDIYスイミングプールの水質監視デバイスを構築するのに役立つことを願っています。人々は安全性をチェックするのではなく、提供されるアメニティに焦点を当てる傾向があるため、スイミングプールの水質の継続的な低下に関する認識が高まる可能性があります。また、リソースを不必要に犠牲にすることなく、水質検査をより効率的かつ効果的にする手段を提供できるようにすることで、コミュニティに貢献することも意図しています。
幸せな建物! :)
コード
- ArduinoMKR1000コード
ArduinoMKR1000コード C / C ++
このコードをArduinoMKR1000にアップロードしますGitHubでこれにアクセス> https://github.com/imjeffparedes/iot-water-quality-artik
/ ********************これが私のコードですhttps://www.hackster.io/animo/water-quality-moniroting-840fea ******************** /#include#include #include #include #include #include #include / **温度センサー初期化** /#defineONE_WIRE_BUS 1 //データワイヤはArduinoOneWireのデジタルポート1に接続されていますoneWire(ONE_WIRE_BUS); //任意のOneWireデバイス(マキシム/ダラス温度ICだけでなく)と通信するようにoneWireインスタンスをセットアップします// DallasTemperatureセンサー(&oneWire); // oneWire参照をDallasTemperatureに渡します。 / ** ARTIK CloudRESTの初期化** / char server [] ="api.artik.cloud"; // Samsung ARTIK Cloud APIHostintポート=443; // HTTPSの場合は443char buf [200]; // ARTIKクラウドに送信されるJSONを保存する本文データStringdeviceID ="artik cloud device id"; //チュートリアルから作成したデバイスIDをここに配置しますStringdeviceToken ="artik cloud device token"; //チュートリアルから作成したデバイストークンをここに配置します/ ** pHメーターの初期化** /#defineSensorPin A1 // Arduinoアナログ入力へのpHメーターアナログ出力1#defineオフセット0.00 //偏差補正#definesamplingInterval 20#define ArrayLenth 40 //コレクションの回数intpHArray [ArrayLenth]; //センサーフィードバックの平均値を保存しますintpHArrayIndex =0; int status =-1; int millis_start; / ** Wifi設定** /#defineWIFI_AP "your wifi ssid" #define WIFI_PWD "wifi password" WiFiSSLClient wifi; HttpClientクライアント=HttpClient(wifi、server、port); void setup(void){millis_start =millis(); Serial.begin(9600); startWifi(); // Wi-Fiへの接続を開始します} void loop(void){/ *現在の温度を取得しています* / float celsius =0; Sensors.requestTemperatures(); //温度を取得するコマンドを送信しますcelsius =Sensors.getTempCByIndex(0); Sensors.requestTemperatures(); //温度を取得するコマンドを送信しますcelsius =Sensors.getTempCByIndex(0); / *現在のpH値の取得* / static unsigned long sampleTime =millis(); static unsigned long printTime =millis();静的フロートpH値、電圧; if(millis()-samplingTime> samplesInterval){pHArray [pHArrayIndex ++] =analogRead(SensorPin); if(pHArrayIndex ==ArrayLenth)pHArrayIndex =0;電圧=avergearray(pHArray、ArrayLenth)* 5.0 / 1024; pH値=3.5 *電圧+オフセット; sampleingTime =millis(); } Serial.println( "===========================================); Serial.println( "これらのjsonデータを送信します"); // json形式で出力Serial.println( "data:{"); Serial.print( "ph:"); Serial.print(pHValue); Serial.print( "、temp:"); Serial.print(摂氏); Serial.println( "}"); Serial.println( ""); Serial.println( "データの送信を開始"); String contentType ="application / json"; String AuthorizationData ="Bearer" + deviceToken; //デバイストークンintlen =loadBuffer(celsius、pHValue); Serial.println( "送信温度:" + String(celsius)+ "およびph:" + String(pHValue)); Serial.println( "POSTをARTIKクラウドAPIに送信"); client.beginRequest(); client.post( "/ v1.1 / messages"); //、contentType、buf client.sendHeader( "Authorization"、AuthorizationData); client.sendHeader( "Content-Type"、 "application / json"); client.sendHeader( "Content-Length"、len); client.endRequest(); client.print(buf); // apiからの応答を出力しますintstatusCode =client.responseStatusCode();文字列応答=client.responseBody(); Serial.println( ""); Serial.print( "ステータスコード:"); Serial.println(statusCode); Serial.print( "応答:"); Serial.println(応答); delay(1000); //更新の遅延} / * Wifiへの接続を開始* / void startWifi(){Serial.println( "MKR1000をネットワークに接続しています..."); // WiFi.begin(); // Wifiネットワークへの接続を試みます:while(status!=WL_CONNECTED){Serial.print( "WPA SSIDへの接続を試みています:"); Serial.println(WIFI_AP); WiFi.begin(WIFI_AP、WIFI_PWD); //接続を10秒待ちます:delay(10000); status =WiFi.status(); }} / * DfRobot pH Meter Source * / double avergearray(int * arr、int number){int i; int max、min;平均2倍;長い量=0; if(number <=0){Serial.println( "配列が平均化するエラー番号!/ n"); 0を返します。 } if(number <5){// 5未満、統計を直接計算for(i =0; i max){amount + =max; // arr> max max =arr [i]; } else {amount + =arr [i]; // min <=arr <=max}} // if} // for avg =(double)amount /(number-2); } // if return avg;} / * RESTで送信するバッファ* / int loadBuffer(float temp、float ph){StaticJsonBuffer <200> jsonBuffer; //メモリ内のスポットを予約しますJsonObject&root =jsonBuffer.createObject(); //ルートオブジェクトを作成しますroot ["sdid"] =deviceID; root ["type"] ="メッセージ"; JsonObject&dataPair =root.createNestedObject( "data"); //ネストされたオブジェクトを作成しますdataPair ["temp"] =temp; dataPair ["ph"] =ph; root.printTo(buf、sizeof(buf)); // JSON-バッファに出力return(root.measureLength()); //長さも返します}
回路図
MKR1000とセンサーのブレッドボード接続 製造プロセス