CIRCUITOS ELÉCTRICOS ARDUINO BASADO EN LADDER

Page 1

METODOLOGÍA DE PROGRACIÓN CIRCUITOS ELÉCTRICOS HECHO EN ARDUINO BASADO EN LADDER

Hola jóvenes, en estos enlaces del BLOGG y DEL CANAL, pueden encontrar recursos sobre fundamentos de ingeniería mecatrónica como : SOLIDWORKS, PROGRAMACIÓN DE ARDUINO, HIDRÁULICA – LENGUAJE LADDER , LENGUAJE GRAFCET ,ELECTROHIDRÁULICA , NEUMÁTICA, ELECTRONEUMÁTICA, PLC M221, PLC SIEMEMS S7 1200, PLC SIEMENS S7 300 , FLUID SIM, FACTORY IO, CONTROL, entre otros https://www.mecatrónica.com.co/ https://mecatronicaitsa.blogspot.com/ http://www.youtube.com/c/JovannyDu que?sub_confirmation=1_ Si te ha sido útil, regálame un Like, comenta y suscríbete :) (っ◕‿◕)


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ “METODOLOGÍA DE PROGRACIÓN” El procedimiento general a seguir para la implementación de la metodología de programación (LADDER sobre Arduino) se describe en las siguientes etapas:

Etapa1: Encontrar la solución a la situación planteada en lógica cableada (LADDER) con el Software Fluid Sim. A partir del enunciado o análisis del problema planteado, que describe en forma precisa la situación a solucionar, el programador/estudiante usa los conocimientos y competencias que tenga en el área de controles eléctricos y plantea una solución al problema de automatización en forma de un circuito de control eléctrico en lógica cableada aplicado a un sistema electromecánico (eléctrico, electroneumático y/o electrohidráulico) para ello se apoyará en el software de Simulación (Fluid Sim P). Como resultado de esto, se contará con un circuito de control en diagrama de contactos que representa la lógica a ser implementada como programa en el Arduino. Esta solución al ser simulada y verificada quedará fija como el algoritmo que debe ser traducido a la tarjeta de control, esta solución será independiente de el tipo de entradas

con la que se quiera

implementar el programa en el Arduino.

Etapa 2: Definir el diagrama de conexión de entradas y salidas en el Arduino En la etapa 1 se encontró una solución en términos de lógica cableada , la cual puede ser implementada de un sinnúmero de formas dependiendo de las características de las entradas que se le conecten o escojan para hacerlo por esta razón se debe definir el número de entradas, el tipo de entradas si son contactos

NO o NC y que pines serán asignados a cada una, similar a lo mostrado en la figura Y.

Etapa 3: Conectar alimentación del equipo de prácticas (sistema electromecánico /neumático + Arduino) a la fuente de poder de 110VAC, conectar la alimentación neumática , verificar y definir los pines y las conexiones de las entradas y salidas al Arduino las cuales están ya precableadas.

Etapa 4: Elaborar el programa equivalente en el IDE del Arduino Se elaborará el programa equivalente del circuito eléctrico

hecho en LADDER / Fluid Sim siguiendo

los lineamientos que a continuación se describen: 1 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ 1. Todo programa de Arduino está dividido en tres (3) espacio 

Antes del void setup:

En esta sección del programa se hace la “Declaración de Variables “ en ella deben aparecer las variables Ki corresponden

a las relés/memorias

interruptores, sensores

las

variables Si corresponden

a las Entradas de pulsador,

que aparecen en para el circuito/programa, las variables que corresponde a los

pin de salidas acoplada a un LED, bobina o relee. También se declaran las variables asociadas a cada temporizador y las variables asociadas al cada contador. 

Void setup: En esta sección del programa se Habilita la apertura del visualizador serial, se

hace la declaración

de puertos digitales como entradas o como salidas, se declaran los estados iniciales de los pines de las salidas en bajo/apagadas. 

Void loop: se capturan los valores de puertos digitales de entrada, inicio del Tratamiento Secuencial con la declaración de las ecuaciones características de cada renglón del circuito eléctrico, se

activan

las salidas/acciones. 

