Comment lire un signal 4-20 mA avec un Arduino ?

De très nombreux capteurs sont construits pour produire un signal de sortie 4-20 mA. L’intérêt d’un tel signal est qu’il peut être transporté de manière fiable sur de longues distances. C’est très pratique sur un site industriel où les longueurs de câbles atteignent rapidement plusieurs centaines de mètres.

Dans l’univers des makers et du DIY, les micro contrôleurs Arduino sont très répandus. Ils sont très peu chers et offrent la possibilité de construire de très nombreux projets grâce aux capteurs et actionneurs compatibles. Afin d’élargir leur intérêt et de les rapprocher du monde industriel, il peut être utile de pouvoir lire le signal d’un capteur 4-20 mA. Il devient alors possible par exemple de mesurer une pression ou un débit à l’aide d’un Arduino.

Dans cet article, je vous propose un montage, un peu de théorie et un code pour lire un signal 4-20 mA avec un Arduino.

Principe de mesure

Un capteur 4-20 mA vient imposer un courant compris entre 4 et 20 mA dans un circuit électrique.
En insérant dans cette boucle une résistance de valeur connue, il est possible de créer une chute de tension qui sera proportionnelle au courant dans la boucle.

L’Arduino est utilisé pour mesurer la chute de tension grâce à une de ses entrées analogiques.
A l’aide de la relation I=U/R le courant circulant dans la résistance est calculé.
Le courant est donc connu et peut être traduit en valeur mesurée grâce à l’échelle 4-20 mA.

Les composants nécessaires

Certains fabricants proposent des cartes électroniques toutes faites permettant de lire les mesures de capteurs 4-20 mA. Ces cartes communiquent ensuite grâce au protocole I2C avec un Arduino ou un Raspberry.

Bien que très intéressante, cette solution est onéreuse. Peut-être offre-t-elle une plus grande précision de mesure ?

Pour revenir à ce tutoriel, voici la liste des composants dont vous aurez besoin :

  • 1 x Carte Arduino
  • 1 x Résistance de 250 Ohm (ou une combinaison de plusieurs résistances permettant d’atteindre environ 250 Ohm)
  • 1 x Ordinateur pour charger le programme et lire les valeurs
  • 1 x Alimentation (selon capteur, généralement entre 12 et 30 VDC)
  • 1 x Capteur 4-20 mA (capteur de pression, de débit, de température…)

Si l’on considère que vous avez déjà votre capteur 4-20 mA, votre Arduino et votre ordinateur, le coût des composants est dérisoire. Tout au plus quelques centimes pour un jeu de résistances.

Le montage

Passons maintenant au montage du circuit. Le but est de créer une boucle de courant dans laquelle se trouve l’alimentation, le capteur et la résistance. Ensuite, l’Arduino est utilisé pour mesurer la tension aux bornes de la résistance. Voici le schéma électrique utilisé.

1-Schéma
Schéma électrique du montage à réaliser pour la lecture d'un signal 4-20 mA avec Arduino

Voici une photo du montage réalisé. Dans cet exemple, deux résistances en série sont utilisées pour recréer environ 250 Ohms.

Des dominos sont utilisés pour connecter les différents éléments de la boucle de courant. L’intérêt d’un tel agencement est de pouvoir changer rapidement le capteur ou l’alimentation.

2-Montage
Photo du montage réalisé pour la lecture d'un signal 4-20 mA à l'aide d'un Arduino Nano

La valeur exacte de la résistance doit être mesurée pour ensuite être intégrée dans le code.

Les calculs

L’Arduino est utilisé pour mesurer en temps réel la tension aux bornes de la résistance puis pour réaliser une série de calculs afin de transformer la mesure en valeur de pression, en bars.

  • Etape 1

L’entrée analogique d’un Arduino renvoie une valeur comprise entre 0 et 1023 selon la tension mesurée, qui doit être comprise entre 0 et 5 V. La valeur de 5 V correspondant à 1023. La première étape du code transforme donc la valeur en tension.

Notons ici que la valeur de 250 Ohm est choisie de manière à ce que la pleine échelle du capteur (20 mA) corresponde au maximum à 5 V. (250 Ohm x 0,02 A = 5 V)

  • Etape 2

La deuxième étape consiste à calculer le courant circulant dans la boucle. Connaissant la valeur exacte de la résistance et la formule I = U/R, c’est un jeu d’enfant.

  • Etape 3

Troisième et dernière étape, il convient de traduire la valeur de courant en pression. Pour cela, il faut connaitre l’échelle du capteur utilisé. Par exemple, pour un capteur 0-8 bar, si la valeur mesurée est de 20 mA, c’est que la pression est de 8 bars.

Pour bien comprendre mais aussi vérifier les calculs, vous pouvez télécharger ce fichier Excel qui détaille chacune des étapes.

Le code Arduino

Voici le code Arduino utilisé pour ce projet.

   
// SPLAC.fr

// CONSTANTES ET VARIABLES
float resistance = 246; //valeur exacte de la résistance en Ohm

float courant_min = 4;   // valeur basse de l'échelle de courant en mA
float courant_max = 20;  // valeur haute de l'échelle de courant en mA

float pression_min = 0;   // valeur basse de l'échelle de pression en bara
float pression_max = 9;  // valeur haute de l'échelle de pression en bara

float a = (pression_max - pression_min) / (courant_max - courant_min);
float b = pression_max - a * courant_max;

float mini = 0;
float maxi = 0;

void setup() {
  Serial.begin(9600);
  delay(1000);
  mini = 10;
}

void loop() {
// Calculs
  int valeur = analogRead(A0); //analog read transforme 0-5V en valeur comprise entre 0 et 1023
  float tension = valeur * (5.0 / 1023.0);
  float courant = tension / resistance * 1000; // calculé en mA
  float pression = a * courant + b;

  if (mini > pression)
  {
    mini = pression;
  }

  if (maxi < pression)
  {
    maxi = pression;
  }
  

// Affichages
  /*Serial.print("Valeur (-) : ");
  Serial.println(valeur);
  Serial.print("Tension (V) : ");
  Serial.println(tension);
  Serial.print("Courant (mA) : ");
  Serial.println(courant);
  Serial.print("Pression (bara) : ");
  */Serial.println(pression*100);
  /*Serial.print("Pression mini (bara) : ");
  Serial.println(mini);
  Serial.print("Pression maxi (bara) : ");
  Serial.println(maxi);
  Serial.println("");*/

  delay(50);
}

Et voici une capture de la lecture obtenue.

3-Exemple
Exemple de lecture d'un signal 4-20 mA d'un manomètre à l'aide d'Arduino

Conclusion

Un montage rapide et efficace qui permet d’intégrer des capteurs industriels dans un projet Arduino. C’est par exemple le montage utilisé pour mesurer la pression du souffle humain dans cet article.

Si vous avez apprécié cette lecture ou que le contenu vous a été utile, n’hésitez pas à commenter et à partager cet article avec d’autres personnes qui pourraient être intéressées. C’est un moyen simple de soutenir ce blog.

A partager sans modération !
S’abonner
Notifier de
guest
0 Commentaires
Inline Feedbacks
View all comments