Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Sistema de Monitorizado de Plantas Inteligente con AWS IoT

Componentes y materiales

Herramientas necesarias

Aplicaciones y servicios online

Descripción del proyecto

¿Te vas de vacaciones y te preocupa tu planta? Este sistema monitoriza temperatura, luz y humedad del suelo, enviando datos a dweet.io o AWS IoT (DynamoDB). Si la humedad baja de un umbral, AWS SNS envía un email para que alguien riegue la planta. Incluye carcasa impresa en 3D.

Pasos de construcción

  1. Circuito: Conecta shield Grove al Yun. Temperatura → A0, Humedad suelo → A1, Luz → A2. LED rojo + 220 Ω al pin 2.
  2. Imprime la carcasa 3D (3 archivos STL, altura de capa 0.3 mm, relleno ≥25%). Tarda ~2 horas.
  3. Determina el umbral de sequía: Sube el sketch SoilMoistureValue y anota el valor analógico cuando la tierra está seca (ej. 250). Ese valor se usará en la regla SNS.
  4. Sube datos a dweet.io: Sketch ArduinoYunDweetio (cambia el nombre “PlantMonitorTorontoON” por uno único).
  5. Configura AWS CLI (crea cuenta AWS Free Tier, instala CLI, crea carpeta AWS).
  6. Crea un “thing” en AWS IoT: aws iot create-thing --thing-name "plantSystem"
  7. Genera certificados: aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.pem --public-key-outfile publicKey.pem --private-key-outfile privateKey.pem
  8. Crea y adjunta política IoT (permiso iot:*).
  9. Adjunta política al certificado y certificado al thing.
  10. Prueba con MQTT.fx (configura perfil con certificados y CA root).
  11. Prepara el Yun para AWS IoT: Instala SDK aws-iot-device-sdk-arduino-yun en librerías. Sube certificados a la carpeta certs/ del Yun. Ejecuta scripts codebase_upload.sh y environment_setup.sh (instalan python-openssl, paho-mqtt, etc.).
  12. Crea rol IAM y política para permitir a IoT escribir en DynamoDB e invocar Lambda.
  13. Crea tabla DynamoDB plantSensor (partition key: key, sort key: timestamp, capacidad 1/1).
  14. Crea regla IoT plantDataToDynamoDB que inserte mensajes del tema topic/plantdata en la tabla.
  15. Sube sketch ArduinoYunAWSIoTDynamoDB + aws_iot_config.h (configura endpoint, thing name, rutas de certs). El Yun publicará JSON con temp, lightval, moistval.
  16. Configura notificación SNS por email: En AWS IoT, crea regla EmailSend con condición moistval < 250 (tu umbral), acción SNS al topic sendMail (suscripción email). Asigna rol iot-actions-role con políticas AmazonSNSFullAccess.
  17. Ensambla la carcasa 3D (tornillo M4x40 para el sensor de humedad), orienta la abertura hacia la ventana, inserta sensor en la maceta y alimenta el Yun por micro-USB.

Código

SoilMoistureValue (determinar umbral)

const int moisturePin = A1;
const int ledPin = 2;
int moisturValue = 0;
int tooDryValue = 250; // ajustar según pruebas

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
}

void loop() {
  moisturValue = analogRead(moisturePin);
  Serial.print("Moisture sensor = ");
  Serial.println(moisturValue);
  if (moisturValue < tooDryValue) digitalWrite(ledPin, HIGH);
  else digitalWrite(ledPin, LOW);
  delay(3000);
}

ArduinoYunDweetio (publicar en dweet.io)

#include 
#include 
#define SITE_URL "www.dweet.io"
#include 

const int moisturePin = A1;
const int ledPin = 2;
int moisturValue = 0;
const int tooDryValue = 500;
float tooLowTemp = 20;
const int B = 4275;
const int R0 = 100000;
const int pinTempSensor = A0;
const int lightPin = A2;
unsigned long lastConnectionTime = 0;
const unsigned long postingInterval = 10L * 1000L;

void setup() {
  Bridge.begin();
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  while (!Serial);
}

