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

Sensor Inalámbrico de Humedad de Suelo con Helium y DFRobot – Cuidado de Plantas en Tiempo Real

Componentes y materiales

Módulo Helium Atom XBee 1
Punto de acceso Helium Element 1
Sensor capacitivo humedad suelo DFRobot Gravity (SEN0193) 1
Adaptador Helium Arduino/mbed 1
Arduino UNO 1

Software y servicios

Descripción

Sonda de humedad de suelo inalámbrica de bajo consumo (LPWAN) que envía lecturas a Helium Dashboard y/o canal HTTP (ej. IFTTT, requestbin). Ideal para macetas, jardín o agricultura de precisión.

Construcción de la sonda

  1. Inserta Helium Atom en Adaptador Helium Arduino → conéctalo al Arduino UNO. Configura jumpers RX/TX según placa (ver docs Helium).
  2. Conecta sensor DFRobot (3 hilos: negro=GND, rojo=5V, azul=AD0) al adaptador.
  3. Conecta conector blanco del sensor a la sonda capacitiva.

Despliegue de red Helium

  1. Conecta Helium Element a alimentación y Ethernet (LED verde/teal = online).
  2. En Helium Dashboard: crea cuenta → "New Atom" (nombre, últimos 4 dígitos MAC, código HVV 4 dígitos) → "New Element" (igual + ubicación en mapa).
  3. Verifica "Status & Signal" del Atom en Dashboard.

Canal HTTP

En Dashboard: "Channels" → "New Channel" → "HTTP" → URL destino (ej. https://requestbin.io/...). Nombre del canal: "HTTP" (usado en el sketch).

Configuración Arduino IDE y Sketch

  1. Instala librerías Helium y ArduinoJson (Sketch → Include Library → Manage Libraries).
  2. Nuevo sketch → pega el código completo (ver abajo).
  3. Conecta hardware por USB → Upload.

Sketch completo (Soil_Humidity.ino)


/* Copyright 2017, Helium Systems, Inc. All Rights Reserved. */
#include "Board.h"
#include <Arduino.h>
#include <ArduinoJson.h>
#include <Helium.h>
#include <Wire.h>

#define CHANNEL_NAME "HTTP"
#define CHANNEL_DELAY 5000
#define CHANNEL_SEND_CYCLE 12

Helium helium(&atom_serial);
Channel channel(&helium);
int channel_counter;

void report_status(int status, int result = 0) {
  if (helium_status_OK == status) {
    if (result == 0) Serial.println(F("Succeeded"));
    else { Serial.print(F("Failed - ")); Serial.println(result); }
  } else { Serial.println(F("Failed")); }
}

void connect() {
  while (!helium.connected()) {
    Serial.print(F("Connecting - "));
    int status = helium.connect();
    report_status(status);
    if (helium_status_OK != status) delay(1000);
  }
}

void channel_create(const char * channel_name) {
  int8_t result; int status;
  do {
    connect();
    Serial.print(F("Creating Channel - "));
    status = channel.begin(channel_name, &result);
    report_status(status, result);
    if (helium_status_OK != status) delay(1000);
  } while (helium_status_OK != status || result != 0);
}

void channel_send(const char * channel_name, void const * data, size_t len) {
  int status; int8_t result;
  do {
    Serial.print(F("Sending - "));
    status = channel.send(data, len, &result);
    report_status(status, result);
    if (status == helium_status_OK && result != 0) channel_create(channel_name);
    else if (status != helium_status_OK) delay(1000);
  } while (helium_status_OK != status || result != 0);
}

void setup() {
  Serial.begin(9600);
  Serial.println(F("Starting"));
  helium.begin(HELIUM_BAUD_RATE);
  channel_create(CHANNEL_NAME);
  channel_counter = 0;
}

#define DRY_VALUE 536   // En aire
#define WET_VALUE 303   // En agua
#define HUM_RANGE (DRY_VALUE - WET_VALUE)

void loop() {
  Serial.print(F("Reading - "));
  float reading = analogRead(A0);
  float percent = 100 * (1 - (reading - WET_VALUE) / HUM_RANGE);
  Serial.print(reading); Serial.print(" - "); Serial.println(percent);

  if (--channel_counter <= 0) {
    StaticJsonBuffer<JSON_OBJECT_SIZE(2) + 100> jsonBuffer;
    JsonObject & root = jsonBuffer.createObject();
    root[F("value")] = reading;
    root[F("percent")] = percent;
    char buffer[HELIUM_MAX_DATA_SIZE];
    size_t used = root.printTo(buffer, HELIUM_MAX_DATA_SIZE);
    channel_send(CHANNEL_NAME, buffer, used);
    channel_counter = CHANNEL_SEND_CYCLE;
  }
  delay(CHANNEL_DELAY);
}

Datos generados (JSON)

{ "value": 433, "percent": 55.5 }

value = lectura analógica cruda (0-1023). percent = humedad relativa calculada con calibración DRY/WET. Ajusta DRY_VALUE y WET_VALUE según tu sensor/suelo.

Verificación en Helium Dashboard

Próximos pasos

Proceso de manufactura

  1. Éxito duradero: lecciones de persistencia de Abraham Lincoln y el liderazgo en mantenimiento
  2. Sistema de control de acceso integrado con QR, RFID y verificación de temperatura
  3. Construya un Sensor de Humedad de Suelo de Bajo Coste para Riego Inteligente con Raspberry Pi
  4. Construye un sistema aeropónico automatizado con Raspberry Pi y sensor de humedad
  5. Construya un robot con Raspberry Pi y Python: Guía completa
  6. Integración de sensor termopar con Arduino Portenta H7 usando MAX6675
  7. Control Preciso de Servo con Arduino y MPU6050 (SG90 / MG996R)
  8. Módulo GPS u-blox LEA‑6H 02: Guía de integración con Arduino y Python
  9. Dominando reconocimiento y síntesis de voz en Arduino Due
  10. Sensores de Humedad de Suelo: Funcionamiento y Aplicaciones Prácticas
  11. Cámaras digitales mejoradas con IA revolucionan la monitorización de humedad del suelo