Ir al contenido

pinMode() en un PLC basado en Arduino: entradas, salidas y mapa de pines

Configura un pin como entrada o salida y usa los nombres de pin de M-Duino, Ardbox y ESP32 PLC en el Arduino IDE
5 de diciembre de 2018 por
pinMode() en un PLC basado en Arduino: entradas, salidas y mapa de pines
Alejandro Jabalquinto

Para configurar un pin de un PLC basado en Arduino como entrada o como salida, llama a pinMode(pin, mode) en setup() con el nombre del borne del PLC: pinMode(Q0_0, OUTPUT) o pinMode(I0_0, INPUT). El paquete de placas de Industrial Shields convierte cada nombre (I0_0, Q0_0, A0_5, R0_1) en el pin correcto del microcontrolador.

Esta guía explica la sintaxis de pinMode(), cómo los nombres de pin siguen las etiquetas impresas en el PLC, los nombres de cada familia (M-Duino, Ardbox y ESP32 PLC) y dos ejemplos que compilan con las placas de Industrial Shields.

I0.0I0.7Q0.0A0.5R0.1Bornes del PLCI0_0I0_7Q0_0A0_5R0_1Nombres en el sketchpinMode(Q0_0, OUTPUT);
La etiqueta de cada borne (Q0.0) se convierte en el nombre del pin en el sketch (Q0_0).

La función pinMode()

pinMode() define cómo usa un pin el microcontrolador: como entrada que lee una tensión o como salida que la aplica. Llámala una vez en setup(), antes de leer o escribir el pin en loop().

pinMode(pin, mode);
ParámetroValorEn un PLC de Industrial Shields
pinNombre o número del pinUsa el nombre del PLC: I0_0, Q0_0, A0_5, R0_1
modeINPUTEntradas (I). Las entradas digitales leen de 5 a 24 Vdc y las analógicas de 0 a 10 V
modeOUTPUTSalidas digitales (Q), salidas analógicas (A) y relés (R)
modeINPUT_PULLUPActiva la resistencia de pull-up interna del microcontrolador. Solo para pines con nivel lógico de 5 V o 3,3 V, no para las entradas del PLC

¿Hace falta pinMode() en un PLC de Industrial Shields? En el paquete de placas actual para M-Duino y Ardbox, el core configura las entradas como INPUT y las salidas como OUTPUT antes de que se ejecute setup().

Escribe pinMode() igualmente para los pines que uses. Deja claro qué pines necesita el sketch y es la configuración que muestran las guías de producto para las salidas analógicas.

Cómo se corresponden los nombres de pin con los bornes del PLC

Cada borne del PLC tiene una etiqueta como Q0.0 o I1.5. En el sketch escribes la misma etiqueta con un guion bajo en lugar del punto: Q0_0, I1_5.

La letra indica el tipo de pin. El primer número es la zona del PLC y el segundo, la posición dentro de esa zona.

  1. IEntradasDigitales o analógicas. Se leen con digitalRead() o analogRead()
  2. QSalidas digitalesSe activan con digitalWrite()
  3. ASalidas analógicasDe 0 a 10 V. Se ajustan con analogWrite()
  4. RRelésSe activan con digitalWrite()

Los nombres solo existen si eliges la placa correcta. Instala las placas de Industrial Shields en el Arduino IDE (cómo instalarlas). Después elige la familia en Herramientas > Placa, por ejemplo M-Duino family, y el modelo exacto en Herramientas > Model, por ejemplo M-Duino 21+.

Menú Herramientas del Arduino IDE 1.8 con la lista de placas abierta y las placas de Industrial Shields ARDBOX Analog, ARDBOX Relay, M-DUINO 21, 42 y 58
Menú de placas de un Arduino IDE antiguo (1.8). Con el paquete de placas actual eliges la familia en Placa y el modelo en Model.

En los M-Duino 42+ y 58+, las zonas de ampliación repiten el patrón: la zona 1 tiene I1_x, Q1_x y A1_x, y la zona 2 tiene I2_x, Q2_x y A2_x.

Nombres de pin por familia de PLC

La tabla muestra los nombres de pin de la zona 0 de cada modelo, tal como los define el paquete de placas de Industrial Shields. Las zonas 1 y 2 de los modelos más grandes siguen el mismo patrón.

PLCEntradasSalidas digitalesSalidas analógicasRelés
M-Duino 21+, 42+, 58+
ESP32 PLC 21, 42, 58
I0_0 a I0_12 (I0_7 a I0_12 también analógicas)Q0_0 a Q0_7A0_5 a A0_7Ninguno
M-Duino 19R+, 38R+, 57R+
ESP32 PLC 19R, 38R, 57R
I0_0 a I0_5 (I0_2 a I0_5 también analógicas)Q0_0 a Q0_2A0_0 a A0_2R0_1 a R0_8
M-Duino 38AR+
ESP32 PLC 38AR
Zona 0 como el 21+, zona 1: I1_0 a I1_5Q0_0 a Q0_7, Q1_0 a Q1_2A0_5 a A0_7, A1_0 a A1_2R1_1 a R1_8
Ardbox Analog HF+I0_0 a I0_9 (8 también analógicas)Q0_0 a Q0_9A0_0 a A0_6Ninguno
Ardbox Relay HF+I0_0 a I0_9 (6 también analógicas)Ninguna, ver salidas analógicasA0_0 y A0_1 (también digitales)R1 a R8

Pines compartidos. Una salida analógica usa el mismo pin del microcontrolador que una salida digital: A0_5 y Q0_5 en el M-Duino 21+, A0_0 y Q0_0 en el M-Duino 19R+ y en el Ardbox Analog. Un interruptor del PLC selecciona qué borne funciona, así que usa cada pareja como una cosa o la otra.

analogRead() devuelve de 0 a 1023 (10 bits) en M-Duino y Ardbox, y analogWrite() acepta de 0 a 255 (8 bits). El ESP32 PLC lee con 11 bits y escribe con 12 bits.

Los modelos con GPRS, LoRa, Wi-Fi o DALI usan algunos pines para el módulo de comunicación, y el ESP32 PLC 14 tiene sus propios nombres de pin. Consulta el pinout en el User Guide de tu modelo antes de cablearlo.

Ejemplo: entradas, salidas y una salida analógica

Este sketch para el M-Duino 21+ usa los tres tipos de pin. Copia la entrada I0.0 en la salida Q0.0, hace parpadear la salida Q0.1 y escribe el valor de la entrada analógica I0.7 en la salida analógica A0.5.

// Board: M-Duino family, model M-Duino 21+
void setup() {
  pinMode(I0_0, INPUT);    // digital input (5 to 24 Vdc)
  pinMode(I0_7, INPUT);    // analog or digital input (0 to 10 V)
  pinMode(Q0_0, OUTPUT);   // digital output
  pinMode(Q0_1, OUTPUT);   // digital output
  pinMode(A0_5, OUTPUT);   // analog output (0 to 10 V)
  Serial.begin(9600);
}

void loop() {
  // Copy input I0.0 to output Q0.0
  digitalWrite(Q0_0, digitalRead(I0_0));

  // Blink output Q0.1 every second without delay()
  digitalWrite(Q0_1, (millis() / 1000) % 2);

  // Read I0.7 (0 to 1023) and set A0.5 (0 to 255)
  int value = analogRead(I0_7);
  analogWrite(A0_5, value / 4);
  Serial.println(value);
  delay(100);
}

Para usar A0.5 como salida analógica, pon su interruptor en la posición analógica, como indica el User Guide del modelo.

Probado: compilado sin errores para el M-Duino 21+ con el core AVR 1.2.1 de Industrial Shields y avr-gcc 7.3.0. No se ha ejecutado en un PLC para esta guía.

Ejemplo con salidas de relé

En los modelos con relés, un relé es una salida como cualquier otra, pero la numeración empieza en 1: R0_1 a R0_8 en el M-Duino 19R+ y el ESP32 PLC 19R, R1 a R8 en el Ardbox Relay. Cada relé conmuta hasta 250 Vac 5 A o 30 Vdc 3 A.

// Board: M-Duino family, model M-Duino 19R+
void setup() {
  pinMode(I0_2, INPUT);    // input
  pinMode(R0_1, OUTPUT);   // relay 1 (relays start at R0_1)
  pinMode(Q0_0, OUTPUT);   // digital output
}

void loop() {
  // Relay R0.1 follows input I0.2
  digitalWrite(R0_1, digitalRead(I0_2));

  // Toggle output Q0.0 every 500 ms
  digitalWrite(Q0_0, HIGH);
  delay(500);
  digitalWrite(Q0_0, LOW);
  delay(500);
}

Probado: compilado sin errores para el M-Duino 19R+ con el mismo core. No se ha ejecutado en un PLC para esta guía.

Errores habituales con los pines del PLC

  • 'Q0_0' was not declared in this scope: la placa elegida no es un PLC de Industrial Shields, o el modelo no tiene ningún pin con ese nombre. Elige la familia y el modelo en el menú Herramientas.
  • R0_0 no existe: los relés del M-Duino y del ESP32 PLC empiezan en R0_1.
  • Q0.0 con punto no es C++ válido. Escribe Q0_0.
  • Los números de pin de un tutorial para otra placa, como el pin 13, no coinciden con los bornes del PLC. Usa los nombres del PLC.
  • Valores por encima de 255 en analogWrite() en M-Duino y Ardbox: el rango es de 0 a 255.
  • INPUT_PULLUP en una entrada del PLC no sustituye el cableado del sensor. La entrada necesita una tensión del sensor (consulta entradas digitales PNP).

Preguntas frecuentes sobre pinMode() y los pines del PLC

¿Qué hace pinMode() en Arduino?

Define un pin como entrada (INPUT o INPUT_PULLUP) o como salida (OUTPUT). Llámala en setup(), antes de leer o escribir el pin.

¿Tengo que llamar a pinMode() en un PLC de Industrial Shields?

Con el paquete de placas actual, el M-Duino y el Ardbox arrancan con las entradas como INPUT y las salidas como OUTPUT. Llama a pinMode() igualmente para los pines que uses: el sketch queda más claro y es más fácil pasarlo a otro modelo.

¿Cómo configuro un pin como entrada?

Escribe pinMode(I0_0, INPUT); en setup(). Después digitalRead(I0_0) devuelve HIGH o LOW, y analogRead(I0_7) devuelve el valor de una entrada analógica.

¿Cómo configuro un pin como salida?

Escribe pinMode(Q0_0, OUTPUT); en setup(). Después digitalWrite(Q0_0, HIGH) activa la salida. Los relés funcionan igual con sus nombres R.

¿Dónde encuentro los nombres de pin de mi PLC?

En la tabla de esta guía y en el pinout del User Guide de tu modelo. Los nombres coinciden con las etiquetas impresas junto a cada borne, con un guion bajo en lugar del punto.

Buscar en nuestro blog

pinMode() en un PLC basado en Arduino: entradas, salidas y mapa de pines
Alejandro Jabalquinto 5 de diciembre de 2018
Compartir esta publicación
Etiquetas

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs