entrees_numeriques.ino

Arduino Opta (micro PLC, STM32H747) · Archivo : entrees_numeriques.ino · Lenguaje : Arduino · Uso : Lire les 4 entrées numériques 24 V avec anti-rebond

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
    }
  }
}

← Volver a la ficha