Mesure de tensions continues jusqu'à 25V avec Arduino et un diviseur de tension

La plupart des microcontrôleurs basés sur l'architecture AVR, comme l'Arduino Uno, possèdent des broches analogiques limitées à une tension d'entrée de 5V. Pour surveiller des sources d'alimentation plus importantes, comme des batteries Lipo 3S ou des circuits 12V/24V, il est impératif d'utiliser un module de détection de tension.

Principe de fonctionnement

Ce module repose sur un circuit diviseur de tension résistif simple. Il réduit la tension d'entrée par un facteur de 5. En pratique, cela signifie qu'une tension de 25V à l'entrée est convertie en une tension de 5V lisible par le convertisseur analogique-numérique (CAN) de l'Arduino. Si vous utilisez un système en 3,3V, la limite d'entrée sera de 16,5V (3,3V x 5).

Le CAN de l'Arduino dispose d'une résolution de 10 bits (soit 1024 paliers). La résolution théorique du module est donc de :
(5V / 1023) * 5 ≈ 0,02445V

Spécifications techniques

  • Plage de détection de tension : DC 0,02445V à 25V.
  • Type d'interface : Analogique.
  • Connecteur d'entrée : Bornier à vis (VCC pour le positif, GND pour le négatif).
  • Connecteur de sortie : Interface 3 broches (S pour le signal, + pour l'alimentation, - pour la masse).

Schéma de câblage

Pour interfacer le capteur avec un microcontrôleur, suivez cette configuration :

  • Bornier (Côté source à mesurer) : Connectez la tension à mesurer aux bornes VCC et GND.
  • Broches (Côté Arduino) :
    • S (Signal) -> Broche A0
      • (VCC) -> 5V (Optionnel pour ce type de circuit passif)
      • (GND) -> GND

Exemple de code : Lecture de la tension brute

Ce premier script permet de lire la valeur analogique et de la convertir en tension réelle affichée dans le moniteur série.


const int pinCapteur = A0;
const float rapportDivision = 5.0;
const float tensionReference = 5.0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int lectureBrute = analogRead(pinCapteur);
  
  // Conversion du signal numérique en tension d'entrée réelle
  float tensionEntree = (lectureBrute * tensionReference / 1024.0) * rapportDivision;

  Serial.print("Tension mesuree : ");
  Serial.print(tensionEntree, 2);
  Serial.println(" V");

  delay(1000);
}

Surveillance de seuil avec alerte LED

Ce second exemple illustre comment déclencher une action (allumer une LED) si la tension descend sous un seuil critique, par exemple pour protéger une batterie contre une décharge profonde.


const int brocheMesure = A0;
const int brocheAlerte = LED_BUILTIN;
const float seuilCritique = 12.0; // Seuil d'alerte à 12V

void setup() {
  pinMode(brocheAlerte, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int valeurADC = analogRead(brocheMesure);
  float tensionReelle = (valeurADC * 5.0 / 1024.0) * 5.0;

  Serial.print("Statut : ");
  Serial.print(tensionReelle);
  Serial.println("V");

  if (tensionReelle < seuilCritique) {
    digitalWrite(brocheAlerte, HIGH); // Alerte activée
  } else {
    digitalWrite(brocheAlerte, LOW);  // Tension normale
  }

  delay(500);
}

Précautions d'usage

Bien que le module puisse supporter théoriquement jusqu'à 25V, assurez-vous de ne jamais dépasser 5V sur la broche de sortie "S" pour éviter d'endommager l'entrée analogique de votre Arduino. En cas d'utilisation d'un convertisseur DC-DC en amont pour alimenter vos moteurs, ce capteur est idéal pour surveiller la stabilité de la tension de sortie ou l'état de décharge de la batterie source.

Étiquettes: arduino VoltageSensor Electronics ADC VoltageDivider

Publié le 31 octobre à 06h57