Potentiomètre et valeurs analogiques
1. Le composant : Le potentiomètre
Le potentiomètre est une résistance dont on peut faire varier la valeur. Contrairement à un bouton poussoir qui n'a que deux états (ouvert ou fermé), le potentiomètre permet de balayer toute une plage de valeurs.
-
Le branchement : Il possède trois broches. Les deux extrémités se branchent sur l'alimentation (5V et GND). La broche centrale (le curseur) envoie une tension variable à l'Arduino.
-
Le principe : Plus on tourne le bouton vers le 5V, plus la tension monte. Plus on tourne vers le GND, plus elle descend vers 0V.
2. La lecture analogique (ADC)
L'Arduino possède des entrées spécifiques nommées A0 à A5. Elles sont capables de mesurer cette tension variable. Le processeur traduit cette tension en un nombre compris entre 0 et 1023.
-
0 correspond à 0 Volt (bouton tourné à fond d'un côté).
-
1023 correspond à 5 Volts (bouton tourné à fond de l'autre côté).
3. La mise à l'échelle (Mapping)
En programmation, on a rarement besoin d'un chiffre entre 0 et 1023. Si on veut piloter un délai, on préfère parler en millisecondes. La fonction map() est l'outil indispensable pour convertir ces graduations.
Exemple : int temps = map(lecture, 0, 1023, 100, 2000); Ici, on demande à l'ordinateur de transformer l'échelle 0-1023 en une échelle de temps allant de 100ms à 2000ms.
4. Exercice pratique : Réglage d'un clignotement
L'objectif est de construire un programme capable de modifier la vitesse de clignotement d'une LED en temps réel. Nous allons procéder par étapes logiques.
Étape A : Câblage du diviseur de tension
Avant de coder, réalisez le montage suivant. Le potentiomètre va agir comme un capteur de position envoyant une tension variable à l'Arduino.
-
Potentiomètre : Reliez les bornes extérieures au 5V et au GND. La borne centrale doit être connectée à l'entrée A0.
-
LED : Connectez une LED sur la broche 13 (n'oubliez pas la résistance de protection de 220Ω).
Étape B : Acquisition du signal (La lecture)
Dans la boucle principale loop(), la première mission de l'Arduino est d'interroger l'entrée analogique. Le microcontrôleur transforme la tension reçue en un nombre entier.
Logique à implémenter :
void loop() {
// On crée une variable 'lecture' pour stocker le résultat de analogRead()
int lecture = analogRead(A0);
}
Note : À ce stade, lecture contient une valeur brute située entre 0 (0V) et 1023 (5V).
Étape C : La fonction de sortie (Le "Blink")
Pour structurer le code, nous créons une fonction isolée qui contient la "recette" du clignotement. Cette fonction doit accepter un paramètre : la durée de l'attente.
void maFonctionBlink(int duree) {
digitalWrite(13, HIGH); // Allumer
delay(duree); // Attendre le temps reçu en paramètre
digitalWrite(13, LOW); // Éteindre
delay(duree); // Attendre à nouveau
}
Étape D : Mise à l'échelle (Le Mapping)
Le problème est que 1023 correspond à environ 1 seconde, ce qui est peu réactif. Nous voulons que le potentiomètre gère une plage allant de 50ms (très rapide) à 1500ms (très lent).
À ajouter dans le loop() : Utilisez la fonction map() pour convertir la variable lecture.
// Syntaxe : map(valeur, min_entree, max_entree, min_sortie, max_sortie)
int vitesse = map(lecture, 0, 1023, 50, 1500);
Étape E : Assemblage final
Il ne reste plus qu'à appeler votre fonction maFonctionBlink en lui transmettant votre variable vitesse.
Conclusion
Ce module vous a permis de comprendre comment transformer une grandeur physique continue (la rotation d'un axe) en une donnée numérique exploitable par un programme.
La maîtrise de la lecture analogique est fondamentale en électronique : c'est elle qui permet d'utiliser la majorité des capteurs (température, luminosité, pression, etc.). Gardez cependant à l'esprit que l'utilisation de delay() est ici une solution de facilité. Dans un contexte industriel ou pour des systèmes complexes nécessitant de la réactivité, vous devrez apprendre à remplacer ces pauses par une gestion du temps non-bloquante via la fonction millis().
