Número de la suerte

Prácticas Módulo 7-segmentos

Título de la práctica:Número de la suerte
Objetivo:El alumno codificará un programa en Arduino que visualice una variable contador y una variable acumulador en un display de 7 segmentos controlado por 4 botones pulsadores.
Tiempo estimado:100 minutos
Nivel de dificultad:Intermedio

Introducción

¿Conoces los juegos de números?  Son juegos que generalmente se utilizan para enseñar a los niños a contar y sumar, uno de esos juegos es calcular el número de la suerte. 

El número de la suerte consiste en sumar los dígitos de nuestra fecha de nacimiento.  Si al sumar los dígitos obtenemos un número de dos cifras, se  suman nuevamente los dígitos hasta obtener una cifra de un dígito (entre el 1 y el 9) que corresponde al número de la suerte. ¿Que te parece si utilizamos el display de 7 segmentos y programamos el juego del número de la suerte ? ¿Cuál es tu número de la suerte?

En esta práctica  se programa el display de 7 segmentos utilizando dos tipos de variables:

  1. Una variable contador  que muestra el aumento o disminución de su valor.
  2. Una variable acumulador que  permite ir acumulando la suma de cada dígito de la fecha de nacimiento. .

Materiales

Programas

Arduino IDE. Disponible en: https://www.arduino.cc/en/software

Desarrollo

Vamos a iniciar analizando qué se debe hacer para resolver el problema. El juego del número de la suerte comienza con una fecha de nacimiento como se muestra a continuación:

Figura1. Fecha de nacimiento

Procedimiento:

  1. Se tiene la fecha 15 de octubre de 1999, tomamos en cuenta cada dígito de la fecha y lo convertimos en una suma: 1+5+1+0+1+9+9+9 = 35
  2. Cómo el resultado es un número de dos cifras, repetimos el proceso de la suma para obtener un valor de un dígito: 3 + 5=8
  3. La suma final nos muestra el número de la suerte: 8

Para la creación del juego  del número de la suerte se utilizará el módulo 7 segmentos conectado a la tarjeta Arduino. El funcionamiento de los botones del módulo de 7 segmentos para recrear el juego es el siguiente 

Figura 2. Funcionamiento de botones del Display 7 segmentos.

De acuerdo a la siguiente información  podemos identificar  las entradas, los procesos y las salidas del programa los cuales se muestran en la Tabla 1.

EntradaProcesosSalida
Dígito de la fecha de nacimientoAumentar una variable contador Número de la suerte
Estado del botón presionadoDisminuir una variable contador
Mostrar variable contador en el display
Validar variable contador
Sumar cada dígito a una variable acumulador
Validar si el número de la suerte es mayor de 2 dígitos
Descomponer en dígitos el número de la suerte y sumarlos
Mostrar el número de la suerte en el display
Tabla 1 Especificación de datos de entrada, procesos y datos de salida del programa número de la suerte.

Para realizar la práctica, si no se cuenta con el Módulo de 7 segmentos, puedes realizar el circuito que se muestra a continuación que corresponde a la práctica del número de la suerte:

Figura 3. Circuito práctica número de la suerte

De acuerdo al circuito electrónico, los segmentos del display  están conectador a un pin de la placa Arduino, para visualizar un número en el display es necesario indicar el segmento que se debe encender  (HIGH). Por lo tanto, se debe manejar el número del pin y su estado (HIGH o 1) valores que es más fácil manipular si se almacenan en arreglos  y se declaran como valores constantes. Si no estás familiarizado con el manejo de arreglos, te sugerimos realizar primero la práctica Arreglos bidimensionales del Manual de Programación con Arduino).

Declaración del arreglo PINES

Los pines del Arduino que están enlazados a cada segmento del display son 6, 7, 8, 9, 10, 11 y 12 (Figura 3). Para manipularlos vamos a almacenarlos en un arreglo  unidimensional de enteros.  Realiza el ejercicio 1 que te apoyará en la  declaración  el arreglo PINES. Puedes apoyarte del circuito electrónico (Figura 3).

Ejercicio 1. Declaración del arreglo PINES

Declaración del arreglo DIGITOS

Los dígitos que encienden cada segmento del display de 7 segmentos y que formarán cada uno de los números del 0 al 9 se pueden almacenar en un arreglo bidimensional llamado DIGITOS de tipo byte con una longitud de [10] [8]. La siguiente tabla muestra la configuración de los segmentos para cada número del 1 al 9 . 

Figura 4. Tabla de valores por segmento para el display

Realiza el siguiente ejercicio para apoyarte en la declaración del arreglo DIGITOS.

Ejercicio 2. Declaración del arreglo DIGITOS

Declaración de variables

De acuerdo a la tabla 1, requerimos identificar cada dato que se utiliza en la programación, ya sean datos de entrada, de proceso o de salida. A continuación te proponemos el identificador de variable y el tipo de dato y la utilidad de las  variables que utiliza el programa número de la suerte.

VariableTipo de datoFunción
colenteroPermite llevar el índice de las columnas de los arreglos PINES y DIGITOS
valBtn0enteroGuarda el estado del botón B0
valBtn1enteroGuarda el estado del botón B1
valBtn2enteroGuarda el estado del botón B2
valBtn3enteroGuarda el estado del botón B3
vContadorenteroNúmero desplegado en el display y almacén temporal del dígito seleccionado
numSuerteenteroGuarda el cálculo del número de la suerte
numeroentero Guarda el número de la suerte de 2 cifras

Tabla2. Variables de práctica número de la suerte

Ahora resuelve el ejercicio para codificar las variables.

Ejercicio 3. Declaración de variables

Configuración de los pines de conexión del display 7 segmentos

Vamos  a  configurar el modo de comportamiento de los pines del display que se encuentran almacenados en el arreglo PINES[]. Responde las siguientes preguntas que te orientarán para codificar las instrucciones de Arduino correspondientes.

Ejercicio 4. Configuración de los pines de conexión del display de 7 segmentos/

Activación y configuración del pin del transistor NPN.

El transistor NPN  es el componente que  permite activar o desactivar el display de 7 segmentos. Para su uso configuramos  el pin al cual está conectado el transistor como una salida y posteriormente activar el display. De acuerdo a la Figura 3, ¿cuál es la respuesta correcta?

Ejercicio 4.1, 4.2 y 4.3 Activación y configuración del  pin del transistor NPN.

Configuración de los pines de conexión de los botones pulsadores

Para utilizar un botón pulsador debemos configurar el pin de la tarjeta Arduino al que está conectado en modo entrada. Vamos a  configurar los botones pulsadores (B0, B1, B2, B3), recuerda que por default, un botón pulsador tiene el valor 0 (LOW) y cuando es presionado cambia su valor por 1 (HIGH). Revisa el diagrama del circuito (Figura 3) para identificar a que pin esta conectado cada botón y resuelve el ejercicio:

Ejercicio 5. Configuración de los pines de conexión de los botones pulsadores

 Lectura del estado de cada botón pulsador.

A continuación, vamos a programar las instrucciones para realizar la lectura del estado de cada botón.  Para la lectura vamos a utilizar las variables  valBtn0, valBtn1, valBtn2 y valBtn3  que se declararon con el propósito de  guardar el estado del botón.  Cada botón esta conectado a un pin que configuraste como entrada (ejercicio 5) y cuyo valor será almacenado en la variable valBtn#. Realiza el ejercicio para apoyarte a codificar  las instrucciones:

Ejercicio 6. Lectura del estado de un botón

Comparación  del estado de un botón

Ahora que ya tenemos la lectura del estado de cada botón podemos determinar cuál de los cuatro botones cambio a estado HIGH. Recuerda que el estado del  botón pulsador es LOW (0),  y solo si se presiona el botón pulsador su estado cambia a HIGH (1). Para saber qué botón cambio de estado realizamos una comparación entre el valor de la variable valBtn#  y el valor  HIGH.

Ejercicio 7. Comparación del estado del botón .

Conociendo el estado de cada botón, podemos codificar las acciones que cada uno debe realizar. Vuelve a revisar la figura 2 para recordar las acciones de cada botón, te percatarás que algunos comparten los mismos procesos.  Los procesos de los botones pulsadores son:

Incremento decremento de la variable contador

