problema con código de Higrometro

hola a todos instale este sensor http://articulo.mercadolibre.com.mx/MLM-449256538-arduino-medidor-de-humedad-higrometro-para-tierrajardin-_JM con el siguiente código de programación:

void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A1);
Serial.println(sensorValue);
int humedad_actual=map(analogRead(A1),0,1023,1023,0);
float porcentaje= humedad_actual/10.23;
Serial.print("Humedad:");
Serial.println(humedad_actual);
Serial.print(" Porcentaje: ");
Serial.println(porcentaje);
delay(1000);
delay(1000);
}

...realmente soy nuevo en esto por lo cual no entiendo muy bien por que al sumergir el sensor en un vaso de agua no me marca 100% de humedad (se mantiene en promedio de 60%). eh leído acerca de calibrar el sensor pero no se que tan cierto sea, espero puedan ayudarme

No conozco el sensor por eso no se muí bien que decir. Pero no es nada muí difícil (calibrar el sensor).

Otras cosas:

  • Eso es un sensor de humedad de tierra;
  • La humedad del aire se mide en porcentaje, pero la de la tierra no;
  • En realidad, el porcentaje no va mas allá de 0,6% para ser el 60% el cálculo:
    float porcentaje= humedad_actual/10.23;

debería ser:

    float porcentaje= humedad_actual/1023.0;
  • Hay un sub-forum solo en Español.

Otro detalle que has dejado pasar es que el sensor entrega una salida de 0 a 4.2Volts de manera que no puedes usar todo el rango del ADC. 0-1023 que corresponde a 0-5V.
En tu caso el 60% será 4.2V asi que ahi tienes un par de consideraciones.
X = (1023 x 4.2)/ 5 = 859.32 o redondeemos a 859.
Como lo inviertes supongo que 0 volt es 60%, si esta mal corrige esa parte.

Entonces
int humedad_actual=map(analogRead(A1),0,1023,859,0);
float porcentaje= (humedad_actual*60.0)/859.0;

Yo creo que, si haces un map, ya puedes obtener el dato de porcentaje directamente con el map. Encuentro innecesaria la división, y todavía más el float. ¿Decimales en un porcentaje de humedad? pero si ese sensor dudo que tenga tal precisión.

Vamos por partes. Surbyte, si el valor máximo que vamos a poder leer del sensor son 859 unidades de las 1023 posibles de la entrada analógica, no tiene sentido poner el 0,1023 al principio del map. Yo propongo un map así:

int humedad_actual=map(analogRead(A1),0,859,100,0);

Esto, siempre suponiendo que cuando la humedad es el 100%, el valor que entrega el sensor es 0, y cuando la humedad es 0%, el valor obtenido en la entrada analógica es 859. De ser al revés, habrá que invertir el map y hacerlo así:

int humedad_actual=map(analogRead(A1),0,859,0,100);

De esta forma, me estoy ahorrando el float, al que no le veo mucho sentido.

De todas formas, con leer el "raw" de la entrada analógica sumergiendo el sensor en agua, podemos obtener el valor máximo a la entrada analógica, y aplicarlo en el map.

const int sensorPin = A0;
void setup()
{
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(sensorPin);
//Serial.println(sensorValue);
int humedad_actual=map(analogRead(A0),335,1023,100,0);
Serial.print("Humedad de la tierra:");
Serial.print(humedad_actual);
Serial.println("%");
}

Y respondes un hilo que no tiene cambios desde 2014?
Hilo cerrado.