我正在开展一个项目,其中我的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线程。
提前谢谢。
答案 0 :(得分:3)
假设您的传感器值 介于300和1000之间,那么百分比公式为:
float percentage = (float)((sensorValue - min) * 100) / (max - min)
如果它们不是那么在计算百分比之前你应该map them到上述范围(假设读传感器值从0到1023)使用代码:
sensorValue = map(sensorValue, 0, 1023, min, max);