Code de recherche

Comment utiliser un affichage à sept segments avec Arduino

Comment utiliser un affichage à sept segments avec Arduino

Les afficheurs à LED à sept segments sont partout autour de nous, des horloges numériques et des appareils de cuisine aux indicateurs de niveau d'ascenseur et aux tableaux de score. Ils représentent l'un des moyens les plus intuitifs d'afficher des informations numériques, et apprendre à les contrôler avec un Arduino est une compétence fondamentale pour tout passionné d'électronique. Ce tutoriel vous guidera dans la construction d'un pilote d'afficheur à sept segments simple mais polyvalent, capable de compter de 0 à 9, et il est conçu pour fonctionner avec des afficheurs à anode commune et à cathode commune. Vous pouvez utiliser ce projet comme base pour construire une variété d'appareils pratiques, tels qu'un compteur numérique pour votre atelier, un affichage de température pour une station météorologique, un minuteur pour un jeu de société ou un simple compteur de scores pour votre prochaine soirée de jeux en famille.

Comment utiliser un affichage à sept segments avec Arduino
Comment utiliser un afficheur LED à sept segments avec Arduino

Composants matériels

Pour suivre ce projet, vous aurez besoin des composants suivants. Le câblage est simple et la liste des composants est minimale, ce qui en fait un projet idéal pour les débutants.

  • Arduino Uno (ou toute carte compatible)
  • Affichage LED à 7 segments (cathode commune ou anode commune)
  • 8 résistances de 1 kΩ (de 560 Ω à 1 kΩ fonctionnent bien)
  • Fils de raccordement
  • Plaque de prototypage
    Comment utiliser un affichage à sept segments avec Arduino
    Comment utiliser un affichage LED à sept segments avec Arduino

Guide de câblage

Le câblage de ce projet connecte chaque segment de l'affichage à une broche numérique sur l'Arduino, avec une résistance pour limiter le courant en série pour chaque segment. La principale différence dans le câblage dépend de si vous avez un affichage à anode commune ou à cathode commune. Dans un affichage à anode commune, toutes les anodes (jambes positives) des LED internes sont reliées ensemble et doivent être connectées à l'alimentation 5V. Dans un affichage à cathode commune, toutes les cathodes (jambes négatives) sont reliées ensemble et doivent être connectées à la terre. Le code gère automatiquement l'inversion logique nécessaire pour votre type d'affichage spécifique, vous devez donc simplement vous assurer que le câblage physique est correct.

Arduino code to update the I2C address on the VL53L0X
Code Arduino pour mettre à jour l'adresse I2C sur VL53L0X — Arduino code to update the I2C address on the VL53L0X

Comme démontré dans la vidéo, connectez les broches de segment de l'afficheur (A à G, et le point décimal) aux broches Arduino 2 à 9 dans l'ordre. Chaque broche de segment doit avoir une résistance de 1kΩ en série. La broche commune (anode ou cathode, selon votre afficheur) doit être connectée respectivement à 5V ou à la masse. Il est important d'utiliser des résistances individuelles pour chaque segment plutôt qu'une seule résistance partagée. Cela garantit une luminosité uniforme sur tous les segments, peu importe combien sont allumés en même temps. Avec une seule résistance, le courant serait réparti de manière inégale, ce qui ferait que certains chiffres apparaîtraient plus ternes que d'autres.

Explication du code

Le code de ce projet est écrit de zéro et ne nécessite aucune bibliothèque externe. Il est conçu pour être simple à configurer et à adapter à votre affichage spécifique. Les principales parties configurables par l'utilisateur se trouvent en haut du fichier.

#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

La première ligne est le paramètre le plus critique. Vous devez définir letypevariable à1si vous utilisez un affichage à anode commune et0si vous utilisez un affichage à cathode commune. Cette valeur unique indique au code s'il doit inverser les signaux logiques, garantissant que les bons segments s'allument.

Les deux lignes suivantes définissent les broches Arduino connectées à l'affichage. LedisplayPinsle tableau contient les numéros de broches pour les segments A à G, etdicimalPointdéfinit la broche pour le point décimal. Si vous souhaitez utiliser des broches différentes, vous pouvez modifier ces valeurs, mais il est recommandé de les garder dans l'ordre séquentiel pour plus de simplicité.

Le code comprend une fonction personnalisée,writeDigit(int digit), qui est le moyen principal d'afficher un nombre. Vous pouvez appeler cette fonction depuis votre propre code pour afficher n'importe quel chiffre de 0 à 9. Par exemple, pour afficher le nombre 5, vous devez simplement appelerwriteDigit(5);La fonction gère la tâche complexe de rechercher le bon motif de segment et de configurer les broches en conséquence. Une autre fonction d'aide,convertHighLow(int v)gère la conversion logique entre les afficheurs à anode commune et à cathode commune, ainsi vous n'avez pas à vous soucier de la logique interne.

Démonstration de projet en direct

Une fois le câblage terminé et le code téléchargé, l'Arduino commencera à compter de 0 à 9, affichant chaque chiffre pendant une seconde sur l'affichage à sept segments. Après avoir atteint 9, le point décimal s'allumera pendant trois secondes avant que le compte ne redémarre. Comme montré dans la vidéo, l'utilisation de résistances individuelles garantit que la luminosité des chiffres reste cohérente, que ce soit en affichant un seul segment (comme le chiffre 1) ou les sept segments (comme le chiffre 8). C'est une amélioration significative par rapport à l'utilisation d'une seule résistance, qui entraînerait des variations de luminosité très visibles.

Chapitres

  • [00:00] Introduction à l'affichage à sept segments
  • [00:22] Comprendre les afficheurs à sept segments
  • [01:09] Câblage d'anode commune vs. câblage de cathode commune
  • [03:25] Câblage étape par étape avec des résistances
  • [06:07] Considérations sur la démonstration et la luminosité
  • [08:26] Explication du code et configuration
  • [14:25] Fonctions de configuration et boucle principale
  • [16:33] Conclusion et applications

Images

Comment utiliser un affichage à sept segments avec Arduino
Comment utiliser un affichage à sept segments avec Arduino
Code Arduino pour mettre à jour l'adresse I2C sur VL53L0X
Code Arduino pour mettre à jour l'adresse I2C sur VL53L0X
Comment utiliser un affichage LED à sept segments avec Arduino
Comment utiliser un affichage LED à sept segments avec Arduino
Comment utiliser un affichage à sept segments avec Arduino
Comment utiliser un affichage à sept segments avec Arduino
Affichage LED 74HC595 : explication du sept segments
Affichage LED 74HC595 : explication du sept segments
558-Lesson 21: Using a Seven-Segment Display | Arduino Step-by-Step Course
Langue: C++
/*
 *  Robojax Arduino Step-by-Step Course
 * Lesson 21: Seven-Segment Display
 * Display number on seven-segment display with Arduino

   Please watch video instruction here: https://youtu.be/pxUjEsJQW2M
   or watch this https://youtu.be/f3GqRMQ8jYs

 * Written by Ahmad Shamshiri for Robojax (Robojax.com)
 * on December 07, 2018 at 22:34 in Ajax, Ontario, Canada

 * 
  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

// array for seven-segment LED values. Do not change. 
//This is used for both common anode and common cathode
byte displayLEDs[10][7] = { 
        { 0,0,0,0,0,0,1 },  // = 0
        { 1,0,0,1,1,1,1 },  // = 1
        { 0,0,1,0,0,1,0 },  // = 2
        { 0,0,0,0,1,1,0 },  // = 3
        { 1,0,0,1,1,0,0 },  // = 4
        { 0,1,0,0,1,0,0 },  // = 5
        { 0,1,0,0,0,0,0 },  // = 6
        { 0,0,0,1,1,1,1 },  // = 7
        { 0,0,0,0,0,0,0 },  // = 8
        { 0,0,0,0,1,0,0 }   // = 9     
        }; 
/*
 * 
 * @brief Writes digit to display 
 * @param digit (integer)
 * @return no return value
 * Written by Ahmad Shamshiri on Friday, December 7, 2018 for Robojax.com
 */        
void writeDigit(int digit) {
  // Robojax Seven-Segment Display for Arduino
  Serial.print(digit);
  Serial.print(" ");

   int digitValue;
  for (int i=0; i < 7; i++) 
  {

      digitalWrite(displayPins[i], convertHighLow(displayLEDs[digit][i]));// write the HIGH or LOW (depending on the type) to output pin
      Serial.print(convertHighLow(displayLEDs[digit][i]));// print the result to the Serial monitor

  }// for i
}//writeDigit ends here

/*
 * 
 * @brief Converts HIGH and LOW based on the "type" variable value
 * if type is 1, converts the "V" to LOW, or returns it as it is if type is 0 (zero)
 * @param v (integer)
 * @return the convertedValue
 * Written by Ahmad Shamshiri (Robojax.com) on Friday, December 8, 2018 for Robojax.com
 */  
int convertHighLow(int v)
{
  int convertedValue;
    if(type ==0)
    {
      convertedValue = 1 - v;// if common anode, change the HIGH to LOW and LOW to HIGH
    }else{
      convertedValue = v;// if common cathode, keep it the same
    } 

    return convertedValue;
}

void setup() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
  for(int d=0; d<8; d++)
  {
    pinMode(displayPins[d], OUTPUT);// set pin as output
    
  }
   pinMode(dicimalPoint,OUTPUT);// define a pin for decimal point
   digitalWrite(dicimalPoint,HIGH);// turn decimal point OFF. Set to LOW if common Anode and HIGH for common cathode

  Serial.begin(9600);// initialize serial monitor with 9600 baud
}// setup ends here


void loop() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
 for (int i=0; i<=9 ; i++) {
   writeDigit(i); 
   Serial.println("=====");
   delay(1000);
  }
  digitalWrite(dicimalPoint,LOW);// turn decimal point ON
  delay(3000);
 // writeDigit(4);
  // delay(3000);

}// loop ends here

Ce dont vous pourriez avoir besoin

Fichiers📁

Autres fichiers