Problemas comunicación sensor RTU rs485 y MKR1300

Hola a todos,
es la primera vez que escribo en el foro y espero hacerlo todo bien. No se si esta sección es la más indicada para la duda que voy a plantear. Se me presenta un problema al intentar conectar un sensor de humedad de suelo con salida rs485 (os dejo enlace a continuación) con un Arduino MKR1300.
https://es.aliexpress.com/item/1005001411485735.html?spm=a2g0s.9042311.0.0.274263c0MqRZko
El sensor tiene una alimentación 5-30 V y una salida RS485. La idea final es conseguir las lecturas y de dicho sensor y enviarlo a una base de datos a través de LoRaWAN. El problema es que no consigo recibir ninguna información del sensor de humedad. He realizado una búsqueda exhaustiva (dentro de mis posibilidades) pero no encuentro la solución. Os dejo a continuación el código que he usado por si alguien puede hacer alguna aportación.

#define RE 7
#define DE 6
 
const byte hum[] = {0x01,0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B};

byte values[9];

void setup() {
  Serial.begin(9600);
  // Ajuste de los puertos(Serial1:pin 13 y 14)
  Serial1.begin(9600);

  pinMode(RE, OUTPUT);
  pinMode(DE, OUTPUT);
}
 
void loop() {
  digitalWrite(DE,HIGH);
  digitalWrite(RE,HIGH);
  delay(10);
  if(Serial1.write(hum,sizeof(hum))==8){
    digitalWrite(DE,LOW);
    digitalWrite(RE,LOW);
    for(byte i=0;i<9;i++){
      
      values[i] = Serial1.read();
      Serial.print(values[i],HEX);
      Serial.println();
    }
    //Se coge el valor de humedad (bytes 4 y 5) y se imprime:
    Serial.println();
    float humedad_1 = float(values[3]);
    float humedad_2 = float(values[4]);
    float humedad = ((humedad_1*256+humedad_2)/10);
    Serial.println(humedad_1);
    Serial.println(humedad_2);
    Serial.print("Humidity: ");
    Serial.print(humedad);
    Serial.println("%");
    Serial.println();
       
    }
  delay(2000);
}

Gracias de antemano.

No veo mucha información sobre la conexión en el enlace de aliexpress que has puesto. De todas formas, viendo algún dispositivo similar en el mismo sitio podemos revisar las conexiones:

Primero revisa que no hayas comprado otro tipo de sensor. En la carcasa debería estar marcado la salida RS485 y tener cuatro cables.

Los cables deberían estar conectados así:

Cable marrón a 5V.
Cable azul a GND.
Cable negro a A.
Cable gris a B.

No parece que tenga un consumo elevado, pero si optas por alimentarlo aparte debes unir los GND de las dos fuentes.

En cuanto al software, no se ve que forma tienen las tramas: si es modbus u otro protocolo.

Adjunto el manual. Lo conseguí preguntándole al vendedor de Aliexpress. El sensor tiene comunicación rs485 y alimentación 5-30V según pone en la etiqueta del mismo. Tiene cuatro cables:

  • Amarillo: A
  • Azul: B
  • Negro: negativo
  • Rojo: positivo

He conseguido que el sensor funcione, con un Arduino Nano y sacando los datos por el monitor serie con el siguiente código

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

#define RE 8
#define DE 7
 
const byte hum[] = {0x01,0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B};

byte values[9];
SoftwareSerial mod(2,3);
 
void setup() {
  Serial.begin(9600);
  mod.begin(9600);
  pinMode(RE, OUTPUT);
  pinMode(DE, OUTPUT);
}
 
void loop() {
  digitalWrite(DE,HIGH);
  digitalWrite(RE,HIGH);
  delay(10);
  if(mod.write(hum,sizeof(hum))==8){
    digitalWrite(DE,LOW);
    digitalWrite(RE,LOW);
    for(byte i=0;i<9;i++){
      //Serial.print(mod.read(),HEX);
      values[i] = mod.read();
      Serial.print(values[i],HEX);
      Serial.println();
        
    }
    Serial.println();
    float humedad_1 = float(values[3]);
    float humedad_2 = float(values[4]);
    float humedad = ((humedad_1*256+humedad_2)/10);
    Serial.println(humedad_1);
    Serial.println(humedad_2);
    Serial.print("Humidity: ");
    Serial.print(humedad);
    Serial.println("%");
    Serial.println();
       
    }
  delay(2000);
}

Con el Arduino MKR 1300 lo he intentado de muchas formas pero no se en que me equivoco. Gracias por la rápida respuesta.

Soil Moisture & Temperature Sensor English Instructions(1).doc (1.01 MB)

El módulo que usas que integrado tipo MAX48X tiene?
Lo alimentas con 3.3V desde el MKR cuando debería ser 5V.

Los niveles pueden estar bien pero la alimentación podría ser un problema
Con el NANO VCC es 5V y tal vez por eso funcione.

Otro posible responsable es el sensor porque dice
El sensor tiene una alimentación 5-30 V

Y con el MKR de nuevo, lo alimentas con 3.3V
Busca una fuente externa o ve si el MKR dispone de una salida 5V.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.