Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Proyecto:
Control automtico de temperatura y trasmitir la temperatura y
mostrarla en un LCD
Paralelo: 03
II Trmino 2010
INTRODUCCION
En nuestro entorno que vivimos todo depende los fenmenos fsicos
naturales, el cambio de estos fenmenos fsicos por lo general se
quieren controlar y mostrar. Para nuestro proyecto el fenmeno
fsico a controlar y mostrar es la temperatura.
La electrnica puede ser utilizada para facilitar la vida del
hombre. Por ejemplo, los sistemas de control remoto evitan que el
usuario se tenga que desplazar hasta alguna mquina para cambiar
algn parmetro: tambin los sistemas modernos de comunicacin
permiten hablar con otras personas en cualquier lugar del mundo,
etc.
Para la comunicacin inalmbrica
existen varias formas de las
cuales las ms conocidas son, infrarrojas, radiofrecuencia,
Bluetooth. Para este proyecto vamos a utilizar la va infrarrojos
el cual debemos utilizar el protocolo de comunicacin correcta.
Este protocolo debe modular la informacin sobre una portadora y
transmitir la seal modulada por algn sistema en el que el
receptor sea capaz de obtener nuevamente la informacin, esto nos
permitir enviar informacin (temperatura) constante de manera
inalmbrica y mostrarla al usuario.
Para controlar la temperatura nos vamos a utilizar un ventilador
DC el cual encender automticamente en el momento en que el
sensor detecte una temperatura mayor a la del ambiente
OBJETIVOS
Establecer
un alcance lo suficientemente eficaz entre el
receptor y el emisor que permita el buen uso de nuestro
circuito electrnico.
si
esta
DIAGRAMA DE BLOQUES
LCD
Fan
Sensor
Pic16f887
Pic16f887
Lm35
EMISOR
RECEPTOR
ANLISIS TERICO
ETAPA DE TRANSMISIN.
Para esta etapa utilizamos el PROTOCOLO RC5.
El protocolo RC5, es un tipo de modulacin que utilizan los
controles remotos para enviar la informacin por va
infrarrojo ya sea a televisores o equipos de audio, el cual
sistema
que
requiera
un
CIRCUITO EMISOR.
INDICADORES DE NIVEL
R15
D6
A
330
LED-YELLOW
U4
1
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40
RE3/MCLR/VPP
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPW U/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+
RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RD0
RD1
RB0/AN12/INT
RD2
RB1/AN10/C12IN3RD3
RB2/AN8
RD4
RB3/AN9/PGM/C12IN2RD5/P1B
RB4/AN11
RD6/P1C
RB5/AN13/T1G
RD7/P1D
RB6/ICSPCLK
RB7/ICSPDAT
RE0/AN5
RE1/AN6
RE2/AN7
15
16
17
18
23
24
25
26
R14
D5
A
330
LED-YELLOW
R13
19
20
21
22
27
28
29
30
D4
A
330
LED-YELLOW
SENSOR
8
9
10
J1
1
1
2
U2
24.0
PIC16F887
VOUT
R11
X1
Q2
100
TBLOCK-I2
2
LM35
J2
1
2
TBLOCK-I2
CRYSTAL
C2
1nF
1nF
LED-YELLOW
LED EMISOR
2N3904
D3
C1
R7
3.3k
0<T c<25
26<T c<45
T c>46
CIRCUITO RECEPTOR.
LCD2
VEE
VDD
VSS
U1
1
6
5
4
3
2
1
LM016L
PANTALLA LCD
2
3
4
5
6
7
14
13
R2
470
33
34
35
36
37
38
39
40
R1
3.3k
RE3/MCLR/VPP
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPWU/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RD0
RD1
RB0/AN12/INT
RD2
RB1/AN10/C12IN3RD3
RB2/AN8
RD4
RB3/AN9/PGM/C12IN2RD5/P1B
RB4/AN11
RD6/P1C
RB5/AN13/T1G
RD7/P1D
RB6/ICSPCLK
RB7/ICSPDAT
RE0/AN5
RE1/AN6
RE2/AN7
15
16
17
18
23
24
25
26
INDICADOR DE TRANSMISION
R3
19
20
21
22
27
28
29
30
330
E
RW
RS
14
13
12
11
10
9
8
7
D1
LED-YELLOW
D7
D6
D5
D4
D3
D2
D1
D0
8
9
10
PIC16F887
U2
29.0
VOUT
LED RECEPTOR
2
J1
C?
1nF
1
2
TBLOCK-I2
LM35
0<T c<25
26<T c<45
T c>46
10k
5
14
VENTILADOR
7
6
R1
150k
R8
U1:C
LM324
LM324
1
2
11
13
11
TBLOCK-I2
1
2
4
1
2
U1:B
J?
R4
10k
D1
10
8
R2
R3
10k
3
11
LM324
LED INDICADOR
DE AUMENTO DE
TEMPERATURA
1k
R5
BC549
R9
R?
80
10k
10k
10k
R10
R7
11
RV2
100%
20k
Q1
D2
R6
1N4733A
1M
3.3k
LM324
U1:A
la temperatura de
es mayor que la
a funcionar y su
seal del sensor
Clculos Numricos
Anlisis de la primera Etapa obtencin de la temperatura
Ejemplo si la temperatura es de
= 0.28[V]
La conversin es
Primera Etapa
Para el controlador de temperatura primero la pequea seal del
sensor (lm35) el cual est en el orden de los mili voltios con
una ganancia aproximadamente de 9, para esto utilizamos el
amplificador no inversor.
Segunda Etapa
Una vez obtenida amplificada la seal de voltaje que representa
la temperatura utilizamos el amplificador de instrumentacin el
cual va a restar dos voltajes y multiplicarlo por un factor
I1
I2
I3
+
(
+
)
=
)
*
*(
+
*(
Tercera Etapa
+88.8
kRPM
D1
VENTILADOR
LED INDICADOR
DE AUMENTO DE
TEMPERATURA
Q1
BC549
R9
132
entonces el
va aumentar
y la
de tal manera que pueda polarizar la base y aumentar la
potencia del ventilador .El transistor en este caso lo utilizamos
como un switch y as el ventilador pueda funcionar y aumentar la
velocidad.
CALCULO DE ERRORES
Vout
%ERROR
4.6
V+
VVo
%ERROR
4.6
4.6
3.78
V2
V1
Vo
%ERROR
3.78
2.38
4.59
SIMULACIONES
Circuito emisor
INDICADORES DE NIVEL
R15
D6
A
330
LED-YELLOW
U4
1
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
RE3/MCLR/VPP
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPW U/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+
RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RD0
RD1
RB0/AN12/INT
RD2
RB1/AN10/C12IN3RD3
RB2/AN8
RD4
RB3/AN9/PGM/C12IN2RD5/P1B
RB4/AN11
RD6/P1C
RB5/AN13/T1G
RD7/P1D
RB6/ICSPCLK
RB7/ICSPDAT
RE0/AN5
RE1/AN6
RE2/AN7
R14
D5
A
330
LED-YELLOW
19
20
21
22
27
28
29
30
R13
D4
A
330
LED-YELLOW
SENSOR
8
9
10
J1
1
1
2
U2
PIC16F887
24.0
VOUT
R11
X1
Q2
100
TBLOCK-I2
2
LM35
J2
1
2
TBLOCK-I2
CRYSTAL
1nF
C2
1nF
2N3904
LED-YELLOW
LED EMISOR
B
C
D3
C1
R7
3.3k
Circuito receptor
LCD?
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RS
RW
E
4
5
6
1
2
3
VSS
VDD
VEE
LM016L
U1
1
R2
4.70k
R1
3.30k
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40
RE3/MCLR/VPP
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPWU/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RD0
RD1
RB0/AN12/INT
RD2
RB1/AN10/C12IN3RD3
RB2/AN8
RD4
RB3/AN9/PGM/C12IN2RD5/P1B
RB4/AN11
RD6/P1C
RB5/AN13/T1G
RD7/P1D
RB6/ICSPCLK
RB7/ICSPDAT
RE0/AN5
RE1/AN6
RE2/AN7
PIC16F887
Controlador de temperatura
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
R3
330
A
D1
K
LED-YELLOW
+12
R1
150k
LM324
11
11
29.0
R8
U1:C
LM324
R4
10k
D1
10
8
LM35
R2
R3
10k
3
11
D2
R6
1N4733A
1M
10k
R10
3.3k
LM324
U1:A
LED INDICADOR
DE AUMENTO DE
TEMPERATURA
+7.32
10k
1
LM324
1k
R5
R7
11
RV2
100%
20k
VENTILADOR
+0.94
kRPM
14
13
VOUT
10k
U?
U1:B
12
Volts
Q1
BC549
R9
R?
80
75
Artculo
Resistores
Capacitores
3
1
D1 Led
rojo/amarillo/verde
Transistor
fototransistor
Borneras (2 tornillos)
Pic 16F887
Lm35
Cristal de cuarzo
Precio
unitario
$
0,05
$
0,10
$
0,10
$
0,15
$
1,50
$
0,16
$
4,50
$
6,00
$
1,00
Subtotal 1
Materiales generales
Estao (1m)
Pasta para soldar
Circuito impreso
$
0,25
$
2,00
$
Cantidad total
$
0,20
$
0,20
$
0,30
$
0,15
$
1,50
$
0,32
$
4,50
$
6,00
$
1,00
$
14,17
(emisor y receptor,
control de
temperatura)
Subtotal 3
13,80
$
16,05
Cant.
Artculo
Resistores
Capacitores
1
1
Pic 16f887
Pantalla Lcd 16x2
1 Borneras (2 tornillos)
1
1 Diodo Led
receptor
Precio
unitario
$
0,05
$
0,10
$
4,50
$
10,00
$
0,16
$
3,00
$
0,10
Subtotal 2
Cantidad total
$
0,10
$
0,10
$
4,50
$
10,00
$
0,16
$
3,00
$
0,10
$
17 ,96
Artculo
10
Resistores
transistor
1
1
Potenciometro
Lm325
3 Borneras (2 tornillos)
1
Diodo
zener
1 Diodo Led
1 Ventilador DC
12v(prueba)
Precio
unitario
$
0,05
$
0,15
$
0,20
$
0,30
$
0,16
$
0,10
$
0,10
$
3,00
Subtotal 2
Total:
53,01
Cantidad total
$
0,50
$
0,15
$
0,20
$
0,30
$
0,48
$
0,10
$
0,10
$
3,00
$
4 ,83
Circuito emisor
Circuito receptor
OBSERVACIONES.
-
RECOMENDACIONES
-
CONCLUSIONES
-
APLICACIONES.
-
ANEXO
HOJAS DE ESPECIFICACIONES DE COMPONENTES.
PIC 16F887.
LM35
LM324
LCD 16X2
Cdigo Emisor.
/*PROGRAMADORES:
*/
//************************************************************************
void escribir_bit(int valor);
char botton;
unsigned int adc_rd,ch;
/*
El protocolo de los controles remotos: Philips RC-5
La longitud completa de la trama es igual a 14 * 1.778 us =
24.892 us. Si la tecla
se mantiene presionada, la trama se reenva continuamente, pero
con una pausa de
equivalente a 50 bits ( 50 x 1.778 us = 88.900us) entre una y
otra transmisin.
Enrealidad hay 64 bits antes que halla una palabra completa, eso
quiere decir que
se a enviado el dato correctamente.
*/
void main() {
// CONFIGURACION DE PUERTOS
////////////////////////////////////////////////////
TRISA= 0X01;
// CONFIGURA TODA LA PUERTA A COMO
PORTA= 0X00;
//
TRISB= 0X00;
// CONFIGURA TODA LA PUERTA B COMO
PORTB= 0X00;
//
TRISC= 0X00;
// CONFIGURA TODA LA PUERTA B COMO
PORTC= 0X00;
TRISD= 0X00;
// CONFIGURA TODA LA PUERTA B COMO
PORTD= 0X00;
// ANALOG SELECT REGISTER
//////////////////////////////////////////////////////
ANSEL= 0X01;
// ANS COMO DIGITAL LOS BITS 0-7
ANSELH= 0X00; // ANS COMO DIGITAL LOS BITS 8-13
SALIDA
SALIDA
SALIDA
SALIDA
/////////////////////////////////////////////////////////////////
///////////////
botton=0x00;
while(1){
adc_rd = ADC_read(0);
ch = (adc_rd *100/234);
portb=ch;
botton = ch;
//PROGRAMACION DE LOS LED
if(ch<=0x19)
{
PORTD.F0 =1 ;
PORTD.F1 =0 ;
PORTD.F2 =0 ;
}
if
(ch>0x19&&ch<=0x2D)
{
PORTD.F0 =0;
PORTD.F1 =1;
PORTD.F2 =0;
}
if(ch>0x2D)
{
PORTD.F2 =1;
PORTD.F1 =0;
PORTD.F0 =0;
}
escribir_bit(botton.f0);
escribir_bit(botton.f1);
escribir_bit(botton.f2);
escribir_bit(botton.f3);
escribir_bit(botton.f4);
escribir_bit(botton.f5);
escribir_bit(botton.f6);
escribir_bit(botton.f7);
/////////////////////////////////////////////////////////////////
///////////////
delay_ms(87);
// 50 * 1.778 ms
}
}
// PROTOCOLO RC5X
/////////////////////////////////////////////////////////////
void escribir_bit(int valor){
// Por cada bits que se transmite habra 1.778 ms
int i, j;
if(valor==1){ // H- 889 us // L- 889 us
// ESTADO EN ALTO 889 us
///////////////////////////////////////////////////////
for(j=0; j<69; j++)
{
// Oscilamos el led a 36khz para poder exitar el phototransistor
PORTC.RC6= PORTC.RC6 ^ 1;
delay_us(9);
}
// ESTADO EN BAJO 889 us
///////////////////////////////////////////////////////
PORTC.RC6=0;
delay_us(900);
/////////////////////////////////////////////////////////////////
///////////////
}
else
{
// H- 889 us // L- 889 us
// ESTADO EN BAJO 889 us
///////////////////////////////////////////////////////
PORTC.RC6=0;
delay_us(870);
// ESTADO EN ALTO 889 us
///////////////////////////////////////////////////////
for(j=0; j<69; j++){
// Oscilamos el led a 36khz
para poder exitar el phototransistor
PORTC.RC6= PORTC.RC6 ^ 1;
delay_us(9);
}
PORTC.RC6=0;
/////////////////////////////////////////////////////////////////
///////////////
}
}
Cdigo Receptor
//configuracion de LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB6_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
//***************************************************
#include <built_in.h>
unsigned char ch,receive;
unsigned int adc_rd;
char *text,*text1;
char txt[4];
long tlong;
int i,j;
int numveces= 0, haydatos=0;
unsigned int codigo[8];
int int_rb0=1, int_tmr0=0;
unsigned short valor;
void interrupt(){
if(INTCON.INTF==1 && int_rb0==1){
int_tmr0= 1;
int_rb0= 0;
INTCON= 0b11100000;
TMR0= 0x5A;
}else if(INTCON.T0IF==1 && int_tmr0==1){
portd.rd0 = portd.rd0 ^ 1;
if(PORTB.RB0==1){
codigo[numveces]=0;
}else{
codigo[numveces]=1;
}
int_tmr0= 1;
int_rb0= 0;
numveces++;
INTCON= 0b11100000;
TMR0= 0X27;
if(numveces==9){
int_tmr0= 0;
int_rb0= 1;
haydatos=1;
numveces=0;
INTCON= 0b11010000;
valor = 30 ;
valor = 0b00011110;
valor.F0 = codigo[0];
valor.F1 = codigo[1];
valor.F2 = codigo[2];
valor.F3 = codigo[3];
valor.F4 = codigo[4];
valor.F5 = codigo[5];
valor.F6 = codigo[6];
valor.F7 = codigo[7];
}
// 1111 0101 245
// 1111 1010 250
}
}
void main() {
OPTION_REG= 0b10000011;
INTCON = 0b11010000;
OSCCON = 0b01110101;
ANSEL = 0;
ANSELH = 0;
TRISA = 0;
TRISD=0;
TRISB=0x01;
TRISC = 0X80;
UART1_Init(9600);
Delay_100ms ();
Lcd_Init();
Delay_100ms ();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
for(i=0;i<5;i++){
Lcd_Cmd(_LCD_CLEAR);
text = "LABORATORIO DE";
LCD_Out(1,i,text);
Delay_ms(100);
}
text1 = "ELECTRONICA A";
LCD_Out(2,3,text1);
ADCON1
= 0x82;
TRISA
= 0xFF;
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
numveces=0;
int_tmr0= 0;
int_rb0= 1;
while (1) {
text = "Temperatura:";
for(j=16;j>0;j--){
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1,j,text);
Delay_ms(100);
}
ByteToStr(valor, txt);
Lcd_Out(2, 5,txt);
delay_ms(2000);
text = "Nivel:";
for(j=10;j>0;j--){
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1,j,text);
Delay_ms(100);
}
if(valor<=0x20)
text1 = "T1";
else if(valor>0x20&&valor<0x40)
text1="T2";
else
text1="T3";
LCD_Out(2,3,text1);
delay_ms(2000);
}
}
//
//
//
//
//
//
//
//
_______
________
|
|
|
|
|
|
|
|
|
|
|____________|
t1
t2
t3
|
|
|
|
|
|
|______________|
t1