Entradas/Salidas
Entradas
Las entradas digitales se usan para capturar señales que solo tienen dos estados: alto o bajo. Los PLC Arduino de Industrial Shields interpretan como alto los valores de 5 Vdc o superiores, hasta 24 Vdc, mientras que los valores inferiores a 5V se interpretan como bajo. Hay 2 tipos de entradas que se pueden usar como entrada digital:
- Entradas digitales aisladas (5 - 24 Vdc): estas entradas están optoaisladas, lo que significa que tienen una protección adicional y usan un pin de tierra externo como referencia.
- Entrada digital no aislada (5 - 24 Vdc): estas entradas no están optoaisladas y usan el GND interno del PLC como referencia.
El tipo de cada entrada se identifica por la serigrafía del PLC. Para usarlas, los siguientes esquemas muestran las conexiones necesarias para cada tipo de entrada.

Entrada aislada de 5V - 24V

Entrada no aislada de 5V - 24V


Software
Uso en el programa
Las entradas digitales se usan como un pin normal de Arduino. Para leer su valor, usa la función "digitalRead()" con el nombre de la entrada como parámetro. Ten en cuenta que todas las entradas de los PLC de Industrial Shields siguen el mismo formato de nombre: I0.0, I0.1, I1.2, etc. En el programa se accede a ellas directamente sustituyendo el punto por un guion bajo: I0_0, I0_1, I0_2.
El siguiente ejemplo muestra cómo leer la entrada I0.0 y enviar su valor por el puerto serie:
void setup() { Serial.begin(9600); } void loop() { Serial.println(digitalRead(I0_0)); }
void setup() { Serial.begin(9600); } void loop() { Serial.println(digitalRead(I0_0)); }
Referencia de la API
Descripción:
Lee el valor de la entrada digital indicada, HIGH o LOW.
Sintaxis:
digitalRead(input)
Parámetros:
- input: la entrada digital que quieres leer, que puede ser una entrada del PLC (por ejemplo, I0_0) o un pin de Arduino.
Devuelve:
HIGH o LOW
La entrada analógica permite leer niveles de tensión analógicos y codifica el valor con un número de N bits.
- Rango de tensión: de 0 a 10 Vdc.
- Resolución: 10 bits, es decir, los valores leídos van de 0 a 1023.
Además, las entradas analógicas también se pueden usar como entradas digitales no aisladas que toleran hasta 24Vdc. Para ello, consulta la sección de entradas digitales. Las entradas analógicas son las comprendidas entre IX.7 e IX.12, donde X es 0, 1 o 2 según la zona.

Entrada analógica de 0V - 10Vdc

Software
Uso en el programa
Las entradas analógicas se usan como un pin normal de Arduino. Para leer su valor, usa la función "analogRead()" con el nombre de la entrada como parámetro. Ten en cuenta que todas las entradas de los PLC de Industrial Shields siguen el mismo formato de nombre: I0.7, I0.8, I1.7, etc. En el programa se accede a ellas directamente sustituyendo el punto por un guion bajo: I0_7, I0_8, I1_7.
El siguiente ejemplo muestra cómo leer la entrada I0.7 y enviar su valor por el puerto serie:
void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(I0_7)); }
void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(I0_7)); }
Referencia de la API
Descripción:
Lee el valor de la entrada analógica indicada. Los PLC basados en Arduino incorporan un convertidor analógico-digital multicanal de 10 bits. Esto significa que convierte tensiones de entrada entre 0 y 10V en valores enteros entre 0 y 1023.
Sintaxis:
analogRead(input)
Parámetros:
- input: la entrada analógica que quieres leer, que puede ser una entrada del PLC (por ejemplo, I0_7) o un pin de Arduino.
Devuelve:
La lectura analógica del pin (0-1023). Tipo de dato: int.
Algunas de las entradas digitales de los PLC basados en Arduino admiten interrupciones, lo que significa que se pueden usar con ISR (rutinas de servicio de interrupción) para ejecutar cierto código cuando se detecta un evento (un cambio de estado en el pin). Los pines con interrupción son distintos en cada PLC. Se conectan igual que las entradas digitales; consulta la sección correspondiente para ver cómo.
Entradas de interrupción disponibles
Modelo de PLC | Entradas de interrupción* |
M-Duino analógico | I0.5, I0.6, I1.5, I1.6, I2.5, I2.6 |
M-Duino de relés | I0.0, I0.1, I1.0, I1.1, I2.0, I2.1 |
Ardbox analógico | I0.0 |
Ardbox de relés | I0.0 |
* Algunas variantes del PLC con módulos de expansión, como GPRS, pueden perder algunos de los pines de interrupción.
Configuración de los interruptores
Las entradas de interrupción suelen compartir pin con otra funcionalidad, por lo que, cuando se usan, esa otra funcionalidad no está disponible. Las interrupciones se activan con un interruptor DIP del PLC. Estos son los interruptores para cada modelo y entrada:
- M-Duino analógico:
- I0.5 e I0.6 también funcionan como Pin3 y Pin2. Habilita las interrupciones poniendo en ON los interruptores inferiores número 3 y 4 de los interruptores de comunicación.
- I1.5 e I1.6 también funcionan como Tx1 y Rx1. Habilita las interrupciones poniendo en ON los interruptores superiores número 1 y 2 de los interruptores de comunicación.
- I2.0 e I2.1 también funcionan como SDA y SCL. Habilita las interrupciones poniendo en ON los interruptores superiores número 3 y 4 de los interruptores de comunicación. Ten en cuenta que, en este caso, no podrás usar I2C.
- M-Duino de relés:
- I0.0 e I0.1 también funcionan como Pin3 y Pin2. Habilita las interrupciones poniendo en ON los interruptores inferiores número 3 y 4 de los interruptores de comunicación.
- I1.0 e I1.1 también funcionan como Tx1 y Rx1. Habilita las interrupciones poniendo en ON los interruptores superiores número 1 y 2 de los interruptores de comunicación.
- I2.0 e I2.1 también funcionan como SDA y SCL. Habilita las interrupciones poniendo en ON los interruptores superiores número 3 y 4 de los interruptores de comunicación. Ten en cuenta que, en este caso, no podrás usar I2C.
- Ardbox analógico/de relés:
- I0.0 también funciona como SDA-D2/I0.0. Habilita las interrupciones poniendo en ON el interruptor superior número 4.
- I0.0 también funciona como SDA-D2/I0.0. Habilita las interrupciones poniendo en ON el interruptor superior número 4.
Para más información sobre los interruptores de cada modelo de PLC, consulta su guía de usuario.
Interruptores del M-Duino analógico/de relés
Interruptores del Ardbox analógico
Interruptores del Ardbox de relés
Software
Uso en el programa
Los pines de interrupción se usan igual que en una placa Arduino: la función "attachInterrupt()" configura la interrupción con un pin, una función y un tipo de activación. El siguiente ejemplo muestra cómo usar los pines de interrupción. En este caso, la función "isrI0_5()" se llama automáticamente cada vez que se produce un cambio de estado en el pin I0.5.
void setup() { // Begin serial port Serial.begin(9600); // Set input pinMode(I0_5, INPUT); // Initialize interrupt attachInterrupt(digitalPinToInterrupt(I0_5), isrI0_5, RISING); } void loop() { while(true); } void isrI0_5() { Serial.println("Interrupt activated"); }
void setup() { // Begin serial port Serial.begin(9600); // Set input pinMode(I0_5, INPUT); // Initialize interrupt attachInterrupt(digitalPinToInterrupt(I0_5), isrI0_5, RISING); } void loop() { while(true); } void isrI0_5() { Serial.println("Interrupt activated"); }
Referencia de la API
Descripción:
Asocia una interrupción a un pin, indicando el modo de activación de la interrupción y una función (ISR) que se ejecutará cuando se dispare la interrupción.
Sintaxis:
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
Parámetros:
- pin: la entrada de interrupción del PLC o el número de pin de Arduino.
- ISR: la ISR que se llama cuando se produce la interrupción; esta función no debe recibir parámetros ni devolver nada. A veces se denomina rutina de servicio de interrupción.
- mode: define cuándo se debe disparar la interrupción. Hay cuatro constantes predefinidas como valores válidos:
- LOW para disparar la interrupción siempre que el pin esté a nivel bajo.
- CHANGE para disparar la interrupción siempre que el pin cambie de valor.
- RISING para disparar cuando el pin pasa de bajo a alto.
- FALLING para cuando el pin pasa de alto a bajo.
Devuelve:
Nada
Salidas
Los PLC basados en Arduino disponen de salidas digitales PNP, capaces de proporcionar señales digitales de 0Vdc hasta 24Vdc. Estas salidas se etiquetan como QX.X y se identifican con el siguiente símbolo.
El valor máximo de las salidas digitales de los PLC Arduino es 24Vdc, pero hay que configurarlo entre 5Vdc y 24Vdc. Para ello, usa los dos pines situados junto a las salidas: QVdc y COM(-). Por ejemplo, si quieres que la salida sea de 24V, conecta el pin QVdc a 24V y el pin COM(-) a GND. El siguiente esquema muestra un ejemplo de conexión:

Salida digital (PWM opcional)

Software
Uso en el programa
Las salidas digitales se usan como un pin normal de Arduino. Para escribir su valor, usa la función "digitalWrite()" con el nombre de la salida y el valor como parámetros. Ten en cuenta que todas las salidas digitales de los PLC de Industrial Shields siguen el mismo formato de nombre: Q0.0, Q0.1, Q1.2, etc. En el programa se accede a ellas directamente sustituyendo el punto por un guion bajo: Q0_0, Q0_1, Q0_2.
El siguiente ejemplo muestra cómo alternar el valor de una salida entre LOW y HIGH cada segundo:
void setup() {} void loop() { digitalWrite(Q0_0, HIGH); delay(1000); digitalWrite(Q0_0, LOW); delay(1000); }
void setup() {} void loop() { digitalWrite(Q0_0, HIGH); delay(1000); digitalWrite(Q0_0, LOW); delay(1000); }
Referencia de la API
Descripción:
Escribe un valor HIGH o LOW en una salida digital.
Sintaxis:
digitalWrite(output, value)
Parámetros:
- output: la salida digital que quieres usar, que puede ser una salida del PLC (por ejemplo, Q0_2) o un pin de Arduino.
- value: HIGH o LOW.
Devuelve:
Nada.
Algunas de las salidas digitales de los PLC M-Duino y Ardbox admiten PWM, por lo que se pueden usar para generar una señal PWM de distintas frecuencias. Se identifican en el PLC con el siguiente símbolo.
Las salidas PWM funcionan con las mismas tensiones que las salidas digitales y también se configuran con los pines QVdc y COM(-) (consulta la sección de salidas digitales para más información). El siguiente esquema muestra las conexiones necesarias para usarlas.

Salida con PWM

Software
Uso en el programa
Se puede generar una señal PWM de distintas frecuencias con el periférico de temporizador de los chips de arquitectura AVR. Para ello, descarga e instala nuestra librería avr-Pulses , que se encarga de configurar los temporizadores.
Al usar esta librería, ten en cuenta lo siguiente:
- En un Arduino, cada temporizador está asociado a ciertos pines. Solo los pines con temporizador pueden generar un pulso con este método y, si dos pines comparten el mismo temporizador, no pueden funcionar a frecuencias distintas. Consulta el GitHub para ver la información sobre los pines de los PLC Arduino.
- Algunos pines usan TIMER0. Cuando se usan los pines de TIMER0, todas las funciones de tiempo, como "delay()", "millis()", "micros()" , "delayMicroseconds()" y otras, pierden su referencia temporal y no funcionan correctamente.
Consulta el siguiente ejemplo de programa, donde se configura un pulso de 500Hz:
#include <Pulses.h> // Output pin // Only pins with an associated timer can be used // IMPORTANT: when using TIMER0 pins, time related functions (millis, delay, ...) // lose their time reference and don't work properly const int pin = 3; // Frequency in Hz // Default value: 1000 // NOTE: Use 'unsigned long' and 'UL' suffix for high frequencies const unsigned long frequency = 500UL; // 500Hz // Precision recommended usage // precision = 1: from 30Hz to 150Hz // precision = 2: from 150Hz to 500Hz // precision = 3: from 500Hz to 4kHz // precision = 4: from 4kHz to 32kHz // precision = 5: from 32kHz to 4MHz const int precision = 4; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { // Start train pulses startPulses(pin, frequency, precision); } void loop() {}
#include <Pulses.h> // Output pin // Only pins with an associated timer can be used // IMPORTANT: when using TIMER0 pins, time related functions (millis, delay, ...) // lose their time reference and don't work properly const int pin = 3; // Frequency in Hz // Default value: 1000 // NOTE: Use 'unsigned long' and 'UL' suffix for high frequencies const unsigned long frequency = 500UL; // 500Hz // Precision recommended usage // precision = 1: from 30Hz to 150Hz // precision = 2: from 150Hz to 500Hz // precision = 3: from 500Hz to 4kHz // precision = 4: from 4kHz to 32kHz // precision = 5: from 32kHz to 4MHz const int precision = 4; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { // Start train pulses startPulses(pin, frequency, precision); } void loop() {}
Referencia de la API
Descripción:
Inicia un tren de pulsos en el pin de Arduino a la frecuencia indicada. Según la frecuencia, hay que fijar el valor de precisión adecuado. Consulta la tabla en la descripción de los parámetros.
Sintaxis:
startPulses(pin, freq, precision)
Parámetros:
- pin: la salida PWM que quieres usar, que puede ser una salida del PLC (por ejemplo, Q0_1) o un pin de Arduino.
- freq: la frecuencia del PWM resultante, en Hz.
- precision: valor entre 1 y 5 que configura el temporizador usado en el pulso generado.
- Precision = 1: de 30Hz a 150Hz
- Precision = 2: de 150Hz a 500Hz
- Precision = 3: de 500Hz a 4kHz
- Precision = 4: de 4kHz a 32kHz
- Precision = 5: de 32kHz a 4MHz
Devuelve:
Nada.
Descripción:
Detiene el tren de pulsos activo en la salida indicada.
Sintaxis:
stopPulses(pin)
Parámetros:
- pin: la salida cuyo pulso quieres detener, que puede ser una salida del PLC (por ejemplo, Q0_0) o un pin de Arduino.
Devuelve:
Nada.
Las salidas analógicas proporcionan una señal de tensión determinada por un valor digital de N bits.
- Rango de tensión: de 0 a 10 Vdc.
- Resolución: 8 bits.
Las salidas analógicas se etiquetan como AX.X y deben activarse correctamente con los interruptores DIP de cada PLC. Por ejemplo, para usar A0.1 hay un interruptor para elegir entre A0.1 y Q0.1, en el que hay que elegir A0.1.
En el PLC Ardbox, las salidas analógicas usan la tierra interna del PLC como referencia, mientras que el PLC M-Duino tiene un pin externo para fijar la referencia de tierra.

Salida analógica
Software
Uso en el programa
Las salidas analógicas se usan con la función "analogWrite()". Esta función, que funciona igual que en las placas Arduino normales, genera un PWM. Un filtro paso bajo convierte la señal PWM en una tensión analógica, de modo que la tensión se controla variando el ciclo de trabajo de la señal PWM:
- 0 da un ciclo de trabajo del 0% y 0V.
- 255 da un ciclo de trabajo del 100% y 10V.
El siguiente ejemplo muestra cómo fijar la tensión de la salida A0.5:
void setup() {} void loop() { analogWrite(A0_5, 0); // 0V delay(1000); analogWrite(A0_5, 255); // 10V delay(1000); }
void setup() {} void loop() { analogWrite(A0_5, 0); // 0V delay(1000); analogWrite(A0_5, 255); // 10V delay(1000); }
Referencia de la API
Descripción:
Escribe un valor analógico en una salida. La señal analógica se obtiene generando una onda PWM y filtrándola con un filtro paso bajo. Para determinar el valor de la salida, el ciclo de trabajo del PWM se define con un valor de 8 bits:
- 0: ciclo de trabajo del 0%, 0V.
- 255: ciclo de trabajo del 100%, 10V.
Sintaxis:
analogWrite(output, value)
Parámetros:
- output: la salida analógica que quieres usar, que puede ser una salida del PLC (por ejemplo, A0_1) o un pin de Arduino.
- value: el ciclo de trabajo: entre 0 (0V) y 255 (10V).
Devuelve:
Nada.
Un relé es un interruptor electromagnético controlado por una señal eléctrica. Algunas variantes de los PLC de Industrial Shields basados en Arduino incluyen salidas de relé, que se pueden usar en aplicaciones de control.
Los terminales de cada relé se identifican por la serigrafía del PLC. Cada relé tiene sus 2 terminales accesibles, sin polaridad. En reposo, los relés están abiertos y se cierran al activarse.
Los relés de los PLC de Industrial Shields admiten:
- Hasta 5A a 250Vac.
- Hasta 3A a 30Vdc.

Relé

Software
Uso en el programa
Los relés se controlan mediante un pin digital interno del PLC, así que se manejan igual que las salidas digitales. Con la función "digitalWrite()" los relés se activan o desactivan (se cierran o se abren, respectivamente):
- Pon la salida a LOW para abrir el relé.
- Pon la salida a HIGH para cerrar el relé.
Por ejemplo, el siguiente código cierra y abre el relé R0.1 cada segundo.
void setup() {} void loop() { digitalWrite(R0_1, HIGH); // Activate the relay, close it delay(1000); digitalWrite(R0_1, LOW); // Deactivate the relay, open it delay(1000); }
void setup() {} void loop() { digitalWrite(R0_1, HIGH); // Activate the relay, close it delay(1000); digitalWrite(R0_1, LOW); // Deactivate the relay, open it delay(1000); }
Referencia de la API
Descripción:
Escribe un valor HIGH o LOW en el pin que controla un relé:
- LOW para abrir el relé.
- HIGH para cerrar el relé.
Sintaxis:
digitalWrite(output, value)
Parámetros:
- output: el relé que quieres usar, que puede ser una salida del PLC (por ejemplo, R1) o un pin de Arduino.
- value: HIGH o LOW.
Devuelve:
Nada.
Pines de Arduino
Los PLC de las series Ardbox y M-Duino dejan accesibles algunos pines del Arduino que llevan dentro. Como pines de Arduino, se pueden usar como entrada o salida y su tensión de trabajo es de 5V.
Como estos pines están conectados directamente al Arduino Leonardo/MEGA del interior de los PLC Ardbox/M-Duino, hay que tener cuidado al usarlos. No superes la tensión de trabajo de 5V o la placa Arduino podría dañarse.
No hay ningún circuito entre el Arduino interno del PLC y estos pines, así que se pueden usar igual que un pin normal de una placa Arduino. Por ejemplo:
- Usarlos como selección de esclavo (slave select) para dispositivos SPI.
- Comunicarse con dispositivos OneWire, como la sonda de temperatura DS18B20.
Los pines disponibles en cada modelo de PLC son los siguientes:
PLC | Pines |
Ardbox | 2*, 3* |
M-Duino | 2, 3 |
*Los pines 2 y 3 del Ardbox, que también se pueden usar para I2C, deben activarse con los interruptores correspondientes que puedes ver más arriba.
Uso
Estos pines se pueden usar con las funciones normales de Arduino: pinMode(), digitalRead() y digitalWrite(), así como con otras librerías que los utilizan, como la librería OneWire .
Consulta la página de documentación Arduino Digital Pins para obtener información más detallada sobre este tema.
No hay comentarios por ahora.