entrees_numeriques.ino
Las entradas de Opta aceptan directamente los 24 V industriales: este sketch vigila IN1 a IN4, filtra el rebote a 30 ms e imprime cada cambio de estado por el puerto serie. Un ejemplo de asociación directa entrada→relé completa la demo.
Hardware
Una Opta PLC de STMicroelectronics (STM32H747 en tiempo real + coprocesador seguro i.MX RT1052) programada con el entorno Arduino PLC, alimentada a 24 V DIN. Botones o sensores de tres hilos de 24 V (PNP/lógica positiva) en IN1..IN4, 0 V al borne común COM.
Cableado
Cada sensor: +24 V a su alimentación, salida al borne INx, 0 V al COM común de entradas. Sin resistencia externa: 24 V es la norma aquí.
Funcionamiento
DigitalIn.read devuelve el nivel filtrado por hardware; el filtro software de 30 ms evita duplicados en contactos mecánicos. write copia el estado al relé.
Ejecución
Instala el gestor de placas Arduino PLC, selecciona «Opta PLC», conecta USB/DFU y vuelca el programa. El sketch corre por el STM32H747 en tiempo real.
Variantes
Cambiar a detección por nivel bajo (sensor NPN) o guardar un contador de pulsaciones por entrada para un contador de producción.
entrees_numeriques.ino
// Opta PLC : lecture des entrées numériques IN1..IN4 (24 V DC, logique positive).
#include "PLCContainer.h"
PLCContainer PLC;
const int ENT[4] = { OPTA_IN_1, OPTA_IN_2, OPTA_IN_3, OPTA_IN_4 };
int etatPrec[4] = { -1, -1, -1, -1 };
unsigned long dernier[4] = { 0, 0, 0, 0 };
const unsigned long ANTI_REBOND_MS = 30;
void setup() {
Serial.begin(115200);
PLC.begin();
for (int i = 0; i < 4; i++)
PLC.DigitalIn.setMode(ENT[i], PLCDigitalIn::PULL_UP);
Serial.println("Entrées Opta prêtes (IN1..IN4)");
}
void loop() {
for (int i = 0; i < 4; i++) {
int e = PLC.DigitalIn.read(ENT[i]) ? 1 : 0;
unsigned long maintenant = millis();
if (e != etatPrec[i] && maintenant - dernier[i] > ANTI_REBOND_MS) {
dernier[i] = maintenant;
etatPrec[i] = e;
Serial.printf("IN%d = %s\n", i + 1, e ? "ACTIVE (24V)" : "inactive");
if (i == 0) PLC.Relay[0].write(e); // bouton IN1 -> relais 1
}
}
}