Después del void loop : se programan las subrutinas de temporización (Para cada temporización se asigna un subprograma //activetempx y un desactivetempx usando para ello comparaciones con el comando millis

Estas organización de tareas en la programación

se verán aplicadas a cada uno de los cuatro (4)

casos que hacen parte de la práctica Nº1.

Etapa 5: Configurar la comunicación entre el PC y el Arduino en términos de tipo de controlador (Mega) y puerto serial de comunicación, cargar y probar el funcionamiento.

2 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ IMPLEMENTACIÓN

DE LA METODOLOGÍA PARA TRADUCIR AL LENGUAJE “PROCESSING”

UN

CIRCUITO ELÉCTRICO HECHO EN LADDER.

La implementación de la metodología iniciará con la realización del control de encendido de una carga/salida representada por una (LUZ), con el uso de dos (2) pulsadores NO, para ello se usará la misma conexión simplificada de entradas y salidas de la figura Y, se probaran cuatro (4) casos ,Caso I, Caso II, Caso III y Caso IV con el uso del equipo de prácticas (sistema electromecánico /neumático + Arduino) cada uno con un nivel de complejidad creciente, al cabo de los cuales quedará claro como hacer uso de los elementos de programación como : entradas digitales, salidas digitales, memorias(relé), temporizaciones, contadores de eventos, entre otros , siguiendo una metodología.

En cada caso se desarrollan completamente las 5 etapas del proceso . Los pasos que se han de seguir en estos primeros casos van a ser similares para todas la demás experiencias que se puedan realizar con el equipo. Con la realización de estos casos se comprueba la flexibilidad que ofrecen los Arduino ya que sin modificar las entradas y salidas conectadas a él, se pueden correr diversos programas y causar un efecto diferente. Los elementos y equipos requeridos para realizar los 4 casos están descritos en la tabla T. Tabla T. Equipos y elementos requeridos

ITEM

ELEMENTOS

CANTIDAD

1

Luz piloto Led a 24 VDC

1

2

Fuente a 24 V DC

1

3

Pulsador Normalmente Abierto

2

4

Tarjeta Arduino

1

5

Cable de Comunicación PC - Arduino

1

6

Cables de conexión

7

Computador con los Programas Fluid Sim P y el IDE de Arduino

1

3 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

Fig. Y

Esquema simplificado de conexión de entradas y salidas a Arduino

CASO N°1 Planteamiento de la situación: La salida LUZ ( H1) del PLC se activará al pulsar START (S1) y se apagará al pulsar STOP (S0).

Solución Eléctrica LADDER en Fluid Sim P.

Programa en IDE del Arduino CASO N°1 4 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ /// TRATAMIENTO PREVIO /// Nombre del proyecto : START STOP LADDER EN ARDUINO OKOK //DECLARACION DE VARIABLES //Declaración de las variables Ki corresponden a las reles/memorias utilizadas para el circuito/programa //Declaración de las variables Si corresponden a las Entradas de pulsador NO (Normalmente abiertos) utilizadas para el circuito/programa //La designación H corresponde al pin de salidas acoplada a un LED int K1=0; // las memorias equivalentes a los Relés se declaran en estado inicial bajo o false. int S0 ; // Hará la función de STOP int S1 ; // Hará la función de START int H1 = 29; // LED de salida void setup() { //Apertura del visualizador serial Serial.begin(9600); //Declaración de puertos digitales pinMode(6, INPUT); pinMode(7, INPUT); pinMode(29, OUTPUT); //Algunos dispositivos traen una configuración "Sinking and Sourcing" //por eso es necesario colocar los puertos de salida en 0v. //Declaración del estado inicial de los pines de las salidas en bajo/apagadas digitalWrite(H1, LOW); } //TRATAMIENTO SECUENCIAL void loop() { //Capturar valores de puertos digitales de entrada S0= digitalRead(6); S1= digitalRead(7); if ((S1 | K1) && (!S0)) {K1=1;} else {K1=0; } // TRATAMIENTO POSTERIOR if (K1) {digitalWrite(H1, HIGH);} else {digitalWrite(H1, LOW);} }

5 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

CASO N°2 Planteamiento de la situación: La salida del PLC se activará al pulsar START (S1) y se apagará después de unos segundos por efecto de un temporizador o al pulsar STOP (S0) antes de la temporización.

Solución Eléctrica LADDER en Fluid Sim P.

Programa en IDE del Arduino del CASO N°2 /// TRATAMIENTO PREVIO /// CASO 2 LED TEMPORIZADO OKOK FUNCIONA //DECLARACION DE VARIABLES //Decalaración de las variables Ki corresponden a las reles/memorias utilizadas para el circuito/programa //Declaración de las variables Si corresponden a las Entradas de pulsador NO (Normalmente abiertos) utilizadas para el circuito/programa //La designación H corresponde al pin de salida acoplada a un LED int K1=0; // las memorias se declaran en estado inicial bajo o false. int S0 ; // Hará la función de STOP int S1 ; // Hará la función de START int H1 = 29; 6 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ // Variables asociadas a "temp1". int T1 = LOW; // Bit asociado al temporizador 1 int activado1 = 0; // Al principio no ha sido activado. long inicio1, final1, actual1; void setup() { //Apertura del visualizador serial Serial.begin(9600); //Declaración de puertos digitales pinMode(6, INPUT); pinMode(7, INPUT); pinMode(29, OUTPUT); //Algunos dispositivos traen una configuración "Sinking and Sourcing" //por eso es necesario colocar los puertos de salida en 0v. //Declaración del estado inicial

de los pines de las salidas en bajo/apagadas

digitalWrite(H1, LOW); } //TRATAMIENTO SECUENCIAL void loop() { //Capturar valores de puertos digitales de entrada S0= digitalRead(6); S1= digitalRead(7);

