Chcę zrobić prosty pomiar wilgotności gleby za pomocą higrometru FC-28 i Arduino UNO.
Podłączyłem VCC - 5V, GND - GND, A0 - A0.
Program wygląda tak:
Wszystko działa, wartość 812 jest dla gleby suchej, 224 dla gleby mokrej, zalanej wodą.
Po włożeniu czujnika w ziemię zakres w procentach mieści się pomiędzy 0-100% natomiast np. po wyjęciu czujnika z ziemi pokazuje się w monitorze szeregowym wartość na poziomie -35%, oczywiście po włożeniu czujnika do wody wartość przekracza 100%. Chciałbym aby wartości mieściły się w zakresie 0-100 w każdych okolicznościach ale chyba zrobienie tego za pomocą zmiany wartości output_value będzie złym pomysłem, bo wtedy wilgotna gleba (obecnie około 60%) będzie wyświetlana jako około 30%, chyba, że źle rozumiem zasadę działania czujnika i muszę podać cały zakres wartości, który mierzy się gdy czujnik jest wyjęty z gleby oraz włożony do wody, wtedy będzie pełen zakres.
Jeżeli powyższe rozumowanie jest błędne i należy zrobić tak jak jest obecnie to trzeba byłoby zrobić aby wartości nie przekraczały 0-100%. Próbowałem zrobić to korzystając z if:
Niestety to nie działa, zmiana znaków >/< nic nie daje, po dodaniu tych linijek przed:
Powoduje, że na monitorze wyświetla się ciągle 224% i w żadnej sytuacji się to nie zmienia.
Podłączyłem VCC - 5V, GND - GND, A0 - A0.
Program wygląda tak:
Kod:
int sensor_pin = A0;
int output_value ;
void setup() {
Serial.begin(9600);
Serial.println("Odczyt z czujnika ...");
delay(2000);
}
void loop() {
output_value= analogRead(sensor_pin);
output_value = map(output_value,812,224,0,100);
Serial.print("Wilgotność : ");
Serial.print(output_value);
Serial.println("%");
delay(1000);
}
Wszystko działa, wartość 812 jest dla gleby suchej, 224 dla gleby mokrej, zalanej wodą.
Po włożeniu czujnika w ziemię zakres w procentach mieści się pomiędzy 0-100% natomiast np. po wyjęciu czujnika z ziemi pokazuje się w monitorze szeregowym wartość na poziomie -35%, oczywiście po włożeniu czujnika do wody wartość przekracza 100%. Chciałbym aby wartości mieściły się w zakresie 0-100 w każdych okolicznościach ale chyba zrobienie tego za pomocą zmiany wartości output_value będzie złym pomysłem, bo wtedy wilgotna gleba (obecnie około 60%) będzie wyświetlana jako około 30%, chyba, że źle rozumiem zasadę działania czujnika i muszę podać cały zakres wartości, który mierzy się gdy czujnik jest wyjęty z gleby oraz włożony do wody, wtedy będzie pełen zakres.
Jeżeli powyższe rozumowanie jest błędne i należy zrobić tak jak jest obecnie to trzeba byłoby zrobić aby wartości nie przekraczały 0-100%. Próbowałem zrobić to korzystając z if:
Kod:
if (output_value > 812) { //Jeśli obliczona wartość jest większa od 812
output_value = 812; //to ustaw ją na 812 (0% wilgotności)
}
if (output_value < 224) { //Jeśli obliczona odległość jest mniejsza od 224
output_value = 224; //to ustaw ją na 224 (100% wilgotności)
}
Kod:
Serial.print("Wilgotność : ");
Serial.print(output_value);
Serial.println("%");
delay(1000);
}