void loop() {
  if (millis() - lastConnectionTime > postingInterval) {
    YunClient c;
    moisturValue = analogRead(moisturePin);
    int a = analogRead(pinTempSensor);
    float 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;
    int lightValue = analogRead(lightPin);
    if (moisturValue < tooDryValue || temperature < tooLowTemp) digitalWrite(ledPin, HIGH);
    else digitalWrite(ledPin, LOW);
    if (c.connect(SITE_URL, 80)) {
      String s = "POST /dweet/for/PlantMonitorTorontoON?Temperature=";
      s += temperature; s += "&LightValue="; s += lightValue; s += "&SoilMoisture="; s += moisturValue;
      c.println(s);
      c.println("Host: www.dweet.io");
      c.println("Connection: close");
      c.println();
      lastConnectionTime = millis();
    }
  }
}

ArduinoYunAWSIoTDynamoDB (publicar en AWS IoT → DynamoDB)

#include 
#include 
#include "aws_iot_config.h"
#include 
#include 

char data[80];
StaticJsonBuffer<200> jsonBuffer;

const int moisturePin = A1;
const int ledPin = 2;
int moisturValue = 0;
const int tooDryValue = 250;
float tooLowTemp = 20;
const int B = 4275;
const int R0 = 100000;
const int pinTempSensor = A0;
const int lightPin = A2;
unsigned long lastConnectionTime = 0;
const unsigned long postingInterval = 10L * 1000L;

aws_iot_mqtt_client myClient;
char msg[32];
int cnt = 0;
int rc = -100;
bool success_connect = false;

void msg_callback(char* src, int len) {
  Serial.println("CALLBACK:");
  for (int i=0; i

aws_iot_config.h (configuración AWS IoT)

#ifndef config_usr_h
#define config_usr_h

#define AWS_IOT_MQTT_HOST "XXXXXXXXXXX.iot.us-west-2.amazonaws.com"
#define AWS_IOT_MQTT_PORT 8883
#define AWS_IOT_CLIENT_ID "clientYun2"
#define AWS_IOT_MY_THING_NAME "PlantSystem"
#define AWS_IOT_ROOT_CA_FILENAME "rootCA.pem"
#define AWS_IOT_CERTIFICATE_FILENAME "cert.pem"
#define AWS_IOT_PRIVATE_KEY_FILENAME "privateKey.pem"

#define AWS_IOT_PATH_PREFIX "./certs/"
#define AWS_IOT_ROOT_CA_PATH AWS_IOT_PATH_PREFIX AWS_IOT_ROOT_CA_FILENAME
#define AWS_IOT_CERTIFICATE_PATH AWS_IOT_PATH_PREFIX AWS_IOT_CERTIFICATE_FILENAME
#define AWS_IOT_PRIVATE_KEY_PATH AWS_IOT_PATH_PREFIX AWS_IOT_PRIVATE_KEY_FILENAME

#endif

Piezas personalizadas y carcasa (STL)

Archivos STL para imprimir la carcasa que aloja Yun, shield y sensores.

Esquemáticos

Conexiones del shield Grove:

  • Temperatura → A0
  • Humedad suelo → A1
  • Luz → A2
  • LED rojo + 220 Ω → pin 2
Sistema de Monitorizado de Plantas Inteligente con AWS IoT
Sistema de Monitorizado de Plantas Inteligente con AWS IoT

Proceso de manufactura

  1. Monitorización meteorológica remota con Raspberry Pi 3 y PubNub
  2. Botón IoT AWS Controlado por Movimiento con Raspberry Pi, Sensor PIR y MQTT
  3. Monitoreo de Latidos Cardíacos sin Contacto vía Altavoces Inteligentes: Un Sistema Revolucionario
  4. Eleve sus operaciones: Aproveche la monitorización IoT de tanques para una gestión petrolífera más segura, inteligente y rentable
  5. Sistema IoT Avanzado con IA para Detección Temprana de Incendios Forestales y Monitorización de Salud de Árboles
  6. Sistema de Monitorización Remota IoT para Tanques de Petróleo y Diésel
  7. Descubre 8 Ventajas Clave de la Monitorización de Peso de Flotas IoT
  8. Cómo la Monitorización de Activos IoT Impulsa Seguridad y Eficiencia en Petróleo y Gas
  9. Revolucione la Gestión Láctea con Monitoreo de Nivel de Leche Habilitado por IoT
  10. Sistema Inteligente de Monitoreo de Ríos IoT Mejora la Gestión del Agua y Prevención de Inundaciones
  11. Dominando las Sentencias Using en C#: Importaciones, Alias y Directivas Estáticas