Correo: [email protected] - Teléfono: +56979962128

Project Working and Interfacing Seven Segment Display with Arduino
  Cuántas veces hemos visto una película clásica en la que el héroe tiene que desactivar un dispositivo contador o bomba de tiempo? El hero mira la pantalla y como el tiempo pasa, en donde cada segundo es más importante que el ultimo. Bueno, si tu lo ves de cerca, te darás cuenta que el dispositivo muestra un display de siete-segmentos. Debe ser así! De qué otra forma puede el héroe saber cuanto tiempo le queda? Quizás tu no encuentras que una pantalla de siete-segmentos sea muy atractiva, pero es la forma más eficiente de mostrar los números. Son muy fáciles de usar, económicas y muy visibles tanto en condiciones de poca o mucha luz. Un muy buen ejemplo del mundo real de un display de siete-segmentos es el famoso reloj cuenta atrás de la NASA en Cabo Cañaveral, Florida, el cual fue usado para el despegue del Apollo.  
The countdown clock
 

El Display de 7-segmentos

También escrito como ” display de siete segmentos”, consiste en 7 LEDs dispuestos en un patron con forma de 8. Cada LED es referido a un segmento, porque cuando se ilumina, este forma parte de un digito. Un octavo LED es usado algunas veces para indicar un punto decimal.
7 Segment Internal LED Formation Structure and Pinout
  Cada LED de segmento tiene uno de sus pines de conexión expuesto directamente en el paquete de plástico rectangular. Estos pines están etiquetados con las letras ‘a’ a ‘g’. Los pines restantes de los LEDs están conectados entre sí para formar un solo pin común. Cada segmento se puede encender o apagar individualmente configurando el pin correspondiente en HIGH o LOW, igual que un LED normal. Al iluminar segmentos específicos, puedes formar cualquier número e incluso algunas representaciones básicas de letras.

Distribución de pines del display de 7 segmentos

  Ahora, revisemos la configuración de los segmentos para identificar qué pin corresponde a cada uno. La distribución de pines de un display de 7 segmentos es la siguiente:  
7 Segment Common Anode Common Cathode Pinout
    a, b, c, d, e, f, g, y DP Están conectados a los pines digitales de un Arduino para operar los segmentos individuales de la pantalla. Al encender segmentos individuales, puedes crear cualquier carácter numérico. COM Los pines 3 y 8 están conectados internamente para formar un pin común. Dependiendo del tipo de pantalla, este pin debe conectarse a GND (cátodo común) o a 5V (ánodo común).  

Cátodo Común (CC) vs Ánodo Común (CA)

 

Existen dos tipos de display de siete segmentos: cátodo común (CC) y ánodo común (CA).

La estructura interna de ambos tipos es casi idéntica. La diferencia radica en la polaridad de los LEDs y el terminal común. Como su nombre lo indica, en los display de cátodo común, todos los cátodos (o terminales negativos) de los LEDs de los segmentos están conectados entre sí, mientras que en los display de ánodo común, todos los ánodos (o terminales positivos) de los LEDs de los segmentos están conectados entre sí.

En un display de cátodo común, el pin común (com) está conectado a GND, y se aplica un voltaje positivo a cada segmento (a-g) para iluminarlo.

Common Cathode 7 Segment Display Internal Working Animation

     Cátodo común de 7-Segmentos funcionando

En un display de ánodo común, el pin común (com) está conectado a VCC, y cada segmento (a-g) se conecta individualmente a tierra para iluminarlo.

Common Anode 7 Segment Display Internal Working Animation

    Anodo comun de 7-Segmentos funcionando

Las pantallas de siete segmentos de ánodo común son más ampliamente utilizadas en general porque los circuitos de hundimiento de corriente tienen muchas ventajas sobre los circuitos de suministro de corriente.

Display de 7-Segmentos Funcionando

Dependiendo del carácter que desees mostrar, debes iluminar los segmentos de LED apropiados. Para mostrar el número 4, por ejemplo, deben iluminarse cuatro segmentos LED: b, c, f y g. De manera similar, se pueden mostrar varios dígitos del 0 al 9 y caracteres de la A a la F en un display de 7 segmentos, como se muestra a continuación.

7 Segment Display Number Formation Segment Contol

La tabla de verdad a continuación muestra qué segmentos deben encenderse para producir dígitos y caracteres. Observa que la tabla de verdad para el display de 7 segmentos de ánodo común es exactamente opuesta a la de el display de 7 segmentos de cátodo común.

Common Cathode 7 Segment Display Truth Table

Common Anode 7 Segment Display Truth Table

Seleccionando una Resistencia Limitadora de Corriente

Un display de 7 segmentos puede parecer un solo display, pero en realidad está compuesto por siete LEDs independientes alojados en un solo paquete, cada uno de los cuales requiere su propia resistencia limitadora de corriente para evitar daños a los segmentos LED.

Normalmente, para un display de 7 segmentos rojo estándar, cada segmento LED requiere aproximadamente 15 mA para iluminarse correctamente; por lo tanto, en un circuito de lógica digital de 5 voltios, el valor de la resistencia limitadora de corriente sería aproximadamente 200Ω (5v – 2v)/15mA, o 220Ω al valor preferido más cercano.

Con una resistencia de 220Ω, el brillo del display se reducirá ligeramente. Esto está bien, porque estos displays son bastante brillantes, por lo que alimentarlos un poco por debajo generalmente hace que se vean mejor. Sin embargo, si planeas usarlos al aire libre, querrás usar una resistencia de 150Ω para obtener el máximo brillo.

Si estás usando un display de 7 segmentos de un color diferente y no estás seguro de cuánta corriente requiere cada segmento LED, 330Ω es un valor seguro.

La siguiente figura muestra cómo se conectan las resistencias limitadoras de corriente a los segmentos LED del display.

7 segment current limiting resistors

Conectando un display de 7-segmentos a un Arduino

Ahora que entendemos cómo funciona el display de 7 segmentos, ¡podemos conectarlo al Arduino!

Comienza montando el display de 7 segmentos en tu protoboard, asegurándote de que cada lado del display esté en un lado diferente de la protoboard. Con el punto decimal hacia abajo, los pines son del 1 al 5 en el lado inferior de izquierda a derecha y del 10 al 6 en el lado superior de izquierda a derecha.

Conecta uno de los pines COM al pin 5V del Arduino (si estás usando un display de 7 segmentos de ánodo común) o al pin GND del Arduino (si estás usando un display de 7 segmentos de cátodo común).

Los cuatro pines en el lado superior (b, a, f y g) se conectan a los pines digitales 2 a 5 del Arduino, mientras que los cuatro pines restantes en el lado inferior (e, d, c y DP) se conectan a los pines digitales 6 a 9 del Arduino.

Aunque el display podría funcionar sin resistencias limitadoras de corriente, tenerlas en tu circuito siempre es una buena idea para proteger el display de daños causados por sobrecorriente. Por lo tanto, también necesitarás ocho resistencias limitadoras de corriente de 220Ω para cada segmento.

La siguiente tabla muestra las conexiones de los pines:

Conectando un display de 7-segmentos a un Arduino
Arduino Wiring Fritzing Connections with Common Anode Seven Segment Display
Arduino Wiring Fritzing Connections with Common Cathode Seven Segment Display
   

La Biblioteca SevSeg


Existen muchas bibliotecas disponibles para el display de 7 segmentos, pero una de las más populares es SevSeg. Esta biblioteca ha existido por mucho tiempo. Es fácil de usar para principiantes, pero a la vez ofrece muchas opciones para usuarios avanzados. Usaremos esta biblioteca en nuestros ejemplos.

Para instalar la biblioteca, navega a Esquema > Incluir Biblioteca > Administrar Bibliotecas (Sketch>Include Library>Manage Libraries). Espera a que el Administrador de Bibliotecas descargue el índice de bibliotecas y actualiza la lista de bibliotecas instaladas.

La Biblioteca SevSeg
  Filtra tu búsqueda ingresando “sevseg”. Busca la biblioteca SevSeg de Dean Reading. Haz clic en esa entrada y luego selecciona Instalar.  
La Biblioteca SevSeg
 

Código de ejemplo para Arduino


Ahora es el momento de encender el display con algo de código.

El siguiente sketch de prueba contará del 0 al 9. Prueba el sketch, y luego lo repasaremos en más detalle.

#include "SevSeg.h"
SevSeg sevseg;

void setup()
{
	//Set to 1 for single digit display
	byte numDigits = 1;

	//defines common pins while using multi-digit display. Left empty as we have a single digit display
	byte digitPins[] = {};

	//Defines arduino pin connections in order: A, B, C, D, E, F, G, DP
	byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
	bool resistorsOnSegments = true;

	//Initialize sevseg object. Uncomment second line if you use common cathode 7 segment
	sevseg.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);
   }
}
 

Explicación del código:


Al principio del sketch, incluimos la biblioteca SevSeg y creamos un objeto SevSeg, que utilizaremos a lo largo del sketch.

// Include library
#include "SevSeg.h"

// Create object
SevSeg sevseg;
El siguiente paso es especificar el número de dígitos en el display. Como estamos usando un display de un solo dígito, establecemos numDigits a 1. Si estás utilizando un display de cuatro dígitos, establece este valor a 4.
// Number of digits in display
byte numDigits = 1;
 
 

El arreglo digitPins simplemente especifica los ‘pines comunes’. Si tienes un display de un solo dígito, déjalo en blanco. De lo contrario, enumera los números de los pines del Arduino a los que están conectados los ‘pines comunes’ de los dígitos individuales, de izquierda a derecha.

// Specifies the 'common pins' while using multi-digit display.
// If you have a single digit display, leave it blank.
byte digitPins[] = {};
 
 

A continuación, se define el arreglo segmentPins. Este es un arreglo de los pines de entrada/salida (I/O) que están conectados a los segmentos LED, en el orden A, B, C, D, E, F, G, DP.