Un contador es una variable de tipo  entero que se utiliza para llevar la cuenta de las veces que ocurre un suceso. Tanto el botón B1 y B2 utilizan la variable vContador que aumenta o disminuye su valor dependiendo el valor que se requiere desplegar en el display. En el siguiente ejercicio se codifica la variable contador para aumentar o disminuir un número. 

Ejercicio 8. Incremento/decremento de la variable contador

Validar e inicializar la variable contador

Una vez codificado el incremento o decremento, es necesario verificar que la variable vContador incremente hasta el número 9 como máximo o que disminuya hasta el 0 como valor mínimo. Un valor mayor a 9 o menor que 0 no se puede  visualizar en el display de 7 segmento.

Realiza el siguiente ejercicio para codificar las instrucciones que permitan validar e inicializar la variable contador a 0 si se cumple lo siguiente:

  1. Que en el display se muestre el número 9 y se siga presionando el botón de aumento (B02).
  2. Que en el display se muestre el número 0 y se siga presionando el botón de decremento  (B1).

Ejercicio 9. Validar e inicializar la variable contador 

Visualización de la variable contador 

Muy bien, ya codificamos las instrucciones de la sentencia  if then en caso de que la variable vContador exceda los límites de 9 o 0 ¿Qué pasa si no se cumple la condición? entonces se debe codificar las instrucciones de la sentencia  else  que consiste en visualizar la variable vContador en el display de 7 segmentos Para la visualización, vamos a utilizar los dos arreglos que declaramos cómo contantes, el arreglo DIGITOS y el arreglo PINES. Revisa la siguiente figura que te ayudará a recordar su configuración y la relación que guardan con el display de 7 segmentos:

Figura 6. Configuración de arreglos PINES y DIGITOS

Observa bien cómo el valor de la variable vContador  es  igual al índice de la fila del arreglo DIGITOS (la configuración de los segmentos del display que se deben encender) por lo que es necesario realizar un recorrido por la fila correspondiente:

Ejercicio 10. Recorrido de la fila del arreglo DIGITOS

Ya codificamos la estructura for para hacer el recorrido por filas del arreglo DIGITOS, ahora  falta codificar la instrucción que  indica el pin (almacenados en el arreglo PINES)  conectado al segmento a encender  del display para visualizar el número de la variable vContador

Ejercicio 11.  Encendido de los segmentos display 

Muy bien, ya codificaste las instrucciones de la sentencia else del ejercicio 8.

Generación de la variable acumulador

Una vez que se muestre en el display  un dígito de la fecha de nacimiento que se  requiere considerar para calcular el número de la suerte, se presiona el botón B3  para  sumar cada dígito y calcular el número de la suerte. Para este proceso utilizamos una variable acumulador que es una variable  que va cambiando su valor sumando  distintas cantidades y guardando el total.  Una variable acumulador tiene las siguientes características

  • Se inicializa a un valor inicial: a 0 si es una suma o a 1 si es un producto.
  • Se acumula un valor intermedio (Puede ser en aumento o en disminución).

En el ejercicio  3  se hizo la declaración de  la variable  acumulador numSuerte  y se inicializó con valor en 0, ahora veamos cómo se codifica:

La sintaxis de una variable acumulador  es la siguiente:

varAcumulador=varAcumulador+num;

Parámetros

varAcumulador – variable que acumula diferentes cantidades.

num – cantidad que se le suma o se le resta.

Tomando en cuenta la sintaxis, vamos a considerar que la variable acumulador puede tanto aumentar  su valor (como el caso del número de la suerte)  como disminuir (cuando disminuyes una deuda por un pago). 

Para la práctica se requiere que cada vez que se presione el botón B3, se sume el número que se muestra en el display (vContador) a la variable acumulador (numSuerte). La instrucción que se requiere es la siguiente: 

numSuerte = numSuerte + vContador;

Validación de la variable acumulador 

El número de la suerte es un valor de un dígito, por lo que es necesario validar que la variable  numSuerte cumpla con esta condición. Cuando la suma total de los dígitos de la fecha de nacimiento es un número de 2 cifras o más (un número mayor a 9) es necesario  repetir el proceso de sumar los dígitos hasta que el resultado sea un número de un dígito. 

Ejercicio 12. Validar  variable numSuerte 

Simplificar a un dígito el número de la suerte

Cuando el número de la suerte es un valor superior a 9, debemos sumar nuevamente cada dígito hasta que el número de la suerte sea una cifra de un dígito. ¿Qué proceso puede auxiliar a descomponer un número en dígitos para sumarlos nuevamente?. Revisa la siguiente imagen que te puede dar una idea del  proceso  a realizar:

Figura 5. Descomponer una cantidad en dígitos
Figura 6. Descomponer número en dígitos

¿Qué operación matemática nos muestra la imagen?  ¡Así es!, una división nos permitirá  obtener cada uno de los dígitos y después sumarlos. Lee con atención el procedimiento:

  1. Guardamos el valor de numSuerte en una variable auxiliar.
  2. Inicializamos la variable numSUerte a 0
  3. Dividimos el valor de la variable auxiliar entre 10 y el resultado lo acumulamos a numSuerte
  4. Dividimos el valor de la variable auxiliar entre 10 y el residuo lo acumulamos a numSuerte

Se realiza todo el procedimiento hasta que numSuerte sea un valor de un dígito.

Ahora que ya conocemos el proceso para obtener los dígitos de un número, contesta el ejercicio 12 que te ayudará a codificar las instrucciones:

Ejercicio 13. Simplificar a un dígito el número de la suerte.

Visualización de la variable numSuerte  en el display

Revisa nuevamente la figura 6, ¿A qué número esta señalando la etiqueta de la variable numSuerte?, Así es, al índice de las  columnas del  arreglo DIGITOS. ¿Recuerdas cómo codificaste la visualización de la variable vContador?, pues el procedimiento es muy similar 

Para visualizar el número de la suerte en el display realizamos también un recorrido por la fila del arreglo DIGITOS (ejercicio 12) modificando sólo un poco la instrucción para el encendido de los segmentos del display.  Realiza el ejercicio para la codificación: 

Ejercicio 14.  Encendido del número de la suerte 

Codificación del programa de Arduino

Muy bien, ahora ya podemos codificar todo el programa y escribir en la función setup las instrucciones de configuración de los pines de la tarjeta Arduino, la inicialización o activación de los dispositivos y en la función  loop el código que  se ejecutará de manera repetitiva  mientras la tarjeta Arduino permanezca encendida. 

Para la codificación de las instrucciones de cada botón, te recomendamos consultar la siguiente imagen que te ayudará a comprender la lógica de las instrucciones de cada botón. 

Es el momento de unir todas las instrucciones de Arduino que hemos identificado para la solución del problema en un solo programa. Para ello, sustituye el texto << bloque de instrucciones Ejercicio n >> con las instrucciones que codificaste en el ejercicio de la práctica indicado.

