亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 AWS IoT 的工厂监控系统

组件和用品

Arduino Yun
× 1
Intel Edison 的 Seeed Grove 入门套件增强版
使用套件中的屏蔽以及温度和光传感器
× 1
Seeed Grove - 水分传感器
× 1
5 毫米 LED:红色
× 1
电阻 330 ohm
× 1

必要的工具和机器

3D 打印机(通用)

应用和在线服务

亚马逊网络服务 AWS IoT
亚马逊网络服务 AWS IAM
亚马逊网络服务 AWS DynamoDB
亚马逊网络服务 AWS SNS
dweet.io
Arduino IDE

关于这个项目

想象一下,您要休假一周左右,并且担心家里的植物。这是一个很棒的项目,可以在您出去度假前花上一周时间。

使用以下功能为自己构建一个工厂监控和通知系统

  • 使用 dweet.io 监测温度、光照值和土壤湿度值
  • 或使用新的 Amazon IoT 服务将数据记录到 AWS - DynamoDB
  • 使用 AWS -SNS 通知,向自己发送电子邮件,以便您可以通知您的堂兄/邻居快速给植物浇水或检查您家中的恒温器。

此外,我还设计了一个 3D 打印外壳,用于放置 Arduino Yun、grove shield 和传感器。

如果您有兴趣查看我的工厂的运行情况,请点击此处的链接

http://dweet.io/follow/PlantMonitorTorontoON



以下是完成构建所需执行的步骤

#1 构建电路 使用 Grove 连接器屏蔽 如项目的原理图部分所示,基本上连接

  • 温度传感器到 A0
  • 土壤湿度传感器至 A1
  • 光传感器到 A2
  • 并使用 220 欧姆电阻将 LED 连接到引脚 #2

#2 3D 打印 STL 文件, 附在 自定义部件和外壳部分 这里有 3 个 STL 文件要打印,将切片软件设置为 0.3 毫米层高至少25%的填充密度 或更高

3D 打印大约需要 2 小时,因此请下载 STL 文件并启动您的 3D 打印机,同时完成以下其他步骤


#3 确定土壤水分值

将下面附加的代码(土壤水分值)上传到您的 Arduino Yun 并确定下面代码中的 tooDryValue。基本上如果土壤水分的值低于 tooDryValue,您需要给植物浇水。(这个值就是你想要的值将在 AWS-SNS 条件下使用发送电子邮件)

这是显示我用来确定 toodryvalue 的方法的视频

#4 将 Arduino 代码上传到 Yun 以将数据发布到 dweet.io

现在,一旦您决定了 toodryvalue ,将 ArduinoYunDweetIO.ino 文件上传到 Yun,并且作为代码的一部分,还将“PlantMonitorTorontoON”替换为对您更有意义的内容。

这是测试将传感器数据上传到 dweet.io 的视频


#5 在您的计算机上设置 AWS CLI (这里我使用的是 Mac)

现在要在 DyanamoDB 中使用 AWS IoT 记录数据,您必须在 https://aws.amazon.com/free 创建一个帐户,在这里您还必须提供您的信用卡详细信息,但对于下面的教程,您不应该产生任何费用(同样取决于 AWS 设置的区域)

完成后创建一个文件夹“AWS "在您的 Mac 上,然后按照以下链接下载并安装 AWS CLI

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 使用 CLI 创建事物,该事物应显示在 AWS IoT 控制台中

现在我们将使用以下命令在 AWS IoT 中创建一个事物

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 创建 AWS IoT 策略并将其附加到您的证书

首先在 AWS 文件夹中创建一个 json 文件,使用您最喜欢的文本编辑器(我更喜欢 sublime text 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 以测试设置是否正常工作,我们是否能够通过 AWS IoT 发布和订阅数据

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

有关更多设置信息和下载根证书,请使用以下链接

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

- 在 MQTT.fx 中,您必须设置连接配置文件

- 并链接您在上述步骤中下载的证书

这是一个快速视频,展示了如何在您的计算机上测试您的设置,在我的情况下是使用 MQTT.fx 工具的 MAC。



完成并测试您的设置正常后,请按照以下步骤将证书上传到 Arduino Yun

#11 设置 Arduino Yun 与 AWS IoT 云通信

从 github 下载最新版本的 Arduino Yun SDK 并解压到您的 Arduino“Libraries”文件夹中

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

如果您是第一次使用 Arduino Yun,请按照

上的设置说明进行操作

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

基本上使用该链接,您将学习如何设置 Arduino Yun 以连接到家庭 WiFi 网络。

然后将流程示例草图 Arduino IDE 加载到您的 YUN(文件->示例->桥-> 流程),这将确认 Yun 可以访问互联网

将您的 rootCA 文件、私钥和证书放入 certs 文件夹中,如下面的屏幕截图所示


接下来修改codebase_upload.shenvironment_setup.sh 并将 [your_boards_IP] 替换为您开发板的 IP 地址,将 [your_boards_IP] 替换为您的密码

在您的终端中运行以下命令以授予 .sh 文件的权限,这将需要大约 5-10 分钟,这将移动证书并在 Yun 上安装分发、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 中创建一个表来发布传感器数据

#12 创建 IAM 角色并授予权限

基本上要将数据输入到我们将在下一步创建的 DynamoDB 传感器表中,我们需要创建一个 IoT 规则,该规则将对 AWS 收到的 MQTT 消息进行操作,为此我们需要创建一个角色并授予必要的权限

创建一个json文件rolePolicy.json

{"Version":"2012-10-17", "Statement":[{ "Sid":"", "Effect":"Allow", "Principal":{ "Service":" iot.amazonaws.com" }, "Action":"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

#13 在 AWS 控制台的 DynamoDB 中设置表

作为此步骤的一部分,我们将在 AWS 控制台中创建一个 DynamoDB

表名:植物传感器

分区键:key

排序键:时间戳

并将您的读取容量单位和写入容量设置为 1。

#14 创建将数据插入到 PlantSensor 表中的规则

创建一个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 草图以将数据从云发布到 AWS IoT

这里首先从 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-IoT SNS 规则以在您的土壤湿度值低于阈值时接收和发送电子邮件。

基本上,此步骤包括根据 AWS IoT 规则设置简单的 SNS 通知。

首先将以下策略分配给您在 IAM 控制台的上一步中创建的 AWS 角色 (iot-action-role)

-亚马逊SNSRole

-AmazonSNSFullAccess

在 SNS 控制台中完成后,创建一个名为 sendMail 的主题 并创建订阅并在您的手机上设置您的电子邮件以在土壤湿度值低时收到通知。

现在返回 AWS IoT 控制台并使用 +Create Resource 按钮创建一个名为 Email Send 的规则并提供以下信息

  • 姓名:电子邮件发送
  • 属性:mositValue(这应该与您在 Arduino 代码中作为主题的一部分发布的 json 值匹配)
  • 主题过滤器:主题/植物数据
  • 条件:作为 moistval <250(这是您在本教程的前几步中确定的值)
  • 选择操作:发送消息作为推送通知 SNS
  • SNS 目标:sendEmail
  • 角色:iot-action-role

完成后,您的控制台应如下面的屏幕截图

这是我从一杯水中取出土壤湿度传感器时收到的示例电子邮件




阅读有关 AWS-SNS 的更多信息

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

#15 将 3D 打印部件放在一起并将其添加到锅中。

您需要一个 4x40 的螺丝和螺母将黑土扑克 3D 打印部件连接到 Arduino Yun 的底座部分

顶部刚好搭扣,这里记得将顶部开口指向你的窗户,然后戳一下锅里的土壤水分。然后用微型 USB 电缆插头给 Yun 供电到墙上的插座。

请注意,我仍在探索和学习 AWS 的精彩世界,并且对 AWS 控制台上的功能感到敬畏,因此,如果您使用 AWS 已有一段时间,请发表您对功能的评论或建议喜欢看/适用于工厂监控项目。谢谢..


代码

  • 土壤水分值
  • ArduinoYunDweetio
  • ArduinoYunAWSIoTDynamodb
  • aws_iot_config.h
SoilMoistureValueArduino
Arduino 草图,为您的室内植物确定理想的土壤水分值// Grove 湿度传感器连接到 Grove Shieldconst 上的 A1 int ledPin =2;int moisturValue =0;int tooDryValue =250;//根据您提出的内容更改此值void setup() {Serial.begin(9600); pinMode(ledPin,OUTPUT);digitalWrite(ledPin,LOW);}void loop() {moisturValue =analogRead(moisturePin);Serial.print("Moisture sensor =");Serial.println(moisturValue); //先用干沙检查值,然后用湿沙迪夫(moisturValue
ArduinoYunDweetioArduino
使用 Arduino Yun 将传感器数据发布到 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  //添加用于温度计算const int水分Pin =A1; // Grove 湿度传感器连接到 Grove Shieldconst 上的 A1 int ledPin =2; //LED指示灯int watersValue =0; // 用于存储来自 sensorconst 的值的变量 int tooDryValue =500; //根据您对土壤应有多少水分的测试来更改此值,低于此值将使 LED 亮起,这意味着您需要给浮子浇水 tooLowTemp =20; //CHANGE ,根据您的室内植物类型以摄氏度为单位的温度,如果温度低于该值,LED 将变为红色//温度传感器 defsconst int B=4275; // 热敏电阻的 B 值 int R0 =100000; // R0 =100kconst int pinTempSensor =A0; // Grove - 温度传感器连接到 A5//Light Sensorconst int lightPin =A2; unsigned long lastConnectionTime =0; const unsigned long postInterval =10L * 1000L;void setup(){ Bridge.begin(); Serial.begin(9600); pinMode(ledPin,OUTPUT);数字写入(ledPin,低); Serial.begin(9600);而(!串行); // 等待串行连接 - 部署后禁用此}void loop(){ YunClient c;if (millis() - lastConnectionTime> postingInterval) { moisturValue =analogRead(moisturePin); Serial.print("sensor ="); Serial.println(moisturValue); //先检查干沙的值,然后再检查湿沙 //计算度数C的温度 int a =analogRead(pinTempSensor);浮动 R =1023.0/((float)a)-1.0; R =100000.0*R; float temperature=1.0/(log(R/100000.0)/B+1/298.15)-273.15;//通过数据表转换为温度; Serial.print("温度 ="); Serial.println(温度); //计算光值 int lightValue =analogRead(lightPin); Serial.print("光值 ="); Serial.println(lightValue); //如果传感器值小于tooDryValue或tooLowTemp,则打开LED if(moisturValue  
ArduinoYunAWSIoTDynamodbArduino
将传感器数据发布到 AWS -DynamoDB 的草图,您还需要添加 aws_iot_config.h 作为 Arduino IDE 中的新选项卡。
//由 @CarmelitoA 01-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  //添加用于温度计算const int水分Pin =A1; // Grove 湿度传感器连接到 Grove Shieldconst 上的 A1 int ledPin =2;int moisturValue =0; // 用于存储来自 sensorconst 的值的变量 int tooDryValue =250; //根据您对土壤应有多少水分的测试来更改此值,低于此值将使 LED 亮起,这意味着您需要给浮子浇水 tooLowTemp =20; //CHANGE ,根据您的室内植物类型以摄氏度为单位的温度,如果温度低于该值,LED 将变为红色//温度传感器 defsconst int B=4275; // 热敏电阻的 B 值 int R0 =100000; // R0 =100kconst int pinTempSensor =A0; // Grove - 温度传感器连接到 A5//Light Sensorconst int lightPin =A2; unsigned long lastConnectionTime =0; const 无符号长postingInterval =10L * 1000L; //更改此值以增加发布间隔aws_iot_mqtt_client myClient; // init iot_mqtt_clientchar msg[32]; // 读写 bufferint cnt =0; // 循环计数int rc =-100; // 返回值 placeholderbool success_connect =false; // 是否连接// 打印出消息的基本回调函数void msg_callback(char* src, int len) { Serial.println("CALLBACK:");国际我; for(i =0; i  
aws_iot_config.hArduino
Add as a new tab in the Arduino IDE
/* * Copyright 2010-2015 Amazon.com, Inc. or its affiliates.版权所有。 * * Licensed under the Apache License, Version 2.0 (the "License"). * 除非符合许可,否则您不得使用此文件。 * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. *///@carmelitoA modified the value for the plant monitoring project#ifndef config_usr_h#define config_usr_h// Copy and paste your configuration into this file//===============================================================#define AWS_IOT_MQTT_HOST "XXXXXXXXXXX.iot.us-west-2.amazonaws.com" // your endpoint#define AWS_IOT_MQTT_PORT 8883 // your port#define AWS_IOT_CLIENT_ID "clientYun2" // your client ID#define AWS_IOT_MY_THING_NAME "PlantSystem" // your thing name#define AWS_IOT_ROOT_CA_FILENAME "rootCA.pem" // your root-CA filename#define AWS_IOT_CERTIFICATE_FILENAME "cert.pem" // your certificate filename#define AWS_IOT_PRIVATE_KEY_FILENAME "privateKey.pem" // your private key filename//===============================================================// SDK config, DO NOT modify it#define AWS_IOT_PATH_PREFIX "./certs/"#define AWS_IOT_ROOT_CA_PATH AWS_IOT_PATH_PREFIX AWS_IOT_ROOT_CA_FILENAME // use this in config call#define AWS_IOT_CERTIFICATE_PATH AWS_IOT_PATH_PREFIX AWS_IOT_CERTIFICA TE_FILENAME // use this in config call#define AWS_IOT_PRIVATE_KEY_PATH AWS_IOT_PATH_PREFIX AWS_IOT_PRIVATE_KEY_FILENAME // use this in config call#endif

定制零件和外壳

示意图

Connect the sensors to the Grove starter kit that is
- Temperature sensor to A0
- Soil Moisture sensor to A1
- Light sensor to A2

In addition, using a 220 Ohms resistor connect an LED to pin#2. Connect the
Temperature sensor to A0
Soil Moisture sensor to A1
Light sensor to A2
And using a 220 Ohms resistor connect an LED to pin#2

制造工艺

  1. C# 使用
  2. 使用 AWS 作业升级和配置物联网设备
  3. 使用树莓派远程监测天气
  4. 运动控制的 AWS IoT 按钮
  5. 如何使用储罐监控物联网技术构建更智能的操作
  6. 两用物联网森林管理系统
  7. 基于物联网的远程石油和柴油罐监控系统
  8. 基于物联网的车队重量监控系统的 8 大优势
  9. 在油气行业使用支持物联网的资产监控的重要性
  10. 通过少量物联网改善牛奶储存:牛奶液位监测系统
  11. 使用物联网驱动的河流水位监测系统进行有效的水资源管理
  12. 系统使用智能扬声器实现非接触式心律监测