Sunteți pe pagina 1din 7

LABORATORIO NO.

TERMOMETRO DIGITAL EN ARDUINO

En este laboratorio se hará uso de sensores para la medición de temperatura en un determinado


ambiente, y el uso de displays para mostrar el resultado, en este caso se implementara el
termómetro con un sensor con características lineales en un determinado rango, lo cual nos
facilita el trabajo, ya que se nos facilita la obtención del algoritmo que posibilita la conversión
de la señal analógica a una digital que sea entendida por todos los usuarios de este termómetro,
el ARDUINO tiene un conversor A/D de 10 bits, por lo cual si no le entrega una tensión de
referencia este concibe la tensión de referencia igual a 5 V, y nos entrega un numero en el rango
de 0 a 1023 (𝑁 = 210 − 1), por lo cual con estos parámetros se puede hallar una relación lineal,
ya que el sensor que se usa es el LM35 que tiene una relación de 10 𝑚𝑉/℃ en un determinado
modo de operación, se presenta una relación:

La relación encontrada es la siguiente:


𝑣𝑎𝑙𝑜𝑟 𝑑𝑒𝑙 𝑠𝑒𝑛𝑠𝑜𝑟 ∗ 500
𝑇𝑑 =
1023
En cuanto a la parte electrónica se plantea el uso de una matriz de displays, lo cual mejora
nuestro rendimiento respecto a la cantidad de elementos que se usan y la posibilidad de mejorar
la electrónica, se requiere del uso de multiplexaciòn en el tiempo, ya que solo se puede mostrar
un display a la vez, por lo cual para mostrar un determinado numero en estos displays se debe
de preentar una cifra en cada display cada 27 ms aproximadamente, de tal manera que este
efecto o sea perceptible por el usuario.

En cuanto a los materiales se necesita: una matriz de displays 5461H, se usó el sensor de
temperatura LM35 en modo de 0 a °C, un Negador 7404, un decodificador 7448.
Se plantean dos posibles soluciones:

1. Se usan 7 pines digitales de ARDUINO para A, B, C, D, E, F, y dos pines para control de la


multiplexaciòn, se requerirá de 7404 para poder amplificar la corriente de 25 mA que
envía el ARDUINO y prender los diplays de 7 segmentos.
2. Se plantea el uso del decodificador 7448 para poder implementar el diseño con menos
pines.
3. TABLA COMPARATIVA

T (ºC) T (ºC) (analogico)


(digital)
15 14,5-15,1
16 15,2-16,1
17 16,2-17,1
18 17,2-18,3
19 18,4-19
20 19,1-20
21 20,1-20,9
22 21-22,1
23 22,2-23
24 23,1-24,1
25 24,2-24,9
26 25-25,9
27 26-26,9
Se tiene diferencias entre medidas ya que se toma solo un redondeo de la misma en el algoritmo,
además del tiempo de muestreo que se otorgó al termómetro digital.
CODIGO FUENTE

PRIMERA SOLUCION
byte pines[7]={4,5,6,7,8,9,10}; //PINES PARA 7 SEGMENTOS

boolean seg[10][7]={{1,0,0,0,0,0,0}, //0

{1,1,1,1,0,0,1}, //1

{0,1,0,0,1,0,0}, //2

{0,1,1,0,0,0,0}, //3

{0,0,1,1,0,0,1}, //4

{0,0,1,0,0,1,0}, //5

{0,0,0,0,0,1,0}, //6

{1,1,1,1,0,0,0}, //7

{0,0,0,0,0,0,0}, //8

{0,0,1,0,0,0,0} //9

};

const byte mux0=11; //PINES DE

const byte mux1=12; //CONTROL DE MULTIPLEXACION

int temperatura; //TEMPERATURA DIGITAL

int sensorValue; //VALOR OBTENIDO DE CAD

byte a,b; //UNIDADES Y DECENAS

