Control lavavajillas con arduino
//Lavabajillas6_logica_directa_mensaje01.ino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
unsigned long tiempo = 0; //VARIABLES DE MILLIS
unsigned long time = 0;
int puerta; //contacto puerta
int bahoA; //contacto baho
int termop=-28;
byte Temp;
int ib=0; // for baho
int vandera[4];
byte desborde=0;
byte marcha=0;
int menu=0;
int d2;
int i2;
int ib2;
int llena2;
int opcion=0;
#include <math.h>
int sensorPin = A1; // Declaration of the input pin
// These function translates the recorded analog measurement
// into the right Tempture in °C and gives it out.
double Thermistor(int RawADC)
{
double Temp;
Temp = log(10000.0 * ((1024.0 / RawADC -1)));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
Temp = Temp - 273.15; // convert from Kelvin to Celsius
return Temp;
}
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT); // motor lavado
pinMode(3, OUTPUT); // Valvula entrada agua
pinMode(4, OUTPUT); // Motor Desague
pinMode(5, OUTPUT); // Selenoide Sal
pinMode(6, OUTPUT); // Selenoide Pastilla //DETERGENTE
pinMode(7, OUTPUT); // Resistencia
pinMode(8, INPUT); // BahoA Llenado
pinMode(9, INPUT); // termop
pinMode(10, INPUT); // Puerta
pinMode(A0, INPUT); // Selector programa
pinMode(A1, INPUT); // Sensor Temptura1
pinMode(11, INPUT); // Sensor Desvordamiento
pinMode(12, INPUT); // Pulsador de marcha
//----------ESTADO INICIAL ------------------
digitalWrite(2, HIGH);// motor lavado
digitalWrite(3, HIGH); // Valvula entrada agua
digitalWrite(4, HIGH); // Motor Desague
digitalWrite(5, HIGH); // Selenoide Sal
digitalWrite(6, HIGH); // Selenoide Pastilla
digitalWrite(7, HIGH); // Resistencia
bahoA = digitalRead(8); // sensor baho
termop = digitalRead(9); // termostato
puerta = digitalRead(10); // Estado de la puerta
desborde= digitalRead(11); // Sensor Desvordamiento
marcha= digitalRead(12); // pulsador marcha
//Temp = analogRead(A1); // Sensor Temptura
Serial.println("Iniciado");
//------DISPLAY-------------------
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(2,0);
lcd.print("LAVAVAJILLAS");
lcd.setCursor(5,1);
lcd.print("BOSCH");//"WWW.MIGUELDC.COM"
delay (5000);
lcd.clear();
//-----------------------------------
}
void loop() {
mensaje();
int selector= analogRead(A0); //byte
puerta = digitalRead(10);
desborde = digitalRead(11);
marcha = digitalRead(12);
Serial.println(selector);
int readVal = analogRead(sensorPin);
double temp = Thermistor(readVal);
// Output on the serial interface
Serial.print("La Temptura es:");
Serial.print(temp);
Serial.print(" º"); //Output <°> Symbol
Serial.println("C");
Serial.println("---------------------------------------");
//-----------------------------------------
//--------SELECCION DE PROGRAMAS-----------
if ((puerta == HIGH)&& (desborde ==LOW)){ // si la pueerta esta cerrada continuamos
if (selector <= 270){
menu=1;
if (marcha==HIGH) Programauno();
}
else if ((selector > 270) && (selector <= 700)){
lcd.setCursor(2,0);
lcd.print("PROGRAMA DOS ");
lcd.setCursor(2,1);
lcd.print("PULSA MARCHA");
if (marcha==HIGH) Programados();
}
else if (selector >700){
lcd.setCursor(2,0);
lcd.print("PROGRAMA TRES ");
lcd.setCursor(2,1);
lcd.print("PULSA MARCHA");
if (marcha==HIGH) Programatres();
}
}
else if ((puerta == LOW)&& (desborde ==LOW))
{Serial.println("Puerta abierta");
Parotemporal(); // Si la puerta esta abierta se para el programa
}
else
{Serial.println("Desbordamiento");
Desbordamiento(); // Si la puerta esta abierta se para el programa
}
} // fin loop
//-------------------------------------------------
//-----------EJECUCION PROGRAMA UNO---------------------
//-------------------------------------------------
void Programauno(){
if( vandera[1]==0){
Serial.println("Programa uno ");
lcd.clear();
lcd.setCursor(2,0);
lcd.print("PROGRAMA UNO ");
lcd.setCursor(2,1);
lcd.print("EN PROCESO");
delay(5000); //8000
//-------Enguaje---------
Llenaragua(2); // llenado de agua
delay(1000);
Lavado(9); // remojar platos
delay(1000);
Desague();// desagua el agua
delay(1000);
//--------Lavado----------
Llenaragua(2); // llenado de agua
delay(3000);
digitalWrite(6, LOW); // Selenoide Pastilla abre
delay(3000);
digitalWrite(6, HIGH); // Selenoide Pastilla cierra
delay(100);
digitalWrite(7, LOW); // Resistencia conecta
delay(5000);
Lavado(50); //lavado en profundidad
digitalWrite(7, HIGH); // Resistencia desconecta
delay(5000);
Desague(); // desagua el agua
//-------Enguaje---------
delay(5000);
Llenaragua(2); // llenado de agua
delay(5000);
Lavado(9); //lavado en Enguaje
delay(5000);
Desague(); // desagua el agua
vandera[1]=1; // con el valor 1 terminamos el programa
lcd.clear();
lcd.setCursor(1,0);
lcd.print("LAVADO TERMINADO");
lcd.setCursor(0,1);
lcd.print("Casi lavado");
}
}
// FIN programauno
//-------------------------------------------------
//-----------EJECUCION PROGRAMA DOS---------------------
//-------------------------------------------------
void Programados(){
Serial.println("Programa dos ");
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PROGRAMA DOS ");
lcd.setCursor(0,1);
lcd.print("ENTRADA DE AGUA ");
delay (5000);
lcd.clear();
}// FIN programados
//-------------------------------------------------
//-----------EJECUCION PROGRAMA TRES---------------------
//-------------------------------------------------
void Programatres(){
Serial.println("Programa tres ");
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PROGRAMA TRES ");
lcd.setCursor(0,1);
lcd.print("ENTRADA DE AGUA ");
delay (5000);
lcd.clear();
}// FIN programatres
//--------------------------------------------------
//-------CARGA DE AGUA EN BAHO---------------------
//-------------------------------------------------
void Llenaragua(int llena){
if( ib == 0){
for(; ib<llena; ib++){ // carga de agua en baho
Serial.print("Entrada de agua: ");
Serial.println(ib);
puerta = digitalRead(10); // Estado de la puerta
if (puerta==LOW)Parotemporal(); // puerta abierta para el programa
bahoA = digitalRead(8); // lee estado contacto baho
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ENTREDA DE AGUA " );
lcd.setCursor(0,1);
lcd.print("CARGA AGUA: ");
lcd.setCursor(13,1);
lcd.print(llena-ib);
delay(50); // espera recuperacion del deposito baho
while (bahoA == LOW){
puerta = digitalRead(10); // Estado de la puerta
if (puerta==LOW)Parotemporal(); // puerta abierta para el programa
delay(100);
desborde= digitalRead(11); // Sensor Desvordamiento
if (desborde==HIGH)Desbordamiento();
delay(100);
bahoA = digitalRead(8); // lee estado contacto baho
delay(200);
if(digitalRead(3)== HIGH) digitalWrite(3, LOW); // abre valvula entrada agua
delay(500);
}
Serial.println("cierra agua");
digitalWrite(3, HIGH); //cierra valvula entrada agua
desborde= digitalRead(11); // Sensor Desvordamiento
if (desborde==HIGH)Desbordamiento();
delay(10000); // espera recuperacion del deposito baho
} //fin for
}// fin if ib
} //fin llenar agua
//--------------------------------------------
//------------DESAGUE AGUA----------------
//-------------------------------------------
void Desague(){
Serial.println ("desaguando");
delay(50);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LAVADO PARADO ");
lcd.setCursor(0,1);
lcd.print("DESAGUANDO ");
delay(50);
digitalWrite(7, HIGH); // Resistencia
digitalWrite(2, HIGH);// motor lavado
delay(1000);
for(int i=0; i<40; i++){ // Desaguando
puerta = digitalRead(10); // Estado de la puerta
if (puerta==LOW)Parotemporal(); // puerta abierta para el programa
if( digitalRead(4)== HIGH)digitalWrite(4, LOW); // Motor Desague
delay(1000);
} //fin for
digitalWrite(4, HIGH);// Motor Desague
delay(10000);
for(int i=0; i<10; i++){ // Desaguando
Serial.print("desague: ");
Serial.println(i);
puerta = digitalRead(10); // Estado de la puerta
if (puerta==LOW)Parotemporal(); // puerta abierta para el programa
if( digitalRead(4)== HIGH)digitalWrite(4, LOW); // Motor Desague
delay(1000);
} //fin for
digitalWrite(4, HIGH);// Motor Desague
delay(200);
ib=0; // variable de llenado agua
} //fin desague
//--------------------------------------------
//------------LAVADO----------------
//-------------------------------------------
void Lavado(int d){
Serial.println ("Lavando");
delay(50);
for(int i=0; i<d; i++){
Serial.print("Lavado: ");
Serial.println(i);
puerta = digitalRead(10); // Estado de la puerta
if (puerta==LOW)Parotemporal(); // puerta abierta para el programa
termop = digitalRead(9); // Estado termostato
if (termop==HIGH)digitalWrite(7, HIGH); // Resistencia desconecta
if (digitalRead(2)==HIGH)digitalWrite(2, LOW);// motor lavado
delay(200);
Serial.println("Motor lavado funcionando" );
delay(100);
Temp = analogRead(A1); // Sensor Temptura
delay(300);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LAVADO EN MARCHA");
lcd.setCursor(0,1);
lcd.print(Temp); // grados resistencia variable
lcd.setCursor(3,1);
lcd.print("C");
lcd.setCursor(5,1);
lcd.print("R:");
lcd.setCursor(7,1);
lcd.print(termop); //estado de termostator
lcd.setCursor(9,1);
lcd.print("AV:");
lcd.setCursor(13,1);
lcd.print(d-i); // avance del lavado
delay(2000); //tiempo unidad
Serial.print("Temptura: ");
Serial.println(Temp);
delay(200);
}
digitalWrite(7, HIGH); // Resistencia desconecta
digitalWrite(2, HIGH);// motor lavado
}
//--------------------------------------------
//------------PUERTA ABIERTA----------------
//-------------------------------------------
void Parotemporal(){
Serial.print("Puerta abierta ");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PARO EMERGENCIA ");
lcd.setCursor(0,1);
lcd.print("PUERTA ABIERTA ");
delay(200);
while (puerta==LOW){
puerta = digitalRead(10); // Estado de la puerta
digitalWrite(2, HIGH);// motor lavado
digitalWrite(3, HIGH); // Valvula entrada agua
digitalWrite(4, HIGH); // Motor Desague
digitalWrite(5, HIGH); // Selenoide Sal
digitalWrite(6, HIGH); // Selenoide Pastilla
digitalWrite(7, HIGH); // Resistencia
delay(200);
}
delay(200);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PUERTA CERRADA ");
lcd.setCursor(0,1);
lcd.print("MARCHA REINICIADA ");
delay(2000);
//lcd.clear();
}
//--------------------------------------------
//------------PARA EMERGENCIA----------------
//-------------------------------------------
void Paroemergencia(){
Serial.print("Parada emergencia ");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PARO EMERGENCIA ");
lcd.setCursor(0,1);
lcd.print("DESCONECTAR RED ");
delay(100);
while (true){
digitalWrite(2, HIGH);// motor lavado
digitalWrite(3, HIGH); // Valvula entrada agua
digitalWrite(4, HIGH); // Motor Desague
digitalWrite(5, HIGH); // Selenoide Sal
digitalWrite(6, HIGH); // Selenoide Pastilla
digitalWrite(7, HIGH); // Resistencia
delay(200);
}
}
//--------------------------------------------
//------------DEBORDAMIENTO-------------------
//-------------------------------------------
void Desbordamiento(){
Serial.print("desbordamiento");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PARO EMERGENCIA ");
lcd.setCursor(0,1);
lcd.print("DESBORDAMIENTO ");
delay(100);
while (true){
digitalWrite(2, HIGH);// motor lavado
digitalWrite(3, HIGH); // Valvula entrada agua
digitalWrite(4, HIGH); // Motor Desague
digitalWrite(5, HIGH); // Selenoide Sal
digitalWrite(6, HIGH); // Selenoide Pastilla
digitalWrite(7, HIGH); // Resistencia
delay(200);
}
}
MESAJES
void mensaje(){
switch (menu) {
case 1:
//lcd.clear();
lcd.setCursor(2,0);
lcd.print("PROGRAMA UNO ");
lcd.setCursor(2,1);
lcd.print("PULSA MARCHA");
opcion=1;
break;
case 2:
//lcd.clear();
lcd.setCursor(2,0);
lcd.print("PROGRAMA DOS ");
lcd.setCursor(2,1);
lcd.print("PULSA MARCHA");
opcion=2;
break;
case 3:
lcd.setCursor(2,0);
lcd.print("PROGRAMA TRES ");
lcd.setCursor(2,1);
lcd.print("PULSA MARCHA");
if (marcha==HIGH) Programatres();
break;
case 4:
lcd.clear();
lcd.setCursor(2,0);
lcd.print("PROGRAMA UNO ");
lcd.setCursor(2,1);
lcd.print("EN PROCESO");
break;
case 5:
lcd.clear();
lcd.setCursor(1,0);
lcd.print("LAVADO TERMINADO");
lcd.setCursor(0,1);
lcd.print("Casi lavado");
break;
case 6:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LAVADO EN MARCHA");
lcd.setCursor(0,1);
lcd.print(Temp); // grados resistencia variable
lcd.setCursor(3,1);
lcd.print("C");
lcd.setCursor(5,1);
lcd.print("R:");
lcd.setCursor(7,1);
lcd.print(termop); //estado de termostator
lcd.setCursor(9,1);
lcd.print("AV:");
lcd.setCursor(13,1);
lcd.print(d2-i2); // avance del lavado
break;
case 7:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ENTREDA DE AGUA " );
lcd.setCursor(0,1);
lcd.print("CARGA AGUA: ");
lcd.setCursor(13,1);
lcd.print(llena2-ib2);
break;
case 8:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LAVADO PARADO ");
lcd.setCursor(0,1);
lcd.print("DESAGUANDO ");
break;
case 9:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PARO EMERGENCIA ");
lcd.setCursor(0,1);
lcd.print("PUERTA ABIERTA ");
break;
case 10:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PUERTA CERRADA ");
lcd.setCursor(0,1);
lcd.print("MARCHA REINICIADA ");
break;
case 11:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PARO EMERGENCIA ");
lcd.setCursor(0,1);
lcd.print("DESCONECTAR RED ");
break;
case 12:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PARO EMERGENCIA ");
lcd.setCursor(0,1);
lcd.print("DESBORDAMIENTO ");
break;
case 13:
break;
case 14:
break;
}
}
Comentarios
Federico
Vie, 12/03/2021 - 13:29
Enlace permanente
Programa lavabajilla mejorado
Probado el programa uno y funcionando todo correctamente
Programa lavabajilla mejorado descarga el código desde aqui ---> Descargar
falta implementar programados, programatres
y correguir las funciones millis
pepe
Sáb, 12/04/2021 - 11:24
Enlace permanente
como subo el archivo
Como se sube el archivo para que te lo puedas descargar.
Federico
Sáb, 12/04/2021 - 14:14
Enlace permanente
subir archivos
se suben en NAVEGACIÓN Add file seleccionar la pestalla file --> Subir Archivo
aunque no lo he progado yo los subo con filezilla