将土壤湿度的模拟读数转换为百分比
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);
我正在做一个项目,我的 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);