Professional Documents
Culture Documents
1. INTRODUO...................................................................................................................2
2. JUSTIFICATIVA................................................................................................................2
3. OBJETIVO..........................................................................................................................3
3.1. OBJETIVO GERAL............................................................................................................3
3.2. OBJETIVO ESPECFICO...................................................................................................3
4. DESCRIO GERAL.........................................................................................................4
5. DESCRIO DE FUNCIONAMENTO............................................................................4
5.1. CHAVE LIGA/DESLIGA...................................................................................................4
5.2. SINALIZAO..................................................................................................................4
5.3. MICRO CONTROLADOR.................................................................................................5
5.4. LINGUAGEM DE PROGRAMAO...............................................................................5
5.5. LGICA DE FUNCIONAMENTO....................................................................................5
6. CONCLUSO.......................................................................................................................5
7. CRONOGRAMA..................................................................................................................6
8. BIBLIOGRAFIA...................................................................................................................6
9. ANEXOS................................................................................................................................6
9.1. DIAGRAMA DE BLOCOS................................................................................................6
9.1.1. DIAGRAMA DE BLOCOS PIC TRANSMISSOR......................................................
9.1.2. DIAGRAMA DE BLOCOS PIC RECEPTOR..............................................................
9.2. PROGRAMAO UTILIZADA NO PIC.........................................................................
9.2.1. PROGRAMAO DO TRANSMISSOR (TX)...............................................................
9.2.2. PROGRAMAO DO RECEPTOR (RX).......................................................................
9.3. QUADRO DE CUSTOS.....................................................................................................6
9.4. FIGURAS DOS PRINCIPAIS COMPONENTES.............................................................7
9.5. FOTOS: LTIMOS DETALHES.......................................................................................7
1. INTRODUO
5. LISTA DE MATERIAIS
O custo final ficou em R$ 97,00 o que viabiliza um trabalho futuro para tornar realizvel a sua
comercializao.
5. CRONOGRAMA
4
6. REFERNCIAS BIBLIOGRFICAS
// Inicializao do LCD
//Mensagem Inicial
printf (lcd_putc,"\fJardim");
printf (lcd_putc,"\nAutomatizado");
delay_ms (2000);
// O vetor data_hora tem 7 bytes, a saber:
// data_hora[0] -> armazena valor dos segundos
// data_hora[1] -> armazena valor dos minutos
// data_hora[2] -> armazena valor da hora
// data_hora[3] -> armazena valor do dia da semana
// data_hora[4] -> armazena valor do dia
// data_hora[5] -> armazena valor do ms
// data_hora[6] -> armazena valor do ano
//
// Como exemplo, neste programa com os valores setados acima em data_hora teremos:
// Data: 25/02/10
// Hora: 15:50:00
ESCREVE_RTC (& data_hora[0]); //Escreve a hora no RTC
set_adc_channel (0);
// Define o canal a ser utilizado para a prxima converso A/D
while (TRUE)
{
temp_dig = read_adc();
// Realiza leitura da entrada analgica
temp_an = (float)temp_dig*0.488; //Clculo da temperatura
t = (int16)temp_an;
//Converte o valor da temperatura analgica em digital
delay_ms(100);
LER_RTC (& data_hora[0]);
if (seg != data_hora[0])
// Escreve novo valor no LCD somente quando
{
// houver mudana no valor dos segundos. Isso
seg = data_hora[0];
// evita que o LCD fique tremulando.
printf (lcd_putc,"\fTemp
%lu%1cC ",t,b);
printf (lcd_putc,"\nHora: %02u:%02u:%02u",data_hora[2],data_hora[1],data_hora[0]);
}
delay_ms (100);
// Intervalo entre leituras no RTC
if(input(pin_a4))
{
man_aut = !man_aut;
delay_ms(300);
}
if(man_aut==0) //Se o controle for manual
{
lcd_gotoxy(10,1);
printf (lcd_putc,"M");
if(input(pin_c2)) //Acionar bomba1
{
putc('a');
delay_ms (300);
}
if(input(pin_c1)) //Acionar Bomba2
{
putc('b');
delay_ms (300);
}
}
if(man_aut==1) //Se for Automtico
{
lcd_gotoxy(10,1);
printf (lcd_putc,"A");
if(data_hora[0]==00 && data_hora[1]==9 && data_hora[2]==15 && !flag_aut) //Se
a hora for igual a hora programada as bombas sero ligadas
{
lcd_gotoxy(7,1);
printf (lcd_putc,"L");
delay_ms(300);
putc('c');
flag_aut = !flag_aut; //Inverte a flag para no ficar enviando 'c' durante todo o
perodo relativo a 1s
}
if(data_hora[0]==10 && data_hora[1]==9 && data_hora[2]==15 && flag_aut) //Se a
hora for igual a hora programada as bombas sero desligadas
{
8
lcd_gotoxy(7,1);
printf (lcd_putc,"D");
delay_ms(300);
printf (lcd_putc,"\b ");
putc('d');
flag_aut=!flag_aut;
}
}
}
}
//**************************************************************************
***
// Rotina de Leitura no Relgio
*
//**************************************************************************
***
VOID LER_RTC (INT *data_hora)
{
INT i, aux;
// No RTC os bytes esto endereados da seguinte forma:
//
// Byte 00 -> endereo dos segundos
// Byte 01 -> endereo dos minutos
// Byte 02 -> endereo das horas
// Byte 03 -> endereo do dia da semana
// Byte 04 -> endereo do dia
// Byte 05 -> endereo do ms
// Byte 06 -> endereo do ano
for (i=0; i<7; i++)
// Lao para leitura de data e hora
{
i2c_start();
// Processador indica incio de comunicao com RTC
i2c_write(0xd0);
// Define escrita para um RTC sendo perifrico "0".
i2c_write(i);
// Aponta para o endereo desejado
i2c_stop();
// Processador encerra comunicao
i2c_start();
// Processador indica incio de comunicao com RTC
i2c_write(0xd1);
// Define leitura do RTC sendo perifrico "0".
aux = i2c_read(0);
// L dados e devolve NACK
i2c_stop();
// Processador encerra comunicao
data_hora[i] = ((aux & 0x0f) + (((aux & 0xf0) >> 4) * 10)); // Converte BCD para binrio
}
// e preenche o vetor data_hora
}
//**************************************************************************
***
// Rotina de Escrita no Relgio
*
//**************************************************************************
***
VOID ESCREVE_RTC (INT *data_hora)
{
9
INT i, aux;
// No RTC os bytes esto endereados da seguinte forma:
//
// Byte 00 -> endereo dos segundos
// Byte 01 -> endereo dos minutos
// Byte 02 -> endereo das horas
// Byte 03 -> endereo do dia da semana
// Byte 04 -> endereo do dia
// Byte 05 -> endereo do ms
// Byte 06 -> endereo do ano
// O vetor data_hora vem preenchido com os valores a serem escritos no RTC
for (i=0; i<7; i++)
{
aux = ((((data_hora[i] / 10) << 4) & 0xf0) | (data_hora[i] % 10)); // Converte binrio
para BCD
i2c_start();
// Processador indica incio de comunicao com RTC
i2c_write(0xd0);
// Define escrita para um RTC sendo perifrico "0"
i2c_write(i);
// Aponta para o endereo desejado
i2c_write(aux);
// Escreve valor de dat ou hora
i2c_stop();
// Processador encerra comunicao
}
}
9.2.2. PROGRAMAO DO RECEPTOR (RX)
#include <16f876A.h>
#fuses Hs,NOWDT,NOPROTECT,PUT
#use delay(clock=8000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#include <lcdt.c>
#use rs232(baud=2400, xmit=PIN_C6, parity=N, rcv=PIN_C7)
#DEFINE lig output_high
#DEFINE des output_low
#DEFINE esp delay_ms
CHAR dado;
#INT_RDA
VOID INT_RECEBER()
{
dado = getc();
}
VOID MAIN()
10
{
//declaracao de varfiaveis
short flagbomba=0,flagbomba2=0;
disable_interrupts (GLOBAL);
set_tris_a (0x11111100);
set_tris_c (0b11111111);
enable_interrupts (GLOBAL);
enable_interrupts(int_rda);
//desativar todas as saidas
output_low(pin_a1);
output_low(pin_a0);
lcd_init();
// Inicializao do LCD
//Mensagem Inicial
printf (lcd_putc,"\fJardim");
printf (lcd_putc,"\nAutomatizado");
delay_ms (2000);
while (TRUE)
{
switch(dado)
{
case 'a':
flagbomba=!flagbomba; // Inverte o valor da varivel e faz a mesma receber esse
valor
output_bit(pin_a1,flagbomba); //Liga ou desliga a bomba1
dado='#';
break;
case 'b':
flagbomba2=!flagbomba2; // Inverte o valor da varivel e faz a mesma receber esse
valor
output_bit(pin_a0,flagbomba2); //Liga ou desliga a bomba2
dado='#';
break;
case 'c': // Caso 'c', liga as duas bombas
output_high(pin_a1);
output_high(pin_a0);
break;
case 'd': //Caso 'd', desliga as duas bombas
output_low(pin_a1);
output_low(pin_a0);
break;
11
default: break;
}
if(input(pin_a1))
{
output_low(pin_c4);
}
else
{
output_high(pin_c4);
}
if(input(pin_a0))
{
output_low(pin_c5);
}
else
{
output_high(pin_c5);
}
if(input(pin_a1))
{
printf (lcd_putc,"\fbomba1:Ligada");
}
else
{
printf (lcd_putc,"\fbomba1:Desligada");
}
if(input(pin_a0))
{
printf (lcd_putc,"\nbomba2:Ligada");
}
else
{
printf (lcd_putc,"\nbomba1:Desligada");
}
}
}
9.3. QUADRO DE CUSTOS
9.3. FIGURAS DOS PRINCIPAIS COMPONENTES
12
Sensor de temperatura LM 35
PIC 16F877A.
9.5. FOTOS: LTIMOS DETALHES
13
Vrios ajustes...
14
Muitas mos... e,
Algumas cabeas.
15