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

Robot esquiva obstáculos con Arduino
Robot esquiva obstáculos con Arduino y un sensor de ultrasonidos

Robot esquiva obstáculos con Arduino y un sensor de ultrasonidos

| Actualizado:
Comentarios: 2

En este proyecto nos marcamos el objetivo de desarrollar un robot capaz de esquivar objetos. Un robot que avanzará en línea recta mientras que no detecte ningún obstáculo; en caso de detectar algún estorbo, girará sobre sí mismo hasta que…

Servomotores con Arduino, servo SG90
Uso de servomotores con Arduino. Servo SG90

Uso de servomotores con Arduino. Servo SG90

| Actualizado:
Comentarios: 0

En este tutorial se explicará el funcionamiento y características de un servomotor, Servo SG90, así como la conexión con la placa Arduino y su utilización Contenido 1 Librería servo de Arduino 2 Esquema para su montaje 3 Código para girar…

¿Cómo medir el valor de una resistencia con Arduino?
Medir el valor de una resistencia con Arduino

¿Cómo medir el valor de una resistencia con Arduino?

| Actualizado:
Comentarios: 0

¿Cuántas veces se nos han mezclado las resistencias y no sabemos su valor? Para eso vamos a construir un sencillo óhmetro para medir la resistencia.

Medir el voltaje de una pila con Arduino

Medir el voltaje de una pila con Arduino

| Actualizado:
Comentarios: 1

Es habitual que tengamos por casa un montón de pilas que, en ocasiones, no sabemos si están cargadas o se han gastado. Vamos a realizar un medidor de carga utilizando la placa de Arduino. El máximo que podemos medir es…

Comentarios - 0

Deja un comentario

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