Taller de Arduino Display 7 Segmentos

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 20

Introducción a la

Robótica con Arduino


Display de 7 segmentos
Un display de segmentos (o visualizador) es un componente electrónico que se
utiliza para representar números. Como su propio nombre indica y, como se puede
observar en la imagen siguiente, el display está compuesto por 7 segmentos, los
cuales se encenderán y/o apagarán en función del número a representar. De forma
interna, se asemeja a siete LEDs conectados estratégicamente formando el número
8, aunque externamente dicha semejanza no se observa, de ahí su simplicidad
Display de 7 segmentos
Cada uno de los segmentos que componen este display se denominan a, b, c, d, e, f
y g, tal y como se muestra a continuación.

Para mostrar el número 0, tendremos que encender a, b, c, d, e y f.


Para el número 2, tendríamos a, b, g, e y d.
Y de la misma forma para cualquier otro número.
El P simboliza el punto decimal.

En cuanto a la clasificación, existen de dos tipos:


1. Display de segmentos de cátodo común, en la que todos los
cátodos de los LEDs estan internamente unidos a una patilla común,
la cual está conectada al potencial negativo de la placa.
2. Display de segmentos de ánodo común, en la que todos los
ánodos se encuentran al positivo.
Display de 7 segmentos
Conexiones
En lo que se refiere a las conexiones, tenemos que tener en cuenta cada segmento a qué
pin lo vamos a conectar, para poder efectuar una llamada a los pines correcta. En nuestro
caso, hemos hecho las siguientes conexiones (puede variar la designación según
convenga):

Segmento a - pin 7
Segmento b - pin 8
Segmento c - pin 9
Segmento d - pin 10
Segmento e - pin 11
Segmento f - pin 12
Segmento g - pin 13
Display de 7 segmentos
Display de 7 segmentos
Vamos a realizar un ejemplo en el cual nuestro display irá mostrando de forma ascendente todos los
números con un intervalo de separación de 1 segundo.
int pausa=1000; // Variable que define el intervalo
// de tiempo entre cada digito
void setup()
{
pinMode(7, OUTPUT); // Asignación de las salidas digitales
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
Display de 7 segmentos
void display (int a, int b, int c, int d, int e, int f, int g)
// Funcion del display
{
digitalWrite (7,a); //Se reciben 7 variables y se asignan
digitalWrite (8,b); //a cada una de las salidas
digitalWrite (9,c);
digitalWrite (10,d);
digitalWrite (11,e);
digitalWrite (12,f);
digitalWrite (13,g);
}
Display de 7 segmentos
void loop() //Funcion principal
// Dependiendo de cada dígito, se envía a la función display
// los estados (0 y 1) a cada uno de los segmentos
{
display (1,1,1,1,1,1,0); //escribe 0
delay(pausa);
display (0,1,1,0,0,0,0); //escribe 1
delay(pausa);
display (1,1,0,1,1,0,1); //escribe 2
delay(pausa);
display (1,1,1,1,0,0,1); //escribe 3
delay(pausa);
Display de 7 segmentos
display (0,1,1,0,0,1,1); //escribe 4
delay(pausa);
display (1,0,1,1,0,1,1); //escribe 5
delay(pausa);
display (1,0,1,1,1,1,1); //escribe 6
delay(pausa);
display (1,1,1,0,0,0,0); //escribe 7
delay(pausa);
display (1,1,1,1,1,1,1); //escribe 8
delay(pausa);
display (1,1,1,0,0,1,1); //escribe 9
delay(pausa);
}
Dado electrónico
Componentes necesarios para el dado electrónico

Arduino UNO
Protoboard (placa de prototipado)
Cables para hacer conexiones
1 pulsador
1 resistencia de 10 kΩ
1 resistencia de 220 Ω
1 display de 7 segmentos
Dado electrónico
Cátodo Común Ánodo Común
Dado electrónico
Programando el dado eléctrico con el display 7 segmentos
Comenzamos con la programación. En términos de lógica, da lo mismo tener un display 7 segmentos en
configuración de cátodo común que ánodo común. Donde si que encontraremos diferencias es a la hora de
implementar la lógica.
Comenzaremos con el algoritmo, una breve descripción de los pasos que debemos seguir. Es recomendable
plantear las ideas antes de ponerse a programar.
Leemos el pulsador
Si está en estado alto
Obtenemos número aleatorio
Mostramos el número en el display
Esperamos un tiempo hasta permitir otra jugada
Si está en estado bajo
No hacemos nada
Es un código muy sencillo. Quizás, donde encontremos más dificultad, sea a la hora de mostrar los números
en el display. Eso lo veremos ahora.
Dado electrónico
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 10
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 multidemensional, 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].
Dado electrónico
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 Este array solo sirve para cátodo común. Si
{ 1, 1, 1, 1, 0, 0, 1, 0 }, // 3 tenemos el otro tipo de display 7 segmentos,
debemos cambiar los unos por los ceros y los
{ 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
ceros por unos.
{ 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
};
Dado electrónico
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.
Dado electrónico
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 = 2; 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);
Dado electrónico
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));
}

Como semilla, elegir un pin analógico que no se utilice. Con el pulsador, no establecer una
resistencia pull down o pull up produce una indeterminación. Esto nos permitirá
seleccionar un número aleatorio verdadero.
Dado electrónico
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.
Dado electrónico
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);
}
}
Dado electrónico
Voy a describir el funcionamiento del bucle. Al final, para mostrar un número en el display,
lo que tenemos que hacer es encender un LED y apagar los demás.
Por ejemplo, si queremos encender el número 1, tenemos que ir al elemento 1 (recuerda
que antes hay otro elemento que es el elemento 0. Será el array con 8 valores).
{ 0, 1, 1, 0, 0, 0, 0, 0 }
El primer elemento indica el primer LED (corresponde con la letra e y el pin 2). Por lo tanto,
el pin 2 al valor que nos indica el array, 0 V (LOW).
El siguiente elemento es el pin 3 (letra c), lo tenemos que poner a nivel alto 5 V (HIGH). Y
así con todos los elementos.
El orden nos dirá el pin (hay que sumar dos ya que hemos empezado a conectar por el pin
2) y el valor nos dirá en que estado 0 (LOW) y 1 (HIGH).

También podría gustarte