Étiquettes : , ,

Une capteur analogique envoie un niveau de tension, généralement comprise entre 0 et 5V, représentant une valeur physique. Cette tension peut être sujet à des bruits de mesure (interférence électronique, électromagnétique, précision de mesure, etc.). Dans certaines applications, vous aurez besoin de déterminer des valeurs seuils précises pour effectuer vos tâches. Une méthode simple à mettre en place est la mise en place d’un hystérésis sur la mesure qui va permettre d’effectuer des sauts entre différentes mesures au prix de la précision.

Matériel

  • Ordinateur
  • Arduino UNO
  • Câble USB A Mâle/B Mâle
  • Capteur de température (par exemple)

Principe de fonctionnement

Le principe de l’hystérésis est de définir un comportement différent selon que la valeur augmente ou diminue. Donnons un exemple pratique. imaginons que vous vouliez commander un relais en fonction de la température mesurée, pour actionner un ventilateur, par exemple. Lorsque la température est supérieur ou égale à 40°C, le relais est fermé et lorsque la température est inférieure, le relais est ouvert. Si, pour une raison ou une autre, la température oscille entre 39.5 et 40°C, le relais va s’ouvrir et se fermer au passage de la valeur seuil.
La technique largement utilisée, est de définir un seuil HAUT et un seuil BAS pour fermer et ouvrir le relais. Nous allons spécifier à l’algorithme de fermer le relais lorsque la température est supérieure ou égale à 40 et de fermer le relais lorsque la température est inférieure à 30°C. C’est le principe de l’hystérésis.

hysteresis-onoff-principle Implémentation d'un Hystérésis de mesure sur Arduino

Code

Nous allons créer une fonction qui va lire l’entrée analogique et appliquer l’hystérésis de mesure.

//Parameters
const int aihPin  = A0;
const int aihMargin  = 2;
const int aihThresh  = 306;

//Variables
int aihVal  = 0;
bool aihHystOn  = 0;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init AnalogHyst
  pinMode(aihPin, INPUT);
}

void loop() {
  readAnalogHyst();
  hystThresh();
  delay(200);
}

void readAnalogHyst( ) { /* function readAnalogHyst */
  ////Test routine for AnalogHyst
  aihVal = analogRead(aihPin);
  Serial.print(F("aih val ")); Serial.println(aihVal);
}

void hystThresh( ) { /* function hystThresh */
  ////Perform hysteresis on sensor readings

  if (aihVal >= (aihThresh + aihMargin)) {
    aihHystOn = true;
  }
  if (aihVal <= (aihThresh - aihMargin)) {
    aihHystOn = false;
  }

  Serial.print(F("aih hist : ")); Serial.println(aihHystOn);
}




Résultat

Sur le moniteur série, nous voyons que l’état passe à 1 pour une valeur supérieure à 308 et passe à 0 pour une valeur inférieure à 304.

arduino-monitor-hysteresis-result Implémentation d'un Hystérésis de mesure sur Arduino

Applications

  • Gestion d’un relais avec un capteur de température

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie