analogique_0_10v.ino
Les entrées analogiques de l'Opta lisent 0-10 V en millivolts. Ce programme fait une moyenne glissante sur 8 mesures pour lisser le bruit, puis convertit un capteur 4-20 mA standard via une résistance de lecture, avec détection de boucle ouverte.
Matériel requis
Une Opta PLC STMicroelectronics (STM32H747 temps réel + coprocesseur sécurisé i.MX RT1052) programmée avec l'environnement Arduino PLC, alimentée en 24 V DIN. Capteur 0-10 V, ou boucle 4-20 mA avec résistance de lecture 250 Ω (0-5 V aux bornes) sur AI1 et GND.
Câblage
Sortie capteur vers borne AIx, 0 V vers GND analogique. En 4-20 mA : émetteur → résistance 250 Ω → AIx, masse commune avec la PLC.
Fonctionnement
AnalogIn.read renvoie des millivolts ; la moyenne circulaire amortit le bruit de fond. La détection >19,5 mA signale une coupure de boucle (défaut capteur).
Exécution
Installez le gestionnaire de cartes Arduino PLC, sélectionnez « Opta PLC », câblez en USB/DFU puis téléversez. Le programme tourne sur le STM32H747 côté temps réel.
Variantes
Changer l'échelle pour un capteur 0-10 V réel (map 0..10000 mV), journaliser vers le serveur web embarqué ou MQTT.
analogique_0_10v.ino
// Opta PLC : acquisition AI1 (0-10 V) avec moyenne glissante + seuil.
#include "PLCContainer.h"
PLCContainer PLC;
const int CANAL = OPTA_AI_1; // entrée analogique 1 (0-10 V)
const int FENETRE = 8; // moyenne sur 8 mesures
long tampon[FENETRE];
int n = 0;
unsigned long t0 = 0;
// Capteur 4-20 mA typique avec résistance de lecture 250 Ω :
// 4 mA -> 1 V ; 20 mA -> 5 V. Conversion en mA ci-dessous.
float vers_mA(int millivolts) {
return (millivolts / 250.0f) * 10.0f;
}
void setup() {
Serial.begin(115200);
PLC.begin();
for (int i = 0; i < FENETRE; i++) tampon[i] = PLC.AnalogIn.read(CANAL);
}
void loop() {
if (millis() - t0 < 250) return; // 4 mesures/s
t0 = millis();
tampon[n] = PLC.AnalogIn.read(CANAL); // renvoie des millivolts
n = (n + 1) % FENETRE;
long somme = 0;
for (int i = 0; i < FENETRE; i++) somme += tampon[i];
long moy = somme / FENETRE;
float mA = vers_mA(moy);
Serial.printf("AI1 = %ld mV -> %.2f mA", moy, mA);
if (mA > 19.5f) Serial.print(" ALERTE capteur en défaut (boucle ouverte)");
Serial.println();
}