CONTROL DE CIRCUITOS ELECTRONEUMÁTICOS PROGRAMADO SOBRE 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_
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 solucio n LADDER con una metodología confiable https://youtube.com/playlist?list=PLHTERkK4EZJq9hjTGCDQmaLvi7CAyk_q_
Planteamiento de la situación: Disene el Circuito de control eléctrico para gobernar los cilindros A y B segun el diagrama Espacio- Fase (CASO ASIGNADO), tal que al dar la senal de inicio (CX3) , realice solo tres (3) ciclos completos con una temporizacion entre cada ciclo, una vez terminado, solo se podra reiniciar, reseteando el contador de circuito. A TENER EN CUENTA = Todos los proyectos usaran las mismas electrovalvulas, al finalizar los 3 ciclos todos los reles deben estar desactivados, todos los proyectos usaran los mismos pines de entradas y salidas. Diagrama Espacio - Fase
Elaborado por Ing. Jovanny Duque
pág. 1
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
Circuito Electroneumático
o
Circuito Electrohidráulico
Circuito de control eléctrico
Elaborado por Ing. Jovanny Duque
pág. 2
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
Elaborado por Ing. Jovanny Duque
pág. 3
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
// CODIGO 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
//Declaración de las variables de las entradas corresponden abiertos) utilizadas para el circuito/programa
// Declaración de las memorias
asociadas
a cada relé se
utilizadas para el circuito/programa
a las Entradas de pulsador
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 Elaborado por Ing. Jovanny Duque
NO (Normalmente
pág. 4
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ 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
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
//
el contador
// SALIDAS int Y1 = 43; //
Pin de salida acoplada a la
bobina
Y1
de la electroválvula 4/3
int Y2 = 45; //
Pin de salida acoplada a la
bobina
Y2
de la electroválvula 4/3
int Y3 = 41; //
Pin de salida acoplada a la
bobina
Y3 de la electroválvula 4/2
// Variables
asociadas a
"temp1".
// Bit
asociado
int T1 = LOW;
al
temporizador
BI BI
A+ A-
MONO
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
1
int activado2 = 0; // Al principio no ha sido activado. long inicio2, final2, actual2;
Elaborado por Ing. Jovanny Duque
pág. 5
B+/-
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ // Variables
asociadas al Contador 1
int CONTADOR1 = 0; // Representa
el valor
actual
const int PSCONTADOR1 = 3; // Preselect del int CONT1=0;
// Es la variable
que
se
del
contador o ciclos
Contador o # de ciclos
activa
cuando s
completos realizados
, Representa
cumplen los
# de ciclos
contador,
{
// 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); Elaborado por Ing. Jovanny Duque
que
se desean realizar
ciclos es decir cuando (CONTADOR1 >=PSCONTADOR1)
int ESTADOPREVIO_K7 = 0; // Estado previo del componente que incrementa el en este caso K7 incrementa el contador
void setup()
el
pág. 6
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ 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); }
//TRATAMIENTO
void loop()
SECUENCIAL {
// put your main code here, to run repeatedly: //Capturar valores de puertos digitales de entrada CX3 = digitalRead(21); Elaborado por Ing. Jovanny Duque
R_ESET = digitalRead(25); pág. 7
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ A_0 = digitalRead(5);
A_1 = digitalRead(6);
B_0 = digitalRead(3);
B_1 = digitalRead(4);
if (
( ((CX3 | T2)
else {
& A_0 & B_0) | K1)
& (!K5) &
(!CONT1)) { K1 = 1; }
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; } Elaborado por Ing. Jovanny Duque
pág. 8
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ 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;}
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 Elaborado por Ing. Jovanny Duque
= 0; CONT1=0; Serial.println(CONTADOR1); Serial.print("Numero de Ciclos : pág. 9
"); }
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ // 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 //activetempx
y
un
(Par cada temporización se asigna un subprograma
desactivetempx usando para ello comparaciones con el comando millis
//SUBRUTINA TEMPORIZADOR 1 void activetemp1() { if (K3 && activado1 == 0) { activado1 = 1;
// Si K1 esta
activa y no ha sido activado=0 antes...
// marca activado=1 y guarda el tiempo de inicio.
inicio1 = millis(); final1 = inicio1 + 2000;
//Temporización
de 2
segundos
}
Elaborado por Ing. Jovanny Duque
pág. 10
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ 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 (K_F_C && activado2 == 0) { activado2 = 1;
// Si K_F_C esta
activa y no ha sido activado=0 antes...
// 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() { Elaborado por Ing. Jovanny Duque
pág. 11
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ T2 = LOW; activado2 = 0; inicio2 = 0; final2 = 0; actual2 = 0; }
PINES
DE ENTRADA
Y
SALIDA ARDUINO
EN LA
Elaborado por Ing. Jovanny Duque
ESTACIÓN
MEGA
CLASIFICADORA DE PIEZAS
pág. 12
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
Jovenes, este material ha sido elaborado con mucho gusto. Si te es util Rega lame un Like, comenta y suscríbete :) (っ◕‿◕) Te invito al CANAL DE YOUTUBE MEKATRONICA para conocer ma s
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ __________________________________ y Amigos/as en el BLOGG MEKATRONICA 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/
Elaborado por Ing. Jovanny Duque
pág. 13
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
Elaborado por Ing. Jovanny Duque
pág. 14