Go Down

Topic: Duda con proyecto de llenado y vaciado de tanque de agua con sensor ultrasónico (Read 299 times) previous topic - next topic

Christianjmzc

Hola a todos,

este es mi primer post en el foro, y por favor no sean duros ya que apenas voy metiéndome al mundo de Arduino.

Tengo un problema con mi proyecto, el cual consiste en un sistema de purificación de agua donde tenemos dos tanques, uno donde se acumula el agua contaminada y el segundo donde se almacena el agua limpia.

Apenas voy comenzando con la programación y ya me ha surgido un problema, tengo un Ultrasónico HC-SR04 sensando mi primer tanque, lo he programado para que, cuando el nivel del agua del tanque disminuya al 30% se abra la válvula principal, y llene el tanque de nuevo, aun que (por este momento) mi válvula principal es un led   :smiley-sweat:. El problema es que cuando tiene de 0 a 30% se prende el LED (válvula), pero al pasar el 30% se vuelve a desactivar. Y lo que yo quiero es que se active hasta que llegue al 100% de nuevo, y al vaciarse y llegar al 30% se vuelva a activar hasta de nuevo llenarse.

Estoy utilizando un IF para hacer esto, pero quizá ustedes saben una forma de lograr que esto suceda.

Pego una parte del código:

Quote

int const percent_pin = 8;

/*Crear el objeto de la clase NewPing*/
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
 
  pinMode(8,OUTPUT);
  Serial.begin(9600);
  
  
}

void loop() {
  // Esperar 1 segundo entre mediciones
  delay(1000);
  // Obtener medicion de tiempo de viaje del sonido y guardar en variable uS
  int uS = sonar.ping_median();
  //Declarar variable dis
  int dis = uS / US_ROUNDTRIP_CM;
  //declarar variable h
  int h = 28 - dis;
  //declarar variable vol
  float vol = h * 1.63461538;
  //declarar variable percent
  int percent = (vol * 100) / (42.5);
  // Imprimir porcentaje de llenado de tanque
  Serial.print("Tanque al ");
  Serial.print(percent);
  Serial.print(" % ");
  // Imprimir el volumen medido a la consola serial
  Serial.print("Volumen: ");
  // Calcular el volumen con base en una variable
  Serial.print(vol);
  Serial.println(" Litros");
  
  if (percent <= 30)
  {
    digitalWrite(percent_pin,LOW);
  }
  else if (percent < 0)
  {
    digitalWrite(percent_pin,HIGH);
  }
  else
  {
    digitalWrite(percent_pin,HIGH);
  }
}


Marcial

prueba esto:

  if (percent <= 30)
  {
    digitalWrite(percent_pin,LOW);
  }
  else if (percent >= 99)
  {
    digitalWrite(percent_pin,HIGH);
  }

Go Up