Temporizador de sequência industrial usando RTC e Arduino

Temporizador de secuencia industrial usando RTC y Arduino

El temporizador de secuencia se utiliza en muchas industrias manufactureras para activar y desactivar procesos uno por uno de forma automática. El temporizador de secuencia se necesita como máximo cuando hay una cadena de procesos: significa que el primer proceso finaliza, desencadena el segundo proceso, cuando termina el segundo , desencadena el tercer proceso y así sucesivamente (¡¡¡como una reacción en cadena!!!….). Se deben definir inicialmente los tiempos y duraciones de cada proceso. Cada proceso requiere una duración de tiempo específica. La duración de cada proceso de la cadena se define (programa) antes de que comience todo el proceso de la cadena. Entonces se activa el primer proceso. Se ejecuta por un tiempo determinado y cuando termina, 2 y comienza el proceso y así comienza la cadena. Cada proceso se ejecuta durante un tiempo definido y cuando finaliza, activa el siguiente proceso. Esto continúa hasta el último proceso. Puede haber varios procesos de este tipo. Cuando finaliza el último proceso, la cadena se detiene. Si está en modo continuo o repetido, nuevamente comenzará el proceso y este ciclo se repetirá continuamente.

Se pueden encontrar ejemplos de este tipo de procesos en las industrias de fabricación de metales o de soldadura. En el proceso de soldadura existen cuatro subprocesos que deben activarse uno tras otro. (1) el trabajo (a soldar) se coloca debajo de los electrodos a través del transportador (o por cualquier otro medio) (2) los electrodos comprimen el trabajo para aplicar la presión adecuada (3) el contactor se enciende para pasar corriente a través de electrodos y pieza (4) finalmente se pone a presión la pieza para que se suelde correctamente. Todos estos procesos se desencadenan uno tras otro y cada proceso requiere un tiempo específico. Inicialmente se definen las duraciones de tiempo para cada proceso y luego se inicia el proceso.

Aquí, el proyecto presentado demuestra un temporizador de secuencia con un chip de reloj en tiempo real. Utiliza un microcontrolador Arduino y un chip RTC DS1307 para establecer el tiempo real y la duración de los procesos. La duración del proceso se puede establecer en horas, minutos y segundos. El proceso se ejecuta en tiempo real según el tiempo proporcionado por el chip RTC. Hay una pantalla LCD de 16×4 en el diseño para mostrar el estado del proceso, otros mensajes diferentes y en tiempo real. El usuario puede definir y programar la hora de inicio del proceso y la duración de 3 subprocesos diferentes. En esta demostración, se encienden y apagan 3 relés en secuencia y se supone que el relé encenderá y apagará el proceso. Entonces, veamos primero el diagrama del circuito y su funcionamiento, seguido del programa.

Diagrama de circuito:

Descripción del circuito:

Como se muestra en la figura anterior, el circuito se construye utilizando el módulo de chip RTC DS1307, una pantalla LCD de 16 × 4, una placa Arduino UNO y algunos otros componentes como botones, relés, transistores, resistencias, etc.

· El módulo RTC tiene interfaz de cuatro cables Vcc, Gnd, SDA y SCL. Los pines Vcc y Gnd están conectados a la placa Arduino 5V y Gnd respectivamente, lo que proporciona voltaje de polarización para su funcionamiento.

· Los pines SCL y SDA están conectados a los pines SCL y SDA del Arduino. Arduino se comunica con el chip RTC DS1307 usando estos dos pines

· Cuatro botones están conectados a los pines digitales 1, 2, 3 y 4 del Arduino. Todos los botones se conectan a tierra mediante resistencias de 10K como se muestra. cuando se presiona cualquier botón, el pin Arduino respectivo obtiene la entrada lógica 1 (ALTA)

· Los pines digitales 5, 6 y 7 activan tres relés de 12 V a través de 3 transistores tipo NPN como se muestra. Las bobinas del relé están conectadas entre la fuente externa de 12 V y los terminales del colector del transistor.

· Tres dispositivos diferentes (no mostrados en la figura) están conectados con terminales de contacto de relé. Significa que el dispositivo está encendido cuando el relé está encendido. El dispositivo reensambla cualquier proceso industrial.

· Los pines de datos D4-D7 de la pantalla LCD están conectados a los pines 10 – 13 de Arduino. Dos pines de control Rs y En están conectados a los pines 8 y 9 respectivamente. Los pines de control RW y VEE (control de contraste) están conectados a tierra.

La retroiluminación LED del LCD recibe alimentación de 5 V.

Operación del circuito:

· Cuando se suministra alimentación al circuito a través de USB, inicialmente los tres relés y, por tanto, los dispositivos se apagan. La persona primero debe definir los tiempos para cada dispositivo (proceso)

· El mensaje inicial se muestra en la pantalla LCD como " Establecer hora de inicio de secuencia "

· Ahora la persona necesita configurar la hora de inicio de la secuencia # en horas, minutos y segundos usando los botones. Los botones Data 4 tienen las siguientes funciones.

. Entonces, al presionar el botón 1, el botón 2 y el botón 3, la persona configurará la hora, los minutos y los segundos requeridos y luego presionará el botón Enter para configurar la hora de inicio de la secuencia.

· El mensaje se muestra en la pantalla LCD como " La hora de inicio de la secuencia está configurada en XX:XX:XX " (esta es la hora real en la que comenzará el proceso secuencial) ·

· A continuación, se le pide a la persona que ingrese la duración del proceso 1 en horas , minutos y segundos. La pantalla LCD muestra el mensaje " Establecer la duración del proceso de 1 a 00:00:00 "

· Nuevamente, la persona debe ingresar la duración total del proceso 1 en horas, minutos y segundos; esto significa cuánto tiempo se ejecutará el proceso 1.

· Se debe establecer la duración* (¡¡¡no el tiempo!!!!!) para el proceso 1 usando los botones. Cuando se establece la duración y se presiona el botón Enter, se muestra el mensaje en la pantalla LCD como “ La duración del proceso 1 es XX horas, XX minutos y XX segundos. "

· De igual forma la persona debe definir la duración del proceso 2 y del proceso 3 también. Cuando se establece la duración, se muestra un mensaje similar en la pantalla LCD como “ La duración del proceso X es XX hora, XX minuto y XX seg. "

· Cuando se configuran las 3 duraciones del proceso y se presiona el botón Enter, comienza la operación real del circuito

· Arduino lee la hora actual del módulo RTC y la muestra en la pantalla LCD como " Hora: – XX:XX:XX ". Junto con esta pantalla LCD también se muestra la hora de inicio del proceso 1 (la hora de inicio de la secuencia que el usuario ha ingresado)

· Luego compara continuamente la hora actual y la hora de inicio del proceso 1. Cuando coinciden, enciende el primer relé y así procesa 1 enviando lógica ALTA (1) en el pin digital 5. El mensaje que se muestra en la pantalla LCD es " comienza el proceso 1

· La pantalla LCD también muestra el mensaje " hora de inicio del proceso 2 xx:xx:xx ": esta es la hora real en que finalizará el proceso 1 y comenzará el proceso 2.

· Ahora nuevamente, Arduino compara la hora actual con la hora de inicio del proceso 2. Cuando ambas coinciden, primero apaga el primer relé y enciende el segundo relé. Luego 2 y comienza el proceso. La pantalla LCD muestra “ inicio del proceso 2 ” y “ hora de inicio del proceso 3 xx:xx:xx

· Nuevamente, cuando la hora actual es igual a la hora de inicio del proceso 3, el segundo relé se apaga y el tercer relé se enciende para iniciar el tercer proceso.

· La pantalla LCD muestra " se inicia el proceso 3 " y el último mensaje en la pantalla LCD es " hora de finalización del proceso 3 xx:xx:xx "

· Finalmente, cuando se alcanza el tiempo de finalización del proceso 3, el también se apaga el relé y así se completa la secuencia completa.

# Nota 1: La hora de inicio de la secuencia significa que el usuario debe ingresar la hora real en la que se iniciará todo el proceso secuencial. Tiene que ingresar la hora real deseada, como 10:00:00 (am) o 15:30:00 (pm), cuando desea que se inicie el proceso .

* Nota 2: la duración del proceso significa cuánto tiempo tardará en completarse el proceso . Aquí el usuario tiene que ingresar la duración del proceso , no el tiempo.

Es así como el temporizador secuencial inicia el proceso uno a uno según el tiempo y duración programados. Aquí está el complemento de la disposición del circuito.

Código fuente del proyecto

###

 //Programa para


 #incluir

 #incluir "RTClib.h"

 #incluir

 #incluir

 #definir set_hr 1

 #definir set_min 2

 #definir set_sec 3

 #definir ingresa 4

 #definir dispositivo1 5

 #definir dispositivo2 6

 #definir dispositivo3 7

 
LCD de cristal líquido (8, 9, 10, 11, 12, 13);


 RTC_DS1307 rtc;

 int hora = 0, minuto = 0, segundo = 0, set_time_flag = 1, sys_en_flag = 0;

 int proceso1_time_flag=0,proceso2_time_flag=0,proceso3_time_flag=0;

 int proceso1_hr,proceso1_min,proceso1_sec;

 int proceso2_hr,proceso2_min,proceso2_sec;

 int proceso3_hr,proceso3_min,proceso3_sec;

 int strt_hr, strt_min, strt_sec, time_flag=1;

 configuración vacía

 {

 Serie.begin(9600);

 lcd.comenzar(16, 4);

 lcd.claro;

 pinMode(set_hr,ENTRADA);

 pinMode(set_min,ENTRADA);

 pinMode(set_sec,ENTRADA);

 pinMode(entrar,ENTRADA);

 pinMode(dispositivo1,SALIDA);

 pinMode(dispositivo2,SALIDA);

 pinMode(dispositivo3,SALIDA);

 escritura digital (dispositivo1, BAJO);

 escritura digital (dispositivo2, BAJO);

 escritura digital (dispositivo3, BAJO);

 }


 bucle vacío

 {

 int hr_set_but,min_set_but,ent_but,sec_set_but;

 hr_set_but = digitalRead(set_hr);

 min_set_but = digitalRead(set_min);

 sec_set_but = digitalRead(set_sec);

 ent_but = digitalRead(entrar);


 ///////////////// enciende o apaga el dispositivo //////////////////////////// ////

 si(bandera_hora)

 {

 FechaHora ahora = rtc.now;
 
lcd.print("la hora actual es");

 lcd.setCursor(0,1);

 lcd.print(ahora.hora);

 lcd.imprimir(':');

 lcd.print(ahora.minuto);

 lcd.imprimir(':');

 lcd.print(ahora.segundo);

 retraso(3000);

 lcd.claro;

 lcd.print("Establecer secuencia ");

 lcd.setCursor(0,1);

 lcd.print("hora de inicio:");

 lcd.setCursor(0,2);

 lcd.print("00:00:00");

 bandera_hora=0;

 }

 si(sys_en_flag)

 {

 FechaHora ahora = rtc.now;

 ///////////// muestra la hora actual en la pantalla LCD ///////////////////////////

 lcd.setCursor(6,0);

 lcd.imprimir(" ");

 lcd.setCursor(6,0);

 lcd.print(ahora.hora);

 lcd.imprimir(':');

 lcd.print(ahora.minuto);

 lcd.imprimir(':');

 lcd.print(ahora.segundo);

 if(ahora.hora ==EEPROM.read(11) && ahora.minuto ==EEPROM.read(12) && ahora.segundo ==EEPROM.read(13))

 {

 escritura digital (dispositivo1, ALTO);

 lcd.setCursor(8,1);

 lcd.imprimir('2');

 lcd.setCursor(6,2);

 lcd.print(EEPROM.read(14));

 lcd.imprimir(':');
 
lcd.print(EEPROM.read(15));

 lcd.imprimir(':');

 lcd.print(EEPROM.read(16));

 lcd.setCursor(0,3);

 lcd.print("Se inicia el proceso 1");

 }

 if(ahora.hora ==EEPROM.read(14) && ahora.minuto ==EEPROM.read(15) && ahora.segundo ==EEPROM.read(16))

 {

 escritura digital (dispositivo1, BAJO);

 escritura digital (dispositivo2, ALTO);

 lcd.setCursor(8,1);

 lcd.imprimir('3');

 lcd.setCursor(6,2);

 lcd.print(EEPROM.read(17));

 lcd.imprimir(':');

 lcd.print(EEPROM.read(18));

 lcd.imprimir(':');

 lcd.print(EEPROM.read(19));

 lcd.setCursor(0,3);

 lcd.print("Se inicia el proceso 2");

 }

 if(ahora.hora ==EEPROM.read(17) && ahora.minuto ==EEPROM.read(18) && ahora.segundo ==EEPROM.read(19))

 {

 escritura digital (dispositivo2, BAJO);

 escritura digital (dispositivo3, ALTO);

 lcd.setCursor(8,1);

 lcd.print("3 extremos ");

 lcd.setCursor(6,2);

 lcd.print(EEPROM.read(20));

 lcd.imprimir(':');
 
lcd.print(EEPROM.read(21));

 lcd.imprimir(':');

 lcd.print(EEPROM.read(22));

 lcd.setCursor(0,3);

 lcd.print("Se inicia el proceso 3");

 }

 if(ahora.hora ==EEPROM.read(20) && ahora.minuto ==EEPROM.read(21) && ahora.segundo ==EEPROM.read(22))

 {

 escritura digital (dispositivo3, BAJO);

 lcd.setCursor(0,3);

 lcd.print("El proceso 3 finaliza ");

 }

 retraso(1000);

 }

 ///////////// establecer el tiempo de encendido y apagado del dispositivo ////////////////////

 si(hr_set_but)

 {

 if(hora<24) hora++;

 si(hora==24) hora=0;

 lcd.setCursor(0,2);

 lcd.imprimir(" ");

 lcd.setCursor(0,2);

 lcd.print(hora);

 retraso(200);

 }

 si(min_set_pero)

 {

 if(minuto<60) minuto++;

 if(minuto==60) minuto=0;

 lcd.setCursor(3,2);

 lcd.imprimir(" ");

 lcd.setCursor(3,2);

 lcd.print(minuto);

 retraso(200);

 }

 si(sec_set_but)

 {

 si(seg<60)seg++;

 si(seg==60) seg=0;

 lcd.setCursor(6,2);
 
lcd.imprimir(" ");

 lcd.setCursor(6,2);

 lcd.print(seg);

 retraso(200);

 }

 si(ent_pero)

 {

 si(set_time_flag==1)

 {

 strt_hr=hora;

 strt_min = minuto;

 strt_sec = segundo;

 EEPROM.write(11,strt_hr);

 EEPROM.write(12,strt_min);

 EEPROM.write(13,strt_sec);

 set_time_flag=0;

 proceso1_time_flag=1;

 lcd.setCursor(0,0);

 lcd.print("inicio de secuencia ");

 lcd.setCursor(0,1);

 lcd.print("la hora está configurada en ");

 lcd.setCursor(0,2);

 lcd.print(strt_hr);

 lcd.imprimir(':');

 lcd.print(strt_min);

 lcd.imprimir(':');

 lcd.print(strt_sec);

 retraso(2000);

 lcd.setCursor(0,0);

 lcd.print("Establecer proceso 1 ");

 lcd.setCursor(0,1);

 lcd.print("Duración del tiempo ");

 lcd.setCursor(0,2);

 lcd.print("00:00:00");

 hora = 0;

 minuto = 0;
 
segundos = 0;

 }

 de lo contrario si (proceso1_time_flag==1)

 {

 proceso1_sec = seg + EEPROM.read(13);

 si(proceso1_seg>60)

 {

 proceso1_sec = proceso1_sec-60;

 minuto++;

 }

 proceso1_min = minuto+EEPROM.read(12);

 si(proceso1_min>60)

 {

 proceso1_min = proceso1_min-60;

 horas++;

 }

 proceso1_hr = hr+EEPROM.read(11);

 EEPROM.write(14,proceso1_hr);

 EEPROM.write(15,proceso1_min);

 EEPROM.write(16,proceso1_sec);

 proceso1_time_flag=0;

 proceso2_time_flag=1;

 lcd.setCursor(0,0);

 lcd.print("Proceso 1 vez ");

 lcd.setCursor(0,1);

 lcd.print("la duración es ");

 lcd.setCursor(0,2);

 lcd.print(hora);

 lcd.print("Hr");

 lcd.print(minuto);

 lcd.print("minuto");

 lcd.setCursor(0,3);
 
lcd.print("y ");

 lcd.print(seg);

 lcd.print("segundo");

 retraso(2000);

 lcd.claro;

 lcd.setCursor(0,0);

 lcd.print("Establecer proceso 2 ");

 lcd.setCursor(0,1);

 lcd.print("Duración del tiempo ");

 lcd.setCursor(0,2);

 lcd.print("00:00:00");

 hora = 0;

 minuto = 0;

 segundos = 0;

 }

 de lo contrario si (proceso2_time_flag==1)

 {

 proceso2_sec = seg + EEPROM.read(16);

 si(proceso2_seg>60)

 {

 proceso2_sec = proceso2_sec-60;

 minuto++;

 }

 proceso2_min = minuto+EEPROM.read(15);

 si(proceso2_min>60)

 {

 proceso2_min = proceso2_min-60;

 horas++;

 }

 proceso2_hr = hr+EEPROM.read(14);

 EEPROM.write(17,proceso2_hr);

 EEPROM.write(18,proceso2_min);

 EEPROM.write(19,proceso2_sec);
 
proceso2_time_flag=0;

 proceso3_time_flag=1;

 lcd.setCursor(0,0);

 lcd.print("Tiempo del proceso 2 ");

 lcd.setCursor(0,1);

 lcd.print("la duración es ");

 lcd.setCursor(0,2);

 lcd.print(hora);

 lcd.print("Hr");

 lcd.print(minuto);

 lcd.print(" min ");

 lcd.setCursor(0,3);

 lcd.print("y ");

 lcd.print(seg);

 lcd.print("segundo");

 retraso(2000);

 lcd.claro;

 lcd.setCursor(0,0);

 lcd.print("Establecer proceso 3 ");

 lcd.setCursor(0,1);

 lcd.print("Duración del tiempo ");

 lcd.setCursor(0,2);

 lcd.print("00:00:00");

 hora = 0;

 minuto = 0;

 segundos = 0;

 }

 de lo contrario si (proceso3_time_flag==1)

 {

 proceso3_sec = seg + EEPROM.read(19);

 si(proceso3_seg>60)

 {

 proceso3_sec = proceso3_sec-60;

 minuto++;
 
}

 proceso3_min = minuto+EEPROM.read(18);

 si(proceso3_min>60)

 {

 proceso3_min = proceso3_min-60;

 horas++;

 }

 proceso3_hr = hr+EEPROM.read(17);

 EEPROM.write(20,proceso3_hr);

 EEPROM.write(21,proceso3_min);

 EEPROM.write(22,proceso3_sec);

 proceso3_time_flag=0;

 lcd.setCursor(0,0);

 lcd.print("Proceso 3 veces ");

 lcd.setCursor(0,1);

 lcd.print("la duración es ");

 lcd.setCursor(0,2);

 lcd.print(hora);

 lcd.print("Hr");

 lcd.print(minuto);

 lcd.print(" min ");

 lcd.setCursor(0,3);

 lcd.print("y ");

 lcd.print(seg);

 lcd.print("segundo");

 retraso(2000);

 lcd.claro;

 lcd.print("Hora:-");

 lcd.setCursor(0,1);

 lcd.print("Inicio del proceso 1 ");

 lcd.setCursor(0,2);

 lcd.print("Hora: ");
 
lcd.print(strt_hr);

 lcd.imprimir(':');

 lcd.print(strt_min);

 lcd.imprimir(':');

 lcd.print(strt_sec);

 sys_en_flag=1;

 }

 }

 }

###

Diagramas de circuito

Temporizador de secuencia industrial usando RTC y Arduino_circuit-Diagram

Vídeo del proyecto

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.