Affichage Potentiomètre sur Bargraphe 8 LED avec Arduino et 74HC595
Description :
Ce projet consiste à mesurer la position d’un potentiomètre et à afficher cette valeur sous forme visuelle à l’aide d’un bargraphe composé de 8 LED. L’affichage est géré par un registre à décalage 74HC595, piloté depuis une carte Arduino.
Le potentiomètre fournit une tension analogique variable, lue par l’entrée analogique de l’Arduino. La valeur obtenue (entre 0 et 1023) est ensuite convertie en un nombre d’échelons (de 0 à 8) correspondant au niveau à afficher sur le bargraphe.
Le 74HC595 permet de contrôler les 8 LED tout en utilisant seulement trois broches de l’Arduino (SER, RCLK, SRCLK). Cela simplifie le câblage et permet de préserver les broches disponibles pour d’autres fonctionnalités.
Ce projet illustre plusieurs notions importantes :
- la lecture d’entrées analogiques,
- l’utilisation d’un registre à décalage pour étendre les sorties de l’Arduino,
- l’affichage d’une valeur sous forme de barre lumineuse,
- la conversion entre mesures analogiques et représentation visuelle.
Il constitue un excellent exercice d’apprentissage pour comprendre la gestion d’E/S, le pilotage de composants externes, et la visualisation de données en temps réel.
Prérequis :
- 1 x Carte Arduino Uno
- 8 × LED : 3 vertes, 2 jaunes, 3 rouges
- 8 × Résistance 220Ω
- 1 x Potentiomètre 10 KΩ
- 1 x 74HC595
- 1 x Breadboard
- Des câbles de connexion
Version IDE :
- Arduino IDE 2.3.5
Vidéo de démonstration :
Schéma de câblage :


Code Arduino :
int dataPin = 10; // DS (pin 14 du 74HC595)
int latchPin = 11; // ST_CP (pin 12)
int clockPin = 12; // SH_CP (pin 11)
//Tableau de bits (bit 0 à bit 7)
int Valuebits[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
int val;
void setup() {
Serial.begin(9600);
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop() {
int sensorValue = analogRead(A0); //Lecture potentiometre
val = map(sensorValue, 0, 1023, 0, 8); // Mapping function
for (int i = 0; i < 8; i++) {
Valuebits[i] = 0; // Remise à zéro du tableau
}
for (int i = 0; i <= val; i++) {
Valuebits[i] = 1; // Mise à jour du tableau
}
// Convertir le tableau en un seul octet
byte valeur = 0;
for (int i = 0; i < 8; i++) {
valeur |= (Valuebits[i] << (7 - i)); // inverse l’ordre des bits
}
// Envoyer vers le 74HC595
digitalWrite(latchPin, LOW); // On prépare le registre
shiftOut(dataPin, clockPin, LSBFIRST, valeur); // Envoie la donnée
digitalWrite(latchPin, HIGH); // On verrouille les sorties
delay(50);
}
