Llamar al teléfono +8618073152920 Teléfonos: +8618073152920
Call Phone +8618073152920
CONTACTO/CONTACT US
línea telefónica directa +8618073152920
Changsha Zoko Link Technology Co., Ltd.

Email:Arvin@niubol.com

WhatsApp:+8615367865107

Dirección:Oficina 102, Distrito D, Parque Industrial Houhu, Distrito Yuelu, Ciudad de Changsha, Provincia de Hunan, China

Posición:Início >> Blogs >> Soporte técnico

Soporte técnico

Código Arduino para sensor de humedad del suelo

Hora:2024-06-29 21:07:28 Popularidad:1679

Sensor de humedad del suelo 8 en 1 Rs485 para arduino

En esta guía, exploraremos cómo conectar un sensor de humedad y temperatura del suelo 8 en 1 con Arduino mediante el protocolo RS485. Esta configuración nos permitirá monitorear el contenido de humedad y la temperatura del suelo, que son parámetros cruciales para la agricultura y la jardinería.

Los sensores de humedad del suelo miden el contenido volumétrico de agua en el suelo. Al comprender los niveles de humedad, los agricultores y jardineros pueden tomar decisiones informadas sobre el riego, lo que garantiza un crecimiento óptimo de las plantas. La temperatura del suelo también desempeña un papel importante en la salud de las plantas, ya que afecta el crecimiento de las raíces y la absorción de nutrientes.

Sensor de suelo integrado 8 en 1.jpg

Para este proyecto, utilizaremos el sensor de humedad y temperatura del suelo Niubol 8 en 1, que está diseñado específicamente para mediciones en el suelo. 

Por lo tanto, para este proyecto utilizaremos un sensor de suelo de grado industrial. Para conectar el sensor con Arduino, utilizaremos el protocolo de comunicación RS485. Los datos del sensor de humedad y temperatura del suelo se presentarán en una pantalla OLED conectada a Arduino.

Aquí están los 4 cables para el sensor:

Cable marrón: VCC (5 V-24 V)

Cable negro: GND

Cable amarillo: RS485-A

Cable azul: RS485-B

Requisitos:

Hardware

DFRduino UNO R3 (o similar) x 1

Shield RS485 para Arduino x1

Sensor de suelo RS485 (temperatura, humedad, CE, salinidad, pH y NPK) x 1

Software:

IDE de Arduino

Aquí se muestra un mapeo de conexión entre MAX485 y el sensor de temperatura de humedad del suelo.

VCC -> 5V (Sensor de suelo)

GND -> GND (Sensor de suelo)

A (MAX485) -> Pin A del sensor de suelo (color amarillo)

B (MAX485) -> Pin B del sensor de suelo (color azul)

Conexión del sensor de temperatura y humedad del suelo con Arduino. Puede utilizar una placa de pruebas para el montaje y cables puente para conectar el sensor y el módulo RS485 con Arduino.

Código fuente/programa para leer la humedad y la temperatura del suelo 8 en 1 

Código fuente del programa para leer el sensor de humedad del suelo.txt


#include <SoftwareSerial.h>

// Define the pins for RS485 communication

#define RO 2

#define DI 3

#define RE 8

#define DE 7

#define RESPONSE_FRAME_SIZE 21

char sensorDataTextBuffer[200];

struct SoilSensorData

{

  bool isSensorTimeout {false};

  bool isValid {false};

  float temperature {-1.0};

  float humidity {-1.0};

  unsigned int conductivity {-1};

  float ph {-1.0};

  unsigned int nitrogen {-1};

  unsigned int phosphorus {-1};

  unsigned int potassium {-1};

  unsigned int salinity {-1};

};

class SoilSensor

{

  public:

    SoilSensor()

    {

      modbus = new SoftwareSerial(RO, DI);

    }

    void initialise()

    {

      Serial.begin(9600); // Initialize serial communication for debugging

      modbus->begin(9600);    // Initialize software serial communication at 9600 baud rate

      pinMode(RE, OUTPUT); // Set RE pin as output

      pinMode(DE, OUTPUT); // Set DE pi

    }

    void sendDataRequest()

    {

      digitalWrite(DE, HIGH);

      digitalWrite(RE, HIGH);

      delay(10);

      // Send the request frame to the soil sensor

       modbus->write(soilSensorRequest, sizeof(soilSensorRequest));

    }

    

    SoilSensorData read()

    {

      SoilSensorData soilSensorData;

       // End the transmission mode and set to receive mode for RS485

      digitalWrite(DE, LOW);

      digitalWrite(RE, LOW);

      delay(10);     

      //Wait for the response from the sensor or timeout after 1 second

      unsigned long startTime = millis();

      while (modbus->available() < RESPONSE_FRAME_SIZE && millis() - startTime < 1000)

      {

        delay(1);

      }

      if (modbus->available() >= RESPONSE_FRAME_SIZE) // If valid response received

      {

       // Read the response from the sensor

        byte index = 0;

        while (modbus->available() && index < RESPONSE_FRAME_SIZE)

        {

          soilSensorResponse[index] = modbus->read();

          index++;

        }

                soilSensorData = computeData();

      }

      else

      {

        soilSensorData.isSensorTimeout = true; 

      }

       return soilSensorData;

    } 

    ~SoilSensor()

    {

      if (modbus != nullptr) delete modbus;

      delete[] soilSensorResponse;

    }

    private:

    const byte soilSensorRequest[8] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x08, 0x44, 0x0C};

    SoftwareSerial* modbus = nullptr;

    byte soilSensorResponse[RESPONSE_FRAME_SIZE];   

    int convertBytesToDecimal(unsigned int offset)

    {

      return soilSensorResponse[offset] * 256 + soilSensorResponse[offset + 1];

    }

    SoilSensorData computeData() const

    {

      SoilSensorData soilSensorData;


      if (soilSensorResponse[0] != 1 || soilSensorResponse[1] != 3 || soilSensorResponse[2] != 16)

      {

        soilSensorData.isValid = false;

        return soilSensorData;

      }

      soilSensorData.isValid = true;

      soilSensorData.temperature = convertBytesToDecimal(3) / 10.0; //degrees celcius

      soilSensorData.humidity = convertBytesToDecimal(5) / 10.0; // percent

      soilSensorData.conductivity = convertBytesToDecimal(7); // microSiemens per centimetre

      soilSensorData.ph = convertBytesToDecimal(9) / 100.0;

      soilSensorData.nitrogen = convertBytesToDecimal(11); // miligram per Kilogram

      soilSensorData.phosphorus = convertBytesToDecimal(13); // miligram per Kilogram

      soilSensorData.potassium = convertBytesToDecimal(15); // miligram per Kilogram

      soilSensorData.salinity = convertBytesToDecimal(17); // miligram per Kilogram

      return soilSensorData;

    }

 };


SoilSensor soilSensor;

void writeSensorDataToString(SoilSensorData & sensorData)

{

  if (sensorData.isSensorTimeout)

  {

      sprintf(sensorDataTextBuffer, "Incomplete data or sensor time out");  

  }

  else

  {

    if (sensorData.isValid)  

    {

      char* tempStr = malloc(6 * sizeof(char));

      char* humidityStr = malloc(6 * sizeof(char));

      char* phStr = malloc(6 * sizeof(char));

      dtostrf(sensorData.temperature, 4, 1, tempStr);

      dtostrf(sensorData.humidity, 4, 1, humidityStr);

      dtostrf(sensorData.ph, 4, 2, phStr);

      auto conductivity = sensorData.conductivity;

      auto n = sensorData.nitrogen;

      auto p = sensorData.phosphorus;

      auto k = sensorData.potassium;

      auto salinity = sensorData.salinity;

      sprintf(sensorDataTextBuffer, "Temperature: %s; Humidity: %s; Conductivity: %u; PH: %s; N: %u; P: %u; K: %u; Salinity: %u", tempStr, humidityStr, conductivity, phStr, n, p, k, salinity);  

      if (tempStr != NULL) free(tempStr);

      if (humidityStr != NULL) free(humidityStr);

      if (phStr != NULL) free(phStr);

    }

    else

    {

      sprintf(sensorDataTextBuffer, "Data read from sensor is invalid");  

    }

  }

}


void setup() 

{

 soilSensor.initialise();

}


void loop() 

{

  soilSensor.sendDataRequest();

  SoilSensorData sensorData = soilSensor.read();

  writeSensorDataToString(sensorData);

  Serial.println(sensorDataTextBuffer);

  delay(2000); // Wait for a second before the next loop iteration

}

¡Gracias a Phil Ogun por el código!

El sensor de suelo 8 en 1 es un sensor que integra múltiples parámetros como temperatura, humedad, conductividad, NPK, salinidad y pH. Con un sensor de este tipo, los usuarios pueden acceder fácilmente a múltiples datos clave del suelo, lo que les ayuda a comprender mejor el estado del suelo y a realizar ajustes y tomar decisiones en consecuencia.

Al medir la constante dieléctrica del suelo, puede reflejar de manera directa y estable el contenido de humedad real de varios suelos. Es adecuado para el monitoreo de la humedad del suelo, experimentos científicos, riego que ahorra agua, invernaderos, flores y vegetales, pastos, prueba rápida de suelo, cultivo de plantas, tratamiento de aguas residuales, agricultura fina y otras ocasiones. La fuente de alimentación de entrada del sensor, la sonda de detección, la salida de señal, tres partes están completamente aisladas, son seguras y confiables, tienen una apariencia hermosa, son fáciles de instalar, la sonda está hecha de acero inoxidable, es resistente a la corrosión y tiene un rendimiento estable.

Hoja de datos del sensor de suelo:

1. Hoja de datos del sensor de humedad y temperatura del suelo NBL-S-THR

Manual de instrucciones de los sensores de temperatura y humedad del suelo NBL-S-THR V4.0.pdf

2. Hoja de datos del sensor de humedad y temperatura del suelo NBL-S-TMC

NBL-S-TMC-Sensor de conductividad de humedad y temperatura del suelo.pdf

3. Hoja de datos del sensor de humedad y temperatura del suelo NBL-S-TM

Manual de instrucciones del sensor de temperatura y humedad del suelo NBL-S-TM 4.0.pdf

4. Sensor integrado de temperatura, humedad, conductividad y salinidad del suelo NBL-S-TMCS

Sensor de temperatura, humedad, conductividad y salinidad del suelo NBL-S-TMCS.pdf

5. Sensor integrado NBL-S-TMCS-7 para temperatura, humedad, NPK, conductividad y pH del suelo

Manual del sensor de suelo compuesto 7 en 1.pdf

4. Sensor integrado NBL-S-TMCS-8 para temperatura, humedad, NPK, pH, conductividad y salinidad del suelo

Manual del sensor de suelo compuesto 8 en 1.pdf

Recomendaciones relacionadas

Catálogo de sensores

Catálogo de sensores agrícolas y estaciones meteorológicas-NiuBoL.pdf

Catálogo de estaciones meteorológicas-NiuBoL.pdf

Catálogo de sensores agrícolas-NiuBoL.pdf

Productos relacionados

Díganos sus requisitos, vamos a discutir más acerca de su project.we puede hacer más.

Nombre*

Tel*

Email*

Empresa*

País*

Mensaje

en línea
Contactos
Email
Top
XCódigo Arduino para sensor de humedad del suelo-Soporte técnico-Estaciones meteorológicas automáticas_Piranómetro_Sensor agrícola_Sensor de suelo_Sensor de temperatura y humedad_Sensor de pH_Sensor de NPK_Monitoreo ambiental - NiuBoL

Captura de pantalla, WhatsApp para identificar el código QR

WhatsApp number:+8615367865107

(Clic en WhatsApp para copiar y añadir amigos)

Open WhatsApp

El ID de WhatsApp se ha copiado, ¡abre WhatsApp para añadir los detalles de la consulta!