Este sensor capacitivo de humedad terrestre es más resistente a la corrosión por la oxidación del mismo al estar en contacto con la humedad y de la tierra y transmitir una corriente eléctrica. Funciona en un voltaje entre  3,3 y 5,5 V. Transmite la información correspondiente a la humedad por el pin AOUT, dando una lectura analógica.

Para obtener el rango de valores sobre los que opera el sensor, he realizado un programa en C++ utlizando Platformio en el entorno de Arduino

Está pensado para ser utilziado con un ESP8266, el cual solo tiene una entrada analógica para la lectura de los datos.

Para poder utilizar más de una entrada analógica de datos he utilizado un multiplexor analógico, para el que he creado una función que mide la entrada de información de cada una de sus entradas. La función devuelve un valor entero, que es la lectura de la entrada solicitada, teniendo la siguiente nomenclatura:

ratu77

int readAnalogMultiplexor(int *multiplexorControPINTable,int input).

El primer argumento nos informa de los tres pines en los que estamos controlando al multiplexor , siendo una matriz de integers de 3 números.

El segundo argumento argumento es la entrada analógica del multiplexor al que solicitamos la información.

Calibración del sensor

Para calibrar el sensor he realizado un proceso en el que se realizan 50 lecturas de cada sensor dado de alta en los pines del multiplexor. En el caso que he implementado se podrían calibrar 2 sensores a la vez, los cuales están conectados en los pines 4 y 6 del multiplexor.

ratu77

Al final del loop, que se repite cada 5 minutos, se visualiza el valor más alto, el valor más bajo, la media de los valores y la covarianza de las lecturas, de cada uno de los sensores.

El código sería el siguiente


 #include <Arduino.h>

#define numTests 50

#define moistureNumSensors 2

mix parlay

//PINS for analog reads by multiplexor, versión 1.0

int multiplexorControPIN[3]={18,17,16};//to control analog input to read

int multiplexorAnalogReadPIN=34;//analog input read pin for multiplexor

int moistureLectureMultplexorPINS[moistureNumSensors]={4,6};//multplexor inputs to read

int moistureValues[numTests][moistureNumSensors];

int minLectures[moistureNumSensors];

udin88

int maxLectures[moistureNumSensors];

bool _DEBUG_=false;//bool data to show Serial debuging

void readMoisturePlants(int moistureLandRegisters[moistureNumSensors]);

int readAnalogMultiplexor(int *multiplexorControPINTable,int input);

void setup() {

live casino

  Serial.begin(115200);

  //configuracion del multiplexor analogico inicilializado a  alto

  for(int i=0;i<3;i++){

    pinMode(multiplexorControPIN[i],OUTPUT);

  }

happyinthenow

  for(int i=0;i<3;i++){

    digitalWrite(multiplexorControPIN[i],HIGH);

    delay(50);

  }

  //inicialización de las variables de medición

sga99.com

  for(int i=0;i<moistureNumSensors;i++){

    minLectures[i]=99999;

    maxLectures[i]=0;

  }

  Serial.print("Configuración realizada. Programa inicializado.\n");

depoqq

}

