Afficheur 7 segments à NeoPixels piloter par Arduino Nano
Description :
Ce projet consiste à créer un afficheur numérique dynamique avec WS2815 capable de représenter les chiffres de 0 à 9. Contrairement aux afficheurs classiques à composants fixes, celui-ci utilise des LEDs adressables (NeoPixels) disposées en forme de « 8 ». Le système est piloté par un potentiomètre qui permet à l’utilisateur de choisir manuellement le chiffre à afficher en temps réel.
Le cerveau du projet (l’Arduino) réalise trois actions en boucle :
- Lecture Analogique : Il mesure la position du potentiomètre (une tension entre 0V et 5V) et la transforme en une valeur numérique entre 0 et 1023.
- Traitement des Données : Cette valeur est convertie (via la fonction
map) pour correspondre à l’un des 10 chiffres possibles. - Affichage Numérique : L’Arduino consulte une « matrice de correspondance » (un tableau de données) pour savoir quelles LEDs allumer afin de dessiner le chiffre sur les 7 segments.
Prérequis :
- 1 x Carte Arduino Nano
- 1 x Potentiomètre 10KΩ
- 7 x WS2815
- 1 x Breadboard
Vidéo de démonstration :
NA
Schéma de câblage :



Code :
Code Arduino :
#include <Adafruit_NeoPixel.h> // Inclut la bibliothèque pour piloter les LEDs intelligentes
// --- CONFIGURATION ---
#define PIN_DATA 6 // Broche Arduino connectée au "DIN" des NeoPixels
#define NB_LEDS 7 // Nombre total de LEDs (ici une pour chaque segment)
#define LUMINOSITE 100 // Puissance lumineuse (0 à 255)
// Création de l'objet "affichage" pour gérer le ruban LED
Adafruit_NeoPixel affichage(NB_LEDS, PIN_DATA, NEO_GRB + NEO_KHZ800);
// --- VARIABLES ---
int potpin = A2; // Broche analogique où est branché le curseur du potentiomètre
int val; // Variable pour stocker la valeur brute lue (0 à 1023)
int valeurout; // Variable pour stocker le chiffre final calculé (0 à 9)
// Tableau de correspondance (Matrice) pour dessiner les chiffres 0-9
// Chaque ligne [10] correspond à un chiffre, chaque colonne [7] à un segment LED (1=Allumé, 0=Éteint)
const byte chiffres[10][7] = {
{ 1, 1, 1, 0, 1, 1, 1 }, // Chiffre 0
{ 1, 0, 0, 0, 1, 0, 0 }, // Chiffre 1
{ 0, 1, 1, 1, 1, 1, 0 }, // Chiffre 2
{ 1, 1, 0, 1, 1, 1, 0 }, // Chiffre 3
{ 1, 0, 0, 1, 1, 0, 1 }, // Chiffre 4
{ 1, 1, 0, 1, 0, 1, 1 }, // Chiffre 5
{ 1, 1, 1, 1, 0, 1, 1 }, // Chiffre 6
{ 1, 0, 0, 0, 1, 1, 0 }, // Chiffre 7
{ 1, 1, 1, 1, 1, 1, 1 }, // Chiffre 8
{ 1, 1, 0, 1, 1, 1, 1 } // Chiffre 9
};
void setup() {
Serial.begin(9600); // Initialise la communication série (pour voir les valeurs sur l'ordi)
affichage.begin(); // Initialise les NeoPixels
affichage.show(); // Éteint tout au démarrage
affichage.setBrightness(LUMINOSITE); // Applique la limite de courant/luminosité
}
// Fonction personnalisée pour "dessiner" un chiffre
void afficherChiffre(int n, uint32_t couleur) {
for (int i = 0; i < 7; i++) { // Parcourt les 7 segments un par un
if (chiffres[n][i] == 1) { // Si le tableau dit "1" pour ce segment
affichage.setPixelColor(i, couleur); // On prépare la couleur choisie
} else {
affichage.setPixelColor(i, 0); // Sinon on prépare "Noir" (éteint)
}
}
affichage.show(); // Envoie les données préparées aux LEDs pour affichage réel
}
void loop() {
val = analogRead(potpin); // Lit la tension du potentiomètre (0 à 1023)
// Convertit la plage 0-1023 vers 0-10 (le 10 permet d'élargir la zone du "9" pour éviter les clignotements)
valeurout = map(val, 0, 1023, 0, 10);
// Sécurité : si la valeur atteint 10 (très rare avec map 1023), on la bloque à 9
if (valeurout > 9) valeurout = 9;
// Appelle la fonction d'affichage avec la couleur Cyan (Rouge=0, Vert=255, Bleu=255)
afficherChiffre(valeurout, affichage.Color(0, 255, 255));
// Affiche les valeurs dans le moniteur série pour le débogage
Serial.print("Brut: "); Serial.print(val);
Serial.print(" | Chiffre: "); Serial.println(valeurout);
}
