Documentation Afficheur 7 Segments à Servomoteurs
Sommaire
1. Contexte du projet
Dans un monde dominé par les écrans numériques et les LEDs, Tekbot Robotic Challenge 2025 lance un défi audacieux : réinventer l’afficheur 7 segments en lui donnant une âme mécanique.

Origine du projet :
TEKBOT ROBOTIC CHALLENGE 2025
2. Objectifs du projet
Objectifs principaux
- Concevoir un afficheur 7 segments entièrement mécanique
- Contrôler précisément 7 servomoteurs avec un microcontrôleur
- Implémenter un comptage cyclique 0→9→0
Objectifs secondaires
- Réduire le nombre de broches utilisées via des circuits intégrés
- Documenter le processus de développement
- Valider la solution par simulation
3. Partie 1 : Réalisation physique
3.1 Composants utilisés
Composant | Référence | Quantité | Rôle |
---|---|---|---|
Microcontrôleur | ATmega328P | 1 | Cerveau du système |
Servomoteurs | SG90 | 7 | Contrôle des segments |
Régulateur | LM7805 | 1 | Régulation 5V |
Batterie | Li-ion 7.4V | 1 | Alimentation |
Condensateurs | 100nF, 1000μF, 10µF | 4 | Filtrage |
Quartz | 16MHz | 1 | Horloge |
3.2 Schéma électronique
Description :
- Protections contre les surtensions
- Connexion directe des servos aux broches PWM
- Circuit de reset avec bouton poussoir


Alimentation
Le système d'alimentation comprend :
- Batterie Li-ion 7.4V 2S : Source d'énergie principale
- Régulateur LM7805 : Stabilisation à 5V pour les composants
- Condensateurs de filtrage : 100nF et 10μF pour lisser l'alimentation
3.3 Réalisation des PCB
Caractéristiques :
- Conception sous KiCad
- Double face
- Pistes de 0.6 mm
- Espacement optimisé pour les connecteurs
3.4 Code Arduino
Extrait du code principal utilisant millis() pour la temporisation non-bloquante :
// Initialisation progressive des servos
if (!initTerminee) {
if (millis() - debutInit >= 100) { // Délai entre servos
debutInit = millis();
servoEnCours++;
if (servoEnCours < 7) {
segments[servoEnCours].attach(brochesServos[servoEnCours]);
segments[servoEnCours].write(90);
} else {
initTerminee = true;
afficher(chiffreActuel); // Affiche le 0 initial
}
}
}
Télécharger le code complet
3.5 Vidéo de démonstration
4. Partie 2 : Innovation théorique
4.1 Architecture prévue
Composants clés :
- 74HC138 : Décodeur 3→8 lignes
- 74HC574 : Registre à verrouillage
- Transistors NPN (ex : 2N2222)
- Résistances de base (10kΩ)
Fonctionnement du système
Ce système met en œuvre un afficheur 7 segments mécanique à base de servomoteurs, contrôlé avec un minimum de broches du microcontrôleur grâce à l'utilisation combinée de deux circuits intégrés : le décodeur 74HC138 et le registre à verrouillage 74HC574.
L'ATmega328P utilise une seule sortie PWM (la broche D6) pour générer les impulsions de contrôle destinées aux servos. Chaque segment de l'afficheur est associé à un servomoteur, soit un total de 7 servos pour les 7 segments (A à G).
Le 74HC138 est un décodeur 3 vers 8 : à partir de 3 lignes d'adresse (A0, A1, A2), il active une seule sortie parmi Y0 à Y7. Dans ce projet, seules les sorties Y0 à Y6 sont utilisées, chacune correspondant à un segment (donc un servo). Ces sorties du 74HC138 ne peuvent pas directement commuter le signal PWM , elles sont donc reliées à des transistors NPN via des résistances de base.
void selectionnerServoInverse(uint8_t index) {
uint8_t inverse = 7 - index; // Inversion des bits
digitalWrite(SELECTION_A, inverse & 0x01);
digitalWrite(SELECTION_B, (inverse >> 1) & 0x01);
digitalWrite(SELECTION_C, (inverse >> 2) & 0x01);
}
Le 74HC574 est un registre à verrouillage qui capture l'état des entrées D0 à D6 au moment où une impulsion est appliquée sur sa broche d'horloge (latch). Lorsqu'un segment est sélectionné par le 138, le microcontrôleur envoie une impulsion PWM. Cette impulsion est transférée via le transistor vers l'entrée Dx du 74HC574, et une impulsion d'horloge permet de verrouiller cette valeur à la sortie Qx du registre, laquelle est reliée au servomoteur correspondant.
// Génère une impulsion PWM et verrouille
void envoyerImpulsionEtVerrouiller(uint16_t dureeImpulsion) {
digitalWrite(PWM_SORTIE, HIGH);
delayMicroseconds(dureeImpulsion);
verrouiller(); // Capture pendant l'état HIGH
digitalWrite(PWM_SORTIE, LOW);
}
// Verrouillage du registre
void verrouiller() {
digitalWrite(HORLOGE_VERROU, LOW);
delayMicroseconds(5);
digitalWrite(HORLOGE_VERROU, HIGH);
delayMicroseconds(5);
digitalWrite(HORLOGE_VERROU, LOW);
}
L'ATmega328P répète cette séquence pour chaque segment :
Les servos étant rafraîchis périodiquement (toutes les 20 ms), l'affichage reste stable. Ce montage permet de piloter 7 servos avec une seule broche PWM, tout en minimisant l'utilisation des ressources de l'ATmega328P.
4.2 Simulation Proteus
La simulation valide :
- La logique de sélection des segments
- Le timing des signaux PWM
- L'interface avec le microcontrôleur
Télécharger le dossier comportant le code arduino et le fichier du schéma sous proteus
Télécharger le document complet5. Comparaison et avantages
Aspect | Version physique | Version optimisée |
---|---|---|
Broches utilisées | 7 broches PWM | 3 broches + 1 PWM |
Consommation | 800mA | ~700mA (estimé) |
Complexité | Faible | Modérée |
Avantages de la solution optimisée
- Économie de broches précieuses sur le microcontrôleur
- Architecture scalable pour plusieurs afficheurs
- Meilleure isolation des signaux de contrôle
- Possibilité de multiplexage temporel
6. Problèmes rencontrés
7. Références techniques
Datasheets
Outils logiciels
8. Conclusion
Ce projet a démontré la faisabilité d'un afficheur numérique mécanique contrôlé par servomoteurs. Les principaux enseignements sont :
- La solution physique directe offre une implémentation simple mais limite l'extensibilité
- L'approche avec circuits intégrés permet une optimisation significative des ressources
- La consommation énergétique reste le principal défi pour les applications embarquées