void loop() {

  int totalForAverage[moistureNumSensors];

  //inicialización de las variables de medición

  for(int i=0;i<moistureNumSensors;i++)

tebakskorku

    totalForAverage[i]=0;

  for(int i=0;i<moistureNumSensors;i++){

    minLectures[i]=99999;

    maxLectures[i]=0;

  }

sbobet

  Serial.println("Realizando lecturas");

  for(int i=0;i<numTests;i++){

    if(_DEBUG_) Serial.print("=============================================Realizando lectura "+(String)(i+1)+"=============================================\n");

    readMoisturePlants(moistureValues[i]);

    if(_DEBUG_) Serial.print("Valores totales = [ ");

togel sgp

    for(int j=0;j<moistureNumSensors;j++){

      if(moistureValues[i][j]>maxLectures[j])

        maxLectures[j]=moistureValues[i][j];

      if(moistureValues[i][j]<minLectures[j])

        minLectures[j]=moistureValues[i][j];

top up uc free fire

      totalForAverage[j]=totalForAverage[j]+moistureValues[i][j];

      if(_DEBUG_) Serial.print((String) totalForAverage[j]);

      if(_DEBUG_) if(j<moistureNumSensors) Serial.print(" ");

    }

    if(_DEBUG_) Serial.print("]\n");

pokerq

    Serial.print(".");

    delay(500);

  }

  Serial.print("\n=============================================Resultados=============================================\n");

  Serial.print("Valores máximos: [");

  for(int i=0;i<moistureNumSensors;i++){

ratu77

    Serial.print(maxLectures[i]);

    if(i<moistureNumSensors-1) Serial.print(" ");

  }

  Serial.println("]");

  Serial.print("Valores mínimos: [");

ratu77 daftar

  for(int i=0;i<moistureNumSensors;i++){

    Serial.print(minLectures[i]);

    if(i<moistureNumSensors-1) Serial.print(" ");

  }

  Serial.println("]");

sofarawayguys.com

  Serial.print("Valor medio = [");

  int media[moistureNumSensors];

  for(int i=0;i<moistureNumSensors;i++){    

    media[i]=totalForAverage[i]/numTests;

    Serial.print(media[i]);

agen77 daftar

    if(i<moistureNumSensors-1) Serial.print(" ");

  }

  Serial.println("]");

  //Cálculo de la varianza

  int sumaDiferenciaMediaCuadrado[moistureNumSensors];

link ratu77

  for(int i=0;i<moistureNumSensors;i++)

    sumaDiferenciaMediaCuadrado[i]=0;

  for(int i=0;i<moistureNumSensors;i++){    

    for(int j=0;j<numTests;j++){      

       sumaDiferenciaMediaCuadrado[i]=sumaDiferenciaMediaCuadrado[i]+(((moistureValues[j][i]-media[i])*(moistureValues[j][i]-media[i])));

sbobet88

    }

  }

  Serial.print("Varianza = [");

  for(int i=0;i<moistureNumSensors;i++){

    Serial.print((String) (sumaDiferenciaMediaCuadrado[i]/numTests));

ratu77

    if(i<moistureNumSensors-1) Serial.print(" ");    

  }

  Serial.print("]\n");

  Serial.print("=============================================Esperando =============================================\n");

  delay(300000);//paro 5 minutos hasta repetir la prueba

slot pg soft

}

void readMoisturePlants(int moistureLandRegisters[moistureNumSensors])

{

  //Lecturas de la humedad terrestre

  if(_DEBUG_) Serial.println("=============================================================");

link ratu77

  if(_DEBUG_) Serial.println("Leyendo lecturas de humedad terrestre (son "+ (String) moistureNumSensors +")");

  for(int i=0;i<moistureNumSensors;i++){

    moistureLandRegisters[i]=readAnalogMultiplexor(multiplexorControPIN,moistureLectureMultplexorPINS[i]);

    if(_DEBUG_) Serial.println("Lectura en "+ (String) i+ " situada en la entrada del multiplexor "+ (String) moistureLectureMultplexorPINS[i] +" es "+ (String) moistureLandRegisters[i]);

    delay(5);

    if(_DEBUG_) Serial.println("=============================================================");

mobileclothingstores.com

   }

}

int readAnalogMultiplexor(int *multiplexorControPINTable,int input)

{

  //selecciono la entrada con el bit menos significativo tutorial en:

judislots

  //https://www.youtube.com/watch?v=OsY3hs06h2M

  if(input<0||input>7){

    Serial.println("Input selected out of range");

    return -1;

  }

9koi login

  //Serial.println("Asking input"+ (String) input+" value");

  digitalWrite(multiplexorControPINTable[0], HIGH && (input & B00000001));  

  digitalWrite(multiplexorControPINTable[1], HIGH && (input & B00000010));

  digitalWrite(multiplexorControPINTable[2], HIGH && (input & B00000100));

  delay(25);//cambiado de 25 a 50 para que tenga más tiempo de actuar

olx188 daftar

  return analogRead(multiplexorAnalogReadPIN);

}