if ((S1 | K1) && (!S0) && (!T1)) {K1=1;} else {K1=0; } if (K1) {activetemp1(); } else {desactivetemp1();} // TRATAMIENTO POSTERIOR if (K1) {digitalWrite(H1, HIGH);} else {digitalWrite(H1, LOW);} } //SUBRUTINAS DE TEMPORIZACIÓN (Par cada temporización se asigna un subprograma //activetempx y un desactivetempx usando para ello comparaciones con el comando millis //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //SUBRUTINA TEMPORIZADOR 1 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void activetemp1() { if (K1 && activado1 == 0) { // Si K1 esta activa y no ha sido activado=0 antes... activado1 = 1; // marca activado=1 y guarda el tiempo de inicio. inicio1 = millis(); 7 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ final1 = inicio1 + 2000; } actual1 = millis(); // Consulta el tiempo actual. if (activado1 == 1 && (actual1 > final1) ) { T1 = HIGH; } else { T1 = LOW; } } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void desactivetemp1() { T1 = LOW; activado1 = 0; inicio1 = 0; final1 = 0; actual1 = 0; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

CASO N°3 Planteamiento de la situación: La salida del PLC (H1) quedará en un ciclo intermitente de encendido (2s) y apagado (2s) al pulsar START (S1) y se detendrá al pulsar STOP (S0). Solución Eléctrica LADDER en Fluid Sim P.

8 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ Programa en IDE del Arduino del CASO N°3

/// TRATAMIENTO PREVIO /// CASO 3 LED INTERMITENTE INDEFINIDO TEMPORIZADO OK //DECLARACION DE VARIABLES //Declaración de las variables Ki corresponden a las relés/memorias utilizadas para el circuito/programa //Declaración de las variables Si corresponden a las Entradas de pulsador NO (Normalmente abiertos) utilizadas para el circuito/programa //La designación H corresponde al pin de salidas acoplada a un LED int K1=0; int K2=0; // Las memorias se declaran en estado inicial bajo o false. int S0 ; // Hará la función de STOP int S1 ; // Hará la función de START int H1 = 29; // Pin de salida del LED

// Variables asociadas a "temp1". int T1 = LOW; // Bit asociado al temporizador 1 int activado1 = 0; // Al principio no ha sido activado. long inicio1, final1, actual1; // Variables int T2 ; int activado2 long inicio2,

asociadas a "temp2". // Bit asociado al temporizador 2 = 0; // Al principio no ha sido activado. final2, actual2;

