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

Converting Analog Reading of Soil moisture to Percentage

我正在做一个项目,我的 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),但我似乎无法正确设置水位。

例如 模拟输出电平为 300(土壤淹没在水中); 显示:100%

我认为我的百分比公式不对,我只是基于另一个 SO 线程。

提前致谢。

假设您的传感器值 在 300 和 1000 之间,则百分比公式为:

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

如果不是,那么在计算百分比之前,您应该使用以下代码 map them 到上述范围(假定读取的传感器值从 0 - 1023):

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