Práctica 19. Conteo regresivo con un visualizador de 7 segmentos

19.1  Objetivo General:

Mostrar un conteo regresivo utilizando un visualizador de 7 segmentos.

En la sección de Tutoriales->Arduino podrán encontrar todas las prácticas relacionadas con la tarjeta Arduino

IMPORTANTE:

La práctica 1 te enseña como encender y apagar un (1) solo LED. Consúltala antes de hacer esta práctica.

19.2  Materiales y Métodos:

  1. Un visualizador LED de 7 segmentos.
  2. Dos resistencias de 220Ω.
  3. Una tarjeta Arduino.
  4. Un cable USB impresora.
  5. Un computador.
  6. Cables para el montaje del circuito.
  7. Protoboard.

19.3  Montaje de la Práctica:

Antes de comenzar a la realización del montaje del circuito electrónico, primero se visualiza en  el programa TinkerCad. El circuito se muestra en la figura 1.

Circuito Práctica 19

Figura 1 – Montaje del circuito para un visualizador de 7 LEDs.

Note que en la práctica se emplea un visualizador que consiste en un circuito constituido por 7 LEDs. El número a visualizar se consigue encendiendo y apagando cada LEDs. Por ejemplo, el número 8 se muestra cuando los 7 LEDs están encendidos.

Si recordamos de la práctica 1, 1 LED tiene dos puntas, una el anodo (+) y  el catodo (-). El caso del viualizador de 7 segmentos hay dos modelos. Uno donde el catodo de cada segmento van a un punto común, y otro donde los anodos se encuentran en un punto común. Esto es importante conocerlo por que en función del tipo de visualizador el circuito cambia.

El circuito de la figura 1 corresponde con el circuito donde el catodo es común. Un GND (-) común para los 4 LEDs superiores y un GND (-) común para los 3 LEDs inferiores. Aunque la señal enviada por la tarjeta arduino es baja y puede conectarse directamente a los LEDs, es recomendable incluir una resistencia eléctrica tal y como se muestra en la figura

Para encender los segmentos, lo que se debe hacer es enviar la señal digital desde la tarjeta arduino al pin  anodo del LED. La tabla 1 resume la secuencia de LEDs que debe encenderse, para el visualisador de catodo común, para mostrár uno de los números de 0 a 9. La tabla indica la variable que hay que activar la cual toma el nombre de la usada en el código. Por ejemplo, led2 es la variable constante y entera usada para activar el LED horizontal superior.

Tabla 1 Secuencia de LEDs para visualizar número
Número led2 led3 led4 led5 led6 led7 led8
0 1 1 1 1 1 1 0
1 0 1 1 0 0 0 0
2 1 1 0 1 1 0 1
3 1 1 1 1 0 0 1
4 0 1 1 0 0 1 1
5 1 0 1 1 0 1 1
6 1 0 1 1 1 1 1
7 1 1 1 0 0 0 0
8 1 1 1 1 1 1 1
9 1 1 1 1 0 1 1

 

19.3.1 Procedimiento de cómo llevar a cabo el codificado del programa:

Primero vamos a crear la subrutina funcNum(int x) que dado el número requerido (x entero) enciende la  secuencia de LEDs indicada en la tabla 1.

  • Las subrutinas se codifican en una estructura void seguida del nombre que se le quiera asignar. por ejemplo void funcNum(int x). Dentro del paréntesis se pueden colocar las variables que entran a la función. En este caso la variable de entrada es el número que se quiere visualizar.
  • En esta práctica introducimos una nueva estructura de programación switch. Las estructura tiene la ventaja que en función del valor indicado, interamente la función escoge el segmento de código del valor indicado. En este caso hay 10 posibilidades, desde 0 a 9. Por ejemplo, si la entrada x= 9 el código va al case 9 en el cual mediante digitalWrite(led, HIGH) se van encendiendo la secuencia requerida para visualizar el número 9..

Código Principal.

  • Se declaran los pines a utilizar para enviar la señal a cada segmento LED. Se declara que son parámetros de tipo constante y entero. Por ejemplo const int led2=2 indica que el pin 2 envía señal al led2.
  • En el lazo void setup, se indica que todos los pines utilizados serán utilizados para enviar señal. Esto se realiza mediante pinMode de salida OUTPUT.
  •  Dentro del lazo void loop, se emplea la rutina de visualizar el número funcNum(int x). Para esta práctica empleamos un lazo for desde i=9 hasta 0 para ir visualizando los números en conteo regresivo. Luego de visualizar el número se introduce un delay de 1 segundo.
// Práctica conteo regresivo con visualizador de 7 digitos
int const led2=2;
int const led3=3;
int const led4=4;
int const led5=5;
int const led6=6;
int const led7=7;
int const led8=8;
void setup(){
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
pinMode(led7,OUTPUT);
pinMode(led8,OUTPUT);
}
void loop(){
for(int i=9;i>-1; i--){
  funcNum(i);
  delay(1000);
  }
}
void funcNum(int x){
  switch (x){
   case 0://when count value is zero show”0” on disp
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(5, LOW);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);
  break;
   case 1:// when count value is 1 show”1” on disp
    digitalWrite(2, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, HIGH);
   break;
   case 2:// when count value is 2 show”2” on disp
   digitalWrite(2, LOW);
   digitalWrite(3, HIGH);
   digitalWrite(4, HIGH);
   digitalWrite(5, HIGH);
   digitalWrite(6, LOW);
   digitalWrite(7, HIGH);
   digitalWrite(8, HIGH);
  break;
   case 3:// when count value is 3 show”3” on disp
   digitalWrite(2, HIGH);
   digitalWrite(3, HIGH);
   digitalWrite(4, LOW);
   digitalWrite(5, HIGH);
   digitalWrite(6, LOW);
   digitalWrite(7, HIGH);
   digitalWrite(8, HIGH);
   break;
   case 4:// when count value is 4 show”4” on disp
   digitalWrite(2, HIGH);
   digitalWrite(3, LOW);
   digitalWrite(4, LOW);
   digitalWrite(5, HIGH);
   digitalWrite(6, HIGH);
   digitalWrite(7, LOW);
   digitalWrite(8, HIGH);
   break;
   case 5:// when count value is 5 show”5” on disp
   digitalWrite(2, HIGH);
   digitalWrite(3, HIGH);
   digitalWrite(4, LOW);
   digitalWrite(5, HIGH);
   digitalWrite(6, HIGH);
   digitalWrite(7, HIGH);
   digitalWrite(8, LOW);
   break;
   case 6:// when count value is 5 show”5” on disp
   digitalWrite(2, HIGH);
   digitalWrite(3, HIGH);
   digitalWrite(4, HIGH);
   digitalWrite(5, HIGH);
   digitalWrite(6, HIGH);
   digitalWrite(7, HIGH);
   digitalWrite(8, LOW);
   break;
   case 7:// when count value is 5 show”5” on disp
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  break;
  case 8:// when count value is 8 show”8” on disp
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  break;
  case 9:// when count value is 8 show”8” on disp
   digitalWrite(2, HIGH);
   digitalWrite(3, HIGH);
   digitalWrite(4, LOW);
   digitalWrite(5, HIGH);
   digitalWrite(6, HIGH);
   digitalWrite(7, HIGH);
   digitalWrite(8, HIGH);
  break;
break;
  }
}

Algoritmo 1: Código del programa conteo regresivo con visualizador de 7 segmentos.

  • Al terminar el desarrollo del programa, se debe compilar el programa para verificar si existen errores dentro del código. Luego si no existen errores se puede cargar el código en la tarjeta Arduino para que esta lo ejecute.

Implementación del algoritmo 1 en el simulador TinkerCad:

https://www.tinkercad.com/things/77e2u6F7JPG

Si tuviste problemas haciendo la práctica, o tienes algún comentario te invitamos a comentar este post.

19.4 Conclusión:

En la práctica hemos aprendido como programar un visualizador LED de 7 segmentos. Además, hemos usado subrutinas para simplificar el código en el lazo principal. Tambien hemos empleado lazo for para visualizar un conteo regresivo de 9 a 0. La práctica puede ser desallorrada virtualmente en el enlace tinkercad indicado.

Si nuestro contenido te fue de utilidad, por favor considera dar tu apoyo a lo que hacemos: