• No se han encontrado resultados

ARDUINO - LADDER PROYECTO CX3 RESET TEMP EH EN 2 CILINDROS BI MONO PARA ARDUINO

N/A
N/A
Jovanny Duque

Academic year: 2022

Share "ARDUINO - LADDER PROYECTO CX3 RESET TEMP EH EN 2 CILINDROS BI MONO PARA ARDUINO"

Copied!
9
0
0

Texto completo

(1)

CONTROL DE CIRCUITOS ELECTRONEUMÁTICOS / ELECTROHIDRÁULICOS (% del Corte)

https://youtube.com/playlist?list=PLHTERkK4EZJrSElocHbXzjzLjKXq8RjIV

ARDUINO BASADO EN LADDER

Aprende a programar Arduino desde una solución LADDER con una metodología confiable https://youtube.com/playlist?list=PLHTERkK4EZJq9hjTGCDQmaLvi7CAyk_q_

NOMBRE DE LOS ESTUDIANTES:_________________________________________________________________________________________________________________ __________________________________

Planteamiento de la situación:

Diseñe el Circuito de control eléctrico para gobernar los cilindros A y B según el diagrama Espacio- Fase (CASO ASIGNADO), tal que al dar la señal de inicio (CX3) , realice solo tres (3) ciclos completos con una temporización entre cada ciclo, una vez terminado, solo se podrá reiniciar, reseteando el contador de circuito.

A TENER EN CUENTA = Todos los proyectos usaran las mismas electroválvulas, al finalizar los 3 ciclos todos los relés deben estar desactivados, todos los proyectos usarán los mismos pines de entradas y salidas.

Diagrama Espacio - Fase

Circuito Electroneumático o Circuito Electrohidráulico

(2)

Circuito de control eléctrico

(3)

// CÓDIGO ARDUINO

/// TRATAMIENTO PREVIO

/// DISPOSITIVO PARA REMACHAR

/// I/ 0 ESTACIÓN CLASIFICADORA 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 de las entradas corresponden a las Entradas de pulsador NO (Normalmente abiertos) utilizadas para el circuito/programa

// Declaración de las memorias asociadas a cada relé se declaran en estado inicial bajo o false.

int K1 = 0;

int K2 = 0;

int K3 = 0;

int K4 = 0;

int K5 = 0;

int K6 = 0;

int K7 = 0;

int K8 = 0;

int K_F_C= 0;

// Declaración de las variables de Entradas y Salidas.

// ENTRADAS

int CX3 ; //Entrada de Pulsador que hará la función de pulsador de 3 Ciclo

int R_ESET = 0; // Entrada de Pulsador que hará la función de resetear el contador int A_0 ; // Harà la función de sensor de entrada final de carrera

int A_1; // Harà la función de sensor de entrada final de carrera int B_0 ; // Harà la función de sensor de entrada final de carrera int B_1; // Harà la función de sensor de entrada final de carrera // SALIDAS

int Y1 = 43; // Pin de salida acoplada a la bobina Y1 de la electroválvula 4/3 BI A+

int Y2 = 45; // Pin de salida acoplada a la bobina Y2 de la electroválvula 4/3 BI A- int Y3 = 41; // Pin de salida acoplada a la bobina Y3 de la electroválvula 4/2 MONO B+/-

// 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 asociadas a "temp2".

int T2 = LOW; // Bit asociado al temporizador 1

(4)

long inicio2, final2, actual2;

// Variables asociadas al Contador 1

int CONTADOR1 = 0; // Representa el valor actual del contador o ciclos completos realizados

const int PSCONTADOR1 = 3; // Preselect del Contador o # de ciclos , Representa el # de ciclos que se desean realizar int CONT1=0; // Es la variable que se activa cuando s cumplen los ciclos es decir cuando (CONTADOR1 >=PSCONTADOR1) int ESTADOPREVIO_K7 = 0; // Estado previo del componente que incrementa el contador,

en este caso K7 incrementa el contador

void setup() {

// put your setup code here, to run once:

//Apertura del visualizador serial Serial.begin(9600);

//Declaración de puertos digitales de Entradas y Salidas pinMode(15, INPUT); // No usar en este ejemplo

pinMode(27, INPUT); // No usar en este ejemplo pinMode(2, INPUT); // No usar en este ejemplo pinMode(18, INPUT); // No usar en este ejemplo pinMode(5, INPUT);

pinMode(6, INPUT);

pinMode(3, INPUT);

pinMode(4, INPUT);

pinMode(25, INPUT);

pinMode(21, INPUT);

pinMode(41, OUTPUT);

pinMode(43, OUTPUT);

pinMode(45, 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(Y1, LOW);

digitalWrite(Y2, LOW);

digitalWrite(Y3, LOW);

}

(5)

//TRATAMIENTO SECUENCIAL

void loop() {

// put your main code here, to run repeatedly:

//Capturar valores de puertos digitales de entrada CX3 = digitalRead(21); R_ESET = digitalRead(25);

A_0 = digitalRead(5); A_1 = digitalRead(6);

B_0 = digitalRead(3); B_1 = digitalRead(4);

if ( ( ((CX3 | T2) & A_0 & B_0) | K1) & (!K5) & (!CONT1)) { K1 = 1; } else { K1 = 0; }

if (((K1 & A_1) | K2) & (!K4) ) { K2 = 1; } else {K2 = 0; }

if (((K2 & B_1) | K3) & (!K4)) { K3 = 1;} else {K3 = 0;}

if (K3) { activetemp1();}

else {desactivetemp1(); }

if ((T1 | K4) & (!K5) ) {K4 = 1;}

else {K4 = 0; }

if (((K4 & B_0) | K5) & (!K6)) {K5 = 1;}

else {K5 = 0;}

if (((K5 & A_0) | K6) & (!K7)) { K6 = 1;}

else { K6 = 0; }

if (((K6 & A_1) | K7) & (!K_F_C)) {K7 = 1; } else {K7 = 0;}

if (((K7 & A_0) | K_F_C) & (!K8)) {K_F_C = 1;}

else {K_F_C = 0;}

if (K_F_C) {activetemp2();}

else {desactivetemp2(); } if (T2) { K8 = 1;}

else {K8 = 0;}

(6)

if (K7 != ESTADOPREVIO_K7) { if (K7 == HIGH) {CONTADOR1++;

Serial.print("Numero de Ciclos : ");

Serial.println(CONTADOR1); } ESTADOPREVIO_K7 = K7;}

if ( CONTADOR1 >=PSCONTADOR1) {CONT1=1;}

else {CONT1=0;}

if (R_ESET) {CONTADOR1 = 0; CONT1=0; Serial.println(CONTADOR1); Serial.print("Numero de Ciclos : "); }

// TRATAMIENTO POSTERIOR - ACTIVACIÓN DE LAS SALIDAS/ ACCIONES

if (K1 | K6) {digitalWrite(Y1, HIGH); } else {digitalWrite(Y1, LOW); }

if (K2) {digitalWrite(Y3, HIGH);}

else {digitalWrite(Y3, LOW);}

if (K5 | K7 ) {digitalWrite(Y2, HIGH);}

else {digitalWrite(Y2, 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 (K3 && 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 + 2000; //Temporización de 2 segundos }

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;

}

//SUBRUTINA TEMPORIZADOR 2 void activetemp2() {

(7)

if (K_F_C && activado2 == 0) { // Si K_F_C esta activa y no ha sido activado=0 antes...

activado2 = 1; // marca activado=1 y guarda el tiempo de inicio.

inicio2 = millis();

final2 = inicio2 + 2000; //Temporización de 2 segundos }

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;

}

PINES DE ENTRADA Y SALIDA ARDUINO MEGA

EN LA ESTACIÓN CLASIFICADORA DE PIEZAS

(8)

Jóvenes, este material ha sido elaborado con mucho gusto.

Si te es útil Regálame un Like, comenta y suscríbete :) (っ◕‿◕) Te invito al CANAL DE YOUTUBE MEKATRONICA

para conocer más

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

(9)

__________________________________

y Amigos/as en el BLOGG MEKATRONICA podrás encontrar cantidad de recursos sobre SOLIDWORKS, HIDRÁULICA - ELECTROHIDRÁULICA , NEUMÁTICA, ELECTRONEUMÁTICA, CONTROL, PLC M221,

PLC SIEMEMS S7 1200, PLC SIEMENS S7 300 , FLUID SIM FACTORY IO, entre otros

https://mecatronica-itsa.blogspot.com/

Referencias

Documento similar