⚡ Descuentos en cursos en video - Lleva tu aprendizaje técnico al siguiente nivel y aprovecha precios especiales antes de que termine la oferta. 🔥 Aprovechar oferta ahora 🔥
Arduino

crear tarjeta con arduino (UNO) para controlar un LAVARROPAS

matias guerra
hace 8 años
hace 8 años
¿Cómo crear una tarjeta con arduino (UNO) para controlar un lavarropas? La idea es aportar conocimientos para crear una placa capaz de controlar una lavadora a capacitor con Arduino. Ya que sería de gran ayuda para mí y para futuros novatos curiosos como yo. Ayuda sobre: • Conexionado de capacitor y cableados en general • Mejora en el diseño y optimización del sketch (a continuación) • Tiempo transcurrido. • Agregar nuevos tipos de lavados. (corto, largo yo hice el normal) • Agregar botones de: inicio, seleccionar programas, pausa, etc. PROGRAMA escrito por mi (sepan entender los errores que puede tener ya que hace 2 meses que descubrí todo esto del mundo de la programación :D ) [code:1] #include <LiquidCrystal_I2C.h> #include <Wire.h> // Usado por el chip I2C RTC, es el reloj unsigned long cycleStart; // Se utiliza para hacer el seguimiento de cuánto tiempo ha estado lavando. LiquidCrystal_I2C lcd(0x27,20,4); #define Led 13 //pin led de encendido #define CargarAgua 12 //pin electrovalvula #define MotorD 11 //pin lavado a la derecha #define MotorI 10 //pin ladavo a la izquierda #define Bomba 9 //pin bomba de desagote #define MotorC 8 //pin centrifugado rapido #define Puerta 3 // pin puerta #define NivelA 2 //pin entrada de hidronivel normal void setup() { lcd.init(); // initialize the lcd lcd.backlight(); pinMode (13,OUTPUT); pinMode (12,OUTPUT); pinMode (11,OUTPUT); pinMode (10,OUTPUT); pinMode (9,OUTPUT); pinMode (8,OUTPUT); pinMode (7,INPUT); pinMode (6,INPUT); pinMode (5,INPUT); pinMode (4,OUTPUT); pinMode (3,INPUT); pinMode (2,INPUT); //INICIALIZO LOS PINES A OFF O LOW digitalWrite(Led, LOW); digitalWrite(CargarAgua, LOW); digitalWrite(MotorD, LOW); digitalWrite(MotorI, LOW); digitalWrite(MotorC, LOW); digitalWrite(Bomba, LOW); Inicio(); // inicia lcd.clear(); // carga agua 1 paso 1 lcd.setCursor(3,0); lcd.print("Cargando Agua"); lcd.setCursor(2,1); lcd.print("Hasta hidronivel"); lcd.setCursor(3,2); lcd.print("Paso 01 de 12"); lcd.setCursor(1,3); lcd.print("TIEMPO REST:1:48:45"); Agua(); lcd.clear(); //lava paso 2 lcd.setCursor(4,0); lcd.print("Lavando Ropa"); lcd.setCursor(3,1); lcd.print("DURANTE 15 MIN"); lcd.setCursor(3,2); lcd.print("Paso 02 de 12"); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); lcd.clear(); //desagota lavado paso 3 de 9 lcd.setCursor(0,0); lcd.print("Desagota Agua Lavado"); lcd.setCursor(3,1); lcd.print("DURANTE 05:40"); lcd.setCursor(3,2); lcd.print("Paso 03 de 12"); Desagote(); lcd.clear(); lcd.setCursor(0,0); // carga agua enjuague 1 paso 4 de 9 lcd.print("Car.AguaEnjuague 1/3"); lcd.setCursor(3,1); lcd.print("DURANTE 1 MIN"); lcd.setCursor(3,2); lcd.print("Paso 04 de 12"); Agua(); lcd.clear(); lcd.setCursor(4,0); //enjuaga 1 5 de 9 lcd.print("Enjuagado 1/3"); // ESTE CICLO DURA 20 SUGUNDOS lcd.setCursor(3,1); lcd.print("DURANTE 15 MIN"); lcd.setCursor(3,2); lcd.print("Paso 05 de 12"); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); lcd.clear(); lcd.setCursor(0,0); //desagote 1 paso 6 de 9 lcd.print("Desagotando Agua 1/3"); lcd.setCursor(3,1); lcd.print("DURANTE 2 MIN"); lcd.setCursor(3,2); lcd.print("Paso 06 de 12"); Desagote(); lcd.clear(); lcd.setCursor(0,0); //agua enj 2 paso 7 de 9 lcd.print("Car.AguaEnjuague 2/3"); lcd.setCursor(3,1); lcd.print("DURANTE 1 MIN"); lcd.setCursor(3,2); lcd.print("Paso 07 de 12"); Agua(); lcd.clear(); lcd.setCursor(4,0); //enjuaga 2 paso 8 de 9 lcd.print("Enjuagado 2/3"); lcd.setCursor(3,1); lcd.print("DURANTE 15 MIN"); lcd.setCursor(3,2); lcd.print("Paso 08 de 12"); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); lcd.clear(); lcd.setCursor(0,0); // desagote 2 paso 9 de 9 lcd.print("Desagotando Agua 2/3"); lcd.setCursor(3,1); lcd.print("DURANTE 2 MIN"); lcd.setCursor(3,2); lcd.print("Paso 09 de 12"); Desagote(); lcd.clear(); lcd.setCursor(0,0); // agua enj 3 paso 10 lcd.print("Car.AguaEnjuague 3/3"); lcd.setCursor(3,1); lcd.print("DURANTE 1 MIN"); lcd.setCursor(3,2); lcd.print("Paso 10 de 12"); Agua(); lcd.clear(); lcd.setCursor(4,0); // enj 3 paso 11 lcd.print("Enjuagado 3/3"); // ESTE CICLO DURA 20 SUGUNDOS lcd.setCursor(3,1); lcd.print("DURANTE 15 MIN"); lcd.setCursor(3,2); lcd.print("Paso 11 de 12"); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); Lavar1(); lcd.clear(); lcd.setCursor(0,0); // desagota 3 paso 11 lcd.print("Desagotando Agua 3/3"); lcd.setCursor(3,1); lcd.print("DURANTE 2 MIN"); lcd.setCursor(3,2); lcd.print("Paso 12 de 12"); Desagote(); } // fin de prog void Inicio() //inicio de funciones { digitalWrite(Led,HIGH); lcd.setCursor(1,0); lcd.print("PROGRAMA DE LAVADO"); lcd.setCursor(1,1); lcd.print("By: Matias Guerra"); lcd.setCursor(1,2); lcd.print("Version Prueba 2.0"); delay(2000); lcd.setCursor(0,3); lcd.print("Duracion: 1:53"); delay(2000); } void Agua() { /* digitalWrite(CargarAgua,HIGH); // tiempo regulado segun control de carga de agua 4MIN 15 SEG digitalWrite(CargarAgua,LOW);*/ //nuevo cargar agua while (digitalRead(NivelA) == LOW){ digitalWrite(CargarAgua,HIGH); } digitalWrite(CargarAgua,LOW); delay(200); } void Lavar1 () { int TiempoLav(2000); int TiempoPausa(2000); lcd.setCursor(0,3); lcd.print("Girando a la DEREC"); digitalWrite(MotorD,HIGH); // tiempo regulado segun control con cronometro externo = ciclo de 1 min delay(TiempoLav); digitalWrite(MotorD,LOW); delay(TiempoPausa); lcd.setCursor(0,3); lcd.print("Girando a la IZQ"); digitalWrite(MotorD,HIGH); // tiempo regulado segun control con cronometro externo = ciclo de 1 min delay(TiempoLav); digitalWrite(MotorD,LOW); delay(TiempoPausa); } void Desagote() { digitalWrite(Bomba,HIGH); // desagota solo durante 2 min 50 SEG delay(170000); lcd.setCursor(3,3); lcd.print("Centrifugando"); digitalWrite(MotorC,HIGH); // desagota con bomba 2 min 50 seg TOTAL 5:40 delay(170000); digitalWrite(Bomba,LOW); digitalWrite(MotorC,LOW); } void Fin(){ lcd.clear(); lcd.setCursor(2,0); lcd.print("LAVADO DE PRUEBA"); lcd.setCursor(5,1); lcd.print("EXITOSO !!!"); lcd.setCursor(0,2); lcd.print("DEJAR PUERTA ABIERTA"); lcd.setCursor(0,3); lcd.print("PARA PAGA APAGAR SIS "); } void loop() { //fin digitalWrite(Led,LOW); delay(1000); digitalWrite(Led,HIGH); delay(250); Fin(); } [/code:1] 1. ADJUNTO IMAGEN EL LA QUE MUESTRO COMO TENGO PENSADO CREAR EL MANEJO DE ALTAS POTENCIAS 220V CON 5V. 2. OTRA IMAGEN DE POSIBLE CONECCIONADO DE CAPACITOR. (ME SERVIRA ESE ESQUEMA?) 3. A DURAS PENAS ESTE PROGRAMA FUNCIONA, Y EN ESTE PUNTO EL PROBLEMA MAS IMPORTANTE ES COMO HACER CONECCIONADO PARA HACER GIRAR A DERECHA E IZQUIERDA ADEMAS DEL CENTRIFUGADO. GRACIASSSS TOTALESSS!! LOS SALUDA MATIAS DESDE SAN JUAN ARGENTINA.!
jr2707
jr2707
84
hace 8 años
hace 8 años
Qué tal Matías! Muy bueno el proyecto! Completo y sencillo de entender, no me puse a analizar el tema de la programación en sí (o sea si va a tirar error o no el programa), solo el funcionamiento y lo veo muy didáctico. Bien, vamos a las pálidas y espero que a todo lo que diga lo veas para hacer mejoras o cambios y mejorar tu producto. Creo que el RTC no es necesario, para el lavarropas es lo mismo que sea 25 de Mayo, 31 de Diciembre a las 23:59:59, etc. El lavarropas va a lavar y cumplir su tiempo o ciclos de lavado y no necesita más, ahora, si lo que necesitás son lavados programados o diferidos, sí. Yo lo que haría es contar tiempo o períodos por flag, la base de tiempo RC de los microcontroladores safa, en todo caso para un lavado es lo mismo que sean 45m 00s que 45m59s hablando de precisión al medir el tiempo. Con respecto a la leyenda 1/3, 2/3 y 3/3 de llenado y vaciado, a no ser que uses un vacuómetro no podés medirlo realmente, a no ser que uses un parámetro de tiempo, sin embargo ¿si la presión de agua de entrada es baja o no hay agua?, el lavarropas lleva un simple presostato no mide nivel. Al cambio de giro y selección centrifugado/lavado la podés hacer con reles o triacs, los relés gralmente son un poco más caros que el opto y el triac, pero ambos funcionan bien y ese circuito es el correcto. En fin, si es a nivel desarrollo o trabajo propio está bueno para aprender, pero si es a nivel comercial, lamentablemente hay placas chinas que hacen todo esto, te lo aclaro para que midas si te conviene o no, porque si empezás a sumar gastos: Display I2C, RTC, Arduino, sensores, etc. Va a costar competir... Te lo digo por experiencia. Saludos Cordiales!
LUIS-CRS
LUIS-CRS
497
hace 7 años
hace 7 años
hola , que sucede si se queda sin energía la maquina?? :)
Carlos Escobar
hace 7 años
hace 7 años
Se Le debería hacer en el programa un pausador De procesos cuando se vaya la energía y cuando vuelve la energía que siga lavando o ejecutando  la orden
LUIS-CRS
LUIS-CRS
497
hace 7 años
hace 7 años
si , se puede tiene que correr un cronometro , y configurar un pin que sense la tensión alterna de la red cuando se pierda ,de esa manera guardar en la memoria donde se quedo el programa
matias guerra
hace 7 años
hace 7 años
ESTIMADO: LUIS-CRS COMO HAGO ESO?
LUIS-CRS
LUIS-CRS
497
hace 7 años
hace 7 años
existe un  un bloguer que lo creo meta  ,la ultima ves que leí ese tema estaban complicado para controlar el motor a escobillas , pero si lo lees completo veras como crearon el sketch  de arduino :)
Robocardo
hace 6 años
hace 6 años
Bueno para quien encare esta idea, esta buena para comenzar pero le falta trabajo desde mi punto de vista. Felicito de todos modos a Matias Guerra que logró esto con 2 meses de aprendizaje..  Conceptualmente, jamás se pone en el setup() toda la secuencia de trabajo de un código porque se ejecuta solo una vez asi que como prueba esta bien pero para quien lo use debe trabajar de otro modo. El lugar para hacerlo es el loop(). Al código debería sumársele el almacenamiento en EEPROM del estado en curso del lavado para que en caso de corte de Luz recuerde que estaba haciendo. Para ello se debe implementar un par de cosas como, qué programa se esta llevando a cabo, donde se encuentra y si es posible en este caso luego de X horas retornar como si nada pasara (hablo de procesos que requieren alcanzar X temperatura). Hay dos errores serios de sintaxis. 1) digitalread debe reemplazarse por digitalRead digitalwrite por digitalWrite Este código asi como esta no compila!! 2) int tiempolav(2000);  esto genera un vector de 2000 elementos. En un Arduino UNO eso es toda la memoria que tiene asi que es un error. Supongo pretendió asignar el valor 2000 a tiempolav pero eso se hace asi int tiempolav = 2000; Idem con int tiempopausa(2000); int tiempopausa = 2000; Por otro lado, la placa que se ve con optoacopladores y triacs esta para que la siga alguien que sabe electrónica y el resto se queda pensando que quiso decir? Cuando se trabaja con motores y dispositivos que generan transitorios hay que usar optoacopladores del tipo MOC3041 (220VAC) por ejemplo que tiene disparo x cruce por cero. Eso asegura minimizar posibles problemas de ruido electrico. Este podría ser un esquema válido para el control del optoacoplador mas Triac. En el esquema se ven cosas como Rin que es una R Limitadora para que el pin del arduino no quede sometido a un exceso de corriente (no puedes superar 40mA). Limitarlo a 10 mA estará bien. Para ello un simple cálculo (5-1.5)V/10mA = 0.35 kohms asi que 330 ohms es un valor aceptable La compuerta es genérica, es simplemente el pin de salida del Arduino.

¿Conoces una solución?

¡Aprende a reparar con estos cursos YoReparo!

4.73
(22)

Curso Reparación de Fuentes Conmutadas de PC y Equipos Electrónicos

Maximiliano Resch
$ 40 USD
$ 20 USD
4.6
(10)

Curso Localización de Fallas en Refrigeración en Heladeras/Neveras On/Off

Yamil Alarcón
$ 29 USD
$ 12 USD
4.64
(11)

Curso Electrónica para Reparación de Placas

Santiago Cediel
$ 29 USD
$ 11 USD
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos?
Regístrate gratis