ARDUINO EN LADDER PROGRAMACIÓN DE ARDUINO EN LENGUAJE LADDER CIRCUITO ELECTRONEUMÁTICO COMPLETO CON UN CILINDRO CON MULTIPLES CONDICIONES DE OPERACIÓN
https://youtu.be/8UsNg5HAqt0
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 :) (っ◕‿◕)
SISTEMAS DE AUTOMATIZACIÓN SECUENCIALES IMPLEMENTADOS EN LADDER SOBRE ARDUINO
ARDUINO ARDUINO BASADO EN LADDER Aprende a programar Arduino desde una solucio n LADDER con una metodología confiable https://youtube.com/playlist?list=PLHTERkK4EZJq9hjTGCDQmaLvi7CAyk_q_
Acceso a PDF
https://play.google.com/books/s/370286768613/ebooks https://mega.nz/folder/a9thTIjA#bSAwbpbG3Z34DW3jJ_bMQg
ARDUINO Aprende a programar Arduino desde una solucio n LADDER o GRAFCET con metodologí as confiables https://youtube.com/playlist?list=PLHTERkK4EZJr7zDQNKjjEyxhErjllCCUy
GRAFCET CON ARDUINO Programa en Arduino sistemas secuenciales simulados en GRAFCET , con un metodo confiable 100% https://youtube.com/playlist?list=PLHTERkK4EZJpJEcByUotJ5YOIiC-Vmimt
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ PROGRAMACIÓN DE ARDUINO EN LENGUAJE LADDER Ciclo de trabajo Con posibilidad de elegir entre Cu – CC o Cx3 con Temporización entre ciclos. REALIZADO EN LA ESTACIÓN CLASIFICADORA DE PIEZAS
CIRCUITO ELECTRONEUMÁTICO/HIDRÁULICO
Ó
Condiciones de evaluación Elabore Circuito de control eléctrico para gobernar el cilindro A según el diagrama Espacio- Fase, de tal manera que cumpla con las siguientes especificaciones 1. Debe permitir la operación en Ciclo Único (CU) o Ciclo Continuo (CC) o Ciclo X3 (CX3). 2. El CC o CX3 deben quedar interrumpido (termina el ciclo actual y se detiene) por la acción de conmutar a CU, es decir el pasador de CU hará as veces de Stop.
2
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ 3. El dispositivo se explora a través de un detector de pieza, cuando no hay piezas en el depósito, no ha de iniciar un ciclo o ha de pararse la instalación en su posición base, debiendo quedar interrumpido el Ciclo Continuo (CC) o el CX3. 4. En el modo CC o CX3 debe tener una temporización entre cada ciclo 5. Una vez accionado el pulsador de Paro de Emergencia (PE), debe retornar inmediatamente el cilindro a la posición de partida, ninguna otra acción puede darse mientras esté en la situación de emergencia, y al reestablecer el botón de emergencia tampoco debe presentarse ninguna activación en el circuito. 6. En CC o en CX3 el sistema debe asegurar una temporización entre ciclos. 7. Una vez terminado los 3 ciclos del modo CX3, el cilindro debe quedara en su posición de reposo (retraído) y solo se podrá reiniciar, reseteando el contador de circuito y pulsando nuevamente cualquiera de los pulsadores CU,CC o CX3. Calificación %
CONDICIÓN
Si realiza el CU al pulsar
Si realiza el CC al pulsar Si realiza el Cx3 al pulsar Si después de CX3 no se puede ejecutar CU - CC o CX3 hasta que previamente de pulse
.
Si CC queda anulado por la acción de CU
Si CC queda anulado por la acción de Si CC o CX3 queda interrumpido al no haber pieza en el deposito (abierto = No hay pieza) Si entre Ciclo y Ciclo hay una temporización de 5 s Si al pulsar en cualquier momento PE el sistema el cilindro regresa inmediatamente y se suspenden los ciclos.
3
NOTA (1-5)
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/
4
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/
5
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ PROGRAMACIÓN DE ARDUINO /// TRATAMIENTO ///
A+ T
PREVIO
A- COMPLETO
IMPLEMENTADO EN ESTACI0N MECATRÓNICA CLASIFICADORA
//DECLARACION DE VARIABLES //Declaración de las circuito/programa
variables Ki corresponden
a las reles/memorias
utilizadas para el
//Declaración de las variables de las entradas corresponden a las Entradas de pulsador NO (Normalmente abiertos) utilizadas para el circuito/programa //La designación Y1 y Y2 corresponde a los la electroválvula 5/2 biestable
pine de salidas
acoplada a las
bobinas de
int K1 = 0; int K2 = 0; int K3 = 0; int K4 = 0; int K5 = 0; int K6 = 0; int K_CC = 0; int K_PE = 0; int K_CX3 = 0;// Las memorias o false.
asociadas
a cada relé se
int CU ; //
Harà la función de pulsador de Ciclo Unico
int CC; //
Harà la función de pulsador de Ciclo Continuo
int CX3; //
declaran en
estado inicial bajo
Harà la función de pulsador de Ciclo Continuo
int R_ESET; // Harà la función de pulsador de RESET int PIEZA;
//
Harà la función de indicar si hay o no pieza
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 PE;
// //
Harà la función de BOTON DE PARO DE EMERGENCIA (N CERRADO)
int Y1 = 23; //
Pin de salida acoplada a las
6
bobinas de la electroválvula 5/2
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ int Y2 = 25; //
// Variables
Pin de salida acoplada a las
asociadas a
"temp1".
// Bit
asociado
int T1 = LOW;
al
bobinas de la electroválvula 5/2
temporizador
1
int activado1 = 0; // Al principio no ha sido activado. long inicio1, final1, actual1;
// Variables
asociadas a
"temp2".
// Bit
asociado
int T2 = LOW;
al
temporizador
2
int activado2 = 0; // Al principio no ha sido activado. long inicio2, final2, actual2;
// Variables
asociadas al Contador 1
int CONTADOR1 = 0;
const int PSCONTADOR1 = 3; // Preselect del
int ESTADOPREVIO_K6 = 0;
// Estado previo del componente que incrementa el
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 pinMode(6, INPUT);
// CU
pinMode(14, INPUT);
// A_0
pinMode(15, INPUT);
// A_1
pinMode(12, INPUT); // PIEZA pinMode(7, INPUT);
//
Contador o # de ciclos
CC
7
Salidas
contador
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ pinMode(8, INPUT);
// CXN
pinMode(9, INPUT); // RESET pinMode(13, INPUT);
//
PE
pinMode(23, OUTPUT);
// Y1
pinMode(25, OUTPUT);
// Y2
//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); }
//TRATAMIENTO
SECUENCIAL
void loop() { // put your main code here, to run repeatedly: //Capturar valores de puertos digitales de entrada CU = digitalRead(6);
CC = digitalRead(7);
CX3 = digitalRead(8);
PIEZA = digitalRead(12);
A_0 = digitalRead(14);
R_ESET = digitalRead(9);
PE = digitalRead(13);
A_1 = digitalRead(15);
if ((((CU | CC | CX3 | T2) && A_0 && PIEZA) | K1) && (!K2) && (CONTADOR1< PSCONTADOR1) && PE ) {K1 = 1;} else { K1 = 0;}
8
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ if (((K1 && A_1) | K2) && (!K3)) {K2 = 1;} else {K2 = 0;}
if (K2) {activetemp1();} else {desactivetemp1();}
if ((T1 | K3) && (!K4) ) {K3 = 1;} else { K3 = 0;}
if (K3 && A_0)
{K4 = 1;}
else {K4 = 0;}
if ((K4 | K5) && (!T2) && (CONTADOR1< PSCONTADOR1) else {K5 = 0;}
if (K5) {activetemp2();} else {desactivetemp2();}
if (K_CX3 && K5)
{K6 = 1;}
else {K6 = 0;} if (K6 != ESTADOPREVIO_K6) { if (K6 == HIGH) { CONTADOR1++; Serial.print("Numero de Ciclos : Serial.println(CONTADOR1);
");
}
ESTADOPREVIO_K6 = K6; } if (R_ESET |!PE) { Serial.print("Numero de Ciclos :
");
Serial.println(CONTADOR1);
9
&& (K_CC | K_CX3))
{K5 = 1;}
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ CONTADOR1
= 0;
} if ( (CC | K_CC)&& PE && PIEZA && (!CU) && (CONTADOR1< PSCONTADOR1) && {K_CC = 1;}
(!K_CX3)
)
&& PIEZA && (!CU) && (CONTADOR1< PSCONTADOR1)&& (!K_CC)
)
else {K_CC = 0;}
if ( (PE| K_PE)&& (!A_0)) {K_PE = 1;} else {K_PE = 0;} if ( (CX3 | K_CX3)&& PE {K_CX3 = 1;} else {K_CX3 = 0;}
// TRATAMIENTO POSTERIOR - ACTIVACIÓN DE LAS
SALIDAS/ ACCIONES
if (K1) {digitalWrite(Y1, HIGH);} else { digitalWrite(Y1, LOW); }
if (K3) {digitalWrite(Y2, HIGH); } else { digitalWrite(Y2, LOW);}
if (K_CX3) {digitalWrite(33, HIGH); } else { digitalWrite(33, LOW);} // borrraRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRARRRRR
if (K_CC) {digitalWrite(31, HIGH); } else { digitalWrite(31, LOW);} // borraRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRARRRRR } //
Fin del void loop
//SUBRUTINAS DE TEMPORIZACIÓN //activetempx
y un
(Par cada temporización se asigna un subprograma
desactivetempx usando para ello comparaciones con el comando millis
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
10
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ //SUBRUTINA TEMPORIZADOR 1 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void activetemp1() { if (K2 && activado1 == 0) { activado1 = 1;
// Si K2 esta
activa y no ha sido activado=0 antes...
// marca activado=1 y guarda el tiempo de inicio.
inicio1 = millis(); 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; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //SUBRUTINA TEMPORIZADOR 2 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void activetemp2() { if (K5 && activado2 == 0) { activado2 = 1;
// Si K5
y no ha sido activado=0 antes...
// marca activado=1 y guarda el tiempo de inicio.
inicio2 = millis(); final2 = inicio2 + 2000;
11
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/ } 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; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
________________________________ Jovenes, este material ha sido elaborado con mucho gusto. Si te es util Rega lame un Like, comenta y suscríbete :) (っ◕‿◕) Amigos/as en el BLOGG MEKATRONICA J DUKE podras encontrar cantidad de recursos sobre SOLIDWORKS, HIDRAULICA ELECTROHIDRAULICA , NEUMATICA, ELECTRONEUMATICA, CONTROL, PLC M221, PLC SIEMEMS S7 1200, PLC SIEMENS S7 300 , FLUID SIM FACTORY IO, entre otros
https://mecatronica-itsa.blogspot.com/ 12
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ https://mecatronica-itsa.blogspot.com/
https://www.mecatronica.com.co/
13