Skip to Content

Arduino And NPK Sensor Project

Arduino And NPK Sensor Project

En este artículo aprenderás a utilizar sensores NPK con Arduino.

NPK (nitrógeno, fósforo y potasio) son los tres macronutrientes vitales de las plantas. 

Puede utilizar el sensor NPK para controlar el contenido nutricional disponible para las plantas en el suelo.

Se puede utilizar como parte de sus proyectos de jardinería, tal vez junto a un sistema automatizado de riego de plantas Arduino IoT.

Existen varios tipos de sensores para controlar los nutrientes del suelo.

Los sensores NPK utilizados en este proyecto son precisos y los resultados están disponibles inmediatamente. 

Necesitarás un convertidor de nivel para conectar el Arduino UNO al sensor NPK. 

A continuación, encontrará los detalles del convertidor, un diagrama de conexión paso a paso y las patillas del sensor NPK. 

En las secciones posteriores, encontrará el código Arduino y una recopilación de preguntas frecuentes sobre los proyectos NPK con sus respuestas.

Comencemos.

Componentes necesarios para construir el Arduino y el sensor NPK

Componentes de hardware

Software

Makerguides.com participa en el Programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen honorarios de publicidad mediante la publicidad y los enlaces a productos en Amazon.com.

Conceptos básicos del sensor NPK

En esta sección, conoceremos los detalles del sensor NPK. 

El sensor NPK típico se muestra en la siguiente imagen.

Los sensores contienen toda la electrónica necesaria para muestrear los datos, procesarlos y comunicarlos con los controladores host a través del protocolo RS485.

Veamos los detalles del típico sensor de nutrientes del suelo NPK.

sensor de nutrientes del suelo NPK típico

Puede utilizar Modbus para obtener los datos de las concentraciones de los tres elementos en el suelo.

Puede enviar consultas independientes a través del bus para recoger los datos de las mediciones de nitrógeno, potasio y fósforo. 

El sensor NPK dispone de cuatro hilos para la conexión:

Número de pinDescripción de la clavijaObservaciones
1VCCComunicación por línea eléctrica
2GNDConexión a tierra
3RS485ALínea de comunicación RS485 A
4RS485BLínea de comunicación RS485 B

Puede medir la cantidad de nitrógeno, fósforo y potasio del suelo.

Una vez que disponga de las mediciones, podrá evaluar eficazmente el estado del suelo.

Los sensores NPK pueden dejarse en el suelo durante más tiempo. 

Puede medir los datos a lo largo de un periodo prolongado y proporcionar información adecuada al equipo que aplica los fertilizantes.

Los sensores NPK se utilizan en investigación agrícola, jardinería, silvicultura, cultivo y mucho más. 

¿Cuáles son las características genéricas de los sensores NPK ideales?

Esta es la lista de características deseadas del sensor NPK para aplicaciones de estudio de nutrientes del suelo

  1. Interfaz fácil de usar y preferiblemente con menos pasos
  2. Sin sustancias químicas nocivas activas. 
  3. Cualquier número de lecturas debería ser posible.
  4. El tiempo de respuesta debe ser significativamente menor: una vez emitidos los comandos, las mediciones deben completarse en el menor tiempo posible. 
  5. Los sensores deben ser resistentes a la corrosión - Puede dejar el sensor enterrado en el suelo durante más tiempo.

Instrucciones paso a paso para conectar el módulo sensor NPK al Arduino UNO

En esta sección, construiremos un proyecto utilizando Arduino UNO y el módulo sensor NPK. 

El módulo sensor NPK que estoy utilizando proporciona datos a través del protocolo RS485.

Como no podemos conectar directamente el bus RS485 al Arduino UNO, utilizaremos un conversor de TTL a RS485. 

Comencemos. 

Utilizaremos un conversor RS485 a TTL. Veamos las descripciones de los pines del módulo.

Convertidor RS485 a TTL

La tabla siguiente define los pines en el orden en que están etiquetados según la imagen anterior. 

Número de pin Descripción de la clavijaObservaciones
1Recibir  If A > B by 200mV, RO will be high; If A < B by 200mV, RO will be low
2Activar recepciónHabilitación de la salida del receptor. RO se habilita cuando RE está bajo; RO es de alta impedancia cuando RE está alto.
3Habilitación de datosHabilitación de la salida del controlador. Las salidas del driver, Y y Z, se habilitan poniendo DE a nivel alto. Son de alta impedancia cuando DE está bajo. Si las salidas del driver están habilitadas, las partes funcionan como drivers de línea. Mientras están en alta impedancia, funcionan como receptores de línea si RE está bajo.
4Entrada de datosEntrada Driver. Un valor bajo en DI fuerza la salida Y a bajo y la salida Z a alto. Del mismo modo, un alto en DI fuerza la salida Y a alta y la salida Z a baja.
5GNDConexión a tierra
6AEntrada no inversora del receptor
7BInversión de la entrada del receptor
8VCCAlimentación positiva, 5 V típica

¿Cómo conectar el módulo sensor NPK al Arduino UNO?

A continuación se muestra la guía paso a paso para completar las conexiones de hardware necesarias para conectar el Arduino y el módulo sensor NPK.  

Paso 1: Comience con las conexiones GND.

Comienza con las conexiones GND

Conecte la clavija de tierra del módulo convertidor RS485 al cable de tierra del sensor NPK.

Conecte siempre las masas entre sí antes de realizar otras conexiones. 

Paso 2: Conectar las patillas A y B del sensor

Conecte las patillas A y B del sensor

Conecte los terminales inversor y no inversor del módulo RS485 a los pines A y B del sensor NPK.

Paso 3: Conectar la clavija de alimentación

Conecte la clavija de alimentación

Conecte el pin VCC del módulo al cable VCC del sensor NPK.

Paso 4: Verificar la conexión entre el convertidor RS485 y el sensor NPK

Verifique la conexión entre el convertidor RS485 y el sensor NPK

Esto completa las conexiones necesarias entre el módulo RS485 y el sensor NPK.

En los siguientes pasos, conectaremos el Arduino UNO al módulo RS485. 

Paso 5: Conectar RO Pin el UNO

Conectar RO Pin el UNO

Conecte el pin 2 al pin RO del sensor RS485.

Paso 6: Conectar DI Pin al UNO

Conectar DI Pin el UNO

Conecte el pin 3 al pin RO del sensor RS485.

Paso 7: Conectar DE Pin el UNO

Conectar DE Pin el UNO

Conecta el pin DE del módulo al pin 7 del Arduino UNO.

Paso 8: Conectar RE Pin al UNO

Conectar RE Pin el UNO

Conecta el pin RE del módulo al pin 8 del Arduino UNO.

También puedes intercambiar las conexiones con otros pines del Arduino UNO.

Por favor, actualiza también tu código Arduino, para que funcionen las nuevas conexiones. 

Paso 9: Verificar las conexiones completas

Verificar las conexiones completas

Verifique las conexiones. Enhorabuena por haber completado las conexiones necesarias para leer los sensores NPK. 

Ejemplo de código Arduino para el proyecto Arduino y el sensor NPK

En esta sección, recorreremos el código Arduino de ejemplo para probar el módulo sensor NPK.

El primer proyecto pone a prueba el circuito que construiste en la sección anterior.

Empecemos.

Código Arduino para mostrar los datos del sensor NPK

El código Arduino a continuación lee los datos del sensor NPK a través de RS485. El código Arduino se presenta a continuación.

#include "SoftwareSerial.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
 
#define SCREEN_WIDTH 128    // OLED display width, in pixels
#define SCREEN_HEIGHT 64    // OLED display height, in pixels
#define OLED_RESET -1       // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
 
#define RE 8
#define DE 7
 
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};
 
byte values[11];
SoftwareSerial mod(2, 3);
 
void setup() {
  Serial.begin(9600);
  mod.begin(9600);
  pinMode(RE, OUTPUT);
  pinMode(DE, OUTPUT);
 
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)
  delay(500);
  display.clearDisplay();
  display.setCursor(25, 15);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.println(" NPK Sensor");
  display.setCursor(25, 35);
  display.setTextSize(1);
  display.print("Initializing");
  display.display();
  delay(3000);
}
 
void loop() {
  byte val1, val2, val3;
  val1 = nitrogen();
  delay(250);
  val2 = phosphorous();
  delay(250);
  val3 = potassium();
  delay(250);
 
  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);
 
  display.clearDisplay();

  display.setTextSize(2);
  display.setCursor(0, 5);
  display.print("N: ");
  display.print(val1);
  display.setTextSize(1);
  display.print(" mg/kg");
 
  display.setTextSize(2);
  display.setCursor(0, 25);
  display.print("P: ");
  display.print(val2);
  display.setTextSize(1);
  display.print(" mg/kg");
 
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print("K: ");
  display.print(val3);
  display.setTextSize(1);
  display.print(" mg/kg");
 
  display.display();
}
 
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];
}

Preguntas frecuentes sobre el sensor NPK y los proyectos Arduino

He incluido una lista de las preguntas más frecuentes sobre los proyectos realizados con Arduino y los módulos de sensores NPK.

