Está en la página 1de 10

TRABAJO DE LABORATORIO

Tema: Dado eléctrico usando un display de 7 segmentos.


Antecedentes
Cuando creamos un proyecto con Arduino, normalmente mostramos los datos a través del
monitor serie. Es una manera rápida de poder comprobar los valores de variables y entradas, tanto
digitales como analógicas. Existen diferentes interfaces hardware que permiten que las máquinas se
comuniquen con nosotros. Una de ellas es el display 7 segmentos, un componente muy típico. Pero
podemos encontrar otros como un LCD o una matriz de LEDs.

CONOCIMIENTO TEORICO
Display 7 segmentos, el componente electrónico
Siempre que nos enfrentemos a un nuevo componente, es recomendable documentarse. Para
ello tenemos las hojas de características técnicas o datasheet. Todo dependerá del modelo de display
LED 7 segmentos. Pero, ¿cómo puedes saber que modelo tienes? Todos los componentes suelen
tener una numeración inscrita en alguna parte.
Solo tenemos que descubrirla y meter esa numeración en Google seguido de datasheet. Esto
nos mostrará una serie de páginas donde encontramos información muy valiosa. Para este caso
usaremos el display 7 segmentos es el 5101AS.

Gráfico 1.1 – Búsqueda de Datasheet en Google

De los resultados obtenidos nos vamos a uno de ellos (preferible buscar en algún PDF) y
miramos que características tiene este componente. Pero ojo, no nos debemos fiar siempre de lo que
nos diga Google. En algunos casos, encontramos cosas que están erróneas. Hay varias páginas
donde nos ofrecen fichas técnicas de componentes. Dos de las más famosas son Datasheet Catalog y
All Datasheet.
Analizando el display de 7 segmentos
Un display 7 segmentos es un componente que tiene 7 segmentos LEDs, más un LED que
hará de punto. Este punto nos indica cómo hay que colocar el display, y siempre irá hacia abajo. Por
lo tanto, debemos trabajar como si tuviéramos 7 LEDs conectados a nuestro Arduino.

Gráfico 1.2 – Leds de un display de 7 segmentos

Existen dos tipos de displays de 7 segmentos, los de ánodo común y los de cátodo común.
Esto quiere decir que, en los primeros, todos los LEDs comparten un mismo ánodo, y en los
segundos, que todos los LEDs comparten un mismo cátodo. Veremos más adelante un esquema de
cada uno de ellos y cómo identificarlos.
Relación pines del display de 7 segmentos con los LEDs
Dentro del datasheet, encontrarás un dibujo parecido al que te muestro a continuación.

Gráfico 1.3 – Segmentos de un display de 7 segmentos


Identifica cada segmento LED con una letra. Así tenemos identificados cada uno de ellos.
Este componente tiene 10 pines. Antes de hacer ninguna conexión debemos identificar los pines.

Gráfico 1.4 – Pines de un display de 7 segmentos

Fíjate bien que el punto siempre va hacia abajo.


Ahora lo único que nos falta es asociar cada pin a cada segmento LED. En la siguiente
imagen puedes ver esa relación.

Gráfico 1.5 – Asociación de pines y segmentos de un display de 7 segmentos


Podemos resumir todo lo anterior en la siguiente tabla.

Pines Segmentos
1 e
2 d
4 c
6 b
7 a
9 f
10 g
Tabla 1.1 – Relación de segmentos con los pines de un display de 7 segmentos

¿Y qué pasa con el resto de pines? Nos quedan por saber qué hacer con los pines 3, 5 y 8.
¿Te acuerdas que hemos visto que hay un punto para indicar la orientación del display 7 segmentos?,
pues este va conectado al pin número 5.
Los otros dos pines funcionarán como cátodo o ánodo, dependiendo del tipo de display de 7
segmentos con el que estemos trabajando. Solo debemos utilizar una de esas dos conexiones, se trata
de pines redundantes.

Al final, la tabla que relaciona los pines con los LEDs quedaría de la siguiente manera.

