将土壤水分的模拟读数转换为百分比

时间:2016-10-01 20:49:11

标签: c++ math arduino arduino-uno

我正在开展一个项目,其中我的Arduino Uno读取土壤水分,然后将数据发送到我的Raspberry Pi 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线程。

提前谢谢。

1 个答案:

答案 0 :(得分:3)

假设您的传感器值 介于300和1000之间,那么百分比公式为:

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

如果它们不是那么在计算百分比之前你应该map them到上述范围(假设读传感器值从0到1023)使用代码:

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