/* Práctica número de la suerte
* Programa que calcula un número de la suerte
* y lo muestra en el display de 7 segmentos

//Declaración e inicialización del arreglo unidimensional PINES
<< bloque de instrucciones ejercicio 1 >>

//Declaración e inicialización del arreglo bidimensional DIGITOS
<< bloque de instrucciones ejercicio 2 >>

// declaración de las variables utilizadas en el programa
<< bloque de instrucciones ejercicio 3 >>

void setup() {

// Configuración de los pines de conexión del arreglo PINES como salida
<< bloque de instrucciones ejercicio 4 >>

// Configuración de pines de conexión de los botones pulsadores
<< bloque de instrucciones ejercicio 5 >>

//Configuración del pin de conexión del transistor de salida
<<bloque de instrucciones Ejercicio 4.2>>

  //Activación del display de 7 segmentos
<<bloque de instrucciones Ejercicio 4.3>>
}

void loop() {

// Lectura del estado de cada botón pulsador
<< bloque de instrucciones ejercicio 6 >>

//Código Botón0
// Comparación del estado del botón0
<< bloque de instrucciones ejercicio 7 >> {

//Ciclo para validar que numSuerte no excede 2 dígitos

<< bloque de instrucciones ejercicio 13 >> {
} // fin ciclo while
// Ciclo para recorrer las columnas del arreglo DIGITOS[][]
<<bloque de instrucciones ejercicio 10>>

// Encendido de los segmentos del display con valores[numSuerte][columna]

<<bloque de instrucciones ejercicio 14>>
delay (500);
numSuerte = 0;
} // Fin Botón0

// Codificación botón1
// Comparación del estado del botón1
<< bloque de instrucciones ejercicio 7 >> {

//Decremento variable contador
<< bloque de instrucciones ejercicio 8 >>

//Validación e inicialización de la variable contador
<< bloque de instrucciones ejercicio 9 >>

else {
// Ciclo para recorrer las columnas del arreglo DIGITOS[][]
<<bloque de instrucciones ejercicio 10>>
// Encendido de los segmentos del display con valores[vContador][columna]
<<bloque de instrucciones ejercicio 11>>
}
delay (500);
} // Fin Botón1

// Codificación botón2
// Comparación del estado del botón2
<< bloque de instrucciones ejercicio 7 >> {

//Incremento de la variable contador
<< bloque de instrucciones ejercicio 8 >>

//Validación e inicialización de la variable contador
<< bloque de instrucciones ejercicio 9 >>

else {
// Ciclo para recorrer las columnas del arreglo DIGITOS[][]
<<bloque de instrucciones ejercicio 10>>
// Encendido de los segmentos del display con valores[vContador][columna]
<<bloque de instrucciones ejercicio 11>>
}
delay (500);
} // Fin Botón2

//Codificación Boton3
// Comparación del estado del botón3
<< bloque de instrucciones ejercicio 7 >> {
numSuerte = numSuerte + vContador;
delay (200);
} // Fin Botón3


Captura, compila y ejecuta tu programa. Para ello, realiza las siguientes acciones:

  1. Abre el IDE de Arduino.
  2. Crea un nuevo sketch.
  3. Captura las instrucciones del programa.
  4. Guarda tu programa.
  5. Compila tu programa. En caso necesario, depúralo hasta que no tenga ningún error.
  6. Conecta la tarjeta Arduino a tu computadora.
  7. Selecciona el puerto serial (COM) de la computadora asociado a la tarjeta.
  8. Sube el programa a la memoria de la tarjeta Arduino UNO.
  9. Ejecuta tu programa.

Resultados 

Vamos a analizar los resultados de tu programa. Para ello, vamos a dar las siguientes fechas:

No. de pruebaFecha de nacimiento Dígitos a insertarNúmero de la suerte
115/septiembre/18101+5+9+1+8+1+0
220/noviembre/19102+0+1+1+1+9+1+0
214/febrero/20211+4+2+2+0+2+1

Recuerda entre fecha y presionar el botón de reinicio de la tarjeta Arduino UNO para detener  el programa que actualmente se está ejecutando y lo ejecute nuevamente desde su inicio.

Agrega una nueva fila a la tabla  y proporciona tu fecha de nacimiento. ¿Cuál es tu número de la suerte?

Conclusiones

Un acumulador es  una variable de tipo entero o real que que va sumándose así misma cierta cantidad. Son muchas las aplicaciones que pueden tener las variables acumuladores,  se utiliza principalmente en el cálculo de series matemáticas, en la vida cotidiana como la creación de un ticket de compra entre otros tipos de problemas.  

Con el concepto de contador y acumulador en mente, responder a las preguntas siguientes: 

  1. Es posible programar diferentes variables acumulador o contador en un programa para diferentes acciones?
  2. ¿Puede una variable acumulador restar valores a sí misma? Justifica tu respuesta
  3. ¿Qué otras aplicaciones de la vida cotidiana se puede utilizar una variable acumulador?
  4. Indica ¿qué conocimientos aprendiste con esta práctica?

Reto Arduino

Modifica el programa del número de la suerte para que en lugar de sumar los dígitos de cada fecha de nacimiento, los multiplique.

Referencias

Arduino. (2021). Language Reference. https://www.arduino.cc/reference/en/

CACJ(s/f) Contadores y acumuladores. El proceso de la programación. http://www3.uacj.mx/CGTI/CDTE/JPM/Documents/IIT/repetitivas/contadores.html

Bañuelos, M., Pacheco, M. y Villegas, R. (2021). Módulo 7-segmentos. Manual de Usuario.