CONTROLE DE TRÁFEGO FERROVIÁRIO UTILIZANDO MICROCONTROLADOR
PIC16F628A
UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
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 CommunicationsAPI (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
…//montar o byte para ser enviadobyte[] bt = new byte[6];bt[0] = (byte)it[0]; //id do dispositivobt[1] = (byte)it[1]; //funçãobt[2] = (byte)it[2]; //valor1 funcaobt[3] = (byte)it[3]; //valor2 funcaobt[4] = (byte)it[4]; //núm. id da msgbt[5] = (byte)it[5]; //livre
//escreve array na portasaidaStream.write(bt); Thread.sleep(100);saidaStream.flush();
…
� Software Controle Central
� Envio para porta serial
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 respostassynchronized (resp) {resp.getMensagens().add(itBuffer);
}} else {// caracteres para formar o bufferif (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
...void putBuf() {
int8 i;output_high(TRW_CE);CSDELAY();putByte(ADDR1_1); putByte(ADDR1_0);for( i=0; i<BUF_MAX ; i++) {
putByte(buf[i]);}output_low(TRW_CE);output_low(TRW_CLK1);
}...void putByte( byte b ) {
int8 i;int8 p = 7;for(i=0 ; i < 8 ; i++) {
output_low(TRW_CLK1);if( bit_test(b,p--) ) {
output_high(TRW_DATA);}else{
output_low(TRW_DATA);}CLKDELAY();output_high(TRW_CLK1);CLKDELAY();
}}...
...void getBuf() {
int8 i;for (i=0; i<BUF_MAX; i++) {
buf[i] = getByte();}output_low(TRW_CLK1);output_high(TRW_CE);
}...byte getByte() {
int8 i, b = 0;int8 p = 7;for (i=0; i<8; i++) {
output_low(TRW_CLK1);CLKDELAY();output_high(TRW_CLK1);CLKDELAY();if (input(TRW_DATA))
bit_set(b,p--);else
bit_clear(b,p--);}return b;
}
...
Envio Recebimento
Implementação
� Software aceleração do trem (PWM)
void veloc(int8 &vel){//desacelera gradualmentewhile (velocidade > vel){
velocidade--;set_pwm1_duty(velocidade);delay_ms(15);
}//acelera gradualmentewhile (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.