Boa noite. Enfrentei o mesmo problema ao utilizar um arduino para controlar o nivel da caixa de agua e cisterna na minha casa (controla uma bomba para enviar agua da cisterna para a caixa). Utilizo dois sensores de pressão MPX5050DP.
Alem de conhecer a curva de pressão do sensor, possível de ver no Data sheet, foi necessario também programar uma media de 1000 medidas em cada loop, para conseguir exatidao e estabilidade em cada medida.
Com este codigo abaixo dentro do void loop, tenho utilizado este sistema a alguns anos em casa sem problemas.
"long valmedcisterna1 = 0;
long valmedcaixa1 = 0;
long valfinalcisterna1 =0;
long valfinalcaixa1 =0;
double valcisterna1 =(double) analogRead(A7);
double valcaixa1 =(double) analogRead(A8);
Serial.print("valor original da cisterna ");
Serial.println(valcisterna1);
Serial.print("valor original da caixa ");
Serial.println(valcaixa1);
for(int i=1000; i>0; i--){
// media de 1000 medidas para cada loop
valcisterna1 =(double) analogRead(A7);
valcaixa1 =(double) analogRead(A8);
valmedcisterna1 += valcisterna1;
valmedcaixa1 += valcaixa1;
delay(1);
}
valfinalcisterna1 = (valmedcisterna1 / 1000);
valfinalcaixa1 = (valmedcaixa1 / 1000);
double voltagecisterna = valfinalcisterna1 * (5.0 / 1023.0);
double voltagecaixa = valfinalcaixa1 * (5.0 / 1023.0);
kpacisterna = ((voltagecisterna/5.0)-0.04)/0.018; // curva de pressao do sensor fornecido no data sheet
kpacaixa = ((voltagecaixa/5.0)-0.04)/0.018;
Serial.print("valor medio original da cisterna ");
Serial.println(valfinalcisterna1);
Serial.print("valor medio original da caixa ");
Serial.println(valfinalcaixa1);
/ este programa da um resultado em porcentagem do nivel da caixa e da cisterna. Ao ligar o sistema a primeira vez, a calibracao do 100% é feita colocando a caixa e cisterna no nivel maximo de agua e entao verifico no Monitor Serial o valor medio original da cisterna e caixa. Esta numeracao deve ser inserida abaixo, substituindo o 480 e 400, neste caso, e carregando novamente o arduino /
kpacisterna = constrain(kpacisterna, 0, 480);
porcecisterna = map(kpacisterna, 0, 480, 0, 100); //
kpacaixa = constrain(kpacaixa, 0, 400);
porcaixa = map(kpacaixa, 0, 400 0, 100);
float caixa_volume;
caixa_volume = 3000 * porcaixa/100 ; // volume de 3000 litros da caixa de agua
float cist_volume;
cist_volume = 7000 * porcecisterna/100 ; // volume de 7000 litros da cisterna
// resultado no LCD mostrando porcentagem e volume em litros
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CAIXA ");
lcd.print(porcaixa);
lcd.print("% ");
lcd.print(caixa_volume);
lcd.setCursor(0, 1);
lcd.print("CTRNA ");
lcd.print(porcecisterna);
lcd.print("% ");
lcd.print(cist_volume);
delay(1000);"