void setup() { //Apertura del visualizador Serial.begin(9600);

serial

//Declaración de puertos digitales pinMode(6, INPUT); pinMode(7, INPUT); pinMode(29, OUTPUT); //Algunos dispositivos traen una configuración "Sinking and Sourcing" //por eso es necesario colocar los puertos de salida en 0v. //Declaración del estado inicial

de los pines de las salidas en bajo/apagadas

digitalWrite(H1, LOW); } //TRATAMIENTO void loop() {

SECUENCIAL 9

Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ //Capturar valores de puertos digitales de entrada S0= digitalRead(6); S1= digitalRead(7);

if ((S1 | K1 |T2) && (!S0) && (!T1)) {K1=1;} else {K1=0; } if (K1) {activetemp1(); } else {desactivetemp1();} if ((T1 | K2) && (!S0) && (!T2)) {K2=1;} else {K2=0;} if (K2) {activetemp2(); } else {desactivetemp2();}

// TRATAMIENTO POSTERIOR - ACTIVACIÓN DE LAS if (K1) {digitalWrite(H1, HIGH);} else {digitalWrite(H1, LOW);}

SALIDAS/ ACCIONES

} //SUBRUTINAS DE TEMPORIZACIÓN (Par cada temporización se asigna un subprograma //activetempx y un desactivetempx usando para ello comparaciones con el comando millis //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //SUBRUTINA TEMPORIZADOR 1 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void activetemp1() { if (K1 && activado1 == 0) { // Si K1 esta activa y no ha sido activado=0 antes... activado1 = 1; // marca activado=1 y guarda el tiempo de inicio. inicio1 = millis(); final1 = inicio1 + 1000; } actual1 = millis(); // Consulta el tiempo actual. if (activado1 == 1 && (actual1 > final1) ) { T1 = HIGH; } else { T1 = LOW; } } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void desactivetemp1() { T1 = LOW; activado1 = 0; inicio1 = 0; final1 = 0; actual1 = 0; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ //SUBRUTINA TEMPORIZADOR 2 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void activetemp2() { if (K2 && activado2 == 0) { // Si ha pulsado HIGH y no ha sido activado2 = 1; // marca activado=1 y guarda inicio2 = millis(); final2 = inicio2 + 1000; } actual2 = millis(); // Consulta el tiempo actual. if (activado2 == 1 && (actual2 > final2) ) { T2 = HIGH; } else { T2 = LOW; } } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void desactivetemp2() { T2 = LOW; activado2 = 0; inicio2 = 0; final2 = 0; actual2 = 0; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - activado=0 antes... el tiempo de inicio.

- - - - - - - - - - -

- - - - - - - - - - -

11 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

CASO N°4 Planteamiento de la situación: Al pulsar START (S1) , la salida del Arduino (H1) solo hará una secuencia de encendido y apagado intermitente por (4) cuatro ciclos de encendido (2s) y apagado (2s). Una vez realizados deberá accionarse el pulsador RESET (S0) para habilitar una nueva secuencia.

Solución Eléctrica LADDER en Fluid Sim P.

Programa equivalente en IDE del Arduino

/// TRATAMIENTO PREVIO /// CASO 4 LED INTERMITENTE X4 OKO //DECLARACION DE VARIABLES //Declaración de las variables Ki corresponden a circuito/programa //Declaración de las variables Si corresponden a abiertos) utilizadas para el circuito/programa //La designación H corresponde al pin de salidas int K1=0; int K2=0; // Las memorias se declaran en estado

las relés/memorias

utilizadas para el

las Entradas de pulsador

NO (Normalmente

acoplada a un LED inicial bajo o false. 12

Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ int S0=6; // Hará la función de STOP int S1=7 ; // Hará la función de START int H1 = 29; // Pin de salida del LED // Variables asociadas a "temp1". int T1 = LOW; // Bit asociado al temporizador 1 int activado1 = 0; // Al principio no ha sido activado. long inicio1, final1, actual1; // Variables int T2 ; int activado2 long inicio2,

asociadas a "temp2". // Bit asociado al temporizador 2 = 0; // Al principio no ha sido activado. final2, actual2;

// Variables asociadas al Contador 1 int CONTADOR1 = 0; const int PSCONTADOR1 = 3; // Preselect del Contador o # de ciclos int ESTADOPREVIO_T1 = 0; // Estado previo del componente que incrementa el contador void setup() { //Apertura del visualizador Serial.begin(9600);

serial

//Declaración de puertos digitales pinMode(6, INPUT); pinMode(7, INPUT); pinMode(29, OUTPUT); //Algunos dispositivos traen una configuración "Sinking and Sourcing" //por eso es necesario colocar los puertos de salida en 0v. //Declaración del estado inicial

de los pines de las salidas en bajo/apagadas

digitalWrite(H1, LOW); } //TRATAMIENTO

SECUENCIAL

void loop() { //Capturar valores de puertos digitales de entrada S0= digitalRead(6); S1= digitalRead(7); //TRATAMIENTO SECUENCIAL // Declaración de las ecuaciones caracteristicas de cada renglon if ((S1 | K1 |T2) && (CONTADOR1< PSCONTADOR1) && (!T1)) {K1=1;} else {K1=0; } if (K1) {activetemp1(); } 13 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ else {desactivetemp1();} if ((T1 | K2) && (!S0) && (!T2)) {K2=1;} else {K2=0;} if (K2) {activetemp2(); } else {desactivetemp2();} if (T1 != ESTADOPREVIO_T1) { if (T1 == HIGH) { CONTADOR1++; Serial.print("Numero de Ciclos : Serial.println(CONTADOR1); } ESTADOPREVIO_T1 = T1; } if (S0 == HIGH) { Serial.print("Numero de Ciclos : Serial.println(CONTADOR1); CONTADOR1 = 0; }

");

");

// TRATAMIENTO POSTERIOR - ACTIVACIÓN DE LAS if (K1) {digitalWrite(H1, HIGH);} else {digitalWrite(H1, LOW);}

SALIDAS/ ACCIONES

} //SUBRUTINAS DE TEMPORIZACIÓN (Para cada temporización se asigna un subprograma //activetempx y un desactivetempx usando para ello comparaciones con el comando millis //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //SUBRUTINA TEMPORIZADOR 1 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void activetemp1() { if (K1 && activado1 == 0) { // Si K1 esta activa y no ha sido activado=0 antes... activado1 = 1; // marca activado=1 y guarda el tiempo de inicio. inicio1 = millis(); final1 = inicio1 + 1000; } actual1 = millis(); // Consulta el tiempo actual. if (activado1 == 1 && (actual1 > final1) ) { T1 = HIGH; } else { T1 = LOW; }

} //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void desactivetemp1() { 14 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ T1 = LOW; activado1 = 0; inicio1 = 0; final1 = 0; actual1 = 0; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

//SUBRUTINA TEMPORIZADOR 2 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void activetemp2() { if (K2 && activado2 == 0) { // Si ha pulsado HIGH y no ha sido activado2 = 1; // marca activado=1 y guarda inicio2 = millis(); final2 = inicio2 + 1000; } actual2 = millis(); // Consulta el tiempo actual. if (activado2 == 1 && (actual2 > final2) ) { T2 = HIGH; } else { T2 = LOW; } } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void desactivetemp2() { T2 = LOW; activado2 = 0; inicio2 = 0; final2 = 0; actual2 = 0; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - activado=0 antes... el tiempo de inicio.

- - - - - - - - - - -

- - - - - - - - - - -

15 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

16 Elaborado por Ing. Jovanny Duque


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

Hola jovenes, en estos enlaces del BLOGG y DEL CANAL, pueden encontrar recursos sobre sobre fundamentos de ingeniería mecatronica como : SOLIDWORKS, PROGRAMACION DE ARDUINO, HIDRAULICA ELECTROHIDRAULICA , NEUMATICA, LENGUAJE LADDER , LENGUAJE GRAFCET ELECTRONEUMATICA, PLC M221, PLC SIEMEMS S7 1200, PLC SIEMENS S7 300 , FLUID SIM, FACTORY IO, CONTROL, entre otros

https://www.mecatronica.com.co/ https://mecatronica-itsa.blogspot.com/ http://www.youtube.com/c/JovannyDuque?sub_confirmation =1_ Si te ha sido util, regalame un Like, comenta y suscríbete :) (っ◕‿◕)

17 Elaborado por Ing. Jovanny Duque


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.