Comment fonctionne l’affichage à sept segments et son interface avec Arduino
Combien de fois avez-vous vu un film où quelqu’un doit désactiver une bombe ? Le héros regarde l’écran alors que le temps défile, chaque seconde étant plus précieuse que la précédente. Eh bien, si vous remarquez, toutes ces bombes dans les films ont un affichage à sept segments. C’est obligé ! Sinon, comment un héros pourrait-il savoir combien de temps il lui reste ?
Peut-être que les afficheurs à sept segments n’ont pas l’air assez modernes pour vous, mais ils sont le moyen le plus pratique d’afficher des chiffres. Ils sont faciles à utiliser, rentables et très lisibles, aussi bien dans des conditions de lumière limitée qu’en cas de fort ensoleillement.
Un exemple du monde réel qui utilise l’affichage à sept segments est la célèbre horloge de compte à rebours de Cap Canaveral, en Floride, que la NASA a utilisée pour l’atterrissage d’Apollo.
Vue d’ensemble du matériel
Evoquons brièvement les caractéristiques et les fonctionnalités de l’afficheur 7 segments avant de le connecter à un Arduino.
Les afficheurs 7 segments ne sont en fait que sept LED alignées selon un motif particulier. Dans ce cas, la forme du chiffre ‘8’ que nous connaissons tous. Chacune des sept LED est appelée un segment car, lorsqu’elle est allumée, le segment forme une partie d’un chiffre numérique (à la fois décimal et hexagonal) à afficher. Une 8e LED supplémentaire est parfois utilisée pour l’indication d’un point décimal.
Chacune des sept LED de l’afficheur se voit attribuer un segment positionnel dont l’une des broches de connexion est amenée directement hors du boîtier plastique rectangulaire. Ces broches individuelles de DEL sont étiquetées de a à g, représentant chaque DEL individuelle. Les autres broches de LED sont connectées ensemble et câblées pour former une broche commune.
Pour allumer et éteindre une partie particulière de l’affichage, vous réglez la broche appropriée sur HIGH ou LOW comme vous le feriez avec une LED ordinaire. De sorte que certains segments seront clairs et d’autres seront sombres permettant au motif de caractères désiré du nombre d’être généré sur l’affichage. Cela nous permet alors d’afficher chacun des dix chiffres décimaux de 0 à 9 sur le même affichage à 7 segments.
Pinout de l’affichage à 7 segments
Maintenant, passons en revue la configuration des segments afin de savoir quelles broches allument quels segments. Le brochage de l’afficheur 7 segments est le suivant .
a-g & DPur 10, les 8 broches c’est-à-dire.c’est-à-dire a, b, c, d, e, f, g et le segment DP (point décimal) sont connectées aux broches numériques de l’Arduino. En contrôlant chaque LED sur le segment connecté, les chiffres peuvent être affichés.
COM Les broches 3 et 8 sont connectées en interne pour former une broche commune. Cette broche doit être connectée à GND (cathode commune) ou 5V (anode commune) selon le type d’affichage.
Cathode commune(CC) Vs Anode commune(CA)
Les afficheurs à sept segments sont de deux types : Cathode commune (CC) et Anode commune (CA).La structure interne des deux types est presque la même. La différence réside dans la polarité des diodes et de la borne commune. Comme leur nom l’indique, la cathode commune a toutes les cathodes des LED d’un 7-segment connectées ensemble et l’anode commune a toutes les anodes des LED d’un 7-segment connectées ensemble.
Dans l’affichage à cathode commune, toutes les connexions de cathode des segments de LED sont connectées ensemble à ‘0 logique’ / GND. Les segments individuels sont ensuite éclairés en appliquant un signal HIGH / ‘logique 1’ aux bornes individuelles de l’anode (a-g).
Dans l’afficheur à anode commune, toutes les connexions anodiques des segments LED sont réunies à la logique « 1 ». Les segments individuels sont éclairés en appliquant un signal de masse, un signal logique « 0 » ou « LOW » à la cathode du segment particulier (a-g).
En général, les écrans à anode commune (celui que nous avons utilisé dans les expériences ci-dessous) sont plus populaires car de nombreux circuits logiques peuvent absorber plus de courant qu’ils ne peuvent en générer.
Notez également qu’un afficheur à cathode commune n’est pas un remplacement direct dans un circuit pour un afficheur à anode commune et vice versa, car cela revient à connecter les LED à l’envers, et donc l’émission de lumière n’aura pas lieu.
Comment fonctionne l’afficheur à 7 segments ?
Selon le chiffre décimal à afficher, l’ensemble particulier de LED est allumé. Par exemple, pour afficher le chiffre 4, nous devrons allumer quatre des segments de LED correspondant à b, c, f et g. Ainsi, les différents chiffres de ‘0 à 9’ et les caractères de ‘A à F’ peuvent être affichés à l’aide d’un affichage à 7 segments, comme indiqué.
La table de vérité ci-dessous montre les différents segments qui doivent être allumés pour produire des chiffres et des caractères. Veuillez noter que la table de vérité de l’afficheur 7 segments à anode commune est exactement opposée à celle de l’afficheur 7 segments à cathode commune.
Câblage – Connexion de l’afficheur 7 segments à l’Arduino UNO
Maintenant que nous avons compris comment l’afficheur 7-segment fonctionne, nous pouvons commencer à le câbler à l’Arduino !
Débutez en plaçant l’afficheur 7 segments sur votre planche à pain, en vous assurant que chaque côté de l’afficheur est sur un côté séparé de la planche à pain. Avec la virgule vers le bas, les broches sont 1-5 sur le côté inférieur de gauche à droite et 10-6 sur le côté supérieur de gauche à droite, comme on peut le voir sur l’illustration ci-dessous.
Pour commencer, connectons l’une des broches communes 3 ou 8 à la broche 5V de l’Arduino (si vous utilisez un afficheur 7 segments à anode commune) ou à la broche GND de l’Arduino (si vous utilisez un afficheur 7 segments à cathode commune). Les 4 autres broches sur la position supérieure sont connectées à la broche numérique 2 à la broche numérique 5. Les 4 autres broches sur la position inférieure avec le point décimal sont connectées à la broche numérique 6 à 9.
Bien que l’affichage puisse fonctionner sans résistances de limitation de courant, c’est toujours une bonne idée de les avoir dans votre circuit pour éviter de brûler votre affichage.
Typiquement, pour un affichage standard à 7 segments de couleur rouge, chaque segment LED peut tirer environ 15 mA pour s’allumer correctement, donc sur un circuit logique numérique de 5 volts, la valeur de la résistance de limitation de courant serait d’environ 200Ω (5v – 2v)/15mA, ou 220Ω à la valeur préférée supérieure la plus proche.
Une fois que vous avez terminé, vous devriez avoir quelque chose qui ressemble à l’illustration montrée ci-dessous.
Code Arduino
Maintenant, il est temps d’éclairer l’écran avec un peu de code.
Avant de commencer à écrire du code pour contrôler les afficheurs à 7 segments, vous devrez d’abord télécharger la bibliothèque Arduino SevSeg. Vous pouvez le faire en visitant le repo GitHub et en téléchargeant manuellement la bibliothèque ou, simplement, en cliquant sur ce bouton pour télécharger le zip :
Pour l’installer, ouvrez l’IDE Arduino, allez dans Sketch > Include Library > Add .ZIP Library, puis sélectionnez le fichier ZIP SevSeg que vous venez de télécharger. Si vous avez besoin de plus de détails sur l’installation d’une bibliothèque, visitez ce tutoriel Installer une bibliothèque Arduino.
Une fois que vous avez installé la bibliothèque, vous pouvez copier ce sketch dans l’IDE Arduino. Le sketch de test suivant va compter de 0 à 9. Essayez le sketch ; puis nous l’expliquerons en détail.
#include "SevSeg.h"SevSeg sevseg;void setup(){//Set to 1 for single digit displaybyte numDigits = 1;//defines common pins while using multi-digit display. Left empty as we have a single digit displaybyte digitPins = {};//Defines arduino pin connections in order: A, B, C, D, E, F, G, DPbyte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9};bool resistorsOnSegments = true;//Initialize sevseg object. Uncomment second line if you use common cathode 7 segmentsevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);//sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);sevseg.setBrightness(90);}void loop(){ //Display numbers one by one with 2 seconds delay for(int i = 0; i < 10; i++) { sevseg.setNumber(i); sevseg.refreshDisplay(); delay(2000); }}
Explication du code:
Le sketch commence par inclure la bibliothèque SevSeg qui simplifie les contrôles et les signaux vers le 7-segment. Ensuite, nous devons créer un objet SevSeg que nous pouvons ensuite utiliser tout au long du sketch.
#include "SevSeg.h"SevSeg myDisplay;
Puis, nous devons spécifier le nombre de chiffres de l’affichage. Comme nous utilisons un affichage à un seul chiffre, nous le définissons à 1. Au cas où vous utilisez un affichage à 4 chiffres, définissez-le à 4.
//Set to 1 for single digit displaybyte numDigits = 1;
Le tableau digitPins définit simplement les ‘broches communes’ lorsque vous utilisez un affichage à plusieurs chiffres. Laissez-le vide si vous avez un affichage à un seul chiffre. Sinon, fournissez les numéros de broches arduino auxquels sont connectées les ‘broches communes’ des chiffres individuels. Ordonnez-les de gauche à droite.
//defines common pins while using multi-digit display//Left empty as we have a single digit displaybyte digitPins = {};
Le deuxième tableau que nous voyons être initialisé est le tableau segmentPins. C’est un tableau de tous les numéros de broches de l’Arduino qui sont connectés aux broches de l’écran LED qui contrôlent les segments ; donc dans ce cas, ce sont ceux que nous avons connectés directement de la planche à pain à l’Arduino. Il faut aussi les mettre dans le bon ordre car la bibliothèque suppose que les broches sont dans l’ordre suivant : A, B, C, D, E, F, G, DP.
//Defines arduino pin connections in order: A, B, C, D, E, F, G, DPbyte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9};
Après avoir créé ces variables, nous les passons ensuite au constructeur SevSeg en utilisant la fonction begin()
.
//Initialize sevseg objectsevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
Dans la section ‘boucle’ : Le programme commence à compter de 0 à 9 en utilisant la boucle ‘for’ et la variable ‘i’. À chaque fois, il utilise la fonction de la bibliothèque SevSeg setNumber()
ainsi que refreshDisplay ()
pour fixer le nombre sur l’écran.
Il y a ensuite un second délai avant que ‘i’ soit incrémenté et que le nombre suivant soit affiché.
for(int i = 0; i < 10; i++){ sevseg.setNumber(i); sevseg.refreshDisplay(); delay(1000);}
Projet Arduino
Rouler les dés
En complément, voici un autre projet, qui permet aux personnes qui ont besoin d’une technologie d’accessibilité de » rouler » les dés. Vous pouvez l’utiliser pour jouer à des jeux comme Yahtzee, ludo, etc. Il utilise la même configuration Arduino, sauf que nous utilisons un interrupteur tactile pour un roulement rapide.
Tout l’intérêt d’un dé est de fournir un moyen de sortir aléatoirement un nombre de 1 à 6. Et la meilleure façon d’obtenir un nombre aléatoire est d’utiliser une fonction intégrée random(min,max). Cette fonction prend deux paramètres, le premier spécifie la limite inférieure de la valeur aléatoire (incluant ce nombre) et le second paramètre spécifie la limite supérieure de la valeur aléatoire (excluant ce nombre). Signifiant que le nombre aléatoire sera généré entre min et max-.1
#include "SevSeg.h"SevSeg sevseg; const int buttonPin = 10; // the number of the pushbutton pin// variables will change:int buttonState = 0; // variable for reading the pushbutton statusvoid setup(){ byte numDigits = 1; byte digitPins = {}; byte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9}; bool resistorsOnSegments = true; sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments); sevseg.setBrightness(90);// initialize the pushbutton pin as an input:pinMode(buttonPin, INPUT);}void loop(){// read the state of the pushbutton value:buttonState = digitalRead(buttonPin); if (buttonState == HIGH) {sevseg.setNumber(random(1,7));sevseg.refreshDisplay(); }}