2016-10-01 85 views
0

我工作的一個項目,其中我的Arduino的烏諾讀取土壤水分,然後將數據發送到我的樹莓派3轉換土壤水分的模擬閱讀中的百分比

我使用的HL-69土壤水分檢測器,它發出一個模擬輸出。 我遇到問題的原因是傳感器在沒有接觸時給出1023,當淹沒在水中時給出300。

我想將模擬輸出轉換爲水位百分比,這是我誠實地遇到的問題。

這是我正在使用的代碼。

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); 
} 

溫度輸出很好(如22.53),但我似乎無法得到正確的水位。

E.g 模擬輸出電平爲300(土壤淹沒在水中); 顯示:100%

我想我的百分比公式是關閉的,我只是基於它的另一個SO線程。

預先感謝您。

回答

3

隨着你的傳感器值和1000之間300然後百分比式是一種假設:

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

如果它們不然後之前計算百分比你應該map them在上述範圍內(考慮到讀取傳感器值從0 - 1023)使用代碼:

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

非常感謝您的快速回復。我已經嘗試了第一種解決方案,並輸出負數。 我設法通過使用map()函數來解決它。 'float percentage = map(sensorValue,max,min,0,100);' 謝謝您的回覆,無論哪種方式。 –