Articles

Cómo funciona la pantalla de siete segmentos y su interfaz con Arduino

¿Cuántas veces has visto una película en la que alguien necesita desactivar una bomba? El héroe mira la pantalla mientras el tiempo pasa, cada segundo es más precioso que el anterior. Pues bien, si te fijas, todas esas bombas de las películas tienen pantallas de siete segmentos. Tiene que ser así. Si no, ¿cómo podría un héroe saber cuánto tiempo le queda?

Quizá los indicadores de siete segmentos no le parezcan lo suficientemente modernos, pero son la forma más práctica de mostrar números. Son fáciles de usar, rentables y muy legibles, tanto en condiciones de luz limitada como a plena luz del sol.

Un ejemplo del mundo real que utiliza la pantalla de siete segmentos es el famoso reloj de cuenta atrás de Cabo Cañaveral, Florida, que la NASA utilizó para el aterrizaje del Apolo.

Crédito de la foto: NASA/Jim Grossmann

Resumen del hardware

Discutiremos brevemente las características y la funcionalidad de la pantalla de 7 segmentos antes de conectarla a un Arduino.

Los displays de 7 segmentos son realmente siete LEDs alineados en un patrón particular. En este caso, la forma del número ‘8’ que todos conocemos. Cada uno de los siete LEDs se llama segmento porque cuando se ilumina el segmento forma parte de un dígito numérico (tanto decimal como hexadecimal) a mostrar. Un octavo LED adicional se utiliza a veces para indicar un punto decimal.

Estructura de la formación de los LEDs internos de 7 segmentos y pinout

Cada uno de los siete LEDs de la pantalla recibe un segmento posicional con uno de sus pines de conexión que sale directamente del paquete de plástico rectangular. Estos pines individuales del LED están etiquetados desde la a hasta la g representando cada LED individual. Los otros pines del LED se conectan juntos y se cablean para formar un pin común.

Para encender y apagar una parte concreta de la pantalla, se pone el pin apropiado en ALTO o BAJO igual que se haría con un LED normal. De manera que algunos segmentos se iluminarán y otros se oscurecerán permitiendo que se genere el patrón de caracteres deseado del número en el display. Esto nos permite mostrar cada uno de los diez dígitos decimales del 0 al 9 en el mismo display de 7 segmentos.

Diseño de los pines del display de 7 segmentos

Ahora vamos a repasar la configuración de los segmentos para saber qué pines iluminan cada uno de ellos. El pinout del display de 7 segmentos es el siguiente.

Configuración de los pines del ánodo común de 7 segmentos

a-g & DP De los 10, los 8 pines i.e. a, b, c, d, e, f, g y el segmento DP (punto decimal) están conectados a los pines digitales de Arduino. Mediante el control de cada LED en el segmento conectado, los números pueden ser mostrados.

COM El pin 3 y 8 están conectados internamente para formar un pin común. Este pin debe ser conectado a GND (cátodo común) o 5V (ánodo común) dependiendo del tipo de pantalla.

Cátodo común(CC) Vs Ánodo común(CA)

Los displays de siete segmentos son de dos tipos: La estructura interna de ambos tipos es prácticamente la misma. La diferencia es la polaridad de los LEDs y el terminal común. Como su nombre indica, el cátodo común tiene todos los cátodos de los LEDs en un 7-segmento conectado juntos y el ánodo común tiene todos los ánodos de los LEDs en un 7-segmento conectado juntos.

En la pantalla de cátodo común, todas las conexiones de cátodo de los segmentos de LED están conectados juntos a ‘lógica 0’ / GND. A continuación, los segmentos individuales se iluminan aplicando una señal HIGH / ‘lógica 1’ a los terminales individuales del Ánodo (a-g).

Funcionamiento interno de la pantalla de 7 segmentos de cátodo común. Animación
Cátodo común de 7 segmentos funcionando

En la pantalla de ánodo común, todas las conexiones anódicas de los segmentos del LED se unen a la lógica «1». Los segmentos individuales se iluminan aplicando una señal de tierra, «0» lógico o «LOW» al cátodo del segmento particular (a-g).

Display interno de 7 segmentos de ánodo común. Animación de trabajo
Anodo común de 7 segmentos trabajando
En general, los displays de ánodo común (el que usamos en los experimentos de abajo) son más populares, ya que muchos circuitos lógicos pueden hundir más corriente de la que pueden originar.

También hay que tener en cuenta que un visualizador de cátodo común no es un sustituto directo en un circuito de un visualizador de ánodo común y viceversa, ya que es lo mismo que conectar los LEDs al revés, y por lo tanto la emisión de luz no tendrá lugar.

¿Cómo funciona el visualizador de 7 segmentos?

Dependiendo del dígito decimal a mostrar, el conjunto particular de LEDs se ilumina. Por ejemplo, para mostrar el dígito numérico 4, necesitaremos iluminar cuatro de los segmentos de LEDs correspondientes a b, c, f y g. Así, los distintos dígitos del ‘0 al 9’ y los caracteres de la ‘A a la F’ pueden ser mostrados utilizando un display de 7 segmentos como el que se muestra.

Formación del número del display de 7 segmentos Contol

La siguiente tabla de verdad muestra los segmentos individuales que necesitan ser iluminados para producir dígitos y caracteres. Tenga en cuenta que la tabla de verdad para la pantalla de 7 segmentos de ánodo común es exactamente opuesta a la de la pantalla de 7 segmentos de cátodo común.

Tabla de verdad del visualizador de 7 segmentos de cátodo común
Tabla de verdad del Anode 7 Segment Display Truth Table

Cableado – Conexión de la pantalla de 7 segmentos a Arduino UNO

Ahora que tenemos una comprensión de cómo la pantalla de 7Segmento de la pantalla funciona, ¡podemos empezar a cablearlo con el Arduino!

Comienza colocando el display de 7 segmentos en tu protoboard, asegurándote de que cada lado del display está en un lado distinto del protoboard. Con el punto decimal hacia abajo, los pines son 1-5 en la parte inferior de izquierda a derecha y 10-6 en la parte superior de izquierda a derecha como se puede ver en la ilustración de abajo.

Para empezar vamos a conectar uno de los pines comunes 3 u 8 al pin de 5V en el Arduino (si estás usando un display de 7 segmentos de ánodo común) o al pin GND en el Arduino (si estás usando un display de 7 segmentos de cátodo común). El resto de los 4 pines en la posición superior se conectan al pin digital 2 al pin digital 5. Los otros 4 pines de la posición inferior con punto decimal se conectan al pin digital 6 al 9.

Aunque la pantalla puede funcionar sin resistencias limitadoras de corriente, siempre es una buena idea tenerlas en tu circuito para evitar que se queme tu pantalla.

Típicamente para una pantalla estándar de 7 segmentos de color rojo, cada segmento de LED puede consumir unos 15 mA para iluminarse correctamente, por lo que en un circuito lógico digital de 5 voltios, el valor de la resistencia limitadora de corriente sería de unos 200Ω (5v – 2v)/15mA, o 220Ω al valor preferido más alto.

Una vez que hayas terminado deberías tener algo parecido a la ilustración que se muestra a continuación.

Conexiones de Fritzing de Arduino con pantalla de siete segmentos de ánodo común
Conexión de pantalla de siete segmentos de ánodo común a Arduino UNO
Cableado de Arduino Conectando la pantalla de siete segmentos de cátodo común
Cableando la pantalla de siete segmentos de cátodo común a Arduino UNO

Código de Arduino

Ahora, es el momento de iluminar la pantalla con algo de código.

Antes de empezar a escribir código para controlar los displays de 7 segmentos, necesitarás descargar primero la librería SevSeg Arduino. Puedes hacerlo visitando el repo de GitHub y descargando manualmente la librería o, simplemente, haciendo clic en este botón para descargar el zip:

Para instalarla, abre el IDE de Arduino, ve a Sketch > Incluye la librería > Añade la librería .ZIP, y luego selecciona el archivo ZIP de SevSeg que acabas de descargar. Si necesitas más detalles sobre la instalación de una biblioteca, visita este tutorial de Instalación de una biblioteca de Arduino.

Una vez que tengas la biblioteca instalada, puedes copiar este sketch en el IDE de Arduino. El siguiente sketch de prueba contará de 0 a 9. Prueba el sketch; y luego lo explicaremos con cierto detalle.

#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); }}

Explicación del código:

El sketch comienza incluyendo la librería SevSeg que simplifica los controles y señales al 7-segmento. A continuación tenemos que crear un objeto SevSeg que luego podremos utilizar a lo largo del sketch.

#include "SevSeg.h"SevSeg myDisplay;

A continuación tenemos que especificar cuántos dígitos tiene el display. Como estamos usando un display de un solo dígito, lo ponemos a 1. En caso de que estés usando un display de 4 dígitos, ponlo a 4.

//Set to 1 for single digit displaybyte numDigits = 1;

El array digitPins simplemente define los ‘pines comunes’ cuando se usa un display de varios dígitos. Déjalo vacío si tienes una pantalla de un solo dígito. De lo contrario, proporcione los números de pin del arduino a los que se conectan los ‘pines comunes’ de los dígitos individuales. Ordénalos de izquierda a derecha.

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

El segundo array que vemos que se inicializa es el array segmentPins. Este es un array de todos los números de pines del Arduino que están conectados a los pines de la pantalla LED que controlan los segmentos; así que en este caso son los que conectamos directamente desde la protoboard al Arduino. También hay que ponerlos en el orden correcto ya que la librería asume que los pines están en el siguiente orden: 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};

Después de crear estas variables, las pasamos al constructor del SevSeg mediante la función begin().

//Initialize sevseg objectsevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

En la sección ‘loop’: El programa comienza a contar de 0 a 9 utilizando el bucle ‘for’ y la variable ‘i’. Cada vez, utiliza la función de la biblioteca SevSeg setNumber() junto con refreshDisplay () para poner el número en la pantalla.

Luego hay un segundo de retraso antes de que 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

Lanzando Dados

Como complemento, aquí tienes otro proyecto, que permite a las personas que necesitan tecnología de accesibilidad «lanzar» los dados. Se puede utilizar para jugar a juegos como Yahtzee, ludo, etc. Utiliza la misma configuración de Arduino, excepto que usamos un interruptor táctil para rodar rápidamente.

Cableado del juego de dados Arduino Conexiones de fritura con el segmento de 7 ánodos comunes
Proyecto de dados Arduino – Cableado Pantalla de siete segmentos de ánodo común a Arduino UNO

El objetivo de un dado es proporcionar una forma de obtener al azar un número del 1 al 6. Y la mejor manera de obtener un número aleatorio es utilizar una función incorporada random(min,max). Esto toma dos parámetros, el primero especifica el límite inferior del valor aleatorio (incluyendo este número) y el segundo parámetro especifica el límite superior del valor aleatorio (excluyendo este número). Esto significa que el número aleatorio se generará entre el mínimo y el máximo.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(); }}
Siete Segmentos Salida de dados rodantes del proyecto Arduino
Salida de dados rodantes del proyecto Arduino

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *