litros = (litros = ( distancia * 210.0)); invertir resultado Solucionado.

[#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include<Wire.h>
#include <Relay.h>

LiquidCrystal_I2C lcd(0x27,16,2);

int TRIG  = 3;
int ECO   = 2;
int releA = 4;
int releB = 5;
int duracion;
int distancia;
float cm;
float litros;
void setup() {

  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0,0);
  delay(5000);
  lcd.backlight();
  lcd.print("cisterna");
  lcd.setCursor(0,1);
  lcd.print("total litros");


  
  Serial.begin(9600);
  pinMode (TRIG,OUTPUT);
  pinMode(ECO,INPUT);
  pinMode (releA,OUTPUT);
  pinMode (releB,OUTPUT);
}


void loop() {
  int distancia = litros;
  digitalWrite(TRIG, HIGH);
  delay(1); 
  digitalWrite(TRIG, LOW);
  duracion = pulseIn(ECO,HIGH);
  distancia = duracion /58.2;
  litros = (litros = (  distancia * 210.0));
   
 Serial.print("centimetros    "); 
 Serial.println(distancia);
 Serial.print("litros  "); 
 Serial.println(litros);

    lcd.clear();
    lcd.setCursor(3,0);       
    lcd.print("litros");
    lcd.setCursor(6,1);
    lcd.print(litros);
    lcd.setCursor(12,2);
     
  if (distancia < 80) {
   digitalWrite (4, LOW);
    }
    else {
     digitalWrite (4, HIGH);
    }
      if (distancia > 225) {
     digitalWrite (5, LOW);
    }
     else {     
     digitalWrite (5, HIGH);
  }
   delay(5000);
}]

buenos días, el siguiente código sensa la cantidad de litros consumidos, y quisiera que sense los litros que hay en existencia.
Cada centímetro equivale a 210 litros, el deposito es de 2.35 metros de altura por 2.60 de diámetro, haciendo un total a su máxima capacidad de 49907 litros, en ese momento arduino dice que hay cero litros, y al estar vacía me dice que hay 49907 litros consumidos, alguien sabrá como invertir el resultado que da ahora arduino. Ahora estoy intentando que arduino lea el sensor 10 veces que sume las lecturas y que las divida entre 10 para que sea mas estable el resultado, lo estoy intentando con un for y no lo consigo, ahora intentare con un array, cualquier orientación seria de gran ayuda.

Saludos

Así, a bote pronto.... prueba esto

distancia = 235-(duracion /58.2);

Supongo que en distancia tienes el resultado de lo que queda por llenar

Saludos

Si restas la capacidad máxima a lo consumido tendrás el resultado.

feliperuiz:
Cada centímetro equivale a 210 litros, el deposito es de 2.35 metros de altura por 2.60 de diámetro, haciendo un total a su máxima capacidad de 49907 litros

Hola, supongo que quieres decir 2.6 de radio, asi si tienes que 1cm es aprox 210 litros.Saludos.

// en esta formula debieras poner 212.37 mas preciso que 210
// de lo contrario estaras acumulando un error de + de 2 litros por centimetro

litros = (litros = (  distancia * 210.0));

//por otro lado ¿funciona bien esta formula? 
// parece redundante

krnlpanic:
Si restas la capacidad máxima a lo consumido tendrás el resultado.

me parece buena tu idea pero como lo hago para que reste lo intente de varias formas solo esta no marca error y a un así sigue inversa la lectura
saludos

#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include<Wire.h>
#include <Relay.h>

LiquidCrystal_I2C lcd(0x27,16,2);

int TRIG  = 3;
int ECO   = 2;
int releA = 4;
int releB = 5;
int duracion;
int distancia;
float cm;
float litros;
void setup() {

  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0,0);
  delay(5000);
  lcd.backlight();
  lcd.print("cisterna");
  delay(2000);
  lcd.setCursor(0,1);
  lcd.print("total litros");


  
  Serial.begin(9600);
  pinMode (TRIG,OUTPUT);
  pinMode(ECO,INPUT);
  pinMode (releA,OUTPUT);
  pinMode (releB,OUTPUT);
}


void loop() {
  int distancia = litros;
  digitalWrite(TRIG, HIGH);
  delay(1); 
  digitalWrite(TRIG, LOW);
  duracion = pulseIn(ECO,HIGH);
  distancia = duracion /58.2;
  litros = (litros = (  distancia * 210.0));
  distancia = 235-(duracion /58.2); 
  
 Serial.print("centimetros    "); 
 Serial.println(distancia);
 Serial.print("litros  "); 
 Serial.println(litros);

    lcd.clear();
    lcd.setCursor(3,0);       
    lcd.print("litros");
    lcd.setCursor(6,1);
    lcd.print(litros);
    lcd.setCursor(12,2);
     
  if (distancia < 80) {
   digitalWrite (4, LOW);
    }
    else {
     digitalWrite (4, HIGH);
    }
      if (distancia > 225) {
     digitalWrite (5, LOW);
    }
     else {     
     digitalWrite (5, HIGH);
  }
   delay(5000);
}

krnlpanic:
Si restas la capacidad máxima a lo consumido tendrás el resultado.

como lo resto intente esto distancia = 235-(duracion /58.2); pero sigue igual, ya corregir la formula de 210.0 a 212.37
saludos

Si funciona agregue este renglon distancia = 235-(duracion / 58.2); intentando restar a un sigue igual solo que mas estable

No entiendo tus cuentas o cálculos.

Dices que

1 cm equivale a 210 litros

luego afirmas que la altura del tanque cilíndrico es de 2.35 m y
su diámetro de 2.6m o sea 1.3 m de radio

Bien. Si
1 cm _____ 210 litros
235 cm ______ X = 235 cm * 210 / 1 cm = 49350 litros y no 49907 que no se de donde sale.

El resto es una mera diferencia. Mide invertido y ya.

Tu código dice:

distancia = 235 - (duracion /58.2);  // La distancia máxima es 235 pero si la restas 
                                                               // cuando este vacío dirá 0
 litros =  distancia * 210.0;

Recuerda que aunque sea una línea debes usar etiquetas.

Las variables int tienen un rango de -32,767 a 32,767 por lo que si tienes 49000 litros tendrás que usar variables tipo long.

Buena observación!

Sencillamente no lo había observado y cuando vi 210.0 pensé que usaba float. Pero veo que no es el caso.
Para que poner 210.0 si no se usa float?

surbyte:
No entiendo tus cuentas o cálculos.

Dices que

1 cm equivale a 210 litros

luego afirmas que la altura del tanque cilíndrico es de 2.35 m y
su diámetro de 2.6m o sea 1.3 m de radio

Bien. Si
1 cm _____ 210 litros
235 cm ______ X = 235 cm * 210 / 1 cm = 49350 litros y no 49907 que no se de donde sale.

El resto es una mera diferencia. Mide invertido y ya.

Tu código dice:

distancia = 235 - (duracion /58.2);  // La distancia máxima es 235 pero si la restas 

// cuando este vacío dirá 0
litros =  distancia * 210.0;




**Recuerda que aunque sea una línea debes usar etiquetas.**

ahora son los cm. los que estan inversos, eso no afecta las operadoras solo se ven la LCD que solo aparecen los litros que hay en existencia, ahora tengo que buscar la forma de separar el sensor lo mas posible del agua, sin que afecte los datos, y a parte estudiar las funciones float, long, for y array para mejorar la calidad de mis códigos. Bueno editare el código para darlo por solucionado.
me agradecimiento para surbyte, bosoft, Krnlpanic, hipernovato por su gran ayuda
saludos

Lee el privado que te he enviado.
Edita los post en los que sigues repitiendo respuestas.