Pour faire comprendre la régulation PID industrielle à des étudiants, des asservissements de chauffages sont utilisés avec un gradateur 4 20mA et lampe, une PT 100 avec transmetteur 4 20mA.
Ce système permet aussi aux étudiants de rechercher des défaillances.
Le schéma électrique et le TP est téléchargeable sur le lien suivant
Mais le système précèdent n’avait pas d’enregistreur pour connaitre l’influence du paramétrage du PID.
Or, les dataloggers industrielles ont des prix abordables, sauf si l’on prend beaucoup de voies.
Le paramétrage de ce datalogger à 2 entrées est assez facile pour avoir la commande et la mesure de la sortie pour vérifier l’optimisation de la commande du PID.
Mais en attendant que le datalogger industriel precedent arrivent, j’ai dû faire l’acquisition des mesures 4 -20mA avec un TTGO.
Les exemples d’Arduino pour lire le 4-20mA ne manquent pas sur le net.
Voici le programme qui permet de tracer les 2 voies sur l’ecran du TTGO et de récuperer les données via la liaison serie par un fichier .csv via le terminal toutes les secondes.
le TTGO peut rajouter de nombreux autres capteurs.
/TTGO graphic 4_20mA temperature et out
#include <TFT_eSPI.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
TFT_eSPI tft = TFT_eSPI(); //library 1,4" color 135, 240
//OneWire oneWire(25); //pin sensor DS18B20
//DallasTemperature sensors(&oneWire);
float Dec=0;
float T=0;
float DS18;
float temps=0;
float outdec;
float pourcentage;
byte x;
byte i;
#define Sleft 0 //switch left
#define Sright 35 //switch right
void trace() {
tft.drawLine(0,134,240,134,TFT_RED); // axe Horizontal
tft.drawLine(0,130,0,0, TFT_CYAN); // axe vertical
tft.drawLine(120,134,120,110, TFT_CYAN); //ligne curseur du milieu
tft.setCursor(110, 120, 2);// (x,y,taille)
tft.print("120s");
tft.setCursor(210, 120, 2);// (x,y,taille)
tft.print("240");
tft.setCursor(0, 67, 2);// (x,y,taille)
tft.print("50");
tft.print("C");
tft.setCursor(0, 0, 2);// (x,y,taille)
tft.print("100");
tft.print("C");
}
void setup() {
pinMode(33, OUTPUT);
pinMode(2, INPUT); //entree analog 220ohms PT100 4 20mA
pinMode(36, INPUT); //out 4 20mA gradateur
pinMode(35, INPUT_PULLUP); //bouton droit
Serial.begin(115200);
tft.init();
tft.setRotation(1); //format horizontal (X=0,Y=0) en haut à gauche
tft.fillScreen(TFT_BLACK);
//sensors.begin(); //DS18B40
analogReadResolution(12); //12 bits
tft.setTextColor(TFT_WHITE,TFT_BLACK); //https://wiki.microduinoinc.com/Tft.drawLine()
trace();
}
void loop() {
// if (digitalRead(17)==1) {digitalWrite(17,LOW);} else {digitalWrite(17,1);} // Le temps du programme sans le delay est de 700 micro seconde.
for (i=0; i<240; i++) { x++;
temps++;
Dec=analogRead(2); //volage image intensity 220ohms mA=(0.02-0.004)*T/100+0.004
T=(Dec-1092)/43.44; //V=220*mA V=0.035*T+0.88 Dec=43.44*T+1092
if (T>130) {T=130;}
outdec=analogRead(36); //9.7V à 100% 4.1V à 0% pont diviseur par 3
pourcentage=(outdec-1590)/21.7; //out(V)=((9.7-4.1)*pourcentage+4.1)/3 outdec=21.7*pourcentage+1590
if (pourcentage>99) {pourcentage=99;}
if (pourcentage<=0) {pourcentage=0;}
// sensors.requestTemperatures(); //DS18B20
// DS18=sensors.getTempCByIndex(0); //en °C
tft.drawPixel(x,134-T,TFT_GREEN);
//tft.drawPixel(x,134-DS18,TFT_RED);
tft.drawPixel(x,134-pourcentage,TFT_RED);
tft.setCursor(50, 0, 4);// (x,y,taille)
tft.setTextColor(TFT_GREEN,TFT_BLACK);
tft.print(T,1);tft.print("`");
tft.print("C ");
tft.setCursor(150, 0, 4);// (x,y,taille)
tft.setTextColor(TFT_RED,TFT_BLACK);
tft.print(pourcentage,1);
tft.print("% ");
Serial.print(temps,0);Serial.print(";"); //terminal recuperer les données dans un terminal serie en fichier CSV
Serial.print(T,1);Serial.print(";"); //tracer les courbes dans excel
Serial.print(pourcentage,1);Serial.println(";");
//Serial.print(DS18,1);Serial.println(";");
delay(999); //base de temps mais routine d'interruption serait mieux
if(x>=239){ //rafraichit tout l'ecran
tft.fillScreen(TFT_BLACK); //effacement de tout l'ecran
trace();
x=0;}
} //fin tracage
} //end loop
Malgré que la temperature est très stable, l’acquisition de la temperature du TTGO a une fluctuation comme on peut l’observer sur la figure suivante.
Évidemment, le TTGO pourrait tout faire le datalogger et - remplacer le régulateur PID Anly AT403






























