Código de búsqueda

Cómo usar un display LED de siete segmentos con Arduino

Cómo usar un display LED de siete segmentos con Arduino

Los displays LED de siete segmentos están por todas partes, desde relojes digitales y electrodomésticos hasta indicadores de pisos en ascensores y marcadores. Son una de las formas más intuitivas de mostrar información numérica, y aprender a controlarlos con un Arduino es una habilidad fundamental para cualquier entusiasta de la electrónica. Este tutorial te guiará para construir un controlador de display de siete segmentos simple pero versátil que puede contar del 0 al 9, y está diseñado para funcionar tanto con displays de ánodo común como con displays de cátodo común. Puedes utilizar este proyecto como base para construir una variedad de dispositivos prácticos, como un contador digital para tu taller, una lectura de temperatura para una estación meteorológica, un temporizador para un juego de mesa, o un simple marcador para tu próxima noche de juegos en familia.

Cómo usar un display LED de siete segmentos con Arduino
Cómo usar un display LED de siete segmentos con Arduino

Componentes de hardware

Para seguir este proyecto, necesitarás los siguientes componentes. El cableado es sencillo y la lista de componentes es mínima, lo que hace que sea una construcción perfecta para principiantes.

  • Arduino Uno (o cualquier placa compatible)
  • Pantalla LED de 7 segmentos (cátodo común o ánodo común)
  • 8 resistencias de 1kΩ (560Ω a 1kΩ funcionan bien)
  • Cables de puente
  • Placa de pruebas
    Cómo utilizar un display LED de siete segmentos con Arduino
    Cómo usar un display LED de siete segmentos con Arduino

Guía de cableado

El cableado para este proyecto conecta cada segmento de la pantalla a un pin digital en el Arduino, con una resistencia limitadora de corriente en serie para cada segmento. La diferencia clave en el cableado depende de si tienes una pantalla de ánodo común o de cátodo común. En una pantalla de ánodo común, todos los ánodoss (piernas positivas) de los LEDs internos están conectados entre sí y deben conectarse a la fuente de 5V. En una pantalla de cátodo común, todos los cátodos (piernas negativas) están conectados entre sí y deben conectarse a tierra. El código maneja automáticamente la inversión de lógica necesaria para tu tipo de pantalla específico, así que solo necesitas asegurarte de que el cableado físico sea correcto.

Arduino code to update the I2C address on the VL53L0X
Código de Arduino para actualizar la dirección I2C en VL53L0X — Arduino code to update the I2C address on the VL53L0X

Como se demuestra en el video, conecta los pines de segmento del display (A a G y el punto decimal) a los pines de Arduino del 2 al 9 en orden. Cada pin de segmento debe tener una resistencia de 1kΩ en serie. El pin común (ánodo o cátodo, dependiendo de tu pantalla) debe estar conectado a 5V o GND respectivamente. Es importante usar resistencias individuales para cada segmento en lugar de una sola resistencia compartida. Esto asegura un brillo consistente en todos los segmentos, independientemente de cuántos estén iluminados a la vez. Con una sola resistencia, la corriente se dividiría de manera desigual, haciendo que algunos números aparezcan más tenues que otros.

Explicación del código

El código de este proyecto está escrito desde cero y no requiere bibliotecas externas. Está diseñado para ser sencillo de configurar y adaptar a tu pantalla específica. Las principales partes configurables por el usuario están en la parte superior del archivo.

#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 primera línea es la configuración más crítica. Debes establecer eltypevariable para1si estás usando una pantalla de cátodo común y0si estás usando una pantalla de cátodo común. Este único valor le dice al código si debe invertir las señales lógicas, asegurando que se iluminen los segmentos correctos.

Las siguientes dos líneas definen los pines de Arduino conectados a la pantalla. LadisplayPinsel array contiene los números de pin para los segmentos A a G, ydicimalPointdefine el pin para el punto decimal. Si deseas utilizar pines diferentes, puedes modificar estos valores, pero se recomienda mantenerlos en orden secuencial por simplicidad.

El código incluye una función personalizada,writeDigit(int digit), que es la forma principal de mostrar un número. Puedes llamar a esta función desde tu propio código para mostrar cualquier dígito del 0 al 9. Por ejemplo, para mostrar el número 5, simplemente llamarías awriteDigit(5);La función maneja la compleja tarea de buscar el patrón de segmento correcto y establecer los pines en consecuencia. Otra función auxiliar,convertHighLow(int v), maneja la conversión lógica entre pantallas de ánodo común y de cátodo común, así que no tienes que preocuparte por la lógica interna.

Demostración de Proyecto en Vivo

Una vez que el cableado esté completo y el código esté cargado, el Arduino comenzará a contar de 0 a 9, mostrando cada dígito durante un segundo en la pantalla de siete segmentos. Después de llegar a 9, el punto decimal se encenderá durante tres segundos antes de que la cuenta se reinicie. Como se muestra en el video, el uso de resistencias individuales asegura que el brillo de los dígitos permanezca consistente, ya sea mostrando un solo segmento (como el número 1) o los siete segmentos (como el número 8). Esta es una mejora significativa en comparación con el uso de una sola resistencia, que causaría variaciones notables en el brillo.

Capítulos

  • [00:00] Introducción a la Pantalla de Siete Segmentos
  • [00:22] Comprendiendo los Displays de Siete Segmentos
  • [01:09] Cableado de ánodo común vs. cátodo común
  • [03:25] Conexión paso a paso con resistencias
  • [06:07] Consideraciones sobre la demostración y el brillo
  • [08:26] Explicación del código y configuración
  • [14:25] Funciones de configuración y bucle principal
  • [16:33] Conclusión y Aplicaciones

Imágenes

Cómo usar un display LED de siete segmentos con Arduino
Cómo usar un display LED de siete segmentos con Arduino
Código de Arduino para actualizar la dirección I2C en VL53L0X
Código de Arduino para actualizar la dirección I2C en VL53L0X
Cómo usar un display LED de siete segmentos con Arduino
Cómo usar un display LED de siete segmentos con Arduino
Cómo usar un display LED de siete segmentos con Arduino
Cómo usar un display LED de siete segmentos con Arduino
74HC595 Pantalla LED: Explicación de siete segmentos
74HC595 Pantalla LED: Explicación de siete segmentos
558-Lesson 21: Using a Seven-Segment Display | Arduino Step-by-Step Course
Idioma: 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

Cosas que podrías necesitar

Archivos📁

Otros archivos