—Productos—
WhatsApp:+8615367865107
Dirección:Oficina 102, Distrito D, Parque Industrial Houhu, Distrito Yuelu, Ciudad de Changsha, Provincia de Hunan, China
Soporte técnico
Hora:2024-06-29 21:07:28 Popularidad:1679
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.
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
}
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.
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
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
Productos relacionados
Captura de pantalla, WhatsApp para identificar el código QR
WhatsApp number:+8615367865107
(Clic en WhatsApp para copiar y añadir amigos)