// Display segment pins A,B,C,D,E,F,G,DP
byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
 
  También se define una variable booleana, resistorsOnSegments, para informar a la biblioteca si estamos utilizando resistencias limitadoras de corriente.
// Dropping resistors used
bool resistorsOnSegments = true;
 
  La variable hardwareConfig especifica el tipo de display de 7 segmentos que estamos usando. Los valores válidos son ÁNODO COMÚN y CÁTODO COMÚN. El nuestro es un display de ánodo común.  
// Display type
byte hardwareConfig = COMMON_ANODE;
 

En Setup, inicializamos el objeto display con los argumentos que acabamos de definir. También configuramos el brillo del display; cualquier valor entre 0 y 150 funcionará.

void setup() {
  // Start display object
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  // Set brightness
  sevseg.setBrightness(90);
}
 

En Loop, se utiliza un bucle for para contar del 0 al 9. En cada iteración, se usan las funciones setNumber() y refreshDisplay() para mostrar un dígito en el display.

Luego, hay una espera de un segundo antes de que i se incremente y se muestre el siguiente número.

for(int i = 0; i < 10; i++)
{
     sevseg.setNumber(i);
     sevseg.refreshDisplay(); 
     delay(1000);
}
 
 

Proyecto Arduino – Lanzador de Dados Electrónico


Vamos a crear un proyecto que lance los dados automáticamente para juegos de dados divertidos como Yahtzee y Ludo. Así es como se ve la salida.  
Seven Segment Arduino Project Rolling Dice Output
   

¿Emocionado? ¡Vamos a comenzar!

Cableado


Usaremos la misma configuración de Arduino que en el ejemplo anterior, pero esta vez añadiremos un interruptor táctil para lanzar el dado

Rolling Dice Arduino Game Wiring Fritzing Connections with Common Anode 7 Segment

Proyecto Arduino – Lanzamiento de Dados: Cableado del Display de 7 Segmentos de Ánodo Común al Arduino UNO

Código Arduino

 
// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void 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(); 
	}
}
 
 

Explicación del Código:

Este sketch es similar al anterior, excepto por algunas diferencias.

Al inicio, declaramos el pin de Arduino al que está conectado el botón. Además, se define una nueva variable buttonState para hacer un seguimiento del estado del botón.

// the number of the pushbutton pin
const int buttonPin = 10;     

// variable for reading the pushbutton status
int buttonState = 0;
En Setup, configuramos buttonPin como una entrada.
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
 
  En Loop, cada vez que se detecta una pulsación del botón, generamos un número aleatorio utilizando la función incorporada random(min, max), que toma dos parámetros: el primero especifica el límite inferior del valor aleatorio (incluyendo este número), mientras que el segundo especifica el límite superior (excluyendo este número). Esto significa que se generará un número aleatorio entre min y max-1.  
void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  
  if (buttonState == HIGH) {
    sevseg.setNumber(random(1,7));
    sevseg.refreshDisplay(); 
  }
}
 

Preguntas frecuentes

¿Cuántos LEDs tiene un display de siete segmentos?

Tiene siete LEDs dispuestos en un patrón con forma de 8, etiquetados con las letras de la "a" a la "g". Cada LED se llama segmento porque al iluminarse forma parte de un dígito. A veces se agrega un octavo LED para indicar el punto decimal (DP).

¿Cuál es la diferencia entre cátodo común y ánodo común?

La diferencia está en la polaridad de los LEDs y del terminal común. En cátodo común todos los cátodos están unidos entre sí, el pin común va a GND y se aplica voltaje positivo a cada segmento para iluminarlo. En ánodo común todos los ánodos están unidos, el pin común va a VCC y cada segmento se conecta a tierra para encenderse.

¿Qué resistencia se debe usar con un display de 7 segmentos?

Alrededor de 220Ω por segmento en un circuito de 5 volts. El cálculo es (5V − 2V) / 15 mA ≈ 200Ω, y 220Ω es el valor comercial más cercano. Si el display se usará al aire libre conviene bajar a 150Ω para obtener el máximo brillo.

¿Necesito una resistencia por cada segmento?

Sí. Aunque parezca un solo display, en realidad está compuesto por siete LEDs independientes en un mismo paquete, y cada uno requiere su propia resistencia limitadora de corriente para evitar que el segmento se dañe.

¿Qué segmentos se encienden para mostrar el número 4?

Para mostrar el 4 deben iluminarse cuatro segmentos: b, c, f y g. Una tabla de verdad indica qué segmentos encender para cada dígito del 0 al 9 y para los caracteres de la A a la F. En un display de ánodo común esa tabla es exactamente la opuesta a la de cátodo común.

¿Cómo se conecta el pin COM del display?

Los pines 3 y 8 están conectados internamente para formar el pin común. Dependiendo del tipo de display, ese pin debe conectarse a GND si es de cátodo común, o a 5V si es de ánodo común. Los pines a-g y DP van a los pines digitales del Arduino.

Aprende esto en un curso

Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial: