Lecture d’un potentiomètre. Entrées analogiques d’Arduino.

Connexion d'un potentiomètre à notre Arduino
Connexion d'un potentiomètre à notre Arduino

Dans ce post nous allons lire un signal analogique avec un potentiomètre et on montrera les données obtenues sur le port série (moniteur). Deuxièmement, on transformera ces données en tension, en pourcentage et on utilisera une moyenne, pour réduire les valeurs déréglées. Finalement, on variera l’intensité d’une led à l’aide d’un potentiomètre.

Tandis que les entrées digitales sont comme une sorte d’ interrupteur qui peut allumer ou éteindre une ampoule, les entrées analogiques sont plutôt comme un régulateur, permettant de choisir l’intensité de cette ampoule. Ainsi, les valeurs obtenues à travers les entrées analogiques peuvent être multiples. Quand Arduino reçoit les donnés d’une entrée analogique la tension est entre 0 et 5 Volts. Cette valeur, en volts, est automatiquement transformée par la plaque en une nouvelle valeur equivalente, sur une échelle d’entre 0 et 1023 selon la valeur reçue (0 V= 0 / 5V= 1023).

Potentiomètre linéaire avec ses trois broches.
Potentiomètre linéaire avec ses trois broches.

Pour tester comment fonctionnent ces entrées analogiques nous allons nous servir d’un potentiomètre, une résistance variable a trois bornes que permet de recueillir une tension qui dépend de la position du curseur et de la tension à laquelle est soumise la résistance. Il a la particularité de modifier la valeur de la résistance quand on le souhaite.

Schéma.

Il est nécessaire:

  • Arduino Uno ou équivalent.
  • Une plaque d’essai ou breadboard.
  • Trois fils.
  • Un potentiomètre linéaire.

Cablage du circuit:

Schéma connexion potentiomètre avec Arduino
Connexion d’un potentiomètre

Le montage est très simple: la borne VCC du potentiomètre se relie avec l’entrée de 5V de la plaque Arduino, la borne GND se relie à la masse et la sortie de données OUT à l’entrée analogique A0.

Expérience 1: vérifier la sortie analogique des données.

Une entrée analogique nous offre des valeurs entre 0 et 1023, vérifions:

int valeur = 0; // Variable où on stock la valeur du potentiomètre

void setup() {
  Serial.begin(9600);  // Initialisons la communication serial
}

void loop() {
  valeur = analogRead(A0); // on lit les données du pin A0 

  // on imprime la valeur sur le moniteur serie (0 - 1023)
  Serial.print("Valeur analogique : ");
  Serial.println(valeur);
  delay(1000);
}

Une fois le code compilé , on ouvre le moniteur série et on exécute. En tournant la roue du potentiomètre on pourra observer comment les différentes valeurs ( entre 0 et 1023) s’affichent sur l’écran.

Expérience 2: transformer les données analogiques en tension.

Pour cette expérience on utilisera le même schéma. On ajoutera au code une nouvelle variable afin de stocker la tension et on convertira les données en volts. Comment fait-on cette conversion? On sait que 5 V correspondent à 1023, et la donné de valeur correspond à la lecture du potentiomètre:

Formule pour la conversion  de la variable "valeur" à volts.

Code:

int valeur = 0;      // Variable où on stock la valeur du potentiomètre
float tension = 0;  // Variable où on stock le voltage, la tension

void setup() {
  Serial.begin(9600); // Initialisons la communication sérial
}

void loop() {
  valeur = analogRead(A0);           // on lit la valeur du pin A0 
  tension = (valeur*5.00/1023.00);   // on calcule la tension
  Serial.print("valeur analogique: ");
  Serial.print(valeur);

  Serial.print(" tension: ");
  Serial.print(tension);
  Serial.println("V");
  delay(1000);
}

On peut observer que nous avons introduit une nouvelle variable du type float, nommée tension. Dans la fonction loop() nous avons ajouté l’instruction: tension=( valeur* 5.00/1023.00); c’est la formule servante à calculer notre tension.

Expérience 3: transformer les données en pourcentage.

Le cablage est toujours le même.

Pour calculer le pourcentage nous allons utiliser l’intruction map().

position = map (valeur, 0, 1023, 0, 100)

int valeur = 0;  //variable où on stock la lecture analogique
int position;   //position du potentiomètre en tant que pour cent
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  valeur = analogRead(A0);          // réalise la lecture analogique
  position = map(valeur, 0, 1023, 0, 100);  // convertir en pourcentage
 
  Serial.print("Valeur %: ");
  Serial.println(position);
  delay(1000);
}

Quand on travaille avec de senseurs analogiques on peut parfois capter une valeur faussée et distordue, éloignée des autres valeurs, et pourtant inexacte. Les parasites sont une réalité pénible usant un potentiomètre. La façon la plus efficace pour réduire ces fausses données, est celle de recueillir plusieurs valeurs et faire la moyenne. Prenant cette moyenne comme la valeur la plus fiable.

Experiénce 4: faire la moyenne.

Pour cette expérience on va prendre dix valeurs afin de faire la moyenne:

int valeur = 0; // Variable où on stock la valeur du potentiométre
int total = 0;
int moyenne = 0;
int i=0;
void setup() {
  Serial.begin(9600);  // on commence la communication sérial
}

void loop() {
  total = 0;
  for(i=0; i <= 9; i++){
    valeur = analogRead(A0); // on lit la valeur du pin A0
    Serial.print("  valeur: ");
    Serial.println(valeur);
    delay(1);
    total = total + valeur;
  }
  moyenne = total / i;
  // on imprime la moyenne sur le monitor série (0 - 1023)
  Serial.print("Valeur moyenne : ");
  Serial.println(moyenne);
  delay(1000);
}

Varier l’intensité d’une led avec un potentiomètre.

Tout ce qu’on vient de présenter dans ce tutoriel peut nous servir pour réaliser plusieurs opérations; par exemple, appliquer plus ou moins intensité à une diode, moduler la vitesse d’un moteur, modifier la fréquence d’un son…

il est nécessaire:

  • Arduino Uno ou équivalent.
  • Une plaque d’essai ou breadboard.
  • Cinq fils.
  • Une led.
  • Un potentiomètre linéaire.

Schéma:

Varier l'intensité d'une led avec un potentiomètre.
Cablage pour varier l’intensité d’une diode avec un potentiomètre

Code:

int valeur = 0;      // Variable où on stock la valeur du potentiomètre
float tension = 0;  // Variable où on stock la tension
int valeurPot=0;

void setup() {
  pinMode(3,OUTPUT);
  Serial.begin(9600); // on commence la communication sérial
}

void loop() {
  valeur = analogRead(A0);           // on lit la valeur du pin A0
  tension = (valeur*5.00/1023.00);   // on calcule la tension
  valeurPot = map(valeur,0,1023,0,255);
  analogWrite(3,valeurPot);           // on allume le led (0-255)
  Serial.print("valeur analogique: ");
  Serial.print(valeur);

  Serial.print(" tension: ");
  Serial.print(tension);
  Serial.print("V");

  Serial.print(" valeur: ");
  Serial.println(valeurPot);
  delay(1000);
}
Articles similaires
Laisser un commentaire