← Retour au chapitre

Étape 3 / 3

Exo 7 : DJ Dimmer — potentiomètre

analogRead + map() pour contrôler la luminosité avec un potentiomètre.

Chapitres précédents non terminés
Pour un apprentissage optimal, termine d'abord : Boutons et entrées digitales

Lire le monde analogique avec analogRead()

Jusqu'ici, l'Arduino lisait des signaux digitaux (HIGH ou LOW avec digitalRead). Mais le monde réel est analogique : la température, la lumière, la position d'un bouton rotatif — tout ça varie de façon continue.

La fonction analogRead(pin) lit une tension entre 0V et 5V et la convertit en un nombre entier entre 0 et 1023 (résolution 10 bits = 210 = 1024 valeurs possibles).

int valeur = analogRead(A0);  // Lit la tension : 0-1023

0

0V — pot tourné à fond à gauche

512

~2.5V — pot au milieu

1023

5V — pot tourné à fond à droite

Le potentiomètre : un diviseur de tension

Le potentiomètre est une résistance variable avec 3 pattes :

VCC (5V)

Alimentation positive

SIG (signal)

Broche du milieu → vers A0

GND (masse)

Retour au 0V

Analogie : le potentiomètre, c'est comme un robinet graduel. Tourné à gauche = fermé (0V). Tourné à droite = grand ouvert (5V). Au milieu = la moitié (2.5V). La broche du milieu (SIG) mesure où tu en es.

La fonction map() : convertir les plages

analogRead() donne 0-1023, mais analogWrite() attend 0-255. Comment convertir ? Avec map() qui fait une règle de trois automatique :

int lum = map(valeur, 0, 1023, 0, 255);
//                  ↑       ↑      ↑    ↑     ↑
//               valeur   min_in max_in min_out max_out

Simulateur : tourne le potentiomètre

01023

analogRead(A0)

512

map()

analogWrite(9, ...)

128

Schéma du circuit

Deux circuits en parallèle : le potentiomètre envoie une tension variable à A0, et la LED sur ~D9 reçoit la luminosité via PWM. La patte du milieu du pot (SIG) va vers A0 — c'est la tension qu'on lit.

5V → Pot 10kΩ → GND (SIG → A0) | D9~ → R 220Ω → LED → GND

5V10kΩ potD9 ~220Ω

Montage pas à pas

Potentiomètre 10kΩ en colonnes 6-8 (section basse). Câble rouge 5V → colonne 8 (VCC). Câble vert A0 → colonne 7 (SIG). Cavalier noir colonne 6 → rail − GND.

++151015202530abcdeabcdefghijfghij151015202530++
100%

Code : DJ Dimmer

Le code lit le potentiomètre, convertit la valeur, et l'envoie à la LED. Le Serial Monitor affiche les valeurs en temps réel pour le debug.

const int POT = A0;
const int LED = 9;   // Pin PWM ~9

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

void loop() {
  int valeur = analogRead(POT);
  int lum = map(valeur, 0, 1023, 0, 255);
  analogWrite(LED, lum);

  Serial.print("Pot: ");
  Serial.print(valeur);
  Serial.print(" → LED: ");
  Serial.println(lum);

  delay(50);
}

Serial Monitor : ouvre le moniteur série dans l'IDE Arduino (Outils → Moniteur série, ou Ctrl+Maj+M) pour voir les valeurs du pot en direct. Assure-toi que le baudrate est à 9600.

Attention : les pins analogiques (A0 à A5) n'ont pas besoin de pinMode() pour la lecture. analogRead() les configure automatiquement.

Exercice : complète le dimmer

Remplis les trous pour lire le pot et contrôler la LED :

1. Quelle fonction lit une valeur analogique (0-1023) ?

int valeur = (A0);

2. Quelle fonction convertit une plage en une autre ?

int lum = (valeur, 0, 1023, 0, 255);

3. Quelle variable passer à analogWrite pour la luminosité ?

analogWrite(LED, );

Défis bonus

📊 Défi : Bargraph 3 LEDs

Branche 3 LEDs (verte, jaune, rouge) sur des pins PWM. Selon la position du pot :

  • 0-33 % → seule la LED verte s'allume
  • 34-66 % → verte + jaune
  • 67-100 % → les 3 LEDs s'allument

🔢 Défi : Affichage Serial

Affiche une barre de progression dans le Serial Monitor en utilisant des caractères (de 0 à 20 blocs).

🎛️ Défi : Contrôle de vitesse

Utilise le pot pour contrôler la vitesse de clignotement d'une LED : tourné à gauche = 1s, tourné à droite = 50ms.

À retenir

  • analogRead(pin) lit une tension et retourne 0-1023 (10 bits).
  • map(val, min_in, max_in, min_out, max_out) convertit une plage en une autre — indispensable pour adapter les valeurs.
  • Le potentiomètre est un diviseur de tension : 3 pattes (VCC, SIG, GND).
  • Les pins A0-A5 sont dédiées à la lecture analogique — pas de pinMode() nécessaire.
  • Le Serial Monitor est l'outil de debug essentiel pour vérifier les valeurs lues et calculées.

Récapitulatif du chapitre 8

  • PWM alterne HIGH/LOW très vite — le duty cycle (0-100 %) détermine la puissance perçue.
  • analogWrite(pin, 0-255) envoie un signal PWM sur les pins ~3, ~5, ~6, ~9, ~10, ~11.
  • analogRead(pin) lit une tension analogique et retourne 0-1023 (10 bits).
  • map() convertit une plage de valeurs en une autre — indispensable entre analogRead et analogWrite.
  • Le potentiomètre est un diviseur de tension avec 3 pattes (VCC, SIG, GND).
  • Le Serial Monitor permet de débugger en affichant les valeurs lues.

Tu maîtrises maintenant les signaux analogiques et le PWM. Au prochain chapitre, tu découvriras millis() pour le multitâche et le Serial Monitor en profondeur !

Valide cette étape quand tu as terminé la lecture et la manipulation.

← Exo 6 : Respiration — fade in/out Aller au quiz du chapitre →

Electro-Lab - support pédagogique Arduino (MVP).

IFOSUP Wavre - Cours Drones et Robotique.