INTRODUCCIÓN
A inicios de este año 2020 se publicó un video del PLC V4. cuyo dispositivo aún se tenia que mejorar, por lo tanto, para este versión 4.1, se ha integrado un Reloj de Tiempo real y una fuente DC DC step down.
PLC con arduino (ATmega328p AU) V4.1, 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. Además, incluye un Reloj de tiempo Real (RTC). En segundo lugar en esta versión se contará con 8 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. Por otro lado este PLC se programará de manera directa ordenador – PLC V4.1. 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
- Fuente DC – DC step down………………………………….Sí
- Reloj de Tiempo Real……………………………………………Sí
- Entadas digitales 12-24VDC……………………….……8
- Entradas analógicas 0-5V………………………………..2
- Programación Directa………………………………………..Ordenador – PLC V4.1
- 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 (V4)
- Reloj de Tiempo Real.- Este sistema nos permite obtener la hora y la fecha en tiempo real, puesto que almacena los años, los meses, los días de la semana, la fecha, las horas, los minutos y los segundos, lo cual nos permite realizar instrucciones y/o ordenes que tengas que ver con los valores de tiempo real. Por ejemplo, podemos encender una lampara solo los días viernes a las 6 de la tarde y que se apague el día sábado a las 5 de la mañana. Así mismo el circuito integrado principal es el DS3231SN, básicamente este dispositivo se encarga de proporcionar la fecha y la hora a nuestro microcontrolador, muy aparte de ello este componente esta destinado para trabajar en las industrias.
- Fuente DC-DC step down.- En las anteriores versiones para bajar el voltaje de 24V a 5V estuvimos usando el regular 7805, si bien es cierto este dispositivo funciona bien para circuitos pequeños que no requieren una buena cantidad de corriente. Sin embargo, cuando se trata de un circuito grande no podemos usar este dispositivo ya que se calienta demasiado. por ello se ha realizado el cambio por una fuente DC-DC step down, cuyo circuito integrado principal es el LM2576, este último dispositivo nos brinda muchos beneficios. En primer lugar, este dispositivo no se calienta a pesar de llegar a su capacidad tope. En segundo lugar, soporta la cantidad de corriente de su capacidad nominal. Por último, esta fuente podemos tener en uso por horas, días, años y no nos presentará problemas.
LISTA DE COMPONENTES ELECTRÓNICOS
- 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-U15; Opto acoplador TPL127 (see & buy)
- U16; I2C Serial EEPROM ( see & buy )
- U17; Maxin Integrated RTC DS3231SN ( see & buy )
- U18; Regulador de Step-Down LM2576S-5.0/TR (see & buy)
- RL1-RL8; Relay 24V, (PA1A-24V) (see & buy)
- D1-D8,D10; led green SMD Package (1206) (see & buy)
- D11-D18; led red SMD Package (1206) (see & buy)
- D9; Diodo Schottky SS14-TP (see & buy)
- D19,D20; Diodo Schottky Barrier Diodes B330A-13-F (see & buy)
- R1,R3,R4,R15-R22,R34; Resistencia SMD 1/10W, 10k Ohm, package 0603 ( see & buy )
- R2; Resistencia SMD 1/10W, 1M Ohm, package 0603 ( see & buy )
- R5-R12; Resistencia SMD 20k Ohm, package 1206 (see & buy)
- R13-R14; Resistencia SMD 1/10W, 1k Ohm, package 0603 ( see & buy )
- R25-R32; Resistencia SMD 470 Ohm, package 1206 (see & buy)
- R33, R35; Resistencia SMD 1/10W, array 4pack 4.7k Ohm, package 0603 ( see & buy )
- R36; Resistencia SMD 1/8W, 470 Ohm, package 0805 ( see & buy )
- R37; Resistencia SMD 1/8W, 4.7k Ohm, package 0805 ( see & buy )
- C1-C8, C12, C19; Capacitor cerámico 0.1uF (0603) ( see & buy )
- C9; Capacitor ceramico 0.1uF(1206) (see & buy)
- C10; Capacitor electrolítico 470µF/35V (see & buy)
- C11; Capacitor electrolítico 220µF/16V, (see & buy)
- L1; Inductor 100uH (see & buy)
- BTN1; Pulsador SMD (see & buy)
- SW1-SW2; conectores espadines macho (see & buy)
- J1,J3,J4, J8, J10; Borneras de conexión 3 pines (see)
- J2,J5,J7,J9; Borneras de conexión 2 pines (see)
- J11,J12,J14; conectores espadines macho (see & buy)
- J13; Jack USB 2 tipo B (see & buy)
- BAT1; Sócalo para batería 3V (see & buy)
- FUSE; Fusible 24V/1A (see & buy)
- X2; Crystal SMD 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.1).
PASO 2 : SUBIR PROGRAMA; PC – PLC V4.1
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.
PARTES Y CONEXIONES EXTERNAS
RELACIÓN DE BORNERAS EXTERNAS Y ATMEGA328P-AU
CÓDIGOS DE PRUEBA
OUTPUTS
//SALIDAS DIGITALES int Q0_0=10; int Q0_1=11; int Q0_2=12; int Q0_3=13; int Q0_4=14; int Q0_5=15; int Q0_6=16; int Q0_7=17; 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); }
INPUTS AND OUTPUTS
// ENTRADAS DIGITALES int i0_0 = 2; int i0_1 = 3; int i0_2 = 4; int i0_3 = 5; int i0_4 = 6; int i0_5 = 7; int i0_6 = 8; int i0_7 = 9; //SALIDAS DIGITALES int Q0_0 = 10; int Q0_1 = 11; int Q0_2 = 12; int Q0_3 = 13; int Q0_4 = 14; int Q0_5 = 15; int Q0_6 = 16; int Q0_7 = 17; 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); //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); // 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); }
ANALOG INPUTS
//SALIDAS DIGITALES int Q0_0=10; int Q0_1=11; int Q0_2=12; int Q0_3=13; int Q0_4=14; int Q0_5=15; int Q0_6=16; int Q0_7=17; 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 AI1 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); }
SERIAL PLOTER
void setup() { Serial.begin(9600); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (13, OUTPUT); pinMode (14, OUTPUT); pinMode (15, OUTPUT); pinMode (16, OUTPUT); pinMode (17, OUTPUT); } void loop() { Serial.println(analogRead(A6)); //Serial.println(analogRead(A7)); }
REAL TIME CLOCK (RTC)
/* CREADO POR :{==[=======>>>> ELECTROALL <<<<<=======]==} INSTAGRAM : https://www.instagram.com/carlos_j_fuentess/ ó @carlos_j_fuentess FACEBOOK : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr PÁGINA WEB : https://www.electroallweb.com/ YOUTUBE : https://www.youtube.com/c/ELECTROALL ________________________________________________________ {==[=======> (CONTROL INALAMBRICO MAS DE 10 SALIDIAS (CANALES)) <=======]==} ________________________________________________________ */ // {==[=======> (RTC Y TEMPERATURA) <=======]==} #include <Wire.h> #include "Sodaq_DS3231.h" char DiaSemana[][4] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab" }; int Q0_0 = 10; int Q0_1 = 11; int Q0_2 = 12; int Q0_3 = 13; int Q0_4 = 14; int Q0_5 = 15; int Q0_6 = 16; int Q0_7 = 17; // La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga // Ejemplo 2020 agosto 05, 9:00:00 dia 1-Lunes (0=Dom, 1=Lun, 2=Mar, 3=Mie, 4=Jue, 5=Vie, 6=Sab) //DateTime dt(2020, 8, 5, 20, 40, 00, 2); void setup () { Serial.begin(9600); Wire.begin(); rtc.begin(); // La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga //rtc.setDateTime(dt); 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 (){ DateTime now = rtc.now(); Serial.print(now.date(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print(' '); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.print(' '); Serial.println(DiaSemana[now.dayOfWeek()]); delay(1000); if ((now.hour() == 20)&& (now.minute()==20)) { digitalWrite(Q0_0, 1); if((now.second()>=30)){ digitalWrite(Q0_1, 1); } } else { digitalWrite(Q0_0, 0); digitalWrite(Q0_1, 0); } }
3 comentarios. Dejar nuevo
Hola.
Amigo. EN LA RELACIÓN DE BORNERAS EXTERNAS Y ATMEGA328P-AU (colocaste las del ATMEGA 2560), porfavor si la puedes corregir.
Muchas gracias
Excelente amigo.. Felicitaciones.
Excelente proyecto. podría hacer que el archivo BOM esté disponible?