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

AWSIoTを使用したプラント監視システム

コンポーネントと消耗品

>
Arduino Yun
× 1
SeedGroveスターターキットプラスIntelEdison用
キットのシールドと温度および光センサーの使用
× 1
シードグローブ-水分センサー
× 1
5 mm LED:赤
× 1
抵抗330オーム
× 1

必要なツールとマシン

>
3Dプリンター(汎用)

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

>
AmazonWebサービスAWSIoT
AmazonWebサービスAWSIAM
AmazonWebサービスAWSDynamoDB
Amazon Web Services AWS SNS
dweet.io
Arduino IDE

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

これを想像してみてください。あなたは1週間ほど休暇を取り、家の観葉植物について心配しています。休暇に出かける前に1週間かかる素晴らしいプロジェクトです。

次の機能を使用して、プラントの監視および通知システムを自分で構築します

  • dweet.ioを使用して、温度、光の値、土壌水分の値を監視します
  • または、新しいAmazonIoTサービスを使用してデータを AWS-DynamoDB に記録します
  • AWS -SNS通知を使用して、自分宛てにメールを送信します。これにより、いとこや近所の人に、植物にすばやく水をやったり、自宅のサーモスタットを確認したりできるようになります。

さらに、Arduino Yun、グローブシールド、センサーを収納する3Dプリントのエンクロージャーを設計しました。

私の植物がここでどのように機能しているかを確認したい場合は、リンクをご覧ください

http://dweet.io/follow/PlantMonitorTorontoON



ビルドを完了するために実行する必要がある手順は次のとおりです

#1回路を構築する Groveコネクタシールドを使用する プロジェクトの概略セクションに示されているように、基本的には

を接続します
  • A0への温度センサー
  • A1への土壌水分センサー
  • A2への光センサー
  • そして、220オームの抵抗を使用してLEDをピン#2に接続します

#2 STLファイルを3Dプリントします、 に添付 カスタムパーツとエンクロージャセクション ここでは、印刷する3つのSTLファイルがあり、スライシングソフトウェアを層の高さ0.3mm に設定します。 充填密度は少なくとも25% 以上

3D印刷には約2時間かかるため、以下の他の手順を完了する間、STLファイルをダウンロードして3Dプリンターを完成させてください

<図>


#3土壌水分値の決定

以下に添付されているコード(土壌水分値)をArduino Yunにアップロードし、以下のコードでtooDryValueを決定します。基本的に、土壌水分値がtooDryValueを下回る場合は、植物に水をやる必要があります(この値は、 AWS-SNS条件でメールを送信するために使用します)

これは、私があまりにも乾燥した値を決定するために使用した方法を示すビデオです

#4 ArduinoコードをYunにアップロードして、dweet.ioにデータを投稿します

toodryvalueを決定したら、ArduinoYunDweetIO.inoファイルをYunにアップロードします。また、コードの一部として、「PlantMonitorTorontoON」をより意味のあるものに置き換えます。

これは、dweet.ioへのセンサーデータのアップロードをテストするビデオです


#5コンピューターでのAWSCLIのセットアップ (ここではMacを使用しています)

DyanamoDBでAWSIoTを使用してデータをログに記録するには、https://aws.amazon.com/freeでアカウントを作成する必要があります。ここでは、クレジットカードの詳細も提供する必要がありますが、以下のチュートリアルでは、費用が発生します(これもAWSセットアップの地域によって異なります)

完了したら、「 AWS 」フォルダを作成します "Macで、以下のリンクをたどってAWSCLIをダウンロードしてインストールします

http://docs.aws.amazon.com/iot/latest/developerguide/installing-aws-cli.html

私はMacを使用しています。これが私が従った指示です

  $ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip $ sudo ./awscli -bundle / install -i / usr / local / aws -b / usr / local / bin / aws  

注:ターミナルでは、作成したAWSフォルダーにいる必要があります

<図>

#6 AWSIoTコンソールに表示されるCLIを使用してモノを作成する

次に、次のコマンドを使用してAWSIoTでモノを作成します

  aws iot create-thing --thing-name "plantSystem"  
<図>

詳細については、リンクを参照してください

http://docs.aws.amazon.com/iot/latest/developerguide/create-thing.html


#7証明書の作成

必要な証明書を作成してアクティブ化するには、次のコマンドを実行します

  aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.pem --public-key-outfile publicKey.pem --private-key-outfile privateKey .pem  

このコマンドは、以下のスクリーンショットに示すように、AWSフォルダーに証明書(3つのpemファイル)を作成します

<図>



#8 AWSIoTポリシーを作成して証明書に添付する

まず、お気に入りのテキストエディターを使用してAWSフォルダーにjsonファイルを作成します(私は崇高なテキスト2を好みます)-ファイルにpolicy.jsonという名前を付けます

  {"Version": "2012-10-17"、 "Statement":[{"Effect": "Allow"、 "Action":["iot:*"]、 "Resource":[ "*"]}]}  

次に、次のコマンドをテキストエディタにコピーして貼り付けます

  aws iot create-policy --policy-name "PubSub" --policy-document file://./policy.json  


<図>

#9ポリシーを証明書に添付してから、証明書をデバイスに添付する

以下のコマンドを次々に実行してください

  $ aws iot attach-principal-policy --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxx" --policy-name "PubSub" $ aws iot attach-thing-principal --thing-name "PlantSystem" --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxx"  

ここで、証明書を書き留めていない場合に証明書を取得する簡単な方法は、AWS IoTコンソールに移動して証明書をクリックし、画面の右側にある詳細に移動することです。ここから、arnをターミナルにコピーして貼り付けることができます

<図>



詳細については、

のドキュメントを参照してください。

http://docs.aws.amazon.com/iot/latest/developerguide/secure-communication.html

#10コンピューターでのセットアップの確認/テストとMQTT.fxを使用したテスト

コンピューターでセットアップが完了したと主張するには、以下のリンクからMQTT.fxをダウンロードしてインストールし、セットアップが機能しているかどうかをテストします。AWSIoTを介してデータを公開およびサブスクライブできます

http://mqttfx.jfx4ee.org/index.php/download

セットアップ情報の詳細とルート証明書のダウンロードについては、以下のリンクを使用してください

http://docs.aws.amazon.com/iot/latest/developerguide/verify-pub-sub.html

-ここMQTT.fxでは、接続プロファイルを設定する必要があります

-上記の手順の一部としてダウンロードした証明書をリンクします

これは、コンピューター(私の場合はMQTT.fxツールを使用したMAC)でセットアップをテストする方法を示す簡単なビデオです。



セットアップが正常であることを完了してテストしたら、以下の手順に従って、証明書をArduinoYunにアップロードします

#11 AWSIoTクラウドと通信するためのArduinoYunのセットアップ

githubからArduinoYun SDKの最新バージョンをダウンロードし、Arduinoの「ライブラリ」フォルダに解凍します。

https://github.com/aws/aws-iot-device-sdk-arduino-yun

Arduino Yunを初めて使用する場合は、

のセットアップ手順に従ってください。

https://www.arduino.cc/en/Guide/ArduinoYun

基本的にリンクを使用して、自宅のWiFiネットワークに接続するようにArduinoYunを設定する方法を学習します。

次に、プロセス例のスケッチArduino IDEをYUNにロードします([ファイル]-> [例]-> [ブリッジ]-> [プロセス])。これにより、Yunがインターネットにアクセスできることが確認されます。

以下のスクリーンショットに示すように、rootCAファイル、秘密鍵、および証明書をcertsフォルダーに配置します

<図>


次に、 codebase_upload.sh を変更します および environment_setup.sh [your_boards_IP]をボードのIPアドレスに置き換え、[your_boards_IP]をパスワードに置き換えます

ターミナルで次のコマンドを実行して.shファイルに権限を付与します。これには、約5〜10分かかります。これにより、証明書が移動し、Yunにdistribute、python-openssl、pip、paho-mqttがインストールされます。これらは、YunからAWSクラウドと通信するために必要なパッケージです(この場合はPlantSystemと呼ばれます)

  $ chmod 755 codebase_upload.sh $ ./ codebase_upload.sh $ chmod 755 environment_setup.sh $ ./ environment_setup.sh  


<図>


<図>

Linux / Windowsにインストールするには、

のリンクをたどってください。

https://github.com/aws/aws-iot-device-sdk-arduino-yun#installation


AWS CLIを使用する次のカップルの一環として、センサーデータを投稿するためにDynamoDBにテーブルを作成します

#12IAMロールの作成と権限の付与

基本的に、次のステップの一部として作成するDynamoDBセンサーテーブルにデータを入力するには、AWSが受信したMQTTメッセージに基づいて動作するIoTルールを作成する必要があります。これには、ロールを作成して付与する必要があります。必要な許可

jsonファイルrolePolicy.jsonを作成します

  {"Version": "2012-10-17"、 "Statement":[{"Sid": ""、 "Effect": "Allow"、 "Principal":{"Service": " iot.amazonaws.com "}、"アクション ":" sts:AssumeRole "}]}  

役割を作成するには、ターミナルで次のコマンドを実行します

  aws iam create-role --role-name iot-actions-role --assume-role-policy-document file://./rolePolicy.json  

別のjsonファイルpolicy.jsonを作成します

  {"Version": "2012-10-17"、 "Statement":[{"Effect": "Allow"、 "Action":["dynamodb:*"、 "lambda:InvokeFunction"] 、 "リソース":["*"]}]}  


次に、create-policyを呼び出して、IAMポリシードキュメントを指定します

  aws iam create-policy --policy-name iot-actions-policy --policy-document file://./policy.json  

最後に、次のコマンドを使用してポリシーをロールに添付します-前の手順の一部として受け取ったARNにポリシーARNを変更します

  aws iam attach-role-policy --role-name iot-actions-role --policy-arn "arn:aws:xxxxxxxxxxxxx:policy / iot-action-policy"  


<図>

http://docs.aws.amazon.com/iot/latest/developerguide/config-and-test-rules.html

#13AWSコンソールのDynamoDBでテーブルを設定する

このステップの一環として、AWSコンソールでDynamoDBを作成します

テーブル名:plantSensor

パーティションキー:キー

ソートキー:タイムスタンプ

また、読み取り容量の単位と書き込み容量を1に設定します。

<図>

#14PlantSensorテーブルにデータを挿入するルールを作成する

jsonファイルを作成します--plantdatarule.json(ここでは、以下のセクションでroleArn値を変更し、IAM-> Roles-> iot-action-roleに移動してarnを取得します)


  {"sql": "SELECT * FROM'topic / plantdata '"、 "ruleDisabled":false、 "actions":[{"dynamoDB":{"tableName": "plantSensor"、 "hashKeyField" : "key"、 "hashKeyValue": "$ {topic(2)}"、 "rangeKeyField": "timestamp"、 "rangeKeyValue": "$ {timestamp()}"、 "roleArn": "arn:aws:iam ::XXXXXXXXXXXX:role / iot-actions-role "}}]}  

次に、端末で次のコマンドを実行します

  aws iot create-topic-rule --rule-name plantDataToDynamoDB --topic-rule-payload file://./plantdatarule.json  

これで、AWS IoTコンソールに移動すると、以下のスクリーンショットに示すように、「PlantDataToDynamoDB」と呼ばれる作成されたルールが表示されます(「これは以下の手順の一部として提供されるメール送信ルールを無視してください)。

<図>

MQTT.FXを使用してクイックテストを実行し、作成されたテーブルにレコードが作成されているかどうかを確認します。

<図>


#15 Arduinoスケッチをアップロードして、YunからAWSIoTにデータを公開します

ここでは、まずgithubからArduinoJSONライブラリをダウンロードします

https://github.com/bblanchon/ArduinoJson

次に、以下のコードセクションからYunAWSIoTDynamoDB、inoおよびaws_iot_config.hファイルをダウンロードし、Yunにアップロードします。

シリアルモニターを開くと、DynamoDBに投稿された温度、ライトバリュー、土壌水分値が表示されます。

AWSを利用したことがある場合は、Lambda関数を設定し、データキネシスを投稿することで、あらゆる種類のすばらしいことを実行できます...

<図>

注: これを永続的な設定にする場合は、ループの最後で遅延を増やすことを忘れないでください。これにより、DynamoDBへの投稿の時間間隔が長くなり、追加のコストが発生しなくなります。価格設定の詳細については、https://aws.amazon.com/iot/pricing/

を参照してください。


#16土壌水分値がしきい値を下回った場合に受信してメールで送信するAWS-IoTSNSルールを設定します。

基本的に、このステップには、AWSIoTルールに基づいたシンプルなSNS通知ベースの設定が含まれます。

まず、IAMコンソールで前の手順で作成したAWSロール(iot-action-role)に次のポリシーを割り当てます

-AmazonSNSRole

-AmazonSNSFullAccess

SNSコンソールで完了したら、 sendMail というトピックを作成します サブスクリプションを作成し、土壌水分値が低いときに通知を受け取るように電話でメールを設定します。

次に、AWS IoTコンソールに戻り、[+リソースの作成]ボタンを使用して、Eメール送信と呼ばれるルールを作成し、次の情報を提供します

  • 名前:EmailSend
  • 属性:mositValue(これは、Arduinoコードのトピックの一部として投稿しているjson値と一致する必要があります)
  • トピックフィルター:topic / plantdata
  • 条件:湿った状態<250(これはチュートリアルの最初の数ステップで決定した値です)
  • アクションの選択:プッシュ通知SNSとしてメッセージを送信します
  • SNSターゲット:sendEmail
  • 役割:iot-action-role

完了すると、コンソールは以下のスクリーンショットのようになります

<図>

これは、コップ一杯の水から土壌水分センサーを取り外したときに受け取ったメールのサンプルです



<図>


AWS-SNSの詳細を読むには

https://aws.amazon.com/sns/faqs/

#15 3D印刷されたパーツを組み合わせて、ポットに追加します。

黒土ポーカーの3DプリントパーツをArduinoYunのベースパーツに取り付けるには、4x40のネジとナットが必要です

<図>

上部はぴったりとはまります。ここでは、上部の開口部を窓の方に向けて、ポットの土壌水分を突くことを忘れないでください。そして、マイクロUSBケーブルプラグでユンに電源を入れて壁のコンセントに接続します。

<図>

私はまだAWSの素晴らしい世界を探索して学習しており、AWSコンソールの機能に畏敬の念を抱いています。そのため、AWSをかなり長い間使用している場合は、機能に関するコメントや提案を投稿してください。植物モニタリングプロジェクトを見て/適用できるのが好きでした。ありがとう..


コード

  • SoilMoistureValue
  • ArduinoYunDweetio
  • ArduinoYunAWSIoTDynamodb
  • aws_iot_config.h
SoilMoistureValue Arduino
観葉植物の理想的な土壌水分値を決定するためのArduinoスケッチ
 // @ CarmelitoA-観葉植物モニタリングプロジェクトによる土壌水分値の決定constintmoisturePin =A1; // GroveShieldconstのA1に接続されたGroveMoistureセンサーintledPin =2; int moisturValue =0; int tooDryValue =250; //思いついたものに基づいてこの値を変更しますvoidsetup(){Serial.begin(9600); pinMode(ledPin、OUTPUT); digitalWrite(ledPin、LOW);} void loop(){moisturValue =analogRead(moisturePin); Serial.print( "Moisture Sensor ="); Serial.println(moisturValue); //乾いた砂で、次に湿った砂で値を確認しますif(moisturValue  
ArduinoYunDweetio Arduino
ArduinoYunを使用してセンサーデータをdweet.ioに投稿する
 //観葉植物モニタリングプロジェクトのために@CarmelitoAによって作成されました-データをdweet.ioにアップロードします。 (CC BY-SA https://creativecommons.org/licenses/by-sa/4.0/)#include  #include  #define SITE_URL "www.dweet.io" #include  //温度計算用に追加constintmoisturePin =A1; // GroveShieldconstのA1に接続されたGroveMoistureセンサーintledPin =2; // LEDインジケーターintmoisturValue =0; // sensorconstからの値を格納する変数inttooDryValue =500; //土壌に必要な水分量のテストに基づいてこの値を変更します。この値よりも小さいと、LEDがオンになります。つまり、植物の浮きに水をやる必要があります。LowTemp=20; //変化、観葉植物のタイプに基づいた摂氏温度。温度が値よりも低い場合、LEDは赤に変わります//温度センサーdefsconst int B =4275; // thermistorconstのB値intR0 =100000; // R0 =100kconst int pinTempSensor =A0; // Grove-温度センサーはA5に接続します// LightSensorconst int lightPin =A2; unsigned long lastConnectionTime =0; const unsigned long postInterval =10L * 1000L; void setup(){Bridge.begin(); Serial.begin(9600); pinMode(ledPin、OUTPUT); digitalWrite(ledPin、LOW); Serial.begin(9600); while(!Serial); //シリアル接続を待ちます-展開後にこれを無効にします} void loop(){YunClient c; if(millis()-lastConnectionTime> postInterval){moisturValue =analogRead(moisturePin); Serial.print( "sensor ="); Serial.println(moisturValue); //乾いた砂で値を確認してから湿った砂で値を確認します//温度を度数で計算しますCint a =analogRead(pinTempSensor); float R =1023.0 /((float)a)-1.0; R =100000.0 * R; floattemperature =1.0 /(log(R / 100000.0)/B+1/298.15)-273.15; //データシートを介して温度に変換; Serial.print( "温度="); Serial.println(温度); //ライト値を計算しますintlightValue =analogRead(lightPin); Serial.print( "light value ="); Serial.println(lightValue); //センサー値がtooDryValueまたはtooLowTempよりも大きい場合にLEDをオンにしますif(moisturValue  
ArduinoYunAWSIoTDynamodb Arduino
センサーデータをAWS-DynamoDBに投稿するためのスケッチでは、ArduinoIDEの新しいタブとしてaws_iot_config.hも追加する必要があります。
 // HousePlantMonitoringプロジェクト用に@ CarmelitoA01-16-2016によって作成されました。自由にリミックスして変更してください#include  #include  #include "aws_iot_config.h" #include  char data [80]; StaticJsonBuffer <200> jsonBuffer; //#define SITE_URL "www.dweet.io" // YunClient.hをこの例と組み合わせてdweetに投稿すると、競合が発生します。ArduinoYunDweetio.ino#include を参照してください。 // GroveShieldconstのA1に接続されたGroveMoistureセンサーintledPin =2; int moisturValue =0; // sensorconstからの値を格納する変数inttooDryValue =250; //土壌に必要な水分量のテストに基づいてこの値を変更します。この値よりも小さいと、LEDがオンになります。つまり、植物の浮きに水をやる必要があります。LowTemp=20; //変化、観葉植物のタイプに基づいた摂氏温度。温度が値よりも低い場合、LEDは赤に変わります//温度センサーdefsconst int B =4275; // thermistorconstのB値intR0 =100000; // R0 =100kconst int pinTempSensor =A0; // Grove-温度センサーはA5に接続します// LightSensorconst int lightPin =A2; unsigned long lastConnectionTime =0; const unsigned long postInterval =10L * 1000L; //この値を変更して、投稿間隔を増やしますaws_iot_mqtt_client myClient; // init iot_mqtt_clientchar msg [32]; //読み取り/書き込みbufferintcnt =0; //ループcountsintrc =-100; //戻り値placeholderboolsuccess_connect =false; //接続されているかどうか//メッセージを出力する基本的なコールバック関数voidmsg_callback(char * src、int len){Serial.println( "CALLBACK:"); int i; for(i =0; i までの時間間隔をチェックする場合は終了 
aws_iot_config.h Arduino
ArduinoIDEに新しいタブとして追加
 / * * Copyright 2010-2015 Amazon.com、Inc。またはその関連会社。全著作権所有。 * * Apache License、Version 2.0(「ライセンス」)の下でライセンスされています。 *ライセンスに準拠する場合を除き、このファイルを使用することはできません。 *ライセンスのコピーは** http://aws.amazon.com/apache2.0 **またはこのファイルに付随する「ライセンス」ファイルにあります。このファイルは、明示または黙示を問わず、いかなる種類の保証または条件もなしに、「現状有姿」で配布されます。ライセンスに基づく許可と制限を規定する特定の言語については、ライセンスを参照してください。 * /// @ carmelitoAは、プラント監視プロジェクトの値を変更しました#ifndef config_usr_h#define config_usr_h //構成をコピーしてこのファイルに貼り付けます// ===============================================================#define AWS_IOT_MQTT_HOST "XXXXXXXXXXX .iot.us-west-2.amazonaws.com "//エンドポイント#defineAWS_IOT_MQTT_PORT 8883 //ポート#define AWS_IOT_CLIENT_ID" clientYun2 "//クライアントID#define AWS_IOT_MY_THING_NAME" PlantSystem "//モノの名前#defineAWS_IOT_ROOT_CA_FILENAME "rootCA.pem" //ルートCAファイル名#defineAWS_IOT_CERTIFICATE_FILENAME "cert.pem" //証明書ファイル名#defineAWS_IOT_PRIVATE_KEY_FILENAME "privateKey.pem" //プライベートキーファイル名// ===============================================================// SDK構成、変更しないでください#define AWS_IOT_PATH_PREFIX "./certs/" #define AWS_IOT_ROOT_CA_PATH AWS_IOT_PATH_PREFIX AWS_IOT_ROOT_CA_FILENAME //これを使用n config call#define AWS_IOT_CERTIFICATE_PATH AWS_IOT_PATH_PREFIX AWS_IOT_CERTIFICATE_FILENAME //これをconfigcall#defineで使用AWS_IOT_PRIVATE_KEY_PATH AWS_IOT_PATH_PREFIX AWS_IOT_PRIVATE_KEY_FILENAME //これをconfigcall#endifで使用

カスタムパーツとエンクロージャー

回路図

センサーをGroveスターターキットに接続します。
-A0への温度センサー
-A1への土壌水分センサー
-A2への光センサー

さらに、220オームの抵抗を使用してLEDをピン#2に接続します。 接続する
A0への温度センサー
A1への土壌水分センサー
A2への光センサー
そして、220オームの抵抗を使用してLEDをピン#2に接続します

製造プロセス

  1. C# を使用して
  2. RaspberryPiを使用した天気のリモートモニタリング
  3. モーションコントロールされたAWSIoTボタン
  4. タンク監視IoTテクノロジーを使用してよりスマートな運用を構築する方法
  5. デュアルパーパスIoT森林管理システム
  6. IoTベースのリモートオイルおよびディーゼルタンク監視システム
  7. IoTベースの車両重量監視システムの8つの利点
  8. O&G業界でIoT対応の資産監視を使用することの重要性
  9. IoTのピンチでミルク貯蔵を改善する:ミルクレベル監視システム
  10. 効率的な水管理のためのIoTを活用した河川レベル監視システムの使用
  11. システムは、スマートスピーカーを使用して心臓リズムの非接触モニタリングを可能にします