1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / Conexión de display de 7 segmentos al Arduino.

Conexión de display de 7 segmentos al Arduino.

| Actualizado:
Comentarios: 0

Conexión de display de 7 segmentos al Arduino.
Conexión de display de 7 segmentos al Arduino.

En este artículo te vamos a contar como utilizar un display de 7 segmentos con Arduino, haremos un pequeño contador de 0 a 9 y programaremos un dado con la pequeña pantalla y un pulsador.

Los display de un solo dígito de siete segmentos suelen tener 10 pines. Dos pines se conectan a tierra, y los otros 8 se conectan a cada uno de los segmentos. Aquí ofrecemos un diagrama de los pines de la popular pantalla de cátodo común: el modelo 5011AS:

Diagrama de los pines de un display de 7 segmentos.

Antes de poder conectar el display a Arduino, necesitamos saber si es de ánodo común o de cátodo común, y qué pines se conectan a cada segmento. Esta información suele estar en la hoja de datos, pero si no tenemos las instruciones y desconocemos la referencia del display podemos solucionarlo fácilmente.

Cómo saber si tenemos un display de ánodo común o de cátodo común.

Para determinar si un display es de ánodo común o de cátodo común, podemos probarlo creando el siguiente esquema:

Esquema para determinar si es un display de ánodo común o cátodo común

Conectar el cable de tierra (negro) a cualquiera de los pines centrales del display. Luego insertamos el cable positivo (rojo) en uno de los otros pines, la resistencia utilizada es de 220 Ohm. Si se ilumina alguno de los segmentos entonces se trata de un display de cátodo común.

Cómo determinar el pinout para la pantalla

Esquema para determinar si es un display de ánodo común o cátodo común

Ahora dibujamos un diagrama que muestre los pines del display. Con el pin común conectado al cable de tierra (cátodo común), probamos cada pin con el otro cable. Cuando se enciende un segmento, escribimos el nombre del segmento (A-G) junto al pin correspondiente en el diagrama.

Conexión de pantallas de un solo dígito a Arduino

Una vez que tenemos el esquema de los pines resuelto, conectar la pantalla a un Arduino es bastante fácil. Este diagrama muestra cómo conectar una pantalla 5011AS de un solo dígito (observemos que se ha colocado una resistencia de 220 ohm conectada en serie con los pines comunes, GND):

Esquema de montaje para un display de 7 segmentos

En el esquema anterior, los pines del display se conectan a Arduino de acuerdo con esta tabla:

Tabla con las conexiones del display de 7 segmentos a la placa Arduino
Tabla con las conexiones del display de 7 segmentos a la placa Arduino

Programación:

Usaremos una biblioteca llamada SevSeg para controlar los segmentos del display. La biblioteca SevSeg funciona con los display de siete segmentos de un solo dígito y múltiples dígitos.

#include "SevSeg.h"
SevSeg sevseg; 

void setup(){
    byte numDigits = 1;
    byte digitPins[] = {};
    byte segmentPins[] = {6, 5, 2, 3, 4, 7, 8, 9};
    bool resistorsOnSegments = true;

    byte hardwareConfig = COMMON_CATHODE; 
    sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
    sevseg.setBrightness(90);
}

void loop(){
        sevseg.setNumber(4);  // número que queremos que represente
        sevseg.refreshDisplay();        
}

Creamos un objeto sevseg en la línea 2. Para usar displays adicionales, podemos crear otro objeto y llamar a las funciones relevantes para ese objeto. El display se inicializa con la función sevseg.begin () en la línea 11. Las otras funciones se explican a continuación:

hardwareConfig = COMMON_CATHODE. Establece el tipo de display. En este caso es de cátodo común, pero si fuera de ánodo común, se usaría COMMON_ANODE en su lugar.

byte numDigits = 1. Establece el número de dígitos en su pantalla. Como es una pantalla de un solo dígito, se coloca un 1. Si se está usando una pantalla de 4 dígitos, lo configuramos con un 4.

byte digitPins [] = {}. Crea una matriz que define los pines de tierra cuando se usa una pantalla de 4 dígitos o de varios dígitos. En un display de un solo dígito se queda vacío. Por ejemplo, si tiene una pantalla de 4 dígitos y usamos los pines 10, 11, 12 y 13 de Arduino como pines de tierra de dígitos, se usaría: byte digitPins [] = {10, 11, 12, 13}; .

byte segmentPins [] = {6, 5, 2, 3, 4, 7, 8, 9}. Declara una matriz que define los pines Arduino que están conectados a cada segmento de la pantalla. El orden es alfabético (A, B, C, D, E, F, G, DP donde DP es el punto decimal). Entonces, en este caso, el pin 6 de Arduino se conecta al segmento A, el pin 5 se conecta al segmento B, el pin 2 se conecta al segmento C, y así sucesivamente.

resistorsOnSegments = true. Se establece en verdadero si sus resistencias están en serie con los pines del display. Si las resistencias están en serie con los pines de dígitos, hay que configurarlo en falso. Establezca esto en verdadero cuando use pantallas de varios dígitos.

sevseg.setBrightness (90). Esta función establece el brillo de la pantalla. Se puede ajustar de 0 a 100.

sevseg.setNumber (). Esta función imprime el número en la pantalla. Por ejemplo, sevseg.setNumber (4); imprimirá el número «4» en la pantalla. También puede imprimir números con puntos decimales. Por ejemplo, para imprimir el número «4.999», usaría sevseg.setNumber (4999, 3); . El segundo parámetro (el 3) define dónde se encuentra el punto decimal. En este caso, a 3 dígitos del dígito más a la derecha. En una pantalla de un solo dígito, configurar el segundo parámetro en «0» activa el punto decimal, mientras que configurarlo en «1» lo desactiva.

sevseg.refreshDisplay (). Esta función se requiere al final de la sección del bucle para continuar mostrando el número.

Hacer un contador de 0 a 9.

Con el mismo esquema anterior de conexiones aplicamos el nuevo código:

#include "SevSeg.h"
SevSeg sevseg; 

void setup(){
    byte numDigits = 1;
    byte digitPins[] = {};
    byte segmentPins[] = {6, 5, 2, 3, 4, 7, 8, 9};
    bool resistorsOnSegments = true;

    byte hardwareConfig = COMMON_CATHODE; 
    sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
    sevseg.setBrightness(90);
}

void loop(){
    for(int i = 0; i < 10; i++){
        sevseg.setNumber(i, i%2);
        delay(1000);
        sevseg.refreshDisplay(); 
        }
}

Si nos fijamos bien la diferencia principal es que se ha añadido un for para ir recorriendo los valores que deben salir por pantalla.

Dado con un display de 7 segmentos.

Este ejemplo consta de un pulsador y una única pantalla de 7 segmentos. Cada vez que se presiona y se mantiene presionado el botón, la pantalla recorre rápidamente los números 0-9. Una vez que se suelta el botón, la pantalla continúa girando durante un período de tiempo casi igual al tiempo que se presionó el botón, y luego muestra un número junto con el punto decimal para indicar un resultado al azar.

Esquema de montaje de un display de 7 segmentos y un pulsador

Si nos fijamos en el esquema se ha añadido un pulsador que se ha conectado al pin 10 como INPUT_PULLUP y el otro pin del pulsador a tierra. Mientras mantegamos presionado el pulsador los numeros irán corriendo.

#include "SevSeg.h"
SevSeg sevseg;

const int  pulsador = 10;       // Pulsador que comenzara a mover el dado
int pulsadorEstado = 0;         // Estado del pulsador
int pulsadorEstadoActual = LOW; // Estado del pulsador actual
int pulsadorContador = 0;       // Contador de las veces que se ha presionado
long contador = 0;
long max_long_val = 2147483647L;

void setup(){
  byte numDigits = 1;
  byte digitPins[] = {};
  byte segmentPins[] = {6, 5, 2 , 3, 4 , 7, 8, 9};
  bool resistorsOnSegments = true; 

  byte hardwareConfig = COMMON_CATHODE;
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(90);

  pinMode(pulsador, INPUT_PULLUP);
  Serial.begin(9600);
  pulsadorEstadoActual = LOW;
}

void loop(){
  pulsadorEstado = digitalRead(pulsador);
  if(pulsadorEstado == HIGH){
    pulsadorEstado = LOW;
  }else{
    pulsadorEstado = HIGH;
  }
  
  if(pulsadorEstado == HIGH){
    Serial.println("on");
    pulsadorEstadoActual = HIGH;
    pulsadorContador++;
    if(contador < max_long_val)
      contador++;
    pulsadorContador %= 9;
    sevseg.setNumber(pulsadorContador, 1);    
    sevseg.refreshDisplay();     
    delay(100 - (contador%99));
  }else{
    Serial.println("off");
    if(pulsadorEstadoActual == HIGH){
      Serial.println("in");
      pulsadorContador++;
      pulsadorContador %= 7;
      if(pulsadorContador == 0)
        pulsadorContador = 1;
      contador--;
      sevseg.setNumber(pulsadorContador, 1);    
      sevseg.refreshDisplay();
      delay(100 - (contador%99));
      if(contador == 0){
        pulsadorEstadoActual = LOW;
        sevseg.setNumber(pulsadorContador, 0);
        sevseg.refreshDisplay();         
      }
    }
  }
}

Artículos que te pueden interesar

Iluminación de un led según la cantidad de luz
Sistema de regulación de la iluminación de un led a partir de la cantidad de luz

Sistema de regulación de la iluminación de un led a partir de la cantidad de luz

| Actualizado:
Comentarios: 0

El objetivo es encender un LED y variar su intensidad dependiendo de la luz ambiental, para esto vamos a utilizar un sensor de luz LDR. Antes de cambiar la intensidad del LED según la cantidad de luz, haremos que se…

Medir la temperatura con Arduino
Medir la temperatura con el sensor LM35 y Arduino

Medir la temperatura con el sensor LM35 y Arduino

| Actualizado:
Comentarios: 5

Veremos cómo medir la temperatura con el sensor analógico LM35 y mostrar el valor de la temperatura en el monitor serial de Arduino o en un display de 4 dígitos y 7 segmentos. El LM35 es uno de los sensores…

Salidas digitales y ejemplos en Arduino
Salidas digitales y ejemplos en Arduino. Efecto coche fantástico.

Salidas digitales y ejemplos en Arduino. Efecto coche fantástico.

| Actualizado:
Comentarios: 0

Siguiendo con los tutoriales de Arduino vamos a programar el efecto de las luces del coche fantástico. Para ello primero veremos cómo encender y apagar un LED, a continuación haremos el efecto con 3 LEDS conectados en paralelo, con 7…

¿Cómo hacer un semáforo con Arduino?

¿Cómo hacer un semáforo con Arduino?

| Actualizado:
Comentarios: 0

Simular un semáforo es uno de los clásicos en la iniciación de los proyectos de Arduino. Aquí vamos a mostrar como puedes montar un semáforo sencillo, un semáforo para coches y peatones automatizado y por último, el semáforo para coches…

Comentarios - 0

Deja un comentario

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