INTRODUCCIÓN
Ya pasaron aproximadamente 6 meses desde que publicamos el PCL V4 con atmega 328p, lo cual solo tenía una cantidad limitada de entradas digitales y analógicas. Además, solo se tenia salidas con relés. Por otro lado, la cantidad de memoria era muy bajo y no tenía muchos periféricos de comunicación. Y adivinen que; para esta versión usaremos el atmega2560 que usualmente lo vemos en las placas de arduino mega, gracias a este microcontrolador tendremos hasta 24 entradas digitales, 8 entradas analógicas, 8 salidas a reles, 8 salidas a transistores IGBT’s, un puerto de comunicación serial, un puerto de ethernet para el protocolo modbus, un reloj de tiempo real, 8 bits de configuración con dipswitch, 4 comunicaciones seriales mas una comunicación ISP, también contaremos con la comunicación I2C y finalmente la programación se realizará de manera directa ordenar plc V5.
ESPECIFICACIONES TÉCNICAS
- Tensión de alimentación……………………….…………24VDC
- Corriente de alimentación………………….……………200mA
- Tensión de salida……………………………………………………10VDC
- Corriente de salida…………………………………………………1A
- Entadas digitales 12-24VDC……………………….……24
- Entradas analógicas 0-5V………………………………..4
- Entradas analógicas 0-10V……………………………..4
- Salidas RLY…………………………………………………………8
- Tensión AC…………..……….………………….….……250V
- Corriente AC…………………………………………….5A
- Tensión DC………………………………………………30V
- Corriente DC……………………………………………5A
- Salidas trasistores IGBT’s
- Tensión DC………………………………………………30V
- Corriente DC……………………………………………5A
- Puerto de comunicación serial……………………………4
- Comunicación ICSP……………………………………………….1
- Comunicación I2C…………………………………………………1
- Comunicación MODBUS……………………………………..1
- Reloj de tiempo real……………………………………………..Sí
- Programación Directa………………………………………..Ordenador – PLC V5
- Entorno de programación………………………..………..Arduino IDE
- Condiciones ambientales min……………………….….-10°
- Condiciones ambientales max…………………..……….55°
- Dimensiones……………………………………………………….150x170mm
- Empotrable………………………………….……………………Sí
CAMBIOS RESPECTO A LA ANTERIOR VERSIÓN (V4)
- INTEGRACIÓN DEL SISTEMA 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 i/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.
- INTEGRACIÓN DEL PROTOCOLO MODBUS, Si bien es cierto actualmente existen varios tipos de protocolos para poder establecer una determinada comunicación, cada una con una determinada peculiaridad y para un determinado objetivo. En caso de las industrias el protocolo modbus es el que más predomina y me atrevería a decir que es el protocolo estándar por su alta confiabilidad al momento de trabajar dentro de un proceso industrial. Entonces, como nuestra tarjeta esta destinado para trabajar en ambientes industriales es pertinente la integración de este sistema en nuestra tarjeta PLC V5. Por otro lado, cabe mencionar que el circuito integrado principal es el ENC28J60, gracias a este dispositivo podemos enviar y recibir datos desde nuestro microcontrolador ATMEGA2560.
- INTEGRACIÓN DEL uC ATMEGA2560, En las anteriores versiones hemos venido usando el uC Atmega328p, este microcontrolador es un dispositvo básico y como tal no cuenta con muchas prestaciones ya que solo tiene una cantidad limitado de pines. Además, solo tiene 32kB de memoria flash, 2kB de SRAM y 1kB de EEPROM. Sin embargo, el uC que se está usando en esta versión cuenta con 54 pines digitales (I/O) de las cuales 15 se puede como salida PWM, 16 entradas analógicas, y 4 puertos de comunicación serial. Por otro lado, tiene 256kB de memoria flash, 8kB de SRAM y 4kB de EEPROM.
- INTEGRACIÓN DE SALIDAS A TRANSISTORES IGBT´s, inicialmente se ha integrado estos dispositivos porque son comúnmente usados en las industrias ya que son la fusión de dos transistores (MOSFET y BJT). El circuito de activación o excitación es como el del transistor MOSFET, y en cuanto a las particularidades de conducción son como las de un transistor BJT. Por lo tanto podemos tener alto aislamiento y ganancia de corriente en solo dispositivo(IGBT).
- INCREMENTO DE ENTRADAS DIGITALES, en la versión anterior se tenía 10 entradas digitales de 12 -24V, ahora tenemos 24 entradas digitales de 12 -24V.
- INCREMENTO DE ENTRADAS ANALÓGICAS, para esta versión se ha agregado hasta 8 entradas analógicas, de las cuales 4 son de 0 a 5V, y los 4 restantes son de 0 a 10V al igual que las entradas analógicas del PLC siemens.
- INCREMENTO DE LAS SALIDAS, en la versión previa solo se contaba con 8 salidas a reles, ahora hemos integrado 8 adicionales, los cuales son a transistores IGBT’s, con esto podremos controlar la velocidad de un motor, controlar la intensidad luminosa, etc. Todo ello gracias al control de modulación por ancho de pulso(PWM).
- INTEGRACIÓN DE 8 BITS CON DIPSWITCH, La intención de incorporar este dip switch, es para poder configurar algunas instrucciones o tareas específicas en un determinado momento. Supongamos que nuestra tarjeta se está utilizando en un embalador de cajas, por lo tanto una caja de tamaño A requiere requiere 5 vueltas, y una caja de tamaño B requiere 3 vueltas. entonces cambiando las posiciones del dip podemos hacer que en un momento solo gire 3 vueltas y en otro momento 5 vueltas, y así podemos realizar hasta 255 tareas.
- INTEGRACIÓN DE FUENTE DE ALIMENTACION (10V), De repente te suene algo raro la integración de este dispositivo. No obstante, este nos permite el suministro de 10V para las entradas analógicas que son de 0 a 10V.
ESQUEMÁTICO ELECTRÓNICO
DESCARGAR EL DISEÑO EN PROTEUS 8.9 (ayúdame con una donación para comprar materiales)
DISEÑO TARJETA PCB – Ordene ahora en JLCPCB
LISTA DE COMPONENTES
- U1; Microcontrolador ATmega2560-16AU ( see & buy )
- U2; Circuito Integrado ENC28J60-I/SS, SSOP-28 Ethernet ICs RoHS ( see & buy )
- U3; I2C Serial EEPROM ( see & buy )
- U4; Maxin Integrated RTC DS3231SN ( see & buy )
- U5; Circuito Integrado Transceiver USB CH340C ( see & buy )
- U6; Regulador de voltaje (7805) 5.0V (see & buy)
- U7; Regulador de voltaje SMD (AMS 1117-3.3) 3.3V (see & buy)
- U8, U9, U18, U27; Circuito integrado 74HC14D (see & buy)
- U10-U17, U19-U26, U28-U35, U41-U48; Optoacoplador TLP127 (see & buy)
- U36-U39; Circuito integrado 74HC245D (see & buy)
- U40; Circuito integrado ULN2803D (see & buy)
- U49; Regular de votaje de 10V (7810) (see & buy)
- J2, J3, J26-J29; Pines espadines Macho (see & buy)
- J1; JACK USB – Type B Female USB 2 4 (see & buy)
- J5-J7, J9, J10, J12, J13, J15, J16-J21; borneras 3PIN (see & buy)
- J4, J8, J11-J14, J16 ; Borneras 2PIN (see & buy)
- D1, D2, D4, D5-D45; Led smd 1206 ( see & buy )
- D3; Diodo rectificador SOD-123 (see & buy)
- D4; Diodo Schottky SS14-T (see & buy)
- D46-D49; Diodo Zener 5.1V, 1N4733A (see & buy)
- DSW1; Did Switch 8 posiciones (see & buy)
- C1,C4,C18; Capacitor cerámico 0.1uF (0805) (see & buy)
- C2,C3; Capacitor cerámico 18pF (0603) (see & buy)
- C5; Capacitor cerámico 10uF (0805) (see & buy)
- C6-C12, C19-C43; Capacitor cerámico 0.1uF (0603) ( see & buy )
- C14, C16, C45, C10; Capacitor ceramico 0.1uF(1206) (see & buy)
- C44; Capacitor electrolítico 470uF ( see & buy )
- C13, C15; Capacitor electrolítico 220uF ( see & buy )
- C17, Capacitor electrolítico SMD 220uF ( see & buy )
- Q1-Q8; Transistor IGBT ( see & buy )
- R1-R4; Resistencia SMD 1/8W, 49.9 Ohm, package 0805 ( see & buy )
- R5, R6; Resistencia SMD 1/10W, 470 Ohm, package 0603 ( see & buy )
- R7-R9, R15, R20, R46-R73; Resistencia SMD 1/10W, 10k Ohm, package 0603 ( see & buy )
- R10; Resistencia SMD 1/10W, 2.7k Ohm, package 0603 ( see & buy )
- R11-R14; Resistencia SMD 1/10W, 1k Ohm, package 0603 ( see & buy )
- R21; Resistencia SMD 1/4W, 4.7K Ohm, package 1206 ( see & buy )
- R16; Resistencia SMD 1/10W, 1M Ohm, package 0603 ( see & buy )
- R17, R18; Resistencia SMD 1/10W, array 4pack 4.7k Ohm, package 0603 ( see & buy )
- R19; Resistencia SMD 1/8W, 470 Ohm, package 0805 ( see & buy )
- R22-R45; Resistencia SMD 20k Ohm, package 1206 (see & buy)
- R74-R81; Resistencia SMD 1/10W, 4.7k Ohm, package 0603 (see & buy)
- R82,R83,R87,R88,R92,R93,R97,R98,R102,R103,R107,R108,R112,R113,R117,R118; Resistencia SMD 1/10W, 220 Ohm, package 0603 (see & buy)
- R85,R90,R95,R100,R105,R110,R115,R120; Resistencia SMD 1/8W, 10k Ohm, package 0805 ( see & buy )
- R84,R86,R89,R91,R94,R96,R99,R101,R104,R106,R109,R111,R114,R116,R119,R121,; Resistencia SMD 1/8W, 1k Ohm, package 0805 ( see & buy )
- R122,R123; Resistencia SMD 1/10W, array 4pack 10k Ohm, package 0603 ( see & buy )
- R124-R131; Resistencia SMD 10k Ohm, package 1206 (see & buy)
- RJ1; conector RJ45 HR911105A ( see & buy )
- RL1-RL8; Relay 24V, HF49FD/024-1H11 (see & buy)
- SW1-SW7; conectores espadines macho (see & buy)
- L1; Inductor 1uH SMD 0805 (see & buy)
- BTN1; Pulsador SMD (see & buy)
- BAT1; Sócalo para batería 3V (see & buy)
- FUSE; Fusible 24V/1A (see & buy)
- X1; Crystal 25Mhz ( 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 (atmega2560-16AU), 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=PIN51) (MISO = PIN50) (SCK=PIN52) (Slave=PIN53) ]. Para subir y quemar el gestor de arranque necesitaremos un arduino UNO ó MEGA y realizar las siguientes conexiones (ARDUINO UNO – PLC V5).
PASO 2 : SUBIR PROGRAMA; PC – PLC V5
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.
RELACIÓN DE BORNERAS EXTERNAS Y ATMEGA2560-16U
PARTES Y CONEXIONES EXTERNAS
CÓDIGOS DE PRUEBA
ENTRADAS DIGITALES
// Digital inputs const int IN0 = 2; const int IN1 = 3; const int IN2 = 4; const int IN3 = 22; const int IN4 = 23; const int IN5 = 24; const int IN6 = 25; const int IN7 = 26; const int IN8 = 27; const int IN9 = 28; const int IN10 = 29; const int IN11 = 30; const int IN12 = 31; const int IN13 = 32; const int IN14 = 33; const int IN15 = 34; const int IN16 = 35; const int IN17 = 36; const int IN18 = 37; const int IN19 = 38; const int IN20 = 39; const int IN21 = 40; const int IN22 = 41; const int IN23 = 42; //IGBT'S OUTPUTS int Q0 = 5; int Q1 = 6; int Q2 = 7; int Q3 = 8; int Q4 = 9; int Q5 = 10; int Q6 = 11; int Q7 = 12; //RELAY OUTPUTS int O0 = 13; int O1 = 43; int O2 = 44; int O3 = 45; int O4 = 46; int O5 = 47; int O6 = 48; int O7 = 49; void setup() { //DIGITAL INPUTS pinMode (IN0, INPUT); pinMode (IN1, INPUT); pinMode (IN2, INPUT); pinMode (IN3, INPUT); pinMode (IN4, INPUT); pinMode (IN5, INPUT); pinMode (IN6, INPUT); pinMode (IN7, INPUT); pinMode (IN8, INPUT); pinMode (IN9, INPUT); pinMode (IN10, INPUT); pinMode (IN11, INPUT); pinMode (IN12, INPUT); pinMode (IN13, INPUT); pinMode (IN14, INPUT); pinMode (IN15, INPUT); pinMode (IN16, INPUT); pinMode (IN17, INPUT); pinMode (IN18, INPUT); pinMode (IN19, INPUT); pinMode (IN20, INPUT); pinMode (IN21, INPUT); pinMode (IN22, INPUT); pinMode (IN23, INPUT); //IGBT'S OUTPUTS pinMode (Q0, OUTPUT); pinMode (Q1, OUTPUT); pinMode (Q2, OUTPUT); pinMode (Q3, OUTPUT); pinMode (Q4, OUTPUT); pinMode (Q5, OUTPUT); pinMode (Q6, OUTPUT); pinMode (Q7, OUTPUT); //RELAY OUTPUTS pinMode (O0, OUTPUT); pinMode (O1, OUTPUT); pinMode (O2, OUTPUT); pinMode (O3, OUTPUT); pinMode (O4, OUTPUT); pinMode (O5, OUTPUT); pinMode (O6, OUTPUT); pinMode (O7, OUTPUT); } void loop() { if (digitalRead(IN0) == 1)digitalWrite(Q0, 1); else digitalWrite(Q0, 0); if (digitalRead(IN1) == 1)digitalWrite(Q1, 1); else digitalWrite(Q1, 0); if (digitalRead(IN2) == 1)digitalWrite(Q2, 1); else digitalWrite(Q2, 0); if (digitalRead(IN3) == 1)digitalWrite(Q3, 1); else digitalWrite(Q3, 0); if (digitalRead(IN4) == 1)digitalWrite(Q4, 1); else digitalWrite(Q4, 0); if (digitalRead(IN5) == 1)digitalWrite(Q5, 1); else digitalWrite(Q5, 0); if (digitalRead(IN6) == 1)digitalWrite(Q6, 1); else digitalWrite(Q6, 0); if (digitalRead(IN7) == 1)digitalWrite(Q7, 1); else digitalWrite(Q7, 0); if (digitalRead(IN8) == 1)digitalWrite(O0, 1); else digitalWrite(O0, 0); if (digitalRead(IN9) == 1)digitalWrite(O1, 1); else digitalWrite(O1, 0); if (digitalRead(IN10) == 1)digitalWrite(O2, 1); else digitalWrite(O2, 0); if (digitalRead(IN11) == 1)digitalWrite(O3, 1); else digitalWrite(O3, 0); if (digitalRead(IN12) == 1)digitalWrite(O4, 1); else digitalWrite(O4, 0); if (digitalRead(IN13) == 1)digitalWrite(O5, 1); else digitalWrite(O5, 0); if (digitalRead(IN14) == 1)digitalWrite(O6, 1); else digitalWrite(O6, 0); if (digitalRead(IN15) == 1)digitalWrite(O7, 1); else digitalWrite(O7, 0); if (digitalRead(IN16) == 1)digitalWrite(Q0, 1); else digitalWrite(Q0, 0); if (digitalRead(IN17) == 1)digitalWrite(Q1, 1); else digitalWrite(Q1, 0); if (digitalRead(IN18) == 1)digitalWrite(Q2, 1); else digitalWrite(Q2, 0); if (digitalRead(IN19) == 1)digitalWrite(Q3, 1); else digitalWrite(Q3, 0); if (digitalRead(IN20) == 1)digitalWrite(Q4, 1); else digitalWrite(Q4, 0); if (digitalRead(IN21) == 1)digitalWrite(Q5, 1); else digitalWrite(Q5, 0); if (digitalRead(IN22) == 1)digitalWrite(Q6, 1); else digitalWrite(Q6, 0); if (digitalRead(IN23) == 1)digitalWrite(Q7, 1); else digitalWrite(Q7, 0); }
CONTADOR CON CONFIG (DIP SWITCH)
//IGBT'S OUTPUTS int Q0 = 5; //DIP SWITCH INPUTS const int IN24 = 62; const int IN25 = 63; const int IN26 = 64; const int IN27 = 65; const int IN28 = 66; const int IN29 = 67; const int IN30 = 68; const int IN31 = 69; const int IN1 = 2; const int IN2 = 3; boolean act = false; int contador = 0; // contador para el numero de veces presinados int estado_pulsador_asc = 0; // estado actual del pulsador int lastButtonState_asc = 0; // estado anterior del pulsador void setup() { //SALIDAS IGBT'S pinMode (Q0, OUTPUT); Serial.begin(9600); //DIP SWITCH INPUTS pinMode (IN24, INPUT); pinMode (IN25, INPUT); pinMode (IN26, INPUT); pinMode (IN27, INPUT); pinMode (IN28, INPUT); pinMode (IN29, INPUT); pinMode (IN30, INPUT); pinMode (IN31, INPUT); pinMode (IN1, INPUT); pinMode (IN2, INPUT); } void loop() { estado_pulsador_asc = digitalRead(IN1); if (digitalRead(IN24) == 1) { if (estado_pulsador_asc != lastButtonState_asc) { // si el estado fue cambiado, incremente el conteo if (estado_pulsador_asc == LOW) { // si el estado actual es alto, entonces // que pase de off a on: if(act==true){ contador++; Serial.print("# DE VUELTAS = "); Serial.println(contador); delay(100); } } } lastButtonState_asc = estado_pulsador_asc; if (digitalRead(IN2) == 1) { act=true; } if ((act==true)&& (contador <= 100)) { int analog0 = analogRead(A0); int v_analog0 = map(analog0, 0, 1023, 0, 255); analogWrite(Q0, v_analog0); } if (contador > 100) { analogWrite(Q0, 0); contador=0; act=false; } } }
ENTRADA ANALÓGICA Y SALIDA PWM
//IGBT'S OUTPUTS int Q0 = 5; int Q1 = 6; int Q2 = 7; int Q3 = 8; int Q4 = 9; int Q5 = 10; int Q6 = 11; int Q7 = 12; void setup() { //IGBT'S OUTPUTS pinMode (Q0, OUTPUT); pinMode (Q1, OUTPUT); pinMode (Q2, OUTPUT); pinMode (Q3, OUTPUT); pinMode (Q4, OUTPUT); pinMode (Q5, OUTPUT); pinMode (Q6, OUTPUT); pinMode (Q7, OUTPUT); } void loop() { //ANALOG INPUT (0 - 5V) int analog0 = analogRead(A0); int v_analog0 = map(analog0, 0, 1023, 0, 255); analogWrite(Q0, v_analog0); int analog1 = analogRead(A1); int v_analog1 = map(analog1, 0, 1023, 0, 255); analogWrite(Q1, v_analog1); int analog2 = analogRead(A2); int v_analog2 = map(analog2, 0, 1023, 0, 255); analogWrite(Q2, v_analog2); int analog3 = analogRead(A3); int v_analog3 = map(analog3, 0, 1023, 0, 255); analogWrite(Q3, v_analog3); //ANALOG INPUT (0 - 10V) int analog4 = analogRead(A4); int v_analog4 = map(analog4, 0, 1023, 0, 255); analogWrite(Q4, v_analog4); int analog5 = analogRead(A5); int v_analog5 = map(analog5, 0, 1023, 0, 255); analogWrite(Q5, v_analog5); int analog6 = analogRead(A6); int v_analog6 = map(analog6, 0, 1023, 0, 255); analogWrite(Q6, v_analog6); int analog7 = analogRead(A7); int v_analog7 = map(analog7, 0, 1023, 0, 255); analogWrite(Q7, v_analog7); }
RELOJ DE TIEMPO REAL
/* 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 ________________________________________________________ {==[=======> (Testing CLOCK REAL TIME ) <=======]==} ________________________________________________________ */ #include <Wire.h> #include "Sodaq_DS3231.h" #include <LiquidCrystal_I2C.h> // Debe descargar la Libreria que controla el I2C LiquidCrystal_I2C lcd(0x27, 16, 2); char DiaSemana[][4] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab" }; const int alarm = 5 ; // La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga // Ejemplo 2017 diciembre 06, 22:00:00 dia 1-Lunes (0=Dom, 1=Lun, 2=Mar, 3=Mie, 4=Jue, 5=Vie, 6=Sab) //DateTime dt(2020, 06, 16, 07, 43, 0, 2); void setup () { Serial.begin(9600); Wire.begin(); rtc.begin(); lcd.init(); lcd.backlight(); lcd.clear(); // La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga // rtc.setDateTime(dt); pinMode(alarm, OUTPUT); } void loop () { DateTime now = rtc.now(); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.date(), 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.print(DiaSemana[now.dayOfWeek()]); Serial.println(); lcd.setCursor(0, 0); lcd.print(now.year(), DEC); lcd.print('/'); lcd.print(now.month(), DEC); lcd.print('/'); lcd.print(now.date(), DEC); lcd.setCursor(0, 1); lcd.print(now.hour(), DEC); lcd.print(':'); lcd.print(now.minute(), DEC); lcd.print(':'); lcd.print(now.second(), DEC); lcd.print(' '); lcd.print(DiaSemana[now.dayOfWeek()]); //delay(1000); // Se actualiza cada segundo //lcd.clear(); //8:15. 8:25 a.m. 9:25 a.m. 10:25 a.m. 10:35 a.m. 11:30 a.m. //12:30 p.m. 2:15 p.m. 2:25 p.m. 3:25 p.m. 4:25 p.m. 4:35 p.m. 5.30 p.m. 6.30 p.m. if ((now.dayOfWeek()) >= 1 && (now.dayOfWeek() <= 5)) { // MONDAY TO FRIDAY //MORNING //ALARM ==> 8:15 if (now.hour() == 7 && now.minute() == 47 && now.second() <= 10) { if (now.minute() == 47 && now.second() < 10) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 8:25 if (now.hour() == 8 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 9:25 if (now.hour() == 9 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 10:25 if (now.hour() == 10 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 10:35 if (now.hour() == 10 && now.minute() == 35 && now.second() <= 4) { if (now.minute() == 35 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 11:30 if (now.hour() == 11 && now.minute() == 30 && now.second() <= 4) { if (now.minute() == 30 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } // LATE //12:30 p.m. 2:15 p.m. 2:25 p.m. 3:25 p.m. 4:25 p.m. 4:35 p.m. 5.30 p.m. 6.30 p.m. //ALARM ==> 12:30 if (now.hour() == 12 && now.minute() == 30 && now.second() <= 4) { if (now.minute() == 30 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 14:15 if (now.hour() == 14 && now.minute() == 15 && now.second() <= 4) { if (now.minute() == 15 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 14:25 if (now.hour() == 14 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 15:25 if (now.hour() == 15 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 16:25 if (now.hour() == 16 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 16:35 if (now.hour() == 16 && now.minute() == 35 && now.second() <= 4) { if (now.minute() == 35 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 17:30 if (now.hour() == 17 && now.minute() == 30 && now.second() <= 4) { if (now.minute() == 30 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 18:30 if (now.hour() == 18 && now.minute() == 30 && now.second() <= 4) { if (now.minute() == 30 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } } if (now.dayOfWeek() == 6) { //SATURDAY //MORNING //ALARM ==> 8:15 if (now.hour() == 8 && now.minute() == 15 && now.second() <= 4) { if (now.minute() == 15 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 8:25 if (now.hour() == 8 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 9:25 if (now.hour() == 9 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 10:25 if (now.hour() == 10 && now.minute() == 25 && now.second() <= 4) { if (now.minute() == 25 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 10:35 if (now.hour() == 10 && now.minute() == 35 && now.second() <= 4) { if (now.minute() == 35 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } //ALARM ==> 11:30 if (now.hour() == 11 && now.minute() == 30 && now.second() <= 4) { if (now.minute() == 30 && now.second() < 4) digitalWrite(alarm, 1); else digitalWrite(alarm, 0); } } }
15 comentarios. Dejar nuevo
Me podrían cotizar 5 PLCs V5 que incluya todos los componentes?
Consideraste cambiar de fuente de alimentación y de regulador de voltaje para evitar que caliente la fuente?
Saludos
Sí eso es lo que haremos, muchas gracias por la sugerencia.
Hola, soy de Argentina y quería saber donde puedo conseguir la tarjeta armada lista para usar.
Saludos y desde ya muchas gracias.
Buenas noches, en este momento no podemos hacer ningún envío todavía, en cuanto pase se abran las agencias estaremos realizando los envíos correspondientes, muchas gracias.
.
Hola cómo se puede tener el módulo ya listo Soy de Argentina
Hola, soy de Chile y me gustaría saber el valor del PLC y cómo lo puedo pagar desde mi país, desde ya , muchas gracias.
Buenos días, por motivos de la pandemia no estamos haciendo ningún tipo de envío, en cuanto se aperture las agencias respectivas estaremos haciendo el envió. De todas maneras le estaremos comunicando, muchas gracias 🙂
Buenos días lo vendes ensamblado completo y para Colombia que precio tiene
Buenos días, por motivos de la pandemia no estamos haciendo ningún tipo de envío, en cuanto se aperture las agencias respectivas estaremos haciendo el envió. De todas maneras le estaremos comunicando, muchas gracias 🙂
Me gustaría adquirir una tarjeta construida (con todos sus componentes soldados), soy de Perú, por favor avisarme cuando este disponible.
Muchas gracias.
Genial, nos estaremos comunicando con ustedes 🙂
Hola cómo se puede tener el módulo ya listo Soy de Argentina
Hola buenos días, te felicito por el proyecto pero tengo una duda: la conexión ethernet para usar con protocolo modbus, no llega a ser rs485 verdad? y por que ethernet si y rs485 no? teniendo en cuenta el ambiente industrial, que sin conocer demasiado diria que predomina el modbus en rs485 es esto asi? saludos!