Detalles Técnicos

M-DUINO PLC Arduino Ethernet 50RRA I/Os Relay/Analog/Digital PLUS

 VOLVER AL PRODUCTO

Instalación Inicial

ARDUINO IDE

Arduino IDE es la plataforma original para programar placas Arduino. Esta aplicación multiplataforma está disponible en Windows, macOS y Linux y bajo la Licencia Pública General GNU. Arduino IDE admite la estructuración de código C y C ++. Industrial Shields recomienda usar Arduino IDE para programar PLC basados en Arduino, pero cualquier software compatible con Arduino es compatible con los controladores Industrial Shields.

Aparte de eso, Industrial Shields brinda la posibilidad de seleccionar su PLC basado en Arduino en su IDE de Arduino y compilar sus bocetos para los diferentes PLC.

Descargue el IDE de Arduino 1.8.6: 

Windows Installer

MAC OSX

Instale unidades de Industrial Shields en Arduino IDE:

Industrialshields boards

Entradas y Salidas

    ANALOG INPUTS

    Voltage variation  between  –Vcc (or GND)  and  +Vcc, can take any value. An analog input provides a coded measurement in the form of a
    digital value with an N-bit number.  In Digital and Analog I/O there’s self insulation, so its posible to connect them in a different power supply
    than 24 V.

    Inputs: (12x) Analog (0-10Vdc, 10bit) / Digital (7-24Vdc) configurables by software. 

    TYPICAL CONNECTION

    DIGITAL INPUTS

    Voltage variation  from  –Vcc (or GND)  to  +Vcc, with no intermediate values. Two states: 0 (-Vcc or GND) and 1 (+Vcc).  In Digital and Analog I/O there’s self insulation, so its posible to connect them in a different power supply than 24 V.  

    Inputs:  (12x) Analog (0-10Vdc, 10bit) / Digital (7-24Vdc) configurables by software.

    TYPICAL CONNECTION


    • Digital Isolated Input


     
    • Digital No Isolated Input

    INTERRUPT INPUTS

    Interrupt Service Rutine.  A mechanism that allows a function to be associated with the occurance of a particular event. When the event
    occurs the processor exits immediately from the normal flow of the program and runs the associated ISR function ignoring any other task. 


    Inputs:  (6x) Interrupt Inputs (5-24Vdc). “Can work like Digital Input (24Vdc)”.


    Interrupt Arduino Mega Pin M-Duino Pin
    INT0 2 I0.0
    INT1 3 I0.1
    INT4 19 I1.1
    INT5 18 I1.0
    INT2 21 I2.6/INT2
    INT3 20 I2.5/INT3

        - I0.0 and I0.1 also as Pin3 and Pin2. Enable Interrupts turning ON the switches number 3 and 4 of down communication switches.
        - I1.0 and I1.0 also as Tx1 and Rx1. Enable Interrupts turning ON the switches number 1 and 2 of up communication switches.
        I2.5/INT3 and I2.6/INT2 also as SCA and SCL. Enable Interrupts turning ON the switches number 3 and 4 of up communication switches. In this case you won’t be able to use I2C.


    TYPICAL CONNECTION




    EXAMPLE

    In this example we activate INT0 using pin I0_0 from M-duino board. When there’s a change  

    #define INTERRUPT I0_0 //other pins: I0_1, I0_6, I2_6, I2_5, I1_6, I1_5 (M-Duino) I0_0, I0_3, I0_2, I0_1 (Ardbox)
    
    volatile bool state = false;
    
    void setup() {
      pinMode(INTERRUPT, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(INTERRUPT), function_call_back, CHANGE);
    }
    
    void loop() {
      if (state == true){
        Serial.println("Interrupt activated");
        state = false;
      }
    }
    
    void function_call_back(){ //Change led state
      state = true;
    }

    Comunicaciones

    Ethernet

    Ethernet is the technology that is most commonly used in wired local area networks ( LANs ). 

    Ethernet es la tecnología que se utiliza con mayor frecuencia en las redes de área local (LAN) cableadas. Una LAN es una red de computadoras y otros dispositivos electrónicos que cubre un área pequeña, como una habitación, una oficina o un edificio. Se utiliza en contraste con una red de área amplia (WAN), que abarca áreas geográficas mucho más grandes. Ethernet es un protocolo de red que controla cómo se transmiten los datos a través de una LAN. Técnicamente, se le conoce como protocolo IEEE 802.3. El protocolo ha evolucionado y mejorado con el tiempo para transferir datos a la velocidad de un gigabit por segundo.

    Nuestra familia M-Duino incorpora el W5500 IC integrado.

    WX5500 es un controlador Ethernet integrado TCP / IP cableado que proporciona una conexión a Internet más fácil para los sistemas integrados. Este chip permite a los usuarios tener conectividad a Internet en sus aplicaciones mediante el uso de un solo chip en el que se integran la pila TCP / IP, 10/100 Ethernet MAC y PHY. El chip W5500 incorpora el búfer de memoria interna de 32 Kb para el procesamiento de paquetes Ethernet. Con este chip, los usuarios pueden implementar la aplicación Ethernet agregando el programa de conexión simple. Se proporciona SPI para una fácil integración con el microcontrolador externo.

    Hardware  

    Configuración de hardware

    *IMPORTANTE:  Asegúrese de que su PLC Ethernet esté alimentado (12-24 V CC). Solo con USB hay energía insuficiente para encender la comunicación Ethernet.

     

    Configuración del interruptor

    Para el protocolo de comunicación Ethernet no hay ningún conmutador que lo afecte. Por tanto, no importa la configuración de los conmutadores para implementar la comunicación Ethernet.

    Pines usados

    Para el protocolo de comunicación Ethernet, el pin Arduino Mega definido es el pin 10, que está conectado y ya internamente ensamblado al controlador Ethernet WX5500. W5500 IC se comunica con la placa Mega a través del bus SPI ya ensamblado también. Puede acceder fácilmente al puerto Ethernet en nuestros PLC Ethernet, está ubicado en la parte superior de la capa de comunicaciones.

    La configuración del hardware Ethernet debe ser plug and play.

    Software

     

    *IMPORTANTE: Asegúrate de descargar el Arduino based PLC boards para Arduino IDE.

    Configuración de software:

    Una vez realizada la configuración del hardware, es posible continuar con la configuración del software y también su uso. Primero es necesario incluir la librería Ethernet2.h proporcionada por Industrial Shields (tiene la misma funcionalidad que Ethernet.hy además el mismo uso).

    #include <Ethernet2.h> 
    * Recuerde que para la versión V7 o versiones anteriores debe utilizar la biblioteca <Ethernet.h>.

    Biblioteca Ethernet2 - funciones.

    * La biblioteca Ethernet2.h tiene las mismas funciones que Ethernet.h.


    Códigos de ejemplo:

    Echo TCP Server:

    Una vez que el servidor se está ejecutando, cualquier cliente puede conectarse al servidor. En este ejemplo se utiliza un M-Duino para generar el servidor. El ejemplo de cliente TCP mostrado anteriormente podría ser uno de los clientes.

    Next it is showed the Arduino IDE code:

    // use Ethernet.h if you have a M-Duino V7 version
    #include <Ethernet2.h>
    // mac address for M-Duino
    byte mac[] = { 0xBE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    // Ip address for M-Duino
    byte ip[] = { 192, 168, 1, 100 };
    int tcp_port = 5566;
    EthernetServer server = EthernetServer(5566);
    void setup()
    {
      // initialize the ethernet device
      Ethernet.begin(mac, ip);
      // start server for listenign for clients
      server.begin();
    }
    void loop()
    {
      // if an incoming client connects, there will be bytes available to read:
      EthernetClient client = server.available();
      if (client.available()) {
        // read bytes from the incoming client and write them back
        // to the same client connected to the server
        client.write(client.read());
      }
    }

    Echo TCP Client:

    Once the server is running, M-Duino can connect to the server. On this example it is used an M-Duino to connect with the Node.js
    server called server.js, the same as used on previous example link.

    To configure the M-Duino, this post just follows the TCP example from Arduino web site with a few changes. To be able to connect to the server we must know the TCP server IP and the port where this server is listening.

    Next it is showed the Arduino code:

    #include <Ethernet2.h>
    #include <SPI.h>
    byte mac[] = { 0xBE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    byte ip[] = { 192, 168, 1, 100 };
    byte server[] = { 192, 168, 1, 105 }; // Touchberry Pi Server
    int tcp_port = 5566;
    EthernetClient client;
    void setup()
    {
     Ethernet.begin(mac, ip);
     Serial.begin(9600);
     delay(1000);
     Serial.println("Connecting...");
     if (client.connect(server, tcp_port)) { // Connection to server.js
       Serial.println("Connected to server.js");
       client.println();
     } else {
       Serial.println("connection failed");
     }
    }
    void loop()
    {
     if (client.available()) {
       if(Serial.available()){
         char s = Serial.read();
         client.write(s); // Send what is reed on serial monitor
         char c = client.read();
         Serial.print(c); // Print on serial monitor the data from server
       }
     }
     if (!client.connected()) {
       Serial.println();
       Serial.println("disconnecting.");
       client.stop();
       for(;;) ;
     }
    }


    Serial TTL

    Interfaz de comunicación entre dos dispositivos con bajo nivel de voltaje. Un puerto serial envía datos por una secuencia de bits.

    Dos señales: Tx (transmisión de datos) y Rx (recepción de datos).

    M-Duino tiene dos puertos TTL, RX0 / TX0, RX1 / TX1. Se accede a TTL0 con la función Serial (pines 0 y 1 del Arduino Mega). Se accede a TTL1 con la función Serial1 (pines 18 y 19 del Arduino Mega).
    IMPORTANTE: Serial1 se utiliza para el módulo de comunicación Wi-Fi.

    Hardware

    IMPORTANTE:  Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc). 

    Configuración del interruptor


    Para lograr la comunicación Serial TTL no hay ningún interruptor que lo afecte, siempre está habilitado. Por lo que no importa la configuración de los switches para implementar la comunicación Serial TTL.

    Used pins 

    Para el protocolo de comunicación en serie, los pines Arduino Mega definidos se muestran en la siguiente tabla: 


    MDuino Ethernet PLC PinoutArduino Mega Pinout
    Tx 0
    0
    Rx 01
    Tx 118
    Rx 1
    19

    Software

    IMPORTANTE:  Asegúrate de descargar el  Arduino based PLC boards  para Arduino IDE.

    Configuración de software

    Una vez que se realiza la configuración del hardware, es posible continuar con la configuración del software y también su uso. Primero es necesario incluir la librería RS232.h proporcionada en nuestras placas. Entonces, no olvide implementar la inicialización adecuada de su comunicación en la función setup():

    Serial.begin(9600);

    Ejemplo de escritura de TTL serial básico

    Lee una entrada analógica en Tx0 (pin 0), imprime el resultado en el monitor serial.

    La representación gráfica está disponible usando el trazador en serie (menú Herramientas> Trazador en serie) en el monitor en serie Arduino IDE.

    // the setup routine runs once when you press reset:
    void setup() {
      pinMode(I0_2, INPUT);
    // initialize serial communication at 9600 bits per second:
      Serial.begin(9600);
    }
    // the loop routine runs over and over again forever:
    void loop() {
      // read the input on analog pin 0:
      int sensorValue = analogRead(I0_2);
      // print out the value you read:
      Serial.println(sensorValue);
      delay(1);        // delay in between reads for stability
    }

    I2C

    I2C es un protocolo sincrónico. Solo utiliza 2 cables, uno para el reloj (SCL) y otro para los datos (SDA). Esto significa que el maestro y el esclavo envían datos a través del mismo cable, que es controlado por el maestro, quien crea la señal de reloj. I2C no utiliza la selección de esclavos, sino el direccionamiento.

    I2C es un bus de comunicaciones en serie. La velocidad es de 100 kbit / s en modo estándar, pero también permite velocidades de 3,4 Mbit / s. Es un bus muy utilizado en la industria, principalmente para comunicar microcontroladores y sus periféricos en sistemas integrados y generalizando más para comunicar circuitos integrados entre sí que normalmente residen en un mismo circuito impreso.


    Hardware

    IMPORTANTE:  Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc). 

    Configuración del interruptor

    Para lograr la comunicación I2C no hay ningún interruptor que lo afecte, siempre está habilitado. Por tanto, no importa la configuración de los conmutadores para implementar la comunicación I2C.

    Pines usados

    Para el protocolo de comunicación en serie, los pines Arduino Mega definidos se muestran en la siguiente tabla: 


    MDuino Ethernet PLC Pinout
    Arduino Mega Pinout
    SDA20
    SCL21

    Software


    IMPORTANTE:  Asegúrate de descargar el  Arduino based PLC boards  para Arduino IDE.




     


    Wi-Fi es uno de los desarrollos tecnológicos más importantes de la era moderna. Al igual que otros tipos de conexión inalámbrica, como Bluetooth, es una tecnología de transmisión de radio que se basa en un conjunto de estándares para permitir comunicaciones seguras y de alta velocidad entre una amplia variedad de dispositivos digitales, puntos de acceso y hardware. Hace posible que los dispositivos con capacidad Wi-Fi accedan a Internet sin la necesidad de cables restrictivos. Puede operar en distancias cortas y largas, estar bloqueado y asegurado, o abierto y libre. Es increíblemente versátil y fácil de usar.

    Bluetooth es otro estándar de tecnología inalámbrica. Bluetooth se desarrolló como una forma de intercambiar datos en un rango corto. Opera en el rango de 2400-2483,5 MHz dentro de la banda de frecuencia ISM de 2,4 GHz. Los datos se dividen en paquetes y se intercambian a través de uno de los 79 canales Bluetooth diseñados (cada uno de los cuales tiene 1 MHz de ancho de banda).   

    Nuestra familia M-Duino incorpora el módulo ESP32 WiFi / Bluetooth. 

    En el siguiente blog se explica como funciona

    SPI

    Estos pines solo pueden funcionar como pines de 5V si no se va a utilizar el protocolo Ethernet. Como el protocolo Ethernet usa el SPI para comunicarse con la placa Arduino, ambos comportamientos no pueden ocurrir al mismo tiempo, ya que Ethernet no funcionaría.

    Estos pines no se establecen con una configuración pull-up o pull-down. Se desconoce el estado de estos pines. Si se deben usar estos pines, requieren una configuración de pull-up o pull-down. La placa Arduino permite que los pines se establezcan en una configuración pull-up. En caso contrario, se debe establecer un circuito de pull-up o pull-down externo para que funcione correctamente con estos pines.

    Hardware

    IMPORTANTE:  Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc). 

    Configuración del interruptor

    Para lograr la comunicación SPI no hay ningún interruptor que lo afecte, siempre está habilitado. Por tanto, no importa la configuración de los conmutadores para implementar la comunicación SPI.

    Pines usados

    Para el protocolo de comunicación en serie, los pines Arduino Mega definidos se muestran en la siguiente tabla. Para el bus SPI, los pines MISO, MOSI y CLOCK son comunes a todos los dispositivos conectados al M-Duino, a la inversa, cada uno de los dispositivos conectados tendrá un pin SS único y dedicado.


    Función M-Duino connection Arduino Mega Pinout
    MISO SO 50
    MOSI SI 51
    CLOCK SCK 52
    RST Reset Reset



    Software

    IMPORTANTE:  Asegúrate de descargar el  Arduino based PLC boards  para Arduino IDE.
    Esquema de ejemplo: control digital del bote

    Este ejemplo controla un potenciómetro digital AD5206 de Analog Devices.
    El AD5206 tiene 6 canales de potenciómetro. Los pines de cada canal están etiquetados
      A - conecta esto al voltaje
      W - este es el limpiador de la olla, que cambia cuando lo configura
      B - conecte esto a tierra.

    El AD5206 es compatible con SPI, y para comandarlo, envía dos bytes,
    uno con el número de canal (0 - 5) y otro con el valor de resistencia para el
    canal (0-255).

    El circuito:
    * Todos los pines A de AD5206 conectados a + 5V
    * Todos los pines B de AD5206 conectados a tierra
    * Un LED y una resistencia de 220 ohmios en serie conectados desde cada pin W a tierra
    * CS - a pin digital (pin SS)
    * SDI - a pin digital (pin MOSI)
    * CLK - a pin digital (pin SCK)

    // inslude the SPI library:
    #include <SPI.h>
    
    
    // set pin 10 as the slave select for the digital pot:
    const int slaveSelectPin = 10;
    
    void setup() {
      // set the slaveSelectPin as an output:
      pinMode(slaveSelectPin, OUTPUT);
      // initialize SPI:
      SPI.begin();
    }
    
    void loop() {
      // go through the six channels of the digital pot:
      for (int channel = 0; channel < 6; channel++) {
        // change the resistance on this channel from min to max:
        for (int level = 0; level < 255; level++) {
          digitalPotWrite(channel, level);
          delay(10);
        }
        // wait a second at the top:
        delay(100);
        // change the resistance on this channel from max to min:
        for (int level = 0; level < 255; level++) {
          digitalPotWrite(channel, 255 - level);
          delay(10);
        }
      }
    
    }
    
    void digitalPotWrite(int address, int value) {
      // take the SS pin low to select the chip:
      digitalWrite(slaveSelectPin, LOW);
      //  send in the address and value via SPI:
      SPI.transfer(address);
      SPI.transfer(value);
      // take the SS pin high to de-select the chip:
      digitalWrite(slaveSelectPin, HIGH);
    }
     

    Función Especial

    RTC

     El término reloj en tiempo real se utiliza para evitar confusiones con los relojes de hardware ordinarios, que son solo señales que gobiernan la electrónica digital y no cuentan el tiempo en unidades humanas. RTC no debe confundirse con la computación en tiempo real, que comparte el acrónimo pero no se relaciona directamente con la hora del día.

    Aunque el control del tiempo se puede hacer sin un RTC, usar uno tiene beneficios:

        - Bajo consumo de energía (importante cuando se ejecuta con energía alternativa
        - Libera el sistema principal para tareas de tiempo crítico
        - A veces más preciso que otros métodos

    Hay una batería de celda de moneda de litio de 3,3 V que alimenta el RTC. El módulo RTC de M-Duinos se basa en el chip DS1307. El reloj serie DS1307 en tiempo real (RTC) es un reloj / calendario decimal codificado en binario completo (BCD) de baja potencia más 56 bytes de SRAM NV. La dirección y los datos se transfieren en serie a través de un bus bidireccional I2C. El reloj / calendario proporciona información sobre segundos, minutos, horas, día, fecha, mes y año. La fecha de fin de mes se ajusta automáticamente para los meses con menos de 31 días, incluidas las correcciones por año bisiesto. El reloj funciona en formato de 24 horas o de 12 horas con indicador AM / PM. El DS1307 tiene un circuito de detección de energía incorporado que detecta fallas de energía y cambia automáticamente a la fuente de respaldo. La operación de cronometraje continúa mientras la pieza opera desde el suministro de respaldo.

    Configuración de hardware 


    IMPORTANTE:  Asegúrese de que su PLC Ethernet esté alimentado  (12-24Vdc) .

    Configuración del interruptor

    RTC trabaja con el protocolo de comunicación I2C, por lo que se requiere tener habilitado el protocolo I2C.

    Se deben configurar 4 interruptores para habilitar las funciones RTC y la comunicación I2C: 


    INTERRUPTOR ON OFF
    NC - -
    NC - -
    RTC/SCL RTC -
    RTC/SDA RTC -


    RTC SCL  y  RTC SDA debe configurarse en modo ON para habilitar los cables I2C al RTC. Si están en modo APAGADO, el Arduino no se comunicará con el RTC.

    Configuración de Software 


    Una vez que se realiza la configuración del hardware, es posible continuar con la configuración del software y también su uso. Primero es necesario incluir la librería RTC.h proporcionada en nuestras placas (RTC.h incluye inicialización I2C.h, por lo que no será necesario inicializar la librería I2C.h): 

    #include <RTC.h> 

    Para verificar si el puerto RTC está funcionando, es fácil usar el monitor serial del IDE de Arduino usando la oración correcta dentro de la función setup (): 

    #Serial.begin(9600L) 

    Código de ejemplo   

    Prueba básica de RTC


    // RTC library example
    // by Industrial Shields
    #include <RTC.h>
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    void setup() {
      Serial.begin(9600L);
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    void loop() {
      if (!RTC.read()) {
        Serial.println("Read date error: is time set?");
        }
         else {
        Serial.print("Time: ");
        Serial.print(RTC.getYear());
        Serial.print("-");
        Serial.print(RTC.getMonth());
        Serial.print("-");
        Serial.print(RTC.getMonthDay());
        Serial.print(" ");
        Serial.print(RTC.getHour());
        Serial.print(":");
        Serial.print(RTC.getMinute());
        Serial.print(":");
        Serial.print(RTC.getSecond());
        Serial.print(" (");
        Serial.print(RTC.getTime());
        Serial.println(")");
      }
      delay(1000);
    }