PLC con arduino (ATmega328p AU) V4, es un controlador lógico programable que fue diseñado por Electroall, cuyo circuito esta basado en el dispositivo de PLC SIEMENS S7 1200 CPU1214c con salidas de relés. Inicialmente la versión actual contará con una alimentación de 24VDC al igual que todos los dispositivos industriales. En segundo lugar en esta versión se contará con 10 entradas digitales de 12-24VDC y 2 entradas analógicas de 0 a 5V. En cuanto a las salidas se contará con 8 salidas(relé).
Para el sistema de control se hará uso del microcontrolador ATmega328P AU (SMD), ya que este µC se puede programar fácilmente en el IDE de arudino. Finalmente este dispositivo cuenta con los principios de alto aislamiento similar a la mayoría los dispositivos industriales, tanto en la fase de las entradas como en las salidas.
ESPECIFICACIONES TÉCNICAS
- Tensión de alimentación……………………….…………24VDC
- Corriente de alimentación………………….……………100mA
- Entadas digitales 12-24VDC……………………….……10
- Entradas analógicas 0-5V……………………………………..2
- Programación Directa………………………………………..Ordenador – PLC V4
- Entorno de programación………………………..………..Arduino IDE
- Condiciones ambientales min……………………….….-10°
- Condiciones ambientales max…………………..……….55°
- Salidas RLY…………………………………………………………8
- Tensión salida AC………………………………………….……250V
- Corriente AC……………………………………………………….5A
- Tensión DC…………………………………………………………30V
- Corriente DC………………………………………………………5A
- Dimensiones………………………………………………………….100x100mm
- Empotrable……………………………………………………………Sí
CAMBIOS RESPECTO A LA ANTERIOR VERSIÓN (V3)
- Tipos de componentes.- En la versión anterior la mayoría de los componentes eran de tipo DIP. En la versión actual todos los componentes serán SMD, este cambio se hizo con fin de reducir espacio en la PCB, ya que en esta versión se ha integrado varios componentes electrónicos, con el fin de mejorar el dispositivo PLC V4.
- Integración de nuevos dispositivos.- Los nuevos dispositivos son:
- 74HC245, En la versión V3 este dispositivo ya estaba presente para el control de las entradas y, ahora para esta versión se agregará para el control de las salidas.
- 74HC14D, Este circuito integrado nos permite eliminar ruidos producidos por efecto de electromagnetismo. Además, este CI es indispensable ya que nuestro dispositivo PLC esta destinado para trabajar en ambientes industriales.
- CH340C, Es un chip de conversión de bus USB, puede realizar una interfaz USB a UART, cuyo objetivo es el permitir la comunicación entre la computadora y nuestra PCB (PLC V4), de esta manera se podrá programar directamente desde un ordenador, ya no será necesario usar un tercer dispositivo para subir cualquier programa.
ESQUEMÁTICO ELECTRÓNICO
DESCARGAR EL DISEÑO EN PROTEUS 8.9 (ayúdame con una donación para comprar materiales)
DISEÑO PCB
MATERIALES
- U1; Circuito integrado CH340C (see & buy)
- U2; Microcontrolador ATmega328p AU (see & buy)
- U3-U4;Circuito integrado 74HC245D (see & buy)
- U5; Circuito integrado ULN2803D (see & buy)
- U6-U7; Circuito integrado 74HC14D (see & buy)
- U8-U17; Opto acoplador TPL127 (see & buy)
- U18; Regulador de voltaje 7805 (see & buy)
- RL1-RL8; Relay 24V, (PA1A-24V) (see & buy)
- D1-D10, D26; led green SMD Package (1206) (see & buy)
- D11-D18, D20, D21; led red SMD Package (1206) (see & buy)
- D19; Diodo Schottky SS14-TP (see & buy)
- R1-R2; Resistencia SMD 1k Ohm, package 1206 (see & buy)
- R3-R4, R15-R24, R34; Resistencia SMD 10k Ohm, package 1206 (see & buy)
- R33; Resistencia SMD 5k Ohm, package 1206 (see & buy)
- R5-R14; Resistencia SMD 20k Ohm, package 1206 (see & buy)
- R25-R32; Resistencia SMD 470 Ohm, package 1206 (see & buy)
- R35-38; Resistencia según cálculo package RES40 _________
- C1-C10, C12, C16-C18; Capacitor cerámico 0.1µF, package 1206 (see & buy)
- C13-C14; Capacitor cerámico 22pF, package 1206 (see & buy)
- C11; Capacitor electrolítico 470µF/35V (see & buy)
- C15; Capacitor electrolítico 220µF/16V, (see & buy)
- BTN1; Pulsador SMD (see & buy)
- SW1-SW2; conectores espadines macho (see & buy)
- J1-J4, J8, J10; Borneras de conexión 3 pines (see)
- J5-J6, J7, J9; Borneras de conexión 2 pines (see)
- J11; Molex 6 pines (see & buy)
- J12; Jack USB 2 tipo B (see & buy)
- X1; Cristal 16Mhz (see & buy)
PASOS PARA SUBIR UN PROGRAMA
PASO 1 : SUBIR GESTOR DE ARRANQUE (BOOTLOADER)
Para poder usar un microcontrolador nuevo (atmega328p-U), es necesario subir un un gestor de arranque como también llamado “BOOTLOADER”, esto nos facilitará subir programas en futuras ocasiones.
finalmente para quemar el bootloader se tendrá que realizar a través de los pines ICSP, que prácticamente serían los pines [ (MOSI=11) (MISO = PIN12) (SCK=PIN13) (Slave=PIN10) ]. Para subir y quemar el gestor de arranque necesitaremos un arduino UNO ó MEGA y realizar las siguientes conexiones (ARDUINO UNO – PLC V4).
PASO 2 : SUBIR PROGRAMA; PC – PLC V4
Después de haber subido el gestor de arranque finalmente ya podremos subir cualquier programa como normalmente lo realizamos a través del puerto serie.
CONEXIONES EXTERNAS
RELACIONES DE BORNERAS EXTERNAS Y ATMEGA328P
CÓDIGO ARDUINO
SALIDAS
//SALIDAS DIGITALES int Q0_0=12; int Q0_1=13; int Q0_2=14; int Q0_3=15; int Q0_4=16; int Q0_5=17; int Q0_6=18; int Q0_7=19; void setup() { //SALIDAS DIGITALES pinMode (Q0_0,OUTPUT); pinMode (Q0_1,OUTPUT); pinMode (Q0_2,OUTPUT); pinMode (Q0_3,OUTPUT); pinMode (Q0_4,OUTPUT); pinMode (Q0_5,OUTPUT); pinMode (Q0_6,OUTPUT); pinMode (Q0_7,OUTPUT); } void loop() { digitalWrite(Q0_0,1); delay(1000); digitalWrite(Q0_0,0); delay(1000); digitalWrite(Q0_1,1); delay(1000); digitalWrite(Q0_1,0); delay(1000); digitalWrite(Q0_2,1); delay(1000); digitalWrite(Q0_2,0); delay(1000); digitalWrite(Q0_3,1); delay(1000); digitalWrite(Q0_3,0); delay(1000); digitalWrite(Q0_4,1); delay(1000); digitalWrite(Q0_4,0); delay(1000); digitalWrite(Q0_5,1); delay(1000); digitalWrite(Q0_5,0); delay(1000); digitalWrite(Q0_6,1); delay(1000); digitalWrite(Q0_6,0); delay(1000); digitalWrite(Q0_7,1); delay(1000); digitalWrite(Q0_7,0); delay(1000); }
ENTRADAS Y SALIDAS
// ENTRADAS DIGITALES int i0_0 = 4; int i0_1 = 5; int i0_2 = 6; int i0_3 = 7; int i0_4 = 8; int i0_5 = 9; int i0_6 = 10; int i0_7= 11; int i1_0 = 2; int i1_1 = 3; //SALIDAS DIGITALES int Q0_0=12; int Q0_1=13; int Q0_2=14; int Q0_3=15; int Q0_4=16; int Q0_5=17; int Q0_6=18; int Q0_7=19; void setup() { //ENTRADAS DIGITALES pinMode (i0_0,INPUT); pinMode (i0_1,INPUT); pinMode (i0_2,INPUT); pinMode (i0_3,INPUT); pinMode (i0_4,INPUT); pinMode (i0_5,INPUT); pinMode (i0_6,INPUT); pinMode (i0_7,INPUT); pinMode (i1_0,INPUT); pinMode (i1_1,INPUT); //SALIDAS DIGITALES pinMode (Q0_0,OUTPUT); pinMode (Q0_1,OUTPUT); pinMode (Q0_2,OUTPUT); pinMode (Q0_3,OUTPUT); pinMode (Q0_4,OUTPUT); pinMode (Q0_5,OUTPUT); pinMode (Q0_6,OUTPUT); pinMode (Q0_7,OUTPUT); } void loop() { //LECTURA DE ENTRADAS DIGITALES int I0_0= digitalRead(i0_0); int I0_1= digitalRead(i0_1); int I0_2= digitalRead(i0_2); int I0_3= digitalRead(i0_3); int I0_4= digitalRead(i0_4); int I0_5= digitalRead(i0_5); int I0_6= digitalRead(i0_6); int I0_7= digitalRead(i0_7); int I1_0= digitalRead(i1_0); int I1_1= digitalRead(i1_1); // ENCENDIENDO LAS SALIDAS SEGÚN LAS RESPECTIVAS ENTRADAS if(I0_0==1)digitalWrite(Q0_0,1); else digitalWrite(Q0_0,0); if(I0_1==1)digitalWrite(Q0_1,1); else digitalWrite(Q0_1,0); if(I0_2==1)digitalWrite(Q0_2,1); else digitalWrite(Q0_2,0); if(I0_3==1)digitalWrite(Q0_3,1); else digitalWrite(Q0_3,0); if(I0_4==1)digitalWrite(Q0_4,1); else digitalWrite(Q0_4,0); if(I0_5==1)digitalWrite(Q0_5,1); else digitalWrite(Q0_5,0); if(I0_6==1)digitalWrite(Q0_6,1); else digitalWrite(Q0_6,0); if(I0_7==1)digitalWrite(Q0_7,1); else digitalWrite(Q0_7,0); if(I1_0==0)digitalWrite(Q0_0,1); else digitalWrite (Q0_0,0); if(I1_1==0)digitalWrite(Q0_1,1); else digitalWrite(Q0_1,0); }
ENTRADAS ANALÓGICAS
//SALIDAS DIGITALES int Q0_0=12; int Q0_1=13; int Q0_2=14; int Q0_3=15; int Q0_4=16; int Q0_5=17; int Q0_6=18; int Q0_7=19; void setup() { pinMode (Q0_0,OUTPUT); pinMode (Q0_1,OUTPUT); pinMode (Q0_2,OUTPUT); pinMode (Q0_3,OUTPUT); pinMode (Q0_4,OUTPUT); pinMode (Q0_5,OUTPUT); pinMode (Q0_6,OUTPUT); pinMode (Q0_7,OUTPUT); } void loop() { // ENTRADA ANALÓGICA AI0 if (analogRead(A6)>=250) digitalWrite (Q0_0,1); else digitalWrite (Q0_0,0); if (analogRead(A6)>=500) digitalWrite (Q0_1,1); else digitalWrite (Q0_1,0); if (analogRead(A6)>=750) digitalWrite (Q0_2,1); else digitalWrite (Q0_2,0); if (analogRead(A6)>=1000) digitalWrite (Q0_3,1); else digitalWrite (Q0_3,0); // ENTRADA ANALÓGICA AI0 if (analogRead(A7)>=250) digitalWrite (Q0_4,1); else digitalWrite (Q0_4,0); if (analogRead(A7)>=500) digitalWrite (Q0_5,1); else digitalWrite (Q0_5,0); if (analogRead(A7)>=750) digitalWrite (Q0_6,1); else digitalWrite (Q0_6,0); if (analogRead(A7)>=1000) digitalWrite (Q0_7,1); else digitalWrite (Q0_7,0); }
ENCENDIENDO Y APAGANDO SALIDAS DESDE MONITOR SERIE
//SALIDAS int Q0_0=12; int Q0_1=13; int Q0_2=14; int Q0_3=15; int Q0_4=16; int Q0_5=17; int Q0_6=18; int Q0_7=19; void setup() { Serial.begin(9600); pinMode (Q0_0,OUTPUT); pinMode (Q0_1,OUTPUT); pinMode (Q0_2,OUTPUT); pinMode (Q0_3,OUTPUT); pinMode (Q0_4,OUTPUT); pinMode (Q0_5,OUTPUT); pinMode (Q0_6,OUTPUT); pinMode (Q0_7,OUTPUT); } void loop() { // ENCENDIENDO Y APAGANDO SALIDAS DESDE MONITOR SERIE char data = Serial.read(); if(data=='0'){ digitalWrite (Q0_0,1); Serial.print ("DATO = "); Serial.println ("Q0_0 ESTÁ ENCENDIDO"); } if(data=='A'){ digitalWrite (Q0_0,0); Serial.print ("DATO = "); Serial.println ("Q0_0 ESTÁ APAGADO"); } if(data=='1'){ digitalWrite (Q0_1,1); Serial.print ("DATO = "); Serial.println ("Q0_1 ESTÁ ENCENDIDO"); } if(data=='B'){ digitalWrite (Q0_1,0); Serial.print ("DATO = "); Serial.println ("Q0_1 ESTÁ APAGADO"); } if(data=='2'){ digitalWrite (Q0_2,1); Serial.print ("DATO = "); Serial.println ("Q0_2 ESTÁ ENCENDIDO"); } if(data=='C'){ digitalWrite (Q0_2,0); Serial.print ("DATO = "); Serial.println ("Q0_2 ESTÁ APAGADO"); } if(data=='3'){ digitalWrite (Q0_3,1); Serial.print ("DATO = "); Serial.println ("Q0_3 ESTÁ ENCENDIDO"); } if(data=='D'){ digitalWrite (Q0_3,0); Serial.print ("DATO = "); Serial.println ("Q0_3 ESTÁ APAGADO"); } if(data=='4'){ digitalWrite (Q0_4,1); Serial.print ("DATO = "); Serial.println ("Q0_4 ESTÁ ENCENDIDO"); } if(data=='E'){ digitalWrite (Q0_4,0); Serial.print ("DATO = "); Serial.println ("Q0_4 ESTÁ APAGADO"); } if(data=='5'){ digitalWrite (Q0_5,1); Serial.print ("DATO = "); Serial.println ("Q0_5 ESTÁ ENCENDIDO"); } if(data=='F'){ digitalWrite (Q0_5,0); Serial.print ("DATO = "); Serial.println ("Q0_5 ESTÁ APAGADO"); } if(data=='6'){ digitalWrite (Q0_6,1); Serial.print ("DATO = "); Serial.println ("Q0_6 ESTÁ ENCENDIDO"); } if(data=='G'){ digitalWrite (Q0_6,0); Serial.print ("DATO = "); Serial.println ("Q0_6 ESTÁ APAGADO"); } if(data=='7'){ digitalWrite (Q0_7,1); Serial.print ("DATO = "); Serial.println ("Q0_7 ESTÁ ENCENDIDO"); } if(data=='H'){ digitalWrite (Q0_7,0); Serial.print ("DATO = "); Serial.println ("Q0_7 ESTÁ APAGADO"); } }
LECTURA ANALÓGICA EN EL MONITOR PLOTER
void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(A6)); //Serial.println(analogRead(A7)); }
3 comentarios. Dejar nuevo
Me puedes vender 3 placas armadas amigo
escríbanos a nuestro correo: [email protected]
Gracias