You are on page 1of 42

UNIVERSIDADE REGIONAL DE BLUMENAU

CENTRO DE CIÊNCIAS EXATAS E NATURAIS


CURSO DE CIÊNCIAS DA COMPUTAÇÃO

CONTROLE DE TRÁFEGO FERROVIÁRIO


UTILIZANDO MICROCONTROLADOR
PIC16F628A

Acadêmico: Andrey Starke Sardo


Orientador: Prof. José Roque Voltolini da Silva
Roteiro
 Introdução
 Objetivos do trabalho
 Fundamentação teórica
 Desenvolvimento
 Conclusão
Introdução
 Transporte Ferroviário
 Controle da malha
 2003 – Schubert (SCHUBERT, 2003)
implementou em nível de protótipo,
uma maquete para o controle de uma
malha ferroviária.
Objetivos do trabalho
O objetivo deste trabalho é a automação do
controle de uma malha ferroviária utilizando como
base o trabalho iniciado por Schubert (2003),
através do emprego de tecnologias diferentes e a
inclusão de novas funcionalidades.

Objetivos específicos:
• substituir o microcontrolador;
• controle de velocidade;
• utilizar o componente TRF-2.4G;
• aperfeiçoar sensores.
Fundamentação Teórica
 Sistemas de controle de ferrovias
 Sistema de sinalização
 Sinais manuais operadores e maquinistas
 Semáforos
 Manuais
 Intervalo de tempo
 Evolução do sistema de semáforos
 Intervalo de espaço
Fundamentação Teórica
 Microcontrolador PIC16F628A
Fundamentação Teórica
 PWM (Modulação por largura de pulso)
Fundamentação Teórica
 Componente TRF-2.4G
 Modo direto
 Modo ShockBurst
Fundamentação Teórica
 RX/TX
 Portabilidade
 Compatibilidade com Java Communications
API (Sun)
Fundamentação Teórica
 Trabalhos correlatos
 Aplicativo para controle de ferrovia
utilizando processamento em tempo real e
redes de Petri (SCHUBERT, 2003)
 Uma aplicação para controle do tráfego
ferroviário usando processos concorrentes
(RAULINO, 1999)
 Controle computacional de malha
ferroviária (Modellbahnanlage der
Informatik) (KLUGE, 1999)
Desenvolvimento
Desenvolvimento

 Requisitos do sistema:
 Controle de velocidade nos trens (RF);
 Comunicação broadcast entre os trens, os cruzamentos e o
controlador (RF);
 Verificação dos pacotes transmitidos via rádio freqüência com CRC
(RF);
 Uso do microcontrolador PIC16F628A (RNF);
 Uso do componente TRF-2.4G (RNF);
 Uso de uma maquete para testes, objetivando simular o mundo real
(RNF);
 Uso da linguagem Java para programação do controle no PC (RNF);
 Uso da linguagem C para programação dos microcontroladores (RNF);
Desenvolvimento
 Especificação do sistema
 Visão geral
Desenvolvimento
 Especificação do Hardware
 Controlador
Desenvolvimento
 Especificação do Hardware
 Trem
Desenvolvimento
 Especificação do Hardware
 Cruzamento
Desenvolvimento
 Especificação do Software Controle
Central
 Diagrama de casos de uso
 Diagrama de classes
Diagrama de Casos de Uso
Diagrama de Classes
Desenvolvimento
 Modelagem da Malha Protótipo
 Modelagem da malha
 Representação da malha
Desenvolvimento
 Especificação do Software Controlador
 Diagrama de Nassi-Schneiderman
Desenvolvimento
 Especificação do Software Trem
 Diagrama de Nassi-Schneiderman
Desenvolvimento
 Especificação do Software Cruzamento
 Diagrama de Nassi-Schneiderman
Implementação
 Hardware
 Placa controlador
 Placa trem
 Placa cruzamento
 Software
 Controle Central
 Controlador
 Trem
 Cruzamento
Implementação
 Placa controlador
Implementação
 Placa trem
Implementação
 Placa cruzamento
Implementação
 Software Controle Central
 Envio para porta serial

//montar o byte para ser enviado
byte[] bt = new byte[6];
bt[0] = (byte)it[0]; //id do dispositivo
bt[1] = (byte)it[1]; //função
bt[2] = (byte)it[2]; //valor1 funcao
bt[3] = (byte)it[3]; //valor2 funcao
bt[4] = (byte)it[4]; //núm. id da msg
bt[5] = (byte)it[5]; //livre

//escreve array na porta


saidaStream.write(bt);
Thread.sleep(100);
saidaStream.flush();

Implementação

for (int i = 0; i < nodeBytes; i++) {
if (dados.substring(i, i + 1).getBytes()[0] == '+') {
// novo array de bytes(buffer)
itBuffer = new int[6];
iBuff = 0;
} else if (dados.substring(i, i + 1).getBytes()[0] == '-') {
// finalizou array de bytes(buffer)
// encaminhar para fila de respostas
synchronized (resp) {
resp.getMensagens().add(itBuffer);
}
} else {
// caracteres para formar o buffer
if (iBuff < 6) {
int b = (dados.substring(i, i + 1).getBytes())[0];
if (b < 0)
b = (256 + b);
itBuffer[iBuff] = b;
iBuff++;
}
}
}
...
Implementação
 Array de bytes para envio

 Array de recebimento de bytes


Implementação
 Software Controlador
 Envio de mensagens
 Recebimento de mensagens
Envio Recebimento
... ...
void putBuf() { void getBuf() {
int8 i; int8 i;
output_high(TRW_CE); for (i=0; i<BUF_MAX; i++) {
CSDELAY(); buf[i] = getByte();
putByte(ADDR1_1); putByte(ADDR1_0); }
for( i=0; i<BUF_MAX ; i++) { output_low(TRW_CLK1);
putByte(buf[i]); output_high(TRW_CE);
} }
output_low(TRW_CE); ...
output_low(TRW_CLK1); byte getByte() {
} int8 i, b = 0;
... int8 p = 7;
void putByte( byte b ) { for (i=0; i<8; i++) {
int8 i; output_low(TRW_CLK1);
int8 p = 7; CLKDELAY();
for(i=0 ; i < 8 ; i++) { output_high(TRW_CLK1);
output_low(TRW_CLK1); CLKDELAY();
if( bit_test(b,p--) ) { if (input(TRW_DATA))
output_high(TRW_DATA); bit_set(b,p--);
}else{ else
output_low(TRW_DATA); bit_clear(b,p--);
} }
CLKDELAY(); return b;
output_high(TRW_CLK1); }
CLKDELAY();
}
}
... ...
Implementação
 Software aceleração do trem (PWM)
void veloc(int8 &vel){
//desacelera gradualmente
while (velocidade > vel){
velocidade--;
set_pwm1_duty(velocidade);
delay_ms(15);
}
//acelera gradualmente
while (velocidade < vel){
velocidade++;
set_pwm1_duty(velocidade);
delay_ms(15);
}
}
Implementação
 Quadro de comandos aceitos pelo trem
Implementação
 Quadro de comandos aceitos pelo
cruzamento
Resultados e Discussão
 Dificuldade com Hardware
 Ruído com motor do trem;
 Ruído com sensor do trem;
 Não detecção de sensores.
 Características do protótipo
desenvolvido X trabalhos correlatos
Conclusão
 Objetivos
 Substituir microcontrolador;
 Controle de velocidade;
 Utilização do TRF-2.4G;
 Aperfeiçoar sensores.
 Limitações
 Consistências em rotas;
 Cruzamentos limitados.
Conclusão
 Extensões
 Medir velocidade;
 Passagem dos trens;
 Real posicionamento dos trens;
 Editor de rotas.

You might also like