void setup() {

for (byte i=0;i<7;i++)

pinMode(pines[i],OUTPUT);

pinMode(mux0,OUTPUT);

pinMode(mux1,OUTPUT);

digitalWrite(mux0,HIGH); //EMPEZART EN HIGH PARA INHABILITA TODOS

digitalWrite(mux1,HIGH); //LOS DISPLAYS INICIALMENTE

void loop() {

digitalWrite(mux1,HIGH);
sensorValue = analogRead(A0); //LECTURA DE DATOS

temperatura = (sensorValue*500.0)/1023;//ALGORITMO

b = temperatura / 10;//DECENA

a = temperatura % 10;//UNIDAD

for (byte i=0;i<40;i++)

//unidades

for (byte j=0;j<7;j++)

digitalWrite(mux1,HIGH);

digitalWrite(pines[j],seg[b][j]);

digitalWrite(mux0,LOW);

delay(10);

//decimales

digitalWrite(mux0,HIGH);

for (byte j=0;j<7;j++)

digitalWrite(pines[j],seg[a][j]);

digitalWrite(mux1,LOW);

delay(10);

SIMULACION EN PROTEUS
U3
LM35

1
VOUT

18.0

1
3

SIM2
A5
A4
A3
A2
A1
A0

5V

SIMULINO UNO
GND

RESET

ANALOG IN POWER
blogembarcado.blogspot.com
www.arduino.cc

ATMEL
ATMEGA328P

ARDUINO
SIMULINO
DIGITAL (PWM~)
RX < 0
TX > 1

AREF
~10
~11
~3

~5
~6

~9

12
13
2

c
a
b

d
e
f
g

m0
m1
m1
m0
13

11
1

U1:A U1:B U1:C U1:D U1:E U1:F U2:A


7404 7404 7404 7404 7404 7404 7404

0
1
1
1
2

12

10

2
c
g

SEGUNDA SOLUCION
byte pines[4]={4,5,6,7}; //PINES PARA 7 SEGMENTOS

boolean seg[10][4]={{0,0,0,0}, //0

{0,0,0,1}, //1

{0,0,1,0}, //2

{0,0,1,1}, //3

{0,1,0,0}, //4

{0,1,0,1}, //5

{0,1,1,0}, //6

{0,1,1,1}, //7

{1,0,0,0}, //8

{1,0,0,1} //9

};

const byte mux0=11; //PINES DE

const byte mux1=12; //CONTROL DE MULTIPLEXACION

//PIN DE ENTRADA ANALOGICA PARA SENSOR


int temperatura; //TEMPERATURA DIGITAL

int sensorValue; //VALOR OBTENIDO DE CAD

byte a,b; //UNIDADES Y DECENAS

void setup() {

for (byte i=0;i<4;i++)

pinMode(pines[i],OUTPUT);

pinMode(mux0,OUTPUT);

pinMode(mux1,OUTPUT);

digitalWrite(mux0,LOW); //EMPEZART EN HIGH PARA INHABILITA TODOS

digitalWrite(mux1,LOW); //LOS DISPLAYS INICIALMENTE

Serial.begin(9600);

void loop() {

digitalWrite(mux1,LOW);

sensorValue = analogRead(A0); //LECTURA DE DATOS

temperatura = (sensorValue*500.0)/1023;//ALGORITMO

b = temperatura / 10;//DECENA

a = temperatura % 10;//UNIDAD

Serial.println(temperatura);

Serial.println(b);

Serial.println(a);

for (byte i=0;i<40;i++)

//unidades

for (byte j=0;j<4;j++)

digitalWrite(mux1,LOW);

digitalWrite(pines[j],seg[b][j]);

Serial.print(seg[b][j]);

digitalWrite(mux0,HIGH);
delay(10);

//decimales

Serial.println(" ");

digitalWrite(mux0,LOW);

for (byte j=0;j<4;j++)

digitalWrite(pines[j],seg[a][j]);

Serial.print(seg[a][j]);

digitalWrite(mux1,HIGH);

delay(10);

Serial.println(" ");

SIMULACION EN PROTEUS

SIM1
1

M00
M11

AREF

13
ARDUINO

RESET 12
1 U5 ~11
5V ~10 U6
~9 7 13
A QA
SIMULINO
POWER

8 1 12
M00
M11

GND
27.0 B QB
2 11
C QC
ATMEGA328P

6 10
DIGITAL (PWM~)

7 D QD
2 ~6 4 9
VOUT BI/RBO QE
ATMEL
ANALOG IN

A0 ~5 5 15
RBI QF
A1 4 3 14
LT QG
A2 ~3
3 LM35 A3 2 7448
A4 TX > 1
A5 RX < 0
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO

S-ar putea să vă placă și