2016-10-01 5 views
0

Je travaille sur un projet où mon Arduino Uno lit l'humidité du sol, puis envoie les données à mon Raspberry Pi 3.Conversion lecture analogique de l'humidité du sol au pourcentage

J'utilise un sol HL-69 détecteur d'humidité, qui dégage une sortie analogique. Ce qui me pose problème, c'est que le capteur donne 1023 lorsqu'il n'a pas de contact, 300 lorsqu'il est submergé dans l'eau.

Je veux convertir la sortie analogique en pourcentage de niveau d'eau, ce qui, honnêtement, me pose problème.

Ceci est le code que j'utilise.

int soilPin = A0; 
int tempPin = A1; 
int min = 300; //drowned in water 
int max = 1000; //dry soil 
void setup(){ 
    Serial.flush(); 
    pinMode(soilPin,INPUT); 
    pinMode(tempPin,INPUT); 
    Serial.begin(9600); 
} 
void loop(){ 
    int sensorValue = analogRead(rainPin); 
    int tempData = analogRead(tempPin); 
    float percentage = (sensorValue - max)/(min - max); 
    double temperature = (double) tempData * (5/10.24); 
    Serial.print(","); 
    Serial.print(temperature); 
    Serial.print(","); 
    Serial.println(percentage); 
    delay(1000); 
} 

La sortie température est très bien (22,53 par exemple), mais je ne peux pas sembler obtenir le droit de niveau d'eau.

E.g Le niveau de sortie analogique est de 300 (le sol est noyé dans l'eau); Affichage: 100%

Je pense que ma formule de pourcentage est éteint, je ne repose hors tension d'un autre fil SO.

Merci d'avance.

Répondre

3

Avec une hypothèse de votre capteur valeurs sont entre 300 et 1000, la formule de pourcentage est égal à

float percentage = (float)((sensorValue - min) * 100)/(max - min) 

Si elles ne sont pas alors avant de calculer le pourcentage que vous devriez map them à la gamme ci-dessus (étant donné que les valeurs des capteurs de lecture vont 0-1023) en utilisant le code:

sensorValue = map(sensorValue, 0, 1023, min, max); 
+0

Merci beaucoup pour votre réponse rapide. J'ai essayé la première solution et il sort un nombre négatif. J'ai réussi à résoudre le problème en utilisant la fonction map(). 'float pourcentage = carte (sensorValue, max, min, 0, 100);' Merci pour votre réponse, de toute façon. –