1
Entrega Final Proyecto
Termómetro Digital de 7 Segmentos
Politécnico Gran Colombiano
Ingeniería de Software.
Sistemas Digitales y Ensambladores.
Luis Guillermo Cruz Quilindo.
2023.
2
Tabla de Contenidos
Capítulo 1 Introducción .................................................................................................................. 3
1. Proposito ................................................................................................................................. 4
2. Requisitos y componentes ...................................................................................................... 4
3. Definiciones ............................................................................................................................ 5
4. Desarrrollo .............................................................................................................................. 6
5. Programacion .......................................................................................................................... 7
6. Display de 7 segmentos .......................................................................................................... 7
7. Componentes/Materiales de trabajo...................................................................................... 13
8. Lenguaje de Programacion ................................................................................................... 15
9. Explicacion ........................................................................................................................... 17
10. Simulador TinkerCAD ........................................................................................................ 21
11. Programacion ........................................................................................................................ 7
Conclusion……………………………………………………………………………………….28
Referencias……………………………………………………………………………………….28
Figuras
Figura 1. SN7404 ........................................................................................................................ 5
Figura 2. Termometro Digital ..................................................................................................... 6
Figura 3. 7 Segmentos ................................................................................................................ 7
Figura 4. Identificacion de Segmentos de Display ..................................................................... 8
Figura 5. Pines Display ............................................................................................................... 8
Figura 6. Asociacion de Pines y Segmentos ............................................................................... 9
Figura 7. Pines Árduino ............................................................................................................ 11
Figura 8. Anodo-Catodo ........................................................................................................... 12
Figura 9. Anodo Comun ........................................................................................................... 14
Figura 10. Pin 3 Conexion ........................................................................................................ 15
Figura 11. Diseño ...................................................................................................................... 25
Figura 12. Plano ........................................................................................................................ 26
Figura 13. Lista de Componentes ............................................................................................. 26
Figura 14. Evidencia ................................................................................................................. 27
3
Introducción
El termómetro digital es un instrumento muy utilizado en las industrias y en muchas
actividades relacionadas con la I+D y el análisis técnico-científico. La magnitud de la
temperatura es pocas veces la variable resultada, pero casi siempre es influyente en el
resultado final por lo que una buena medida y control de la temperatura es un factor
decisivo para que los resultados sean los deseados.
El termómetro digital lo conforma una cadena termométrica compuesta por una sonda
de temperatura con sensor de termopar, de termorresistencia (Pt100 p.e.) o de termistor y
un indicador digital. En función del sensor utilizado el indicador digital debe tener una
tecnología integrada u otra.
Proyecto para realizar es un termómetro con salida a display de LCD, su salida se
muestra en un display de módulos de 7 segmentos.
4
1. Propósito
Implementaremos un termómetro digital utilizando un display de siete segmentos, en
este definiremos los materiales a utilizar con su correspondiente descripción y utilización
del mismo definiremos la metodología a aplicar y su desarrollo correspondiente.
2. Requisitos y componentes.
Para llevar a cabo nuestro proyecto debemos tener claro los componentes como lo son
sus características, método de utilización y su propósito.
Como primera medida se realizará uso de un sensor de temperatura LM35, un
controlador PIC16F877 a un display de 7 segmentos de cuatro dígitos y el uso de
programación para definir y establecer sus variables.
Definición de sensor LM35: Sensor e temperatura analógico con buenas prestaciones,
económico, sencillo de usar, dimensiones reducidas. Permite medir temperatura en un
rango desde -55ºC hasta 150ºC. Su salida es de tipo analógica y lineal con una pendiente
de 10mV/ºC.
Controlador PIC16F877a: El Microcontrolador PIC16F877A-I/P funciona para poder
efectuar y/o controlar otros dispositivos, algunas de sus aplicaciones son automatización
y control de procesos, comunicaciones y red, electrónica de consumo, diseño embebido y
desarrollo, multimedia, dispositivos portátiles, robótica, instrumentación o seguridad.
Display de 7 Segmentos de cuatro dígitos: Los displays de 7 segmentos consisten en
una serie de LEDs colocados para formar números. Estos LEDs se controlan a través de
los pines de la pantalla (1-12). Los grupos de LEDs o dígitos se activan a través de los
5
pines D1,D2,D3,D4 y los LEDs se encienden a través de los pines A,B,C,D,E,F,G y DP
para el punto decimal.
3. Definiciones.
Lectura analógica: Quiere decir que la información, la señal, para pasar de un valor a
otro pasa por todos los valores intermedios, es continua. La señal digital, en cambio, va
“a saltos”, pasa de un valor al siguiente sin poder tomar valores intermedios. Una señal
analógica es continua, y puede tomar infinitos valores.
PIN RA: Son salidas de tipo push-pull o entradas de tipo TTL.
Programa Proteus: Proteus es una aplicación para la ejecución de proyectos de
construcción de equipos electrónicos en todas sus etapas: diseño del esquema electrónico.
Circuito integrado de compuertas inversoras que es el 7404: Circuito integrado de
compuerta NOT de seis entradas. Una compuerta NOT, también conocida como inversor,
tiene una sola entrada y una salida. La salida de una compuerta NOT es el inverso de la
entrada. Si la entrada es 1, la salida será 0.
Figura 1: SN7404
6
4. Desarrollo.
La salida de nuestro sensor de temperatura es una salida analógica que está en el orden
de milivoltios. Esta salida analógica la vamos a conectar al pin RA cero.
Una vez que nosotros hayamos obtenido la lectura de esta señal analógica, la vamos a
convertir en su valor en temperatura mediante programación. Sí, entonces vamos a
enviar, esa ese valor de temperatura a nuestro display de 7 segmentos de cuatro dígitos
mediante el puerto c, pero del puerto c vamos a utilizar solo 7 pines, ya sabemos que
nuestro display al ser de 7 segmentos necesita 7 bits. Eso quiere decir que solo se va a
encender un dígito a la vez. ¿Cómo vamos a hacer para que se enciendan los cuatro
dígitos? Tenemos que hacer uso de la multiplicación para hacer uso de la multiplicación,
vamos a hacer uso del pin RB, el cual es puerto b , el cual nos va a dar una
multiplexación de encendido de cada bit cada dos microsegundos aproximadamente.
Figura 2: Termómetro Digital
7
5. Programación.
LaSe manejara en C, para ello se debe definir es la inclusión de los microcontroladores
en este caso el PC16F877, debemos definir la directiva que se va a utilizar en el
convertidor analógico digital y su correspondiente resolución posterior a ello
configuramos bits y los heartz, se debe investigar en programación de alto y bajo voltaje
y dejar la programación con código abierto.
A medida que se desarrolle el mismo alimentaremos este proyecto con el fin de
concluir de forma exitosa.
6. Display de 7 segmentos
Como lo mencionábamos en la entrega 1 este componente es uno de los que tienen 7
segmentos LEDs, es decir mas un led que hará de punto, el punto nos indica como
colocar el display.
Figura 3: 7 Segmentos
8
Existen dos tipos de displays de 7 segmentos, los que son ánodo y cátodo comunes.
El ánodo leds comparten un mismo ánodo y en los cátodos leds comparten un mismo
cátodo.
Figura 4: Identificacion de segmentos de
display.
Esta es la identificación de cada segmento LED con una letra, la imagen anterior tiene
10 pines, ahora lo que hacemos es identificar los pines.
Figura 5: Pines Display, fijarse en el punto parte inferior
Asociación de los PINES a cada segmento LED
9
Figura 6: Asociación de pines /Segmentos.
Tabla
Pines Segmentos
1 E
2 D
4 C
6 B
7 A
9 F
10 g
Con respecto a los pines faltantes los cuales son 3,5 y 8, el pin 5 va conectado al punto
que indica la orientación del display (parte inferior derecha), con respecto a los otros dos
pines estos funcionan como cátodo y ánodo, esto depende del display que se este
utilizando, se utiliza solo uno y trata de pines redundantes.
10
Relacionemos en tabla final
Pines Segmentos
1 E
2 D
3 Ánodo/cátodo común
4 C
5 Ánodo/cátodo común
6 B
7 A
8 Ánodo/cátodo común
9 F
10 g
Ya se tiene los pines con sus segmentos el cual es el circuito eléctrico interno.
Números para mostrar en Display
Para dar claridad al tema debemos pensar en como podemos generar la unión de las
líneas o segmentos a iluminar para obtener un número, por ejemplo si quiero mostrar el
numero 4 debo activar los segmentos f,g,b y c y dejar en off el resto de segmentos.
11
Figura 7: Pines Arduino.
Ahora si se tiene la relación de los pines Arduino solo se tendría que poner en estado
alto (HIGH) o bajo (LOW).
Display de 7 segmentos.
Para saber si pose un ánodo común la prueba más sencilla es colocar el pin 3 o el pin 8 a
una alimentación de 3,3 V o 5 Vy el pin 5 a tierra.
Si se tiene un display ánodo común, la corriente pasara y se iluminará el punto, ahora si
es un display del tipo cátodo común, no se encenderá el LED, debo recordar en un led la
corriente fluye en un único sentido.
12
Figura 8: Ánodo/Catodo
• Voltaje
Voltaje de operación del componente. Esto deberíamos de verlo en la hoja de
característica técnicas de cada modelo. Lo típico es que funcione entre 1,8 V y 2,2
V (funcionamiento normal de un LED). Utilizando la Ley de Ohm, podemos
calcular la resistencia que necesitamos para los dos casos, el mínimo (1,8 V) y el
máximo (2,2 V).
Voltaje 1,8 V:
Voltaje 2,2 V:
13
7. Componentes / Material de Trabajo
- 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
Circuito en Protoboard Cátodo Común/ Ánodo Común
Cátodo Común
14
Figura 9:Ánodo Común
15
Figura 10: Pin 3
conexion
La única diferencia de estos dos montajes es la conexión del pin numero 3.
8. Lenguaje de programación
Primero daremos términos en la lógica, primero realizaremos el algoritmo, pasoso
a seguir.
1. Leemos pulsador
1.1 Obtenemos Numero Aleatorio
16
1.2 Mostramos el numero en el display
1.3 Esperams un tiempo hasta permitir otra jugada
2. Si esta en estado abajo
2.1. No hacemos nada
Lenguaje de programación
1 // Constantes pines
2 #define PULSADOR 2
3
4 // Array multidimensional para mostrar los números
5 byte numero[10][8] =
6{
7 { 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
8 { 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
9 { 1, 1, 0, 1, 1, 0, 1, 0 }, // 2
10 { 1, 1, 1, 1, 0, 0, 1, 0 }, // 3
11 { 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
12 { 1, 0, 1, 1, 0, 1, 1, 0 }, // 5
13 { 1, 0, 1, 1, 1, 1, 1, 0 }, // 6
14 { 1, 1, 1, 0, 0, 0, 0, 0 }, // 7
15 { 1, 1, 1, 1, 1, 1, 1, 0 }, // 8
16 { 1, 1, 1, 0, 0, 1, 1, 0 } // 9
17};
18
19void setup() {
20 // Iniciamos el monitor serie
21 Serial.begin(9600);
22
23 // Ponemos los pines de los segmentos en modo OUTPUT (salida)
24 for (int i = 3; i < 10; i++)
25 {
26 pinMode(i, OUTPUT);
27 }
28
29 // Ponemos el pin del pulsador en modo INPUT (entradda)
30 pinMode(PULSADOR, INPUT);
31
32 //Establecemos la semilla fija
33 randomSeed(analogRead(A0));
34}
35
36void loop() {
37 // Leemos el valor del pulsador
38 int valor = digitalRead(PULSADOR);
39
40 // Si está pulsado
41 if (valor == HIGH)
42 {
17
43
44 //Genera un numero aleatorio entre 1 y 6
45 int randomNumber = random(1, 7);
46
47 // Ponemos los pines en estado correcto para mostrar el número randomNumber
48 for (int e = 0; e < 8; e++)
49 {
50 digitalWrite(e + 3, numero[randomNumber][e]);
51 }
52
53 delay(500);
54 }
55}
9. Explicación
El siguiente declara la constante pulsador
1// Constantes pines
2#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].
18
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).
1 // Array multidimensional para mostrar los números
2 byte numero[10][8] =
3{
4 { 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
5 { 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
6 { 1, 1, 0, 1, 1, 0, 1, 0 }, // 2
7 { 1, 1, 1, 1, 0, 0, 1, 0 }, // 3
8 { 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
9 { 1, 0, 1, 1, 0, 1, 1, 0 }, // 5
10 { 1, 0, 1, 1, 1, 1, 1, 0 }, // 6
11 { 1, 1, 1, 0, 0, 0, 0, 0 }, // 7
12 { 1, 1, 1, 1, 1, 1, 1, 0 }, // 8
13 { 1, 1, 1, 0, 0, 1, 1, 0 } // 9
14};
El anterior array solo sirve para cátodo común.
Función setup
En esta función tenemos que establecer las condiciones iniciales. Lo primero es iniciar el
monitor serie.
1void setup() {
2 // Iniciamos el monitor serie
3 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.
19
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 (entradda)
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
20
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.
1 //Genera un numero aleatorio entre 1 y 6
2 int randomNumber = random(1, 7);
3
4 // Ponemos los pines en estado correcto para mostrar el número randomNumber
5 for (int e = 0; e < 8; e++)
6 {
7 digitalWrite(e + 3, numero[randomNumber][e]);
8 }
9
10 delay(500);
11 }
12}
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).
1{ 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).
21
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).
10. Simulador tinkercad
int TMP = A0;
int dozens[7] = {7,8,9,10,11,12,13};
int units[7] = {0,1,2,3,4,5,6};
float sensorValue = 0;
void setup()
pinMode(TMP, INPUT);
for(int i = 0; i < 7; i++){
pinMode(units[i], OUTPUT);
pinMode(dozens[i], OUTPUT);
Serial.begin(9600);
}
22
void set(int a, int b, int c, int d, int e, int f, int g, int display[7])
digitalWrite(display[0],a);
digitalWrite(display[1],b);
digitalWrite(display[2],c);
digitalWrite(display[3],d);
digitalWrite(display[4],e);
digitalWrite(display[5],f);
digitalWrite(display[6],g);
void display(int num, int display[7])
switch(num)
case 0:
set(1,1,1,1,1,1,0,display);
break;
case 1:
set(0,1,1,0,0,0,0,display);
23
break;
case 2:
set(1,1,0,1,1,0,1,display);
break;
case 3:
set(1,1,1,1,0,0,1,display);
break;
case 4:
set(0,1,1,0,0,1,1,display);
break;
case 5:
set(1,0,1,1,0,1,1,display);
break;
case 6:
set(1,0,1,1,1,1,1,display);
break;
case 7:
set(1,1,1,0,0,0,0,display);
break;
case 8:
set(1,1,1,1,1,1,1,display);
break;
24
case 9:
set(1,1,1,0,0,1,1,display);
break;
default:
set(1,0,0,1,1,1,1,display);
break;
void loop()
sensorValue = analogRead(TMP);
float volt = sensorValue * 5.0 / 1023.0;
float temp = volt * 100 - 50;
// tolerancia temp (±)1
int tempDozens = (int)floor(temp/10);
int tempUnits = (int)round(temp) % 10;
//Serial.println(tempUnits);
if(temp >= 0 && temp <= 99){
display(tempDozens, dozens);
display(tempUnits, units);
}else{
25
display(-1, dozens);
display(-1, units);
Figura 11: Diseño Luis Guillermo Cruz
26
Figura 12: Plano
Figura 13:Lista de componentes.
27
Figura 14: Evidencias.
• https://www.tinkercad.com/things/fwT2HQJUtd9-termometro-digital-luis-
guillermo-
cruz/editel?sharecode=5OmrG2zvcwYSv6OEqqXtftn5vilqF04LEYu8_1PvRo0
• Circuit design Termómetro digital Luis Guillermo Cruz | Tinkercad
28
CONCLUSION
Una de las ventajas que tenemos de mostrar la información con un display de 7
segmentos, es que es muy sencillo y vistoso.
Proyecto finalizado a través de las plataformas como TinkerCAD, Metodos de utilizacion
del programa y sus funcionalidades.
Referencias
https://www.puntoflotante.net/TERMOMETRO7SEGMENTOS.htm
https://es.wikipedia.org/wiki/Term%C3%B3metro
https://concepto.de/termometro/
https://conceptoabc.com/termometro/
https://www.tinkercad.com/