Si tiene más preguntas, no dude en dejarlas en la sección de comentarios.

Estaré encantado de responderles. 

1. ¿Qué es un sensor NPK?

NPK significa nitrógeno, fósforo y potasio.

Los sensores NPK se utilizan para detectar la fertilidad del suelo. Los sensores NPK se utilizan para evaluar la naturaleza del suelo.

Controlar la fertilidad de la tierra agrícola le ayuda a aumentar el rendimiento, evitando el uso excesivo de fertilizantes y la contaminación de la esencia natural del suelo.

Un sensor NPK se alimenta utilizando una fuente de 5 V a 24 V. Consulte las especificaciones del sensor concreto para obtener información precisa sobre el intervalo de tensión.

El sensor también admite RS485 o una interfaz de comunicación similar.

En este artículo, hemos utilizado el protocolo RS485 para comunicarnos con el Arduino UNO.

2. ¿Es preciso un sensor NPK?

Los sensores NPK son fáciles de usar y muy precisos.

Los sensores NPK permiten medir los niveles de nitrógeno, fósforo y potasio del suelo.

Las lecturas son rápidas, precisas y fáciles de procesar.

Los datos típicos de los sensores NPN son precisos, el tiempo de respuesta es más rápido y puede llevar varios sensores NPK en un bus serie compartido. 

3. ¿Por qué es importante el valor NPK?

NPK representa el macronutriente más esencial del suelo. Si conoce el valor NPK del suelo, podrá nutrir las plantas de su jardín con el nivel adecuado de nutrientes.

Si excede el rango preferido de NPK, se perderá la esencia natural del suelo. 

Si se reduce el número de nutrientes, la planta sufrirá. De ahí que los sensores NPK desempeñen un papel vital en el equilibrio de los contenidos NPK. 

4. ¿Cuál de los NPK es más importante?

De los tres elementos, el nitrógeno es fundamental para el desarrollo de una planta.

Los valores NPK son vitales para la formación de la estructura de la planta, la generación de semillas, las flores, etc. 

Los abonos NPK deben aplicarse cuando la planta esté creciendo activamente.

Los sensores NPK pueden utilizarse para controlar activamente la información nutricional del suelo. 

Conclusión

En este artículo, entendimos los conceptos básicos de un sensor NPK y cómo el sensor NPK mide el contenido NPK del suelo. 

También enumeramos las características de un sensor NPK y aprendimos los fundamentos del conversor RS485 a TTL utilizado en el proyecto. 

Puede seguir los pasos de conexión y completar el circuito de nuestro proyecto de seguimiento de la nutrición del suelo.

El código Arduino para leer los sensores NPK presentado es fácil y sencillo de entender. 

Envíe sus preguntas sobre los sensores NPK a la sección de comentarios. Siempre estoy encantado de responderlas. 

Si tienes alguna opinión para mejorar el artículo, compártela en la sección de comentarios.

Sus valiosas aportaciones me ayudan a mejorar la calidad de los artículos y a publicar más artículos útiles. 

Por favor, recuerda compartir el artículo con tus compañeros entusiastas de Arduino.

Robert

Friday 1st of December 2023

Thank you for this interesting article! One question: Do you think this type of NPK sensor works also for hydroponics? I.e. will it provide reliable results when using in a fluid nutrient solution? Many thanks in advance, Robert

Stefan Maetschke

Saturday 2nd of December 2023

Good questions, I don't know. Never tried this.

Georgio

Friday 18th of August 2023

Is it simple to add a humidity sensor to this project?

Lorena

Thursday 7th of September 2023

@Stefan, Hi, I have two questions 1. What are the pins for OLED? In this exercise, 2. may do you know the circuit and code using ESP32? If you can help means a lot!!! Thank you!

Georgio

Wednesday 23rd of August 2023

@Stefan, Thanks for your rapid reply. I confess, as a newbie, that I don't follow how to combine the 2 projects into one, since they use different components and there's the whole IoT thing which I'm not sure I care about. I have seen more complicated sensors available, with 5 or 7 prongs that test more things, but I haven't been able to find a tutorial on making an NPK, humidity, PH sensor with them. So that, in the end, was my question. Again, as a newbie, I'd love to find a comprehensive how-to, like the one on this page, but for the expanded project.

Stefan

Saturday 19th of August 2023

Sure, the following tutorial shows how to use a humidity and moisture sensor: https://www.makerguides.com/automatic-plant-watering-system-with-arduino-iot-cloud/

afzal

Friday 24th of March 2023

give complete circuit diagram with oled