///Este proyecto es para lavadora con motor de 1 velocidad///
///que cambia solo de direccion para agitar///
///sin necesidad de trasmision para el lavado///
///con 2 switches; para agua fria y para agua caliente///
///con actuador para lavar y centrifugar///
///con bomba de drenar electrica///
///con switch para tina llena y para tina a la mitad///
///con presostato mecanico para tina llena///
///con temporizador para media tina///
///si no hay presosstato se podria aumentar el tiempo de media tina para lavar completo//
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int INICIAR = 13;
int CALIENTE = 12;
int FRIA = 11;
int LLENO = 10;
int ACTUADORLAVAR = 9;
int LAVANDO1 = 8;
int LAVANDO2 = 7;
int VALVULACALIENTE = 6;
int VALVULAFRIA = 5;
int ESPRIMIR = 4;//drenar y centrigugar
int ACTUADOR = 3;
int MEDIA = 2;
int pausa = 2000;
int pausaAgitar = 6000;//6 Segundos ajitando para cada lado
////////CAMBIAR LOS TIOMPOS AL GUSTO//////////
//Cada ciclo del for dura 15 segundos//
//Asi que 4 ciclos son 1 minuto//
//por tanto si ocupo que lave 1 minutos//
//debo poner el TiempoLavando = 4//
//si ocupo
int TiempoLavando = 4;//1 minuto lavando
int TiempoLavandoMedia = 2;//30 segundos lavando
int TiempoEsprimiendo = 500;//5 segundos esprimiendo
int TiempoEsprimiendoMedia = 500;//5 segundos esprimiendo
int Enjuagando = 2;//30 segundos enjuagando
int TiempoLlenandoMedia = 2;//30 segundos enjuagando
////LOS TIEMPOS SON MAS CORTOS////////
void setup() {
pinMode(INICIAR, INPUT);//se declara como entrada
pinMode(CALIENTE, INPUT);//se declara como entrada
pinMode(FRIA, INPUT);//se declara como entrada
pinMode(LLENO, INPUT);//se declara como entrada
pinMode(ACTUADORLAVAR, INPUT);//se declara como entrada
pinMode(MEDIA, INPUT);//se declara como salida
pinMode(LAVANDO1, OUTPUT);//se declara como salida
pinMode(LAVANDO2, OUTPUT);//se declara como salida
pinMode(VALVULACALIENTE, OUTPUT);//se declara como salida
pinMode(VALVULAFRIA, OUTPUT);//se declara como salida
pinMode(ESPRIMIR, OUTPUT);//se declara como salida
pinMode(ACTUADOR, OUTPUT);//se declara como salida
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("Bienvenido");
delay(pausa);
lcd.clear();
lcd.print("Elige Temperatura");
delay(pausa);
lcd.setCursor(0,1);
lcd.print("Presiona Iniciar");
delay(pausa);
}
void loop() {
//////////////////////////////////////
///////ARRANQUE DE LA LAVADORA///////
/////////EN POSISION NORMAL///////////
//////////////////////////////////////
if(digitalRead(CALIENTE) || (digitalRead(FRIA) == HIGH)){//si agua caliente o agua fria//
//han sido seleccionadas se pone disponible el boton de iniciar//
if(digitalRead(INICIAR) == HIGH){//Cuando el switch esta en posision normal
//======================================================
if(digitalRead(MEDIA) == LOW){
lcd.clear();
lcd.setCursor(2,0);
lcd.print("LAVANDO CON");
lcd.setCursor(3,1);
lcd.print("TINA LLENA");
delay(pausa);
//============================================================
if(digitalRead(CALIENTE) == HIGH){
digitalWrite(VALVULACALIENTE, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(4,1);
lcd.print("Caliente");
delay(pausa);
}
if(digitalRead(FRIA) == HIGH){
digitalWrite(VALVULAFRIA, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(6,1);
lcd.print("Fria");
delay(pausa);
if(digitalRead(CALIENTE) == digitalRead(FRIA)){
digitalWrite(VALVULACALIENTE, HIGH);//enciende las valvulas de llenado de agua
digitalWrite(VALVULAFRIA, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(6,1);
lcd.print("Tibia");
delay(pausa);
}
}
///////////////////////////////
///////PRIMER CICLO//////////
/////////////////////////////////////
while(digitalRead(LLENO)== LOW){//mientras el presostato no manda señal por estar la tina vacia
digitalRead(LLENO)== HIGH;// y hasta que el persostato mande la señal de tina llena
}
digitalWrite(VALVULACALIENTE, LOW);//las valvulas de agua se apagan
digitalWrite(VALVULAFRIA, LOW);//las valvulas de agua se apagan
lcd.clear();
lcd.setCursor(4,0);
lcd.print("La Tina");
lcd.setCursor(3,1);
lcd.print("Esta Llena");
delay(pausa);
digitalWrite(ACTUADOR, HIGH);//activa el actuador para que enganche la tina para lavar
while(digitalRead(ACTUADORLAVAR)== LOW){//mientras el actuador esta en posision abierta
digitalRead(ACTUADORLAVAR)== HIGH;//y hasta que el actuador se sierre y mande la señal de enganchado
}
digitalWrite(ACTUADOR, LOW);//se apaga la corriente que activa el actuador
delay(pausa);//da un tiempo de espera
for (int cuenta = 0; cuenta < TiempoLavando; cuenta ++) {
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Lavando");
delay(pausa);
digitalWrite(LAVANDO1, HIGH);
delay(pausaAgitar);
digitalWrite(LAVANDO1, LOW);
delay(pausa);
digitalWrite(LAVANDO2, HIGH);
delay(pausaAgitar);
digitalWrite(LAVANDO2, LOW);
delay(pausa);
}
digitalWrite(ACTUADOR, HIGH);//activa el actuador para que desenganche la tina
while(digitalRead(ACTUADORLAVAR)== HIGH){//mientras el actuador esta en posision cerrada
digitalRead(ACTUADORLAVAR)== LOW;//y hasta que el actuador se sierre y mande la señal de desenganchado
}
digitalWrite(ACTUADOR, LOW);//desactiva el actuador cuando ya sesengancho la tina
delay(pausa);//da un tiempo de espera
digitalWrite(ESPRIMIR, HIGH);//enciende el motor para esprimir
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Drenando y");
lcd.setCursor(2,1);
lcd.print("Centrifugando");
delay(pausa);
while(digitalRead(LLENO)== HIGH){
digitalRead(LLENO)== LOW;
}
delay(TiempoEsprimiendo);//espera que pase el tiempo de esprimir
digitalWrite(ESPRIMIR, LOW);//apaga el motor de esprimir
delay(pausa);//da un tiempo de espera
//////////////////////////////////////
///////ARRANQUE DE LA ENJUAGADA///////
//////////////////////////////////////
if (digitalRead(LLENO) == LOW) {//si la tina esta vacia
if(digitalRead(CALIENTE) == HIGH){
digitalWrite(VALVULACALIENTE, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(4,1);
lcd.print("Caliente");
delay(pausa);
}
if(digitalRead(FRIA) == HIGH){
digitalWrite(VALVULAFRIA, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(6,1);
lcd.print("Fria");
delay(pausa);
if(digitalRead(CALIENTE) == digitalRead(FRIA)){
digitalWrite(VALVULACALIENTE, HIGH);//enciende las valvulas de llenado de agua
digitalWrite(VALVULAFRIA, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(5,1);
lcd.print("Tibia");
delay(pausa);
}
}
while(digitalRead(LLENO)== LOW){//mientras la tina esta vacia
digitalRead(LLENO)== HIGH;//y hazta que la tina se llene
}
digitalWrite(VALVULACALIENTE, LOW);//las valvulas de agua se apagan
digitalWrite(VALVULAFRIA, LOW);//las valvulas de agua se apagan
lcd.clear();
lcd.setCursor(4,0);
lcd.print("La Tina");
lcd.setCursor(3,1);
lcd.print("Esta Llena");
delay(pausa);
digitalWrite(ACTUADOR, HIGH);//activa el actuador para que enganche la tina para lavar
while(digitalRead(ACTUADORLAVAR)== LOW){//mientras la señal del actuador esta abierta
digitalRead(ACTUADORLAVAR)== HIGH;//y hazta que la señal del actuador se cierre
}
digitalWrite(ACTUADOR, LOW);//se apaga la corriente que activa el actuador
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Enjuagando");
delay(pausa);
for (int cuenta = 0; cuenta < Enjuagando; cuenta ++) {
digitalWrite(LAVANDO1, HIGH);
delay(pausaAgitar);
digitalWrite(LAVANDO1, LOW);
delay(pausa);
digitalWrite(LAVANDO2, HIGH);
delay(pausaAgitar);
digitalWrite(LAVANDO2, LOW);
delay(pausa);
}
lcd.clear();
digitalWrite(ACTUADOR, HIGH);//activa el actuador para que desenganche la tina
while(digitalRead(ACTUADORLAVAR)== HIGH){
digitalRead(ACTUADORLAVAR)== LOW;
}
digitalWrite(ACTUADOR, LOW);//desactiva el actuador cuando ya sesengancho la tina
delay(pausa);//da un tiempo de espera
digitalWrite(ESPRIMIR, HIGH);//enciende el motor para esprimir
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Drenando y");
lcd.setCursor(2,1);
lcd.print("Centrifugando");
delay(pausa);
while(digitalRead(LLENO)== HIGH){
digitalRead(LLENO)== LOW;
}
delay(TiempoEsprimiendo);//espera que pase el tiempo de esprimir
digitalWrite(ESPRIMIR, LOW);//apaga el motor de esprimir
delay(pausa);//da un tiempo de espera
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Ha Terminado");
delay(pausa);
}//tina vacia
}//media low
//***************************************************************************************
//***************************************************************************************
//===================================
//LAVANDO CON LA TINA A LA MITAD//
//===================================
if(digitalRead(MEDIA) == HIGH){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LAVANDO CON LA");
lcd.setCursor(0,1);
lcd.print("TINA A LA MITAD");
delay(pausa);
//=======================================================
if(digitalRead(CALIENTE) == HIGH){
digitalWrite(VALVULACALIENTE, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(4,1);
lcd.print("Caliente");
delay(pausa);
}
if(digitalRead(FRIA) == HIGH){
digitalWrite(VALVULAFRIA, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(6,1);
lcd.print("Fria");
delay(pausa);
if(digitalRead(CALIENTE) == digitalRead(FRIA)){
digitalWrite(VALVULACALIENTE, HIGH);//enciende las valvulas de llenado de agua
digitalWrite(VALVULAFRIA, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(6,1);
lcd.print("Tibia");
delay(pausa);
}
}
///////////////////////////////
///////PRIMER CICLO MEDIA TINA//////////
/////////////////////////////////////
delay(TiempoLlenandoMedia);
digitalWrite(VALVULACALIENTE, LOW);//las valvulas de agua se apagan
digitalWrite(VALVULAFRIA, LOW);//las valvulas de agua se apagan
lcd.clear();
lcd.setCursor(4,0);
lcd.print("La Tina");
lcd.setCursor(1,1);
lcd.print("Esta la Mitad");
delay(pausa);
digitalWrite(ACTUADOR, HIGH);//activa el actuador para que enganche la tina para lavar
while(digitalRead(ACTUADORLAVAR)== LOW){//mientras el actuador esta en posision abierta
digitalRead(ACTUADORLAVAR)== HIGH;//y hasta que el actuador se sierre y mande la señal de enganchado
}
digitalWrite(ACTUADOR, LOW);//se apaga la corriente que activa el actuador
delay(pausa);//da un tiempo de espera
for (int cuenta = 0; cuenta < TiempoLavandoMedia; cuenta ++) {
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Lavando");
delay(pausa);
digitalWrite(LAVANDO1, HIGH);
delay(pausaAgitar);
digitalWrite(LAVANDO1, LOW);
delay(pausa);
digitalWrite(LAVANDO2, HIGH);
delay(pausaAgitar);
digitalWrite(LAVANDO2, LOW);
delay(pausa);
}
lcd.clear();
digitalWrite(ACTUADOR, HIGH);//activa el actuador para que desenganche la tina
while(digitalRead(ACTUADORLAVAR)== HIGH){//mientras el actuador esta en posision cerrada
digitalRead(ACTUADORLAVAR)== LOW;//y hasta que el actuador se sierre y mande la señal de desenganchado
}
digitalWrite(ACTUADOR, LOW);//desactiva el actuador cuando ya sesengancho la tina
delay(pausa);//da un tiempo de espera
digitalWrite(ESPRIMIR, HIGH);//enciende el motor para esprimir
lcd.setCursor(3,0);
lcd.print("Drenando y");
lcd.setCursor(2,1);
lcd.print("Centrifugando");
delay(pausa);
delay(TiempoEsprimiendo);//espera que pase el tiempo de esprimir
digitalWrite(ESPRIMIR, LOW);//apaga el motor de esprimir
delay(pausa);//da un tiempo de espera
//////////////////////////////////////
///////ARRANQUE DE LA ENJUAGADA///////
//////////////////////////////////////
if (digitalRead(LLENO) == LOW) {//si la tina esta vacia
if(digitalRead(CALIENTE) == HIGH){
digitalWrite(VALVULACALIENTE, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(4,1);
lcd.print("Caliente");
delay(pausa);
}
if(digitalRead(FRIA) == HIGH){
digitalWrite(VALVULAFRIA, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(6,1);
lcd.print("Fria");
delay(pausa);
if(digitalRead(CALIENTE) == digitalRead(FRIA)){
digitalWrite(VALVULACALIENTE, HIGH);//enciende las valvulas de llenado de agua
digitalWrite(VALVULAFRIA, HIGH);//enciende las valvulas de llenado de agua
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Llenando Agua");
lcd.setCursor(5,1);
lcd.print("Tibia");
delay(pausa);
}
}
delay(TiempoLlenandoMedia);
digitalWrite(VALVULACALIENTE, LOW);//las valvulas de agua se apagan
digitalWrite(VALVULAFRIA, LOW);//las valvulas de agua se apagan
lcd.clear();
lcd.setCursor(4,0);
lcd.print("La Tina");
lcd.setCursor(1,1);
lcd.print("Esta a la Mitad");
delay(pausa);
digitalWrite(ACTUADOR, HIGH);//activa el actuador para que enganche la tina para lavar
while(digitalRead(ACTUADORLAVAR)== LOW){//mientras la señal del actuador esta abierta
digitalRead(ACTUADORLAVAR)== HIGH;//y hazta que la señal del actuador se cierre
}
digitalWrite(ACTUADOR, LOW);//se apaga la corriente que activa el actuador
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Enjuagando");
delay(pausa);
for (int cuenta = 0; cuenta < Enjuagando; cuenta ++) {
digitalWrite(LAVANDO1, HIGH);
delay(pausaAgitar);
digitalWrite(LAVANDO1, LOW);
delay(pausa);
digitalWrite(LAVANDO2, HIGH);
delay(pausaAgitar);
digitalWrite(LAVANDO2, LOW);
delay(pausa);
}
lcd.clear();
digitalWrite(ACTUADOR, HIGH);//activa el actuador para que desenganche la tina
while(digitalRead(ACTUADORLAVAR)== HIGH){
digitalRead(ACTUADORLAVAR)== LOW;
}
digitalWrite(ACTUADOR, LOW);//desactiva el actuador cuando ya sesengancho la tina
delay(pausa);//da un tiempo de espera
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Drenando y");
lcd.setCursor(2,1);
lcd.print("Centrifugando");
delay(pausa);
lcd.setCursor(0,1);
digitalWrite(ESPRIMIR, HIGH);//enciende el motor para esprimir
delay(TiempoEsprimiendoMedia);//espera que pase el tiempo de esprimir
digitalWrite(ESPRIMIR, LOW);//apaga el motor de esprimir
delay(pausa);//da un tiempo de espera
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Ha Terminado");
delay(pausa);
}
}//media high
}//iniciar
}//fria o caliente
else{
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Deves Elegir");
lcd.setCursor(0,1);
lcd.print("Caliente o Fria?");
delay(pausa);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("o las dos para");
lcd.setCursor(5,1);
lcd.print("Tibia");
delay(pausa);
if(digitalRead(FRIA) == HIGH){
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Has Elegido");
lcd.setCursor(3,1);
lcd.print("Agua Fria");
delay(pausa);
}
if(digitalRead(CALIENTE) == HIGH){
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Has Elegido");
lcd.setCursor(1,1);
lcd.print("Agua Caliente");
delay(pausa);
}
if(digitalRead(CALIENTE) && (digitalRead(FRIA) == HIGH)){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Has Elegido");
lcd.setCursor(3,1);
lcd.print("Agua Tibia");
delay(pausa);
}
}//else
}//loop