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.
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.
Applications
- Gestion d’un relais avec un capteur de température
Sources
- Le filtrage en électronique
- https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
- Gestion d’un capteur de température
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie