Icono del sitio ELECTROALL

PLC LOGO con ARDUINO V2

YouTube
YouTube
Instagram
Instagram
GitHub
GitHub

Hace unas semanas atrás publique un video sobre cómo crear tu propio plc logo con arduino, y bueno como era la versión beta había varios aspectos que mejorar, y bien, ahora en este video les mostraré la versión 2,  completamente mejorada.

 Asi que les quiero mencionar  las características que tiene el dispositivo. En primer lugar se alimentará con 24Vdc, seguidamente tendremos entradas digitales de 24Vdc, adicionalmente tambien se contará con 2 entradas analógicas de 0-10V ya en la parte inferior tendremos 6 salidas a relays, por si fuera poco tambien contaremos con 3 salidas pwm de 0-10V. Por otro lado  se ha integrado un puerto usb de tipo C, esto para poder subir un programa al controlador. Luego tambien tenemos integrado el reloj de tiempo real. Finalmente pero no menos importante contamos con la comunicación rs485. Cabe mencionar que este controlador está inspirado en los controladores logo de siemens. Y bien, te gustaría saber cómo se hizo este controlador, desde la creación  del esquemático electrónico, la creación  de la tarjeta pcb y la creación  de la carcasa? Pues no te despegues del articulo.

ESPECIFICACIONES TÉCNICAS
  1. Tensión de alimentación……………………….…………24VDC
  2. Corriente de alimentación………………….……………50mA
  3. Entadas digitales 15-24VDC……………………….……6
  4. Entradas analógicas (voltaje) 0-10V…………..…….2
  5. Salida PWM (0-10VDC)……………………………………3
  6. Salidas RLY…………………………………………………………6
      • Tensión AC…………..……….………………….….……250V
      • Corriente AC…………………………………………….5A
      • Tensión DC………………………………………………30V
      • Corriente DC……………………………………………5A
  7. Puerto de comunicación serial……………………………1
  8. Comunicación ISP……………………………………..……….1
  9. Comunicación RS485..……………….…….………………..1
  10. Reloj de tiempo real………………………………………….1
  11. Programación Directa………………………………………..Ordenador – PLC V5
  12. Entorno de programación………………………..………..Arduino IDE (LDmicro)
  13. Condiciones ambientales min……………………….….-40°
  14. Condiciones ambientales max…………………..……….85°
  15. Dimensiones……………………………………………………….74x63mm
  16.  Empotrable………………………………….……………………Sí
ESQUEMATICO ELECTRÓNICO
1 CAPA DE ENTRADAS DIGITALES Y SALIDAS A RELAYS

Bien, inicialmente veremos el esquemático electrónico de cada capa. Empecemos viendo la primera capa, aquí se encuentran las 6 entradas digitales de 24V y cada entrada tiene su protección a través de optoacopladores y luego un  inversor  de señal que a su vez nos sirve de filtrar voltajes no deseados.

Luego tenemos dos entradas analógicas de 0-10V, para aislar estas entradas hemos usador el famoso amplificador operacional lm358, luego hemos usado este arreglo de resistencias para obtener un rango de voltaje entre 0 y 5V que es lo acepta el microcontrolador y para proteger de un exceso de voltaje se ha usado un diodo zener de 5.1V, con este nos aseguramos de que no ingrese un voltaje superior a 5.1V.

Por otro lado tenemos la parte de las salidas a relay, estos relays  son muy pequeños de un solo contacto normalmente abierto,  de tal manera esto nos permite reducir el tamaño del diseño pcb, y bueno cada uno de estos están controlados por un transistor de tipo NPN.

Y finalmente tenemos la parte de la fuente de alimentación. Cuyo suministro general es de 24V, luego tenemos un regulador step down de 12V, este voltaje nos servirá para las entradas analógicas de 10V y para las salidas de PWM, Luego tenemos un regulador step down de 5V para alimentar la parte de control. Bien, ahora en cuanto al diseño pcb, tenemos que procurar de que sea lo más pequeño posible, y este tiene una medida de 74*63mm.

2 CAPA CONTROL, RTC, COMUNICACIONES Y PMW 

Bien, ahora veamos la segunda capa, básicamente en esta parte estará la parte de control, gobernado por el microcontrolador atmega328p,  y tambien estarán los drivers de las entradas y las salidas, luego tendremos el interfaz usb ch340C que nos permitirá recibir y transferir datos a la computara, tambien este mismo puerto nos servirá para programar el controlador. Seguidamente tenemos el  DS1307, que nos proporciona la hora y la fecha, luego tendremos el max485 que nos ayudará establecer la comunicación rs845, finalmente tenemos las salidas pwm optoaisladas y controlados por  mosfets de canal P.  Y es asi como luse el diseño pcb.

3 CAPA DE LEDS SEÑALIZADORES

En cuanto a la tercera capa, en realidad no tiene mucha ciencia, ya que aquí solo se encuentran unos leds señalizadores que están conectados de manera paralela a las entradas y salidas respectivamente. Adicionalmente se encuentra el conector usb tipo C.

PASOS PARA SUBIR UN PROGRAMA
PASO 1 : SUBIR PROGRAMA BOOTLOADER A UN  ARDUINO UNO

Primero subimos este código BOOTLOADER a un arduino UNO como normalmente subimos cualquier programa a nuestra placa arduino UNO.

PASO 2 : CABLEADO PARA SUBIR GESTOR DE ARRANQUE (BOOTLOADER)

Despues de haber subido el programa anterior, ahora vamos aquemar el gestor de arranque al nuevo microcontrolador que tiene nuestro plc.
Recuerden que para poder usar un microcontrolador nuevo (atmega328P-AU), es necesario subir  un gestor de arranque como también llamado “BOOTLOADER”, esto nos facilitará subir programas en futuras ocasiones. Especialmente cuando se quiere programar desde el IDE de arduino.

finalmente para quemar el bootloader se tendrá que realizar a través de los pines ISP, que prácticamente serían los pines [(MOSI=PIN 11) (MISO = PIN 12) (SCK=PIN 13) (Slave=PIN 10)]. Para subir y quemar el gestor de arranque necesitaremos un arduino UNO ó MEGA y realizar las siguientes conexiones (ARDUINO UNO – PLC LOGO demo).  OJO que este paso solo se hace una sola vez.

PASO 3: QUEMAR BOOTLOADER

A) SELECCIONANDO PLACA.- Aquí vamos a seleccionar la placa de arduino que lleva nuestro microcontrolador, en este caso el que tengo es atmega328p – AU (Arduino nano). Adicionalmente tenemos que seleccionar el procesador como Atmega328p (old bootloader).
.

B) SELECCIONANDO PUERTO.- Aquí es donde la mayoría se confunde. La explicacion es; que aqui estamos seleccionando el puerto del arduino uno que tenemos conectado, mas no el puerto del micro que tenemos en nuestro plc.
.

C) SELECCIONANDO ARDUINO AS ISP.- Aquí seleccionamos ARDUINO AS ISP para que el arduino UNO pueda subir el gestor de arranque a través de ISP que previamente se hizo las conexiones en el PASO 2.
.

D) GRABAR BOOTLOADER.- Finalmente quemanos el gestor de arranque. Cabe mencionar que este será unica vez que se tiene que hacer estos pasos. El proceso del quemado no debe tardar mas de un minuto, y cuando finalice ya estará listo para subir cualquier programa desde el IDE de arduino o de cualquier entorno de programación afines.
.

DISEÑO 3D
RELACIÓN DE BORNERAS EXTERNAS Y ATMEGA328P-AU
CONEXIONES EXTERNAS
DESCARGAR LDmicro y AVRDUDESS
COGIDOS DE PRUEBAS
ENTRADAS DIGITALES Y SALIDAS A RELAY
// digital Inputs
const int in1 = 2;
const int in2 = 3;
const int in3 = 4;
const int in4 = 5;
const int in5 = 6;
const int in6 = 7;

//Relays outputs
const int out1 = 8;
const int out2 = 12;
const int out3 = 14;
const int out4 = 15;
const int out5 = 16;
const int out6 = 17;

void setup() {

  // digital Inputs
  pinMode(in1, INPUT);
  pinMode(in2, INPUT);
  pinMode(in3, INPUT);
  pinMode(in4, INPUT);
  pinMode(in5, INPUT);
  pinMode(in6, INPUT);

  //Relays outputs
  pinMode(out1, OUTPUT);
  pinMode(out2, OUTPUT);
  pinMode(out3, OUTPUT);
  pinMode(out4, OUTPUT);
  pinMode(out5, OUTPUT);
  pinMode(out6, OUTPUT);

  digitalWrite(out1, 0);
  digitalWrite(out2, 0);
  digitalWrite(out3, 0);
  digitalWrite(out4, 0);
  digitalWrite(out5, 0);
  digitalWrite(out6, 0);
}

void loop() {

  if (digitalRead(in1) == 1) digitalWrite(out1, 1);
  else digitalWrite(out1, 0);

  if (digitalRead(in2) == 1) digitalWrite(out2, 1);
  else digitalWrite(out2, 0);

  if (digitalRead(in3) == 1) digitalWrite(out3, 1);
  else digitalWrite(out3, 0);

  if (digitalRead(in4) == 1) digitalWrite(out4, 1);
  else digitalWrite(out4, 0);

  if (digitalRead(in5) == 1) digitalWrite(out5, 1);
  else digitalWrite(out5, 0);

  if (digitalRead(in6) == 1) digitalWrite(out6, 1);
  else digitalWrite(out6, 0);
}
ENTRADAS ANALOGICAS Y SALIDAS PWM
int pwm1 = 9;
int pwm2 = 10;
int pwm3 = 11;

void setup() {
  pinMode(pwm1, OUTPUT);
  pinMode(pwm2, OUTPUT);
  pinMode(pwm3, OUTPUT);
}

void loop() {

  int anRead1 = map(analogRead(A6), 0, 1023, 0, 255);
  analogWrite(pwm1, anRead1);
  int anRead2 = map(analogRead(A7), 0, 1023, 0, 255);
  analogWrite(pwm2, anRead2);
  analogWrite(pwm3, anRead2);
}
RELOJ DE TIEMPO REAL
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include "RTClib.h"

RTC_DS1307 rtc;

char daysOfTheWeek[7][12] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };

void setup() {
  Serial.begin(9600);
  rtc.begin();
  Wire.begin();
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // solo activa esta linea para ajustar la hora y la fecha, luego bloquealo
  pinMode(17, OUTPUT);
}

void loop() {
  DateTime now = rtc.now();
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
  delay(1000);

  if (now.minute() == 50) {
    digitalWrite(17, 1);
  }
  else {
  digitalWrite(17, 0);
  }
}
VIDEOS
YouTube
YouTube
Instagram
Instagram
GitHub
GitHub
Salir de la versión móvil