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
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("%");
}