Go Down

Topic: controlar lavadora con digital dañado (Read 237 times) previous topic - next topic

alexrob84

saludos, primero que todo gracias por toda la ayuda que me puedan prestar, estoy haciendo la programacion en un mega, para controlar una lavadora que se le daño la tarjeta, ya pude hacer las instrucciones completas pero tengo problemas para lograr el llenado de agua, y queria ver si alguien podia asesorarme o ayudarme con la instrucción,
se ve muy sencillo pero yo no he podido, y gracias nuevamente...


el deber ser seria
si sensor de agua es low  seguir instrucciones A y cuando ya el sensor este HIGH continuar con las instrucciones B
luego si sensor de agua es low seguir instrucciones A ya cuando el sensor este HIGH continuar con las instrucciones C

todo lo que son las instrucciones yo las se desarrollar, lo que no se y no he podido es trabajar con IF para que haga una cosa o la otra

Pibs

Hola,

No se si entiendo bien tu problema. Si no me equivoco, lo que quieres hacer es una secuencia de 4 estados: A -> B -> A -> C y cambiar de un estado al siguiente según el nivel de agua.

Creo que podrías crear una variable de estado, que empiece con valor 1, y cuando el nivel es High pasa a 2, luego cuando el agua esté LOW (y estés en el estado 2) pasa al 3, y luego en el siguiente HIGH (y estés en el estado 3) pasa al estado 4.

Espero haber ayudado.

Saludos

alexrob84

gracias por contestar, copiare, aqui mi programa a ver si pueden darme una mano, mi problema continua en que si el presostato esta high me prende la bomba y ya no se apaga mas y no lava, y si esta low desde un principio si continua con el lavado ya que no tiene que llenar...

Code: [Select]
const int botonA = 9;
const int botonB = 10;
const int botonC = 11;
const int presostato = 2;
const int bombaagua =  4;
#define motorderecho 5
#define motorizquierdo 6
#define bombaaguacroche 7
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;

void setup() {
  pinMode(bombaagua, OUTPUT);
  pinMode(botonA, INPUT_PULLUP);
  pinMode(botonB, INPUT_PULLUP);
  pinMode(botonC, INPUT_PULLUP);
  pinMode(presostato, INPUT_PULLUP);
  pinMode(motorderecho, OUTPUT);
  pinMode(motorizquierdo, OUTPUT);
  pinMode (bombaaguacroche, OUTPUT);
  Serial.begin(9600);
  Serial.println("INICIO CORRECTO");
}

void loop() {
  buttonState1 = digitalRead(botonA);
  if (buttonState1 == HIGH) {
    Serial.println("BOTON A PRESIONADO");
    llenado(); lavado1(); llenado(); lavado2();
  }
  buttonState2 = digitalRead(botonB);
  if (buttonState2 == HIGH) {
    Serial.println("BOTON B PRESIONADO");
    llenado(); lavado2();
  }
  buttonState3 = digitalRead(botonC);
  if (buttonState3 == HIGH) {   
    Serial.println("BOTON C PRESIONADO");
    soloexprimir();
  }
}

void llenado() {
  buttonState4 = digitalRead(presostato);
  while (buttonState4 == HIGH) {
    Serial.println("PRENDER BOMBA LLENADO");
    digitalWrite(bombaagua, HIGH);
    delay(1000);
  }
}

void lavado1() {
  Serial.println("LAVADO 1");
  digitalWrite(bombaagua, LOW);
  for (int x = 0; x < 70; x++) {
    digitalWrite(motorderecho, HIGH); delay(3200); digitalWrite(motorderecho, LOW); delay(2000); digitalWrite(motorizquierdo, HIGH); delay(3200); digitalWrite(motorizquierdo, LOW); delay(2000);
  }
  digitalWrite(bombaaguacroche, HIGH); delay(60000); delay(60000); delay(60000);
  for (int x = 0; x < 3; x++) {
    digitalWrite(motorderecho, HIGH); delay(10000); digitalWrite(motorderecho, LOW); digitalWrite(bombaagua, HIGH); delay(5000); digitalWrite(bombaagua, LOW); delay(5000);
  }
  for (int x = 0; x < 3; x++) {
    digitalWrite(motorderecho, HIGH); delay(30000); digitalWrite(motorderecho, LOW); digitalWrite(bombaagua, HIGH); delay(5000); digitalWrite(bombaagua, LOW); delay(15000);
  }
  for (int x = 0; x < 2; x++) {
    digitalWrite(motorderecho, HIGH); delay(45000);
  }
  digitalWrite(motorderecho, LOW); digitalWrite(bombaagua, HIGH); delay(5000); digitalWrite(bombaagua, LOW); delay(20000); digitalWrite(bombaaguacroche, LOW);
}

void lavado2() {
  Serial.println("LAVADO 2");
  digitalWrite(bombaagua, LOW);
  for (int x = 0; x < 29; x++) {
    digitalWrite(motorderecho, HIGH); delay(3200); digitalWrite(motorderecho, LOW); delay(2000); digitalWrite(motorizquierdo, HIGH); delay(3200); digitalWrite(motorizquierdo, LOW); delay(2000);
  }
  digitalWrite(bombaaguacroche, HIGH); delay(60000); delay(60000); delay(60000);
  for (int x = 0; x < 3; x++) {
    digitalWrite(motorderecho, HIGH); delay(10000); digitalWrite(motorderecho, LOW); delay(5000); delay(5000);
  }
  for (int x = 0; x < 3; x++) {
    digitalWrite(motorderecho, HIGH); delay(30000); digitalWrite(motorderecho, LOW); delay(25000);
  }
  for (int x = 0; x < 4; x++) {
    digitalWrite(motorderecho, HIGH); delay(60000);
  }
  digitalWrite(motorderecho, LOW); delay(25000); digitalWrite(bombaaguacroche, LOW);
}

void soloexprimir() {
  Serial.println("SOLO EXPRIMIR");
  digitalWrite(bombaagua, LOW); digitalWrite(bombaaguacroche, HIGH); delay(60000); delay(60000); delay(60000);
  for (int x = 0; x < 3; x++) {
    digitalWrite(motorderecho, HIGH); delay(10000); digitalWrite(motorderecho, LOW); delay(5000); delay(5000);
  }
  for (int x = 0; x < 3; x++) {
    digitalWrite(motorderecho, HIGH); delay(30000); digitalWrite(motorderecho, LOW); delay(25000);
  }
  for (int x = 0; x < 4; x++) {
    digitalWrite(motorderecho, HIGH); delay(60000);
  }
  digitalWrite(motorderecho, LOW); delay(25000); digitalWrite(bombaaguacroche, LOW);
}



ojala de verdad puedan ayudarme, con los cortes de luz que vivimos en venezuela se quemo la lavadora, y en la casa ya estamos todos sin ropa que ponernos... y aproveche que tenia este arduino sin uso para ponerla a funcionar. gracias.

vffgaston

#3
May 17, 2018, 12:05 pm Last Edit: May 17, 2018, 12:07 pm by vffgaston
ojala de verdad puedan ayudarme, con los cortes de luz que vivimos en venezuela se quemo la lavadora, y en la casa ya estamos todos sin ropa que ponernos... y aproveche que tenia este arduino sin uso para ponerla a funcionar. gracias.
Hola,

No vendría mal que nos expliques la correspondencia entre lo que tú llamas "A", "B" y "C" y los trozos de código que adjuntas (salvo que sea una pregunta general - "A", "B" y "C" -).

En todo caso: el uso de delays no creo que te permita hacer lo que quieres de una forma cabal. Es mucho mejor que para las temporizaciones uses "millis()". Si no estás familiarizado con ello mira este tutorial:

https://forum.arduino.cc/index.php?topic=223286.0

Finalmente: este tipo de problemas se resuelven mucho mejor empleando una técnica que se llama "máquina de estados".

Saludos

alexrob84

#4
May 17, 2018, 12:15 pm Last Edit: May 17, 2018, 12:21 pm by alexrob84
gracias por responder, botonA botonB y botonC se refiere a tres programaciones diferente, uno hace un ciclo completo el otro solo enjuagado y C solo exprimir, los botones es un control RF de 4 botones que envia un pulso.

el uso de delay lo utilice porque al momento del ciclo no importa si esta ocupado el arduino ya que no esta
esperando ninguna otra instrucción. y son muchas lineas las que me ahorro con el delay

solo espera instrucciones para saber cual programa escojer al inicio y luego la del llenado que es la que no
he podido programar :(

aqui es exactamente donde esta mi problema

Code: [Select]
buttonState1 = digitalRead(botonA);
  if (buttonState1 == HIGH) {
    Serial.println("BOTON A PRESIONADO");
    llenado(); lavado1(); llenado(); lavado2();


como se ve el orden al presionar el boton A es

llenado - lavado1 - llenado - lavado 2

pero nose hacer para que se lea la secuencia de llenado hasta que el estado cambie de HIGH a LOW y pase a la siguiente secuencia en este caso lavado 1

Code: [Select]
void llenado() {
  buttonState4 = digitalRead(presostato);
  while (buttonState4 == HIGH) {
    Serial.println("PRENDER BOMBA LLENADO");
    digitalWrite(bombaagua, HIGH);
    delay(1000);
  }
}



tauro0221

#5
May 17, 2018, 05:38 pm Last Edit: May 18, 2018, 02:32 am by tauro0221 Reason: error en el sketch leyendo el nivel de agua
Hi,
Yo lo haria sin usar el delay. Aqui incluyo tu sketch con una modificacion. Estoy asumindo de que tienes un contacto que te indica cuando esta llena.


Code: [Select]
//*************************************************
void llenado() {
  Serial.println("PRENDER BOMBA LLENADO");
  digitalWrite(bombaagua, HIGH);
  while (digitalRead(presostato) == HIGH) {
    //no hago nada espero que se llene de agua
  }
  digitalWrite(bombaagua, LOW);
  Serial.println("Apagar BOMBA LLENADO");
}
//**************************************************

alexrob84

gracias, no habia podido conectarme, eres un genio con eso se resolvio mi problema, y ya funciona la lavadora perfectamente, gracias nuevamente...

tauro0221

Hi,
Me alegro que te haya servido el sketch.  Creo que te sirve para las otras estaciones. Suerte y espero que un dia bien cercano vuelva la democracia a Venezuela.

Go Up