Pines Segmentos
1 e
2 d
3 Ánodo/Cátodo común
4 c
5 DP (Punto)
6 b
7 a
8 Ánodo/Cátodo común
9 f
10 g
Tabla 1.2 – Pines y segmentos de un display de 7 segmentos

Mostrando un número en el display 7 segmentos


Para poder mostrar un número en el display 7 segmentos, lo que tenemos que hacer es
iluminar aquellos segmentos para formar dicho número. Por ejemplo, si queremos mostrar el 4,
debemos activar los segmentos f, g, b y c y desactivar el resto de segmentos.
Gráfico 1.6 – Segmentos que se deben encender para formar el numero 4

Como estos tienen una relación con los pines de Arduino, solo tendríamos que poner en
estado alto (HIGH) o bajo (LOW) esos pines (en la siguiente sección veremos los tipos de displays
que tenemos a nuestra disposición). Todo esto lo haremos a nivel de programación. En el ejemplo de
código, podrás ver cómo se hace.

Desarrollo del laboratorio


Ejercicio 1
Buscar el Datasheet en Google del display de 7 segmentos HS-5261A/BX.
Ejercicio 2
Elaborar un dado eléctrico con la ayuda de Tinkercad usando una display de 7 segmentos de
ánodo o cátodo común.
Componentes necesarios para el dado electrónico:
 Arduino UNO
 Protoboar (placa de prototipado)
 Cables para hacer conexiones
 1 pulsador
 1 resistencia de 10 kΩ
 1 resistencia de 220 Ω
 1 display de 7 segmentos
Esquema de conexión de una display de cátodo común.

Gráfico 1.7 – Conexión de un dado eléctrico usando un display de cátodo común

Esquema de conexión de una display de cátodo común.

Gráfico 1.8 – Conexión de un dado eléctrico usando un display de ánodo común


Programación del dado eléctrico con el display 7 segmentos
Variables y constantes

Comenzamos con una buena práctica. Declarar todas las constantes que relacionan los pines
con los componentes. En este caso solo vamos a declarar una constante, el pulsador.

// Constantes pines
#define PULSADOR 2

Para los pines del display 7 segmentos, vamos a utilizar un array multidimensional. Lo
primero es saber qué es un array o matriz. Este tipo de variables nos permite agrupar datos del
mismo tipo.
Cuando hablo de array multidimensional, quiero decir que tendremos un array de arrays. Es
sencillo, cada elemento del array principal es otro array. En este caso tendremos profundidad de 2,
pero podríamos tener más profundidad.

Este tipo de arrays, donde tenemos 2 dimensiones, lo podemos ver como una tabla. Para
acceder a un elemento tenemos que indicar la fila y la columna donde se encuentra dicho elemento.
Esto viene indicado por el valor entre corchetes [columna] [fila].
En este caso crearemos un array con 10 elementos que serían los 10 números posibles, del 0
al 9. Cada elemento contendrá 1 array de 8 elementos que serían los pines a los que está conectado
el display de 7 segmentos (7 para cada segmento y el punto).

// Array multidimensional para mostrar los números


byte numero[10][8] =
{
{ 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
{ 1, 1, 0, 1, 1, 0, 1, 0 }, // 2
{ 1, 1, 1, 1, 0, 0, 1, 0 }, // 3
{ 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
{ 1, 0, 1, 1, 0, 1, 1, 0 }, // 5
{ 1, 0, 1, 1, 1, 1, 1, 0 }, // 6
{ 1, 1, 1, 0, 0, 0, 0, 0 }, // 7
{ 1, 1, 1, 1, 1, 1, 1, 0 }, // 8
{ 1, 1, 1, 0, 0, 1, 1, 0 } // 9
};

Este array solo sirve para cátodo común. Si tenemos el otro tipo de display 7 segmentos,
debemos cambiar los unos por los ceros y los ceros por unos.
Función setup
En esta función tenemos que establecer las condiciones iniciales. Lo primero es iniciar el
monitor serie.
void setup() {
// Iniciamos el monitor serie
Serial.begin(9600);
Luego seguimos con los segmentos del display. Hay que poner todos los pines donde está
conectado (del 2 al 9) en modo salida (OUTPUT). Podemos hacerlo de dos maneras, hacerlo de uno
a uno o con un bucle. La dificultad de este bucle es que no debemos empezar por el cero. Los pines
que utilizamos son del 2 al 9, haremos un bucle que recorra todos estos números.
Dentro utilizaremos la variable del bucle como número de pin. Es muy sencillo, lo puedes
comprobar a continuación.

// Ponemos los pines de los segmentos en modo OUTPUT (salida)


for (int i = 3; i < 10; i++)
{
pinMode(i, OUTPUT);
}

A continuación, el pin del pulsador lo ponemos en modo entrada

// Ponemos el pin del pulsador en modo INPUT (entrada)


pinMode(PULSADOR, INPUT);

Por último, establecemos la semilla fija para obtener el valor aleatorio a través de la función
random. Esta semilla será una entrada analógica.

//Establecemos la semilla fija


randomSeed(analogRead(A0));
}

Función loop
Ahora vamos con la parte que se repite constantemente. Como hemos visto en la descripción
del algoritmo, lo primero es leer el pin digital donde tenemos conectado el pulsador. Luego
comprobamos si está en estado alto (pulsado).

void loop() {
// Leemos el valor del pulsador
int valor = digitalRead(PULSADOR);

// Si está pulsado
if (valor == HIGH)
{

Una vez que estemos seguro que se ha pulsado es cuando empezamos la secuencia de
obtener un número aleatorio entre 1 y 6, con la función random, y mostramos el número que ha
salido. La función random (min, max) admite dos parámetros el mínimo y el máximo.
Este máximo es exclusivo lo que quiere decir que debemos elegir el número entero superior
al número máximo que queremos elegir. En nuestro caso sería random(1,7) para elegir un número
entre 1 y 6.
//Genera un numero aleatorio entre 1 y 6
int randomNumber = random(1, 7);

// Ponemos los pines en estado correcto para mostrar el número randomNumber


for (int e = 0; e < 8; e++)
{
digitalWrite(e + 3, numero[randomNumber][e]);
}

delay(500);
}
}

Código completo
A continuación, se muestra todo el código para que lo puedas copiar fácilmente.

// Constantes pines
#define PULSADOR 2

// Array multidimensional para mostrar los números


byte numero[10][8] =
{
{ 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
{ 1, 1, 0, 1, 1, 0, 1, 0 }, // 2
{ 1, 1, 1, 1, 0, 0, 1, 0 }, // 3
{ 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
{ 1, 0, 1, 1, 0, 1, 1, 0 }, // 5
{ 1, 0, 1, 1, 1, 1, 1, 0 }, // 6
{ 1, 1, 1, 0, 0, 0, 0, 0 }, // 7
{ 1, 1, 1, 1, 1, 1, 1, 0 }, // 8
{ 1, 1, 1, 0, 0, 1, 1, 0 } // 9
};

void setup() {
// Iniciamos el monitor serie
Serial.begin(9600);

// Ponemos los pines de los segmentos en modo OUTPUT (salida)


for (int i = 3; i < 10; i++)
{
pinMode(i, OUTPUT);
}

// Ponemos el pin del pulsador en modo INPUT (entrada)


pinMode(PULSADOR, INPUT);

//Establecemos la semilla fija


randomSeed(analogRead(A0));
}

void loop() {
// Leemos el valor del pulsador
int valor = digitalRead(PULSADOR);

// Si está pulsado
if (valor == HIGH)
{

//Genera un numero aleatorio entre 1 y 6


int randomNumber = random(1, 7);

// Ponemos los pines en estado correcto para mostrar el número randomNumber


for (int e = 0; e < 8; e++)
{
digitalWrite(e + 3, numero[randomNumber][e]);
}

delay(500);
}
}

También podría gustarte