Conecte el sensor NPK del suelo a Arduino

Arduino es una herramienta increíblemente versátil que ha revolucionado la forma en que implementamos proyectos de electrónica. En este artículo, te enseñaremos cómo conectar el sensor NPK del suelo a Arduino para obtener lecturas precisas y útiles de los nutrientes presentes en tu suelo. ¡Sigue leyendo para aprender más!

Tus plantas necesitan alimento, al igual que tú. Para ser más sanas y productivas, las plantas necesitan los “tres grandes” nutrientes esenciales: nitrógeno, fósforo y potasio, también conocidos como NPK.

Si el suelo de su jardín no contiene suficientes nutrientes, las plantas no crecerán en todo su potencial. Por lo tanto, es importante medir el contenido actual de N, P y K del suelo para determinar cuánto contenido de nutrientes adicional se necesita agregar para aumentar la fertilidad de los cultivos.

Usando un sensor de suelo NPK y un Arduino, puedes determinar rápidamente los niveles de estos nutrientes en el suelo.

¿Qué es NPK? ¿Y por qué es tan importante?

Las letras NPK representan los tres nutrientes más importantes que las plantas necesitan para crecer y prosperar: nitrógeno, fósforo y potasio.

El nitrógeno es responsable del crecimiento y el verdor de las hojas de las plantas.

El fósforo ayuda a la planta a producir raíces, frutos y flores fuertes.

El potasio mejora la salud general y la resistencia de una planta.

Sensor NPK de suelo JXCT

El sensor JXCT Soil NPK es un sensor portátil, relativamente preciso, de respuesta rápida y de bajo costo. Admite el monitoreo en tiempo real de los niveles de nutrientes NPK del suelo para una agricultura inteligente.

El sensor de suelo NPK puede determinar el contenido de nitrógeno, fósforo y potasio en el suelo (no en el agua). Ayuda a determinar la fertilidad del suelo y permite una evaluación más sistemática de la condición del suelo.

Conecte el sensor NPK del suelo a Arduino

El sensor funciona con 5-30V y consume muy poca energía. Según la ficha técnica, es capaz de medir nitrógeno, fósforo y potasio con una resolución de hasta 1 mg/kg (mg/L).

El sensor tiene una sonda de acero inoxidable que es resistente a la oxidación, a los electrolitos y a la sal y los álcalis. Por lo tanto, se puede utilizar en cualquier tipo de suelo, incluidos suelos alcalinos, suelos ácidos, suelos de sustrato, suelos para semilleros y suelos de salvado de coco.

Conecte el sensor NPK del suelo a Arduino

La sonda está sellada al cuerpo con resina epoxi de alta densidad para evitar que entre humedad en el cuerpo.

Lo mejor es que el sensor tiene una clasificación IP68, lo que significa que está protegido del polvo y la humedad y, por lo tanto, puede funcionar normalmente durante mucho tiempo.

Para un uso eficaz en largas distancias, el sensor tiene la interfaz de comunicación RS485 y admite el protocolo de comunicación estándar Modbus-RTU.

Cabe señalar que el sensor no se puede utilizar directamente con un Arduino. Para comunicarse con Arduino, necesita un módulo transceptor RS-485 que convierta un flujo serial UART a RS-485.

Especificaciones técnicas

Aquí están las especificaciones:

Actuación 5V a 30V
Rango de medición 0-1999 mg/kg (ml/l)
temperatura de funcionamiento 5-45°C
resolución 1 mg/kg (ml/l)
precisión ±2% del valor final
Señal de salida RS485
clase de protección IP68

aviso

El sensor NPK de suelo JXCT es un sensor de conductividad eléctrica (CE). No mide directamente el contenido de NPK del suelo, sino que lo estima en función de la conductividad eléctrica del suelo.

Tenga en cuenta que este método es difícil y puede producir resultados inexactos.

Para su información: existen sensores económicos que funcionan según el mismo principio.

Distribución de pines del sensor de suelo NPK

El sensor viene con un cable de 2 m con hilos de cobre estañado. La distribución de pines se muestra en la siguiente figura.

Conecte el sensor NPK del suelo a Arduino

VCC es el pin VCC. Conexión a 5V – 30V

A es una señal diferencial conectada al pin A del módulo Modbus MAX485.

b es otra señal diferencial conectada al pin B del módulo Modbus MAX485.

Dimensiones es el pin de tierra.

Cableado de un sensor de suelo NPK a un Arduino

Como se mencionó anteriormente, el sensor NPK no se puede usar directamente con un Arduino. Para comunicarse con Arduino, necesitará un módulo transceptor RS-485 que convierta un flujo serial UART a RS-485, como el que se muestra a continuación.

Conecte el sensor NPK del suelo a Arduino

Bien, vayamos al cableado.

El sensor NPK de tierra tiene cuatro cables. El cable de alimentación es marrón y debe conectarse a la fuente de alimentación de 5V-30V. El cable de tierra es negro y debe conectarse a una tierra común.

El cable amarillo del sensor NPK debe conectarse al pin A del módulo RS485 y el cable azul al pin B del módulo RS485.

Conecte los pines R0 y DI del módulo RS485 a los pines digitales 2 y 3 del Arduino. Estos pines digitales se utilizan como líneas RX y TX en serie virtuales.

Tenga en cuenta que si está utilizando un Mega o Mega 2560, debe usar los pines digitales 10 y 11, ya que los pines digitales 2 y 3 no admiten interrupciones de cambio, lo cual es un problema conocido. Limitación de la biblioteca SoftwareSerial.

El pin VCC del módulo RS485 debe conectarse a la salida de 5 V del Arduino y los pines DE y RE deben conectarse a los pines digitales 7 y 8 respectivamente.

Finalmente, asegúrese de que su circuito y Arduino tengan una base común.

El cableado se muestra en la siguiente imagen.

Conecte el sensor NPK del suelo a Arduino

Instrucciones de uso

Elija un lugar de medición adecuado, evite piedras, asegúrese de que la sonda de acero no entre en contacto con objetos duros e inserte el sensor verticalmente en el suelo.

Conecte el sensor NPK del suelo a Arduino

Opcionalmente, el sensor también se puede insertar horizontalmente en la fosa. En este caso, el hoyo se cava verticalmente con un diámetro superior a 20 cm y luego se llena herméticamente.

Conecte el sensor NPK del suelo a Arduino

¿Qué es Modbus?

Si no sabe qué es Modbus, probablemente sea una buena idea repasar sus conocimientos antes de continuar.

Modbus es un estándar de facto para protocolos de comunicación industriales porque es de código abierto y libre de regalías. Para la transmisión de datos utiliza las interfaces RS-485, RS-422 y RS-232, así como redes Ethernet TCP/IP (el protocolo Modbus TCP).

Existen diferentes tipos de implementación de Modbus. Los siguientes son los tipos de protocolo más comunes:

  • Modbus RTU (El que configuraremos)
  • Modbus ASCII
  • Modbus TCP

Protocolo Modbus RTU

Modbus RTU es un protocolo maestro-esclavo. En este protocolo, sólo el dispositivo maestro (en nuestro caso, un Arduino) puede iniciar la comunicación. Los demás dispositivos de la red se denominan esclavos (en nuestro caso sensores NPK) y sólo pueden responder a solicitudes. Modbus RTU puede admitir hasta 247 dispositivos en la misma red física.

Trama de datos Modbus RTU

El maestro y el esclavo intercambian mensajes en forma de telegramas de datos a través del bus Modbus. Hay marcos de solicitud y respuesta. Una solicitud es un mensaje enviado desde el maestro a uno de los esclavos. Una respuesta es un mensaje enviado del esclavo al maestro.

La solicitud también contiene una suma de verificación para garantizar que el mensaje no se dañe en el camino hacia el esclavo.

Un mensaje Modbus RTU típico contiene la dirección del dispositivo SlaveID, el código de función, los datos basados ​​en el código de función y el CRC de la suma de verificación.

Conecte el sensor NPK del suelo a Arduino

El siguiente es un ejemplo de una trama de solicitud Modbus RTU que indica al esclavo n.º 1 que devuelva el valor de un único registro comenzando en la dirección 2.

Conecte el sensor NPK del suelo a Arduino

Todos los esclavos excepto el esclavo #1 ignoran este mensaje. El esclavo n.º 1 envía un mensaje de respuesta similar a este:

Conecte el sensor NPK del suelo a Arduino

Modbus RTU solicita leer el sensor NPK

A continuación se muestran tres solicitudes Modbus RTU diferentes para leer los valores de nitrógeno (N), fósforo (P) y potasio (K) del sensor NPK. Si la solicitud tiene éxito, el sensor envía un mensaje de respuesta con la lectura.

Para leer nitrógeno

El requisito de Modbus RTU para leer el nivel de nitrógeno es:

Conecte el sensor NPK del suelo a Arduino

Obtendrás una respuesta similar:

Conecte el sensor NPK del suelo a Arduino

A partir de la respuesta se puede determinar el contenido de nitrógeno. Por ejemplo, si la respuesta contiene el valor 0x0020 en el campo de datos, el contenido de nitrógeno se puede calcular de la siguiente manera:

Nitrógeno = 0x0020MALEFICIO = 32DIC => 32 mg/kg

Para leer fósforo

En consecuencia, el requisito de Modbus RTU para leer los niveles de fósforo es:

Conecte el sensor NPK del suelo a Arduino

Obtendrás una respuesta similar:

Conecte el sensor NPK del suelo a Arduino

A partir de la respuesta se puede determinar el contenido de fósforo. Por ejemplo, si la respuesta contiene el valor 0x0025 en el campo de datos, el contenido de fósforo se puede calcular de la siguiente manera:

Fósforo = 0x0025MALEFICIO = 37DIC => 37 mg/kg

Para leer potasio

Similar a las dos solicitudes anteriores, la solicitud Modbus RTU para leer el nivel de potasio es:

Conecte el sensor NPK del suelo a Arduino

Obtendrás una respuesta similar:

Conecte el sensor NPK del suelo a Arduino

A partir de la respuesta puedes determinar el nivel de potasio. Por ejemplo, si la respuesta contiene el valor 0x0030 en el campo de datos, el nivel de potasio se puede calcular de la siguiente manera:

Potasio = 0x0030MALEFICIO = 48DIC => 48 mg/kg

código de ejemplo de arduino

El siguiente esquema de prueba lee los valores de nitrógeno, fósforo y potasio del sensor NPK del suelo y los imprime en el monitor en serie.

#include <SoftwareSerial.h>
#include <Wire.h>

// RE and DE Pins set the RS485 module
// to Receiver or Transmitter mode
#define RE 8
#define DE 7

// Modbus RTU requests for reading NPK values
const byte nitro[] = {0x01,0x03, 0x00, 0x1e, 0x00, 0x01, 0xe4, 0x0c};
const byte phos[] = {0x01,0x03, 0x00, 0x1f, 0x00, 0x01, 0xb5, 0xcc};
const byte pota[] = {0x01,0x03, 0x00, 0x20, 0x00, 0x01, 0x85, 0xc0};

// A variable used to store NPK values
byte values[11];

// Sets up a new SoftwareSerial object
// Digital pins 10 and 11 should be used with a Mega or Mega 2560
SoftwareSerial mod(2, 3);
//SoftwareSerial mod(10, 11);
 
void setup() {
  // Set the baud rate for the Serial port
  Serial.begin(9600);

  // Set the baud rate for the SerialSoftware object
  mod.begin(9600);

  // Define pin modes for RE and DE
  pinMode(RE, OUTPUT);
  pinMode(DE, OUTPUT);
  
  delay(500);
}
 
void loop() {
  // Read values
  byte val1,val2,val3;
  val1 = nitrogen();
  delay(250);
  val2 = phosphorous();
  delay(250);
  val3 = potassium();
  delay(250);

  // Print values to the serial monitor
  Serial.print("Nitrogen: ");
  Serial.print(val1);
  Serial.println(" mg/kg");
  Serial.print("Phosphorous: ");
  Serial.print(val2);
  Serial.println(" mg/kg");
  Serial.print("Potassium: ");
  Serial.print(val3);
  Serial.println(" mg/kg");
  
  delay(2000);
}
 
byte nitrogen(){
  digitalWrite(DE,HIGH);
  digitalWrite(RE,HIGH);
  delay(10);
  if(mod.write(nitro,sizeof(nitro))==8){
    digitalWrite(DE,LOW);
    digitalWrite(RE,LOW);
    for(byte i=0;i<7;i++){
    //Serial.print(mod.read(),HEX);
    values[i] = mod.read();
    Serial.print(values[i],HEX);
    }
    Serial.println();
  }
  return values[4];
}
 
byte phosphorous(){
  digitalWrite(DE,HIGH);
  digitalWrite(RE,HIGH);
  delay(10);
  if(mod.write(phos,sizeof(phos))==8){
    digitalWrite(DE,LOW);
    digitalWrite(RE,LOW);
    for(byte i=0;i<7;i++){
    //Serial.print(mod.read(),HEX);
    values[i] = mod.read();
    Serial.print(values[i],HEX);
    }
    Serial.println();
  }
  return values[4];
}
 
byte potassium(){
  digitalWrite(DE,HIGH);
  digitalWrite(RE,HIGH);
  delay(10);
  if(mod.write(pota,sizeof(pota))==8){
    digitalWrite(DE,LOW);
    digitalWrite(RE,LOW);
    for(byte i=0;i<7;i++){
    //Serial.print(mod.read(),HEX);
    values[i] = mod.read();
    Serial.print(values[i],HEX);
    }
    Serial.println();
  }
  return values[4];
}

Verás algo como esto.

Conecte el sensor NPK del suelo a Arduino

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded




Conecte el sensor NPK del suelo a Arduino

Conecte el sensor NPK del suelo a Arduino

Sus plantas, al igual que usted, requieren alimento. Para ser más saludables y productivas, las plantas necesitan los nutrientes esenciales «tres grandes» nitrógeno, fósforo y potasio, también conocidos como NPK.

¿Qué es NPK y por qué es tan importante?

Las letras NPK representan los tres nutrientes principales que las plantas necesitan para crecer y prosperar: nitrógeno, fósforo y potasio. El nitrógeno es responsable del crecimiento y verdor de las hojas de las plantas. El fósforo ayuda a que la planta desarrollar raíces fuertes, frutas y flores. El potasio mejora la salud general y resistencia de la planta.

Sensor de Suelo NPK JXCT

El sensor de suelo NPK JXCT es un sensor portátil, de bajo costo, de respuesta rápida y razonablemente preciso. Ayuda a monitorear en tiempo real el contenido de nutrientes NPK en el suelo para la agricultura inteligente.

Especificaciones técnicas

  1. Potencia: 5V-30V
  2. Rango de medición: 0-1999 mg/kg (ml/l)
  3. Temperatura de operación: 5-45 °C
  4. Resolución: 1mg/kg (ml/l)
  5. Precisión: ±2% F.S.
  6. Señal de salida: RS485
  7. Clase de protección: IP68

Instrucciones de Uso

Elija una ubicación de medición adecuada, evite piedras, asegúrese de que la sonda de acero no entre en contacto con objetos duros, e inserte el sensor verticalmente en el suelo.

¿Qué es Modbus?

Modbus es un protocolo de comunicación industrial de facto estándar, ya que es de código abierto y libre de regalías. Para la transferencia de datos, utiliza interfaces RS-485, RS-422 y RS-232, así como redes Ethernet TCP/IP (el protocolo Modbus TCP).

Protocolo Modbus RTU

Modbus RTU es un protocolo maestro-esclavo. En este protocolo, solo se permite que el dispositivo maestro (en este caso, un Arduino) inicie la comunicación. Los otros dispositivos en la red se conocen como esclavos (en este caso, sensores NPK) y solo pueden responder a las solicitudes. Modbus RTU puede admitir hasta 247 dispositivos en la misma red física.

Código de Ejemplo Arduino

El siguiente código de prueba lee los valores de nitrógeno, fósforo y potasio del sensor de suelo NPK e imprime los valores en el monitor serie.

El código completo y más información detallada sobre la conexión y uso del sensor NPK con Arduino se puede encontrar en este enlace.


Deja un comentario