Se diseñó un circuito para lectura de temperatura utilizando el sensor LM35 que muestra la lectura en 4 displays de siete segmentos mediante un multiplexor. El circuito se desarrolló con una tarjeta Arduino Uno que lee la señal del sensor LM35 y la muestra en los displays después de convertirla a grados centígrados.
LECTOR DE TEMPERATURA CON LM35 Y MULTIPLEXOR DE DISPLAY DE 7 SEGMENTOS CON ARDUINO
1. Ing. Fernando Marcos Marcos
1
LECTOR DE TEMPERATURA CON LM35 Y MULTIPLEXOR DE DISPLAY DE 7
SEGMENTOS CON ARDUINO
Marcos Marcos Fernando
fmarcos@uabc.edu.mx
RESUMEN: Se diseño un circuito para lectura de
temperatura utilizando el sensor LM35, la lectura se
mostro mediante un multiplexor en 4 displays de siete
segmentos (Ánodo y Cátodo Común), para el desarrollo
del proyecto se utilizo la tarjeta Arduino Uno con el
microcontrolador ATmega328P.
1 TEORIA
Sensor de temperatura de precisión LM35.
Los LM35 son dispositivos electrónicos de
precisión para lectura de temperatura con una salida de
voltaje linealmente proporcional a la temperatura en
centígrados. Estos son dispositivos que no requieren
calibración, estos proporcionan un amplio rango de
lecturas de temperatura, las cuales están entre -55ºC a
150ºC, teniendo una tolerancia en su medición de ±3/4
ºC sobre el rango.
Figura 1. Diagrama de bloques funcional del LM35.
Las especificaciones de precisión del LM35 son
proporcionales con respecto a una función de
transferencia lineal simple:
𝑉𝑜𝑢𝑡 = 10
𝑚𝑣
℃
𝑥 𝑇
Donde:
𝑉𝑜𝑢𝑡 = es la salida de voltaje del LM35
𝑇 = es la temperatura en ºC
La figura 2 muestra la función y configuración de
los pines de un LM35 utilizado en la práctica.
Figura 2. LP Pocket (Vista abajo) de un LM35.
Multiplexor
Multiplexar significa trasmitir una gran cantidad de
unidades de información por un número pequeño de
canales o líneas. Un multiplexor digital es un circuito
combinacional que selecciona información binaria de
una de muchas líneas de entrada para dirigirla a una
sola línea de salida. La selección de una línea de
entrada en particular es controlada por un conjunto de
líneas de selección. Normalmente hay 2n
línea de
entrada y n líneas de selección cuyas combinaciones de
bits determina cual entrada se selecciona.
Display de 7 segmentos
Los display de siete segmentos son una forma
grafica de representar los números decimales mediante
circuitos digitales tal y como se muestra en la figura 1.
Figura 3.
Hay dos tipos dos tipos de diseño de display,
aquellos con ánodo común y con cátodo común, ambos
se pueden ver en la figura 2.
Figura 4. Displayde 7 segmentos de ánodo común (lado
izquierdo) y cátodo común (lado derecho).
Existen muchos microcontroladores y plataformas
con microcontroladores disponibles para la computación
física. Parallax Basic Stamp, BX-24 de Netmedia,
Phidgets, Handyboard del MIT, y muchos otros ofrecen
funcionalidades similares. Todas estas herramientas
organizan el complicado trabajo de programar un
microcontrolador en paquetes fáciles de usar. Arduino,
además de simplificar el proceso de trabajar con
microcontroladores, ofrece algunas ventajas respecto a
otros sistemas a profesores, estudiantes y amateurs:
Las placas Arduino son más accesibles
comparadas con otras plataformas de
microcontroladores.
Multi-Plataforma
Entorno de programación simple y directo
Software ampliable y de código abierto
Hardware ampliable y de código abierto
2. Ing. Fernando Marcos Marcos
2
2 DESARROLLO
La realización de la práctica requiere el uso del
siguiente material y/o equipo.
- 1 Sensor de temperatura LM35
- 4 Display 7 segmentos de Ánodo Común
- 4 Display 7 segmentos de Cátodo Común
- 8 Resistencias de 220 Ohms
- Computadora
- Software Proteus Professional & Librerías
Simulino
- Plataforma de desarrollo
- Arduino Uno μc ATmega328P
- Protoboard
- Cable y pinzas peladoras
- Cable USB Arduino
- Fuente de Voltaje
- 2 pares de cable banana – caimán
El circuito diseñado es el mostrado en la figura 5,
cada uno de los puertos digitales del 0 al 7 están
conectados a una resistencia de 220 Ohms,las cuales a
su vez se conectan a un segmento de los displays.
Figura 5.
Tabla 1. Conexiones de Puertos digitales - Segmento
Puerto Segmento
0 DP
1 A
2 B
3 C
4 D
5 E
6 F
7 G
Tabla 2. Conexiones de puertos digitales – Comunes de
Displays
Puerto Comunes Display
8 Común Display 1 (D1)
9 Común Display 2 (D2)
10 Común Display 3 (D3)
11 Común Display 4 (D4)
Tabla 3. Conexión del puerto analógico – LM35
Puerto LM35
A0 PIN 2
La lectura de la señal y la conversión a
temperatura a grados centígrados se tiene que hacer
tomando en cuenta la función de transferencia lineal del
LM35. La función es la siguiente:
𝑉𝑜𝑢𝑡 = 10
𝑚𝑣
℃
𝑥 𝑇
Las entradas analógicas del arduino por default
tienen un voltaje de referencia máximo de 5V, lo cual
nos permitiría una lectura de temperatura de 0ºC A
500ºC, el arduino mapea el voltaje leído a un rango de 0
a1023 mediante un ADC interno, por lo tanto mediante
una regla de tres podemos obtener que 10mV
corresponde a una lectura analógica con resolución de
2.046, lo cual equivale a 1ºC, el cálculo se muestra a
continuación.
Regla de tres (Relación del Vout del LM35 con
respecto a la Lectura analógica del Arduino):
5000𝑚𝑉 → 1023
10𝑚𝑉 → 𝑋 (𝐿𝑒𝑐𝑡𝑢𝑟𝑎𝐴𝑛𝑎𝑙𝑜𝑔𝑖𝑐𝑎)
Calculo:
𝑋(𝐿𝑒𝑐𝑡𝑢𝑟𝑎𝐴𝑛𝑎𝑙𝑜𝑔𝑖𝑐𝑎) =
10𝑚𝑉 ∗ 1023
5000𝑚𝑉
𝑋(𝐿𝑒𝑐𝑡𝑢𝑟𝑎𝐴𝑛𝑎𝑙𝑜𝑔𝑖𝑐𝑎) =
1023
500
= 2.046 = 1℃
Por lo tanto la temperatura se obtendría median la
siguiente relación o regla de tres:
1℃ → 2.046
𝑇𝑒𝑚𝑝𝑒𝑟𝑎𝑡𝑢𝑟𝑎 → 𝐴𝑛𝑎𝑙𝑜𝑔𝑅𝑒𝑎𝑑(𝐴0)
Calculo:
𝑻𝒆𝒎𝒑𝒆𝒓𝒂𝒕𝒖𝒓𝒂 =
𝑨𝒏𝒂𝒍𝒐𝒈𝑹𝒆𝒂𝒅( 𝑨𝟎) ∗ 𝟏℃
𝟐. 𝟎𝟒𝟔
La ecuación de Temperatura es la que se utilizara
en la programación.
PRACTICA CON DISPLAY DE ANODO COMUN
La tabla de verdad utilizada para un display de
ánodo común se muestra en la tabla 4.
Tabla 4. Tabla de verdad Display AC
Segmentos
Numero a b c d e f g dp
0 1 0 0 0 0 0 0 1
1 1 1 1 1 0 0 1 1
2 0 1 0 0 1 0 0 1
3 0 1 1 0 0 0 0 1
4 0 0 1 1 0 0 1 1
5 0 0 1 0 0 1 0 1
6 0 0 0 0 0 1 0 1
7 1 1 1 1 0 0 0 1
8 0 0 0 0 0 0 0 1
9 0 0 1 0 0 0 0 1
DIGITAL(PWM~)
ANALOGIN
AREF
13
12
~11
~10
RX < 0
~9
8
7
~6
~5
4
~3
2
TX > 1
SIMULINO
ARDUINO
A0
A1
A2
A3
A4
A5
RESET
5V
GND
POWER
ATMEGA328P
ATMEL
www.arduino.cc
blogembarcado.blogspot.com
0
1
2
3
4
5
6
7
8
9
10
11
12
13
A5
A4
A3
A2
A1
A0
SIM1
SIMULINO UNO
-15.0
3
1
VOUT
2
U1
LM35
3. Ing. Fernando Marcos Marcos
3
El segmento dp se activara solo en el caso del
segundo display (de derecha a izquierda), un ejemplo
claro se muestra en la figura 6. Para el caso de un
displayde ánodo común,el segmento dp se activara con
un bajo digital o “0”.
Figura 6. Ejemplo de la funcionalidad del circuito.
Programación para display de ánodo común
void setup(){
DDRD=B11111111;
DDRB=B111111;}
void loop(){
int itemperatura=analogRead(A0)/2.046;
String stemperatura=String(itemperatura)+"C";
for(int i=0;i<stemperatura.length();i++){
switch(stemperatura[i]){
case '0':PORTD=B10000001;break;
case '1':PORTD=B11110011;break;
case '2':PORTD=B01001001;break;
case '3':PORTD=B01100001;break;
case '4':PORTD=B00110011;break;
case '5':PORTD=B00100101;break;
case '6':PORTD=B00000101;break;
case '7':PORTD=B11110001;break;
case '8':PORTD=B00000001;break;
case '9':PORTD=B00100001;break;
case 'C':PORTD=B10001101;break;
}
if(i==stemperatura.length()-2){PORTD=PORTD-B00000001;
}
int n=pow(2,stemperatura.length()-i-1)+.5;
PORTB=byte(n);
delay(5);
PORTB=B000000;
}
}
Análisis de la lógica de programación
1. Se realiza la lectura analógica y al mismo
tiempo se hace la conversión a grados
centígrados y se guarda en una variable de
tipo entero.
2. La temperatura calculada se convierte de
entero a string y se le concatena la letra “C”
referente a la unidad de temperatura utilizada.
3. Mediante la función length se determina la
cantidad de dígitos que tiene la cadena string,
el cual a su misma vez determina la cantidad
de veces que se repetirá el ciclo for.
4. El ciclo for permite separar cada digito de la
cadena (determina la salida que utilizara en los
puertos PortD) y determinar el display que se
activara (esto mediante la activación de los
puertos PortB).
5. Una vez mostrada la cadena string de la
lectura analógica el ciclo for se termina e inicia
el ciclo loop.
PRACTICA CON DISPLAY DE CATODO COMUN
La tabla de verdad utilizada para un display de
cátodo común se muestra en la tabla 5.
Tabla 5.
Segmentos
Numero a b c d e f g dp
0 0 1 1 1 1 1 1 0
1 0 0 0 0 1 1 0 0
2 1 0 1 1 0 1 1 0
3 1 0 0 1 1 1 1 0
4 1 1 0 0 1 1 0 0
5 1 1 0 1 1 0 1 0
6 1 1 1 1 1 0 1 0
7 0 0 0 0 1 1 1 0
8 1 1 1 1 1 1 1 0
9 1 1 0 1 1 1 1 0
El segmento dp se activara solo en el caso del
segundo display (de derecha a izquierda), un ejemplo
claro se muestra en la figura 6. Para el caso de un
display de cátodo común, el segmento dp se activara
con un alto digital o “1”.
Programación para display de cátodo común
void setup(){
DDRD=B11111111;
DDRB=B111111;}
void loop(){
int itemperatura=analogRead(A0)/2.046;
String stemperatura=String(itemperatura)+"C";
for(int i=0;i<stemperatura.length();i++){
switch(stemperatura[i]){
case '0':PORTD=B01111110;break;
case '1':PORTD=B00001100;break;
case '2':PORTD=B10110110;break;
case '3':PORTD=B10011110;break;
case '4':PORTD=B11001100;break;
case '5':PORTD=B11011010;break;
case '6':PORTD=B11111010;break;
case '7':PORTD=B00001110;break;
case '8':PORTD=B11111110;break;
case '9':PORTD=B11011110;break;
case 'C':PORTD=B01110010;break;
}
if(i==stemperatura.length()2){PORTD=PORTD+B00000001;
}
int n=pow(2,stemperatura.length()-i-1)+.5;
PORTB=B111111-byte(n);
delay(5);
PORTB=B111111;
}
}
Como se menciono anteriormente, las entradas
analógicas tienen por default un voltaje de referencia de
5V, pero este voltaje de referencia se puede cambiar a
1.1V mediante la función analogReference(INTERNAL),
lo cual para efectos de la practica nos permitirá aumentar
la resolución de las lecturas analógicas, por lo tanto una
medición de 10mV corresponderá una lectura analógica
con resolución de 9.3, este cambio en el voltaje de
referencia también nos limitaran a una temperatura de
DIGITAL(PWM~)
ANALOGIN
AREF
13
12
~11
~10
RX < 0
~9
8
7
~6
~5
4
~3
2
TX > 1
SIMULINO
ARDUINO
A0
A1
A2
A3
A4
A5
RESET
5V
GND
POWER
ATMEGA328P
ATMEL
www.arduino.cc
blogembarcado.blogspot.com
0
1
2
3
4
5
6
7
8
9
10
11
12
13
A5
A4
A3
A2
A1
A0
SIM1
SIMULINO UNO
150.0
3
1
VOUT
2
U1
LM35
4. Ing. Fernando Marcos Marcos
4
medición máxima de 110ºC. Los cálculos para
determinar la temperatura serán exactamente las
mismas utilizadas para un voltaje de referencia de 5V,
solo se cambiara los 5Vpor los 1.1V en los cálculos,tal y
como se muestra a continuación.
Regla de tres (Relación del Vout del LM35 con
respecto a la Lectura analógica del Arduino):
1100𝑚𝑉 → 1023
10𝑚𝑉 → 𝑋 (𝐿𝑒𝑐𝑡𝑢𝑟𝑎𝐴𝑛𝑎𝑙𝑜𝑔𝑖𝑐𝑎)
Calculo:
𝑋(𝐿𝑒𝑐𝑡𝑢𝑟𝑎𝐴𝑛𝑎𝑙𝑜𝑔𝑖𝑐𝑎) =
10𝑚𝑉 ∗ 1023
1100𝑚𝑉
𝑋(𝐿𝑒𝑐𝑡𝑢𝑟𝑎𝐴𝑛𝑎𝑙𝑜𝑔𝑖𝑐𝑎) =
1023
110
= 9.3 = 1℃
Por lo tanto la temperatura se obtendría median la
siguiente relación o regla de tres:
1℃ → 9.3
𝑇𝑒𝑚𝑝𝑒𝑟𝑎𝑡𝑢𝑟𝑎 → 𝐴𝑛𝑎𝑙𝑜𝑔𝑅𝑒𝑎𝑑(𝐴0)
Calculo:
𝑻𝒆𝒎𝒑𝒆𝒓𝒂𝒕𝒖𝒓𝒂 =
𝑨𝒏𝒂𝒍𝒐𝒈𝑹𝒆𝒂𝒅( 𝑨𝟎) ∗ 𝟏℃
𝟗. 𝟑
Programación para display de ánodo común
void setup(){
analogReference(INTERNAL);
DDRD=B11111111;
DDRB=B111111;}
void loop(){
int itemperatura=analogRead(A0)/9.3;
String stemperatura=String(itemperatura)+"C";
for(int i=0;i<stemperatura.length();i++){
switch(stemperatura[i]){
case '0':PORTD=B10000001;break;
case '1':PORTD=B11110011;break;
case '2':PORTD=B01001001;break;
case '3':PORTD=B01100001;break;
case '4':PORTD=B00110011;break;
case '5':PORTD=B00100101;break;
case '6':PORTD=B00000101;break;
case '7':PORTD=B11110001;break;
case '8':PORTD=B00000001;break;
case '9':PORTD=B00100001;break;
case 'C':PORTD=B10001101;break;
}
if(i==stemperatura.length()-2){PORTD=PORTD-B00000001;
}
int n=pow(2,stemperatura.length()-i-1)+.5;
PORTB=byte(n);
delay(5);
PORTB=B000000;
}
}
Figura 7. Rango de Medición de 0ºC a 110ºC con la
configuración del voltaje de referencia a 1.1V.
3 ANALISIS DE RESULTADOS
3.1 Descripción de cualquier resultado
anormal.
La lectura mostrada en los displays lleva consigo
un ciclo completo de operación y no puede ser
interrumpida hasta haber terminado el ciclo.
4 CONCLUSIÓN
La temperatura mostrada en los displays tendrá
cierta tolerancia o variación con respecto a la calculada
debido a que no se están utilizando números flotantes,
por lo tanto los decimales no son mostrados.
La configuración de los voltajes de referencia
resultan ser muy útiles, ya que permiten una resolución
más amplia en las mediciones lo cual a su vez aumenta
su exactitud y se vuelve muy eficaz cuando se utilizan
números flotantes.
El uso de funciones y de registros sin duda permite
un ahorro de memoria, tiempo de procesamiento y
recursos, además de agilizar la programación y su
asimilación.
5 BIBLIOGRAFIA
http://arduino.cc
https://www.arduino.cc/reference/en/language/funct
ions/analog-io/analogreference/
http://www.ti.com/lit/ds/symlink/lm35.pdf
(Datasheet)
Morris Mano M.. Lógica Digital y Diseño. Prentice
Hall 1982.
Angulo Usategui Jose Ma
, Hernandez Martin Juan
Carlos, Prieto Blanco Ma
Angeles, Etxebarria Isuskiza
Mikel, Angulo Martinez Ignacio. Electrónica Digital y
Microprogramable. Ediciones Paraninfo 2010. Madrid,
España.
DIGITAL(PWM~)
ANALOGIN
AREF
13
12
~11
~10
RX < 0
~9
8
7
~6
~5
4
~3
2
TX > 1
SIMULINO
ARDUINO
A0
A1
A2
A3
A4
A5
RESET
5V
GND
POWER
ATMEGA328P
ATMEL
www.arduino.cc
blogembarcado.blogspot.com
0
1
2
3
4
5
6
7
8
9
10
11
12
13
A5
A4
A3
A2
A1
A0
SIM1
SIMULINO UNO
150.0
3
1
VOUT
2
U1
LM35