Temporizador arduino con LCD I2C y 2 relé para inversión de motor trifásico

Hola a todos!

Estoy intentando controlar una lavadora con la adaptación del temporizador que encontré en el siguiente foro: Timer con LCD y salida de Rele.
Se trata de una maquina casera que actualmente se controla con una llave conmutadora manual que trabaja con 2 contactores en donde a uno de ellos se le invierten L1 y L2 de la línea trifásica y de esta forma se produce la inversión del sentido de giro del motor.

Estoy trabajando con una placa Arduino Uno

Lo que he logrado hacer es lo siguiente:
Contar con tres tiempos de preselección mediante pulsadores: T1 = 10 min.; T2 = 15 min. y T3 = 30 min.
LCD I2C controlado con la Librería New Liquidcrystal

También le quiero agregar un switch o sensor magnético de apertura a la puerta para que no permita el giro y escriba un mensaje en el LCD, lo he programado.

Lo que no estoy logrando es que trabajen los relés de la siguiente manera al pulsar el botón de inicio:

-Esperar 15 seg.
-Encender relé 1 por 45 seg. (accionaría el contactor 1 de giro normal)
-Esperar 15 seg.
-Encender relé 2 por 45 seg. (accionaría el contactor 2 de giro invertido)
-volver a repetir esta rutina hasta que termine el tiempo seleccionado (cuenta atrás).

No tengo demasiada experiencia en programación, he leido mucho y estoy intentado hace días hacer funcionar de esta forma los relés, pero no lo he logrado.

Si alguien me puede dar una mano para orientarme a ver dónde está mi error o tienen algún ejemplo que me ayude a ver lo que hago mal se los voy a agradecer mucho.

Agrego el código como adjunto dado que no me permite incorporarlo al mensaje por la cantidad de caracteres.

Saludos,

gpgtuczone

Timer_lavadora_lcdI2C_inversor_de_giro.ino (22 KB)

1 Like

Hola. Aquí tienes el código de mi propuesta que más o menos hace lo que querías. Lo he hecho un poco a las prisas y no lo he comentado tanto como el código original que modificaste. Lo he tenido que adjuntar porque es demasiado grande.

Básicamente he implementado dos máquinas de estado. Una es para el control de la puerta y está “dentro” del loop() principal. La otra es para el control del giro del motor y la he implementado en una clase.

Un gran fallo que tenías es dónde habías puesto el código. Esa parte sólo se ejecutaba cuando arrancaba la cuenta atrás. Con lo que sólo se tenía en cuenta en ese momento. Lo primero es implementar ese control “fuera” de esa zona. De hecho esa parte del código, junto con casi todo lo que había dentro del loop() depende de que la puerta esté cerrada para que se ejecute.

Lo que siempre se sigue ejecutando es controlPulso.loop() y se ha añadido controlMotor.loop(). Aunque este último también podría no ejecutarse si la puerta está abierta.

Siento no tener tiempo para comentar más el código. Preguntar cualquier duda, que si puedo la contesto (otra cosa es que logre aclararla).

Timer_lavadora_lcdI2C_con_sensor_puerta.ino (24.6 KB)

Muchas gracias por tu tiempo!
Impresionante lo que hiciste, me queda mucho por aprender...

Voy a probarlo en la placa y si todo va bien subo el esquema de conexiones para que quede a disposición a quién pueda serle util.

Abrazo,

gpgtuczone