UNIVERSIDADE REGIONAL DE BLUMENAU
CENTRO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE CIÊNCIAS DA COMPUTAÇÃO – BACHARELADO
CONTROLE DE TRÁFEGO FERROVIÁRIO UTILIZANDO
MICROCONTROLADOR PIC16F628A
ANDREY STARKE SARDO
BLUMENAU
2007
2007/1-06
ANDREY STARKE SARDO
CONTROLE DE TRÁFEGO FERROVIÁRIO UTILIZANDO
MICROCONTROLADOR PIC16F628A
Trabalho de Conclusão de Curso submetido à
Universidade Regional de Blumenau para a
obtenção dos créditos na disciplina Trabalho
de Conclusão de Curso II do curso de Ciências
da Computação — Bacharelado.
Prof. José Roque Voltolini da Silva - Orientador
BLUMENAU
2007
2007/1-06
CONTROLE DE TRÁFEGO FERROVIÁRIO UTILIZANDO
MICROCONTROLADOR PIC16F628A
Por
ANDREY STARKE SARDO
Trabalho aprovado para obtenção dos créditos
na disciplina de Trabalho de Conclusão de
Curso II, pela banca examinadora formada
por:
Presidente:
______________________________________________________
Prof. José Roque Voltolini da Silva – Orientador, FURB
Membro:
______________________________________________________
Prof. Miguel Alexandre Wisintainer, Mestre – FURB
Membro:
______________________________________________________
Prof. Antônio Carlos Tavares – FURB
Blumenau, 10 de julho de 2007
Dedico este trabalho a meus pais José Sardo
Filho e Eliane Starke Sardo, que me ajudaram
direta e indiretamente na realização deste.
AGRADECIMENTOS
Aos meus avôs Harold e Lucia, mesmo que indiretamente, me ajudaram com
pensamento positivo e acreditando em mim.
Aos meus amigos, que mesmo em situações difíceis sempre estiveram ao meu lado,
não só no curso, mas durante toda a minha vida.
À Gislene, pelo seu carinho e paciência.
Ao professor Miguel, pelas dicas que foram fundamentais para o trabalho.
Em especial ao meu orientador, José Roque Voltolini da Silva, pelo incentivo e ajuda
que me deu na confecção do trabalho, e por ter acreditado na conclusão deste trabalho.
Procure ser uma pessoa de valor, em vez de
procurar ser uma pessoa de sucesso. O sucesso
é conseqüência.
Albert Einstein
RESUMO
Este trabalho apresenta o desenvolvimento de um sistema de controle de malha ferroviária
bem como a montagem de um protótipo. Para a construção do hardware e o controle de trens
e cruzamentos foi utilizado o PIC16F628A e o componente TRF-2.4G para transmissão de
dados. É desenvolvido também o software embarcado dos microcontroladores e o software
que gerencia todos os dispositivos envolvidos na malha.
Palavras-chave: Sistemas embarcados. Sistemas de controle. Controle de malha ferroviária.
ABSTRACT
This work presents the control’s development’s system of railroad as well as the assembly of
a prototype. For the construction of the hardware and the control’s of trains and crossings it
was used the PIC16F628A and the component TRF-2.4G for transmission of data. It is also
developed the embedded software of the microcontrollers and the software that manages all
the involved devices in the railroad.
Key-words: Embedded systems. Systems of control. Control of railroad.
LISTA DE ILUSTRAÇÕES
Figura 1 – Pinagem do PIC16F628A ....................................................................................... 19
Figura 2 – Exemplo de saídas do PWM ................................................................................... 21
Figura 3 – Componente TRF-2.4G........................................................................................... 23
Quadro 1 – Funcionalidade dos pinos do TRF-2.4G................................................................ 23
Figura 4 – Funcionamento do modo ShockBurst...................................................................... 24
Quadro 2 – Exemplo de código utilizando classe da API RX/TX ........................................... 25
Quadro 3 – Exemplo de código utilizado para enviar bytes..................................................... 25
Figura 5 – Visão geral da maquete ........................................................................................... 26
Figura 6 – Visão do trem desenvolvido por Schubert (2003) .................................................. 27
Figura 7 – Visão do cruzamento desenvolvido por Schubert (2003) ....................................... 27
Figura 8 – Interface de execução da aplicação desenvolvida por Raulino............................... 28
Figura 9 – Utilização de reed-switch como sensores ............................................................... 29
Quadro 4 – Características dos trabalhos correlatos................................................................. 29
Figura 10 – Ligação entre componentes do sistema................................................................. 32
Figura 11 – Diagrama esquemático do controlador.................................................................. 33
Figura 12 – Diagrama esquemático do trem............................................................................. 34
Figura 13 – Diagrama esquemático do cruzamento ................................................................. 35
Figura 14 – Diagrama de casos de uso ..................................................................................... 36
Figura 15 – Diagrama de classes .............................................................................................. 36
Figura 16 – Modelagem da malha do protótipo ....................................................................... 37
Quadro 5 – Representação da modelagem da malha representada na fig. 16 .......................... 38
Figura 17 – Diagrama de Nassi-Schneiderman do controlador................................................ 39
Figura 18 – Diagrama da rotina para enviar dados para o TRF-2.4G ...................................... 39
Figura 19 – Diagrama da rotina para enviar bit-a-bit ao TRF-2.4G......................................... 39
Figura 20– Diagrama da rotina para receber dados para o TRF-2.4G ..................................... 40
Figura 21 – Diagrama da rotina para receber bit-a-bit ao TRF-2.4G ....................................... 40
Figura 22 – Diagrama da rotina executada em caso de interrupção......................................... 40
Figura 23 – Diagrama da rotina de configuração ..................................................................... 41
Figura 24 – Diagrama da rotina de mudança para receptor...................................................... 41
Figura 25 – Diagrama da rotina de mudança para transmissor ................................................ 42
Figura 26 – Diagrama da rotina para mandar dados via serial ................................................. 42
Figura 27 – Diagrama de Nassi-Schneiderman do trem........................................................... 43
Figura 28 – Diagrama da rotina de interrupção do trem........................................................... 44
Figura 29 – Diagrama de Nassi-Schneiderman do cruzamento ............................................... 45
Figura 30 – Placa do controlador.............................................................................................. 47
Figura 31 – Ligação original do motor do trem........................................................................ 47
Figura 32 – Ligação da roda com placa e motor do trem ......................................................... 48
Figura 33 – Trem com placas instaladas .................................................................................. 49
Figura 34 – Desvio Frateschi.................................................................................................... 49
Figura 35 – Placa do cruzamento ............................................................................................. 50
Quadro 6 – Método de envio para porta serial ......................................................................... 51
Quadro 7 – Método de recebimento de dados .......................................................................... 52
Quadro 8 – Trecho de código da classe Malha....................................................................... 53
Figura 36 – Comunicação entre as partes envolvidas............................................................... 54
Quadro 9 – Array de bytes para envio de mensagens a dispositivos do tipo trem e cruzamento
............................................................................................................................... 54
Quadro 10 – Array de bytes para recebimento de mensagens pelo controlador....................... 55
Quadro 11 – Métodos para envio de dados .............................................................................. 55
Quadro 12 – Métodos para recebimento de dados ................................................................... 56
Quadro 13 – Laço principal do programa................................................................................. 57
Quadro 14 – Rotina tratadora de interrupção do trem .............................................................. 58
Quadro 15 – Método de aceleração e desaceleração com PWM.............................................. 59
Quadro 16 – Comandos aceitos pelo trem................................................................................ 59
Quadro 17 – Rotina que detecta passagem por sensores .......................................................... 60
Quadro 18 – Métodos para abrir e fechar desvio...................................................................... 60
Quadro 19 – Comandos aceitos pelo cruzamento .................................................................... 61
Figura 37 – Tela inicial do software......................................................................................... 62
Figura 38 – Tela de cadastro de trens ....................................................................................... 62
Figura 39 – Tela de cadastro de cruzamentos........................................................................... 63
Quadro 20 – Características do protótipo desenvolvido e trabalhos correlatos ....................... 64
LISTA DE SIGLAS
API – Application Programming Interface
CBL – Computador de Bordo de Locomotivas
CommAPI – Java Communications API
CRC – Cyclic Redundancy Check
DVD – Digital Versatile Disc
E/S – Entradas e Saídas
EEPROM – Electrically Erasable Programmable Read-Only Memory
GPS – Global Position System
PDAs – Personal Digital Assistants
PWM – Pulse Width Modulation
RAM – Random Access Memory
RF – Requisitos Funcionais
RISC – Reduced Instruction Set Computer
RNF – Requisitos Não-Funcionais
SMD – Surface Mounted Devices
UML – Unified Modeling Language
USB – Universal Serial Bus
WDT – WatchDog Timer
SUMÁRIO
1 INTRODUÇÃO.................................................................................................................. 13
1.1 OBJETIVOS DO TRABALHO ........................................................................................ 14
1.2 ESTRUTURA DO TRABALHO ...................................................................................... 14
2 FUNDAMENTAÇÃO TEÓRICA .................................................................................... 16
2.1 SISTEMAS DE CONTROLE DE FERROVIAS.............................................................. 16
2.2 MICROCONTROLADORES ........................................................................................... 17
2.2.1 Microcontrolador PIC16F628A ...................................................................................... 18
2.3 SOFTWARE EMBARCADO ........................................................................................... 19
2.4 PWM.................................................................................................................................. 20
2.5 TRANSMISSÃO SEM FIO .............................................................................................. 21
2.6 DETECÇÃO E CORREÇÃO DE ERROS ....................................................................... 22
2.7 COMPONENTE TRF-2.4G .............................................................................................. 23
2.8 RX/TX ............................................................................................................................... 24
2.9 TRABALHOS CORRELATOS........................................................................................ 25
2.9.1 Aplicativo para controle de ferrovia utilizando processamento em tempo real e redes de
Petri ................................................................................................................................. 26
2.9.2 Uma aplicação para controle do tráfego ferroviário usando processos concorrentes ..... 28
2.9.3 Controle computacional de malha ferroviária (Modellbahnanlage der Informatik)....... 28
2.9.4 Considerações sobre os trabalhos correlatos................................................................... 29
3 DESENVOLVIMENTO.................................................................................................... 30
3.1 REQUISITOS DO SISTEMA........................................................................................... 30
3.2 ESPECIFICAÇÃO ............................................................................................................ 30
3.2.1 Visão geral da solução proposta...................................................................................... 31
3.2.2 Hardware ......................................................................................................................... 32
3.2.2.1 Diagrama esquemático do controlador ......................................................................... 32
3.2.2.2 Diagrama esquemático do trem .................................................................................... 33
3.2.2.3 Diagrama esquemático do cruzamento ......................................................................... 34
3.2.3 Software .......................................................................................................................... 35
3.2.3.1 Especificação do controle central ................................................................................. 35
3.2.3.2 Especificação do controlador........................................................................................ 38
3.2.3.3 Especificação do trem................................................................................................... 42
3.2.3.4 Especificação do cruzamento........................................................................................ 44
3.3 IMPLEMENTAÇÃO ........................................................................................................ 45
3.3.1 Técnicas e ferramentas utilizadas.................................................................................... 45
3.3.2 Hardware ......................................................................................................................... 46
3.3.2.1 Montagem da placa do controlador .............................................................................. 46
3.3.2.2 Montagem da placa do trem ......................................................................................... 47
3.3.2.3 Montagem da placa do cruzamento .............................................................................. 49
3.3.3 Software .......................................................................................................................... 50
3.3.3.1 Controle central ............................................................................................................ 50
3.3.3.2 Controlador ................................................................................................................... 54
3.3.3.3 Controle trem ................................................................................................................ 57
3.3.3.4 Cruzamento................................................................................................................... 59
3.4 OPERACIONALIDADE DA IMPLEMENTAÇÃO ........................................................ 61
3.5 RESULTADOS E DISCUSSÃO ...................................................................................... 63
4 CONCLUSÕES.................................................................................................................. 65
4.1 EXTENSÕES .................................................................................................................... 65
REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................. 67
13
1 INTRODUÇÃO
Graças a exportação de minério e grãos, como a soja, o Brasil, através da iniciativa
privada em conjunto com o estado, mantém e investe nas ferrovias nacionais. Atualmente, as
estradas de ferro que ligam o interior dos estados aos portos situados no litoral brasileiro são
as que possuem um maior tráfego de trens (VENCOVSKY, 2006, p. 18). Parte deste
investimento está no desenvolvimento de tecnologias, mais precisamente em segurança e
logística.
Segundo Vencovsky (2006, p. 42), o transporte ferroviário têm vantagens sobre os
demais meios, como o aéreo ou rodoviário, tendo principalmente a quantidade de carga a ser
transportada em relação ao baixo valor agregado do produto e ao grande volume a ser
carregado, como por exemplo a soja. Roncarati (1998) acrescenta que “[...] um trem de carga
pode transportar milhares de toneladas de mercadorias através de um continente inteiro [...]”.
Sabendo que trens podem trafegar com grandes quantidades de carga, passando por
cruzamentos ou desvios para conseguirem chegar a seus respectivos destinos, verifica-se que
a ocorrência de acidentes pode trazer conseqüências drásticas. Pessoas podem estar
envolvidas nesses acidentes, sem falar nos possíveis prejuízos da perda de mercadoria ou até
mesmo dos estragos que podem ser causados ao meio ambiente.
Sabendo-se das proporções que acidentes ferroviários podem causar, vê-se necessário
o controle da malha ferroviária. Conforme Janczura (1998, p. 1), um sistema de controle de
uma malha ferroviária torna-se complexo, não podendo ocorrer falhas, sendo importante que
esses sistemas sejam rigorosamente especificados para assegurar que quaisquer erros ou
omissões sejam detectados antes da implementação e implantação.
Um grande problema no transporte ferroviário é fazer o controle de toda a malha
ferroviária manualmente, a qual envolve trens, semáforos, entre outros. [...] Os
sistemas de controle de uma malha ferroviária devem ser desenvolvidos para operar
em tempo real, devido a natureza do problema e a necessidade de constantes
verificações das posições dos trens, das rotas, dos semáforos, entre outros.
(SCHUBERT, 2003, p. 15).
Visto o acima descrito e o fácil acesso da obtenção de uma maquete de uma malha
ferroviária para testes, foi iniciado no ano de 2003 um projeto para automatização da mesma.
Uma implementação, em nível de protótipo, para o controle do tráfego em uma malha
ferroviária foi realizada, a qual está relatada em Schubert (2003). Algumas dificuldades foram
encontradas no projeto, destacando-se o problema detectado na transmissão de dados via rádio
freqüência, devido aos ruídos gerados principalmente pelo motor do trem e a tecnologia
14
usada, a qual não se mostrou apropriada para tratar o caso. Ainda, problemas de controle de
velocidade foram encontrados devido a complexidade de sua implementação no
microcontrolador utilizado (PIC16F84A), pelo fato de não possuir embutido o comando Pulse
Width Modulation (PWM) em hardware, possuindo apenas em software (emulação).
A partir dos problemas encontrados no trabalho relatado em Schubert (2003), propõese solucioná-los através de uma nova construção de um sistema de controle de uma malha
ferroviária, utilizando tecnologias diferentes, como um novo microcontrolador (com software
embarcado) que ofereça novos recursos tais como o PWM em hardware e um novo
componente para transmissão por rádio freqüência. Os testes serão realizados utilizando-se
uma maquete de ferrorama.
1.1
OBJETIVOS DO TRABALHO
O objetivo deste trabalho é a automatizaçã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.
Os objetivos específicos do trabalho são:
a) substituir o microcontrolador utilizado (PIC16F84A) pelo PIC16F628A;
b) implementar o controle de velocidade nos trens (aceleração/desaceleração);
c) melhorar a transmissão de dados entre os componentes envolvidos (controlador1,
trens e cruzamentos), utilizando o componente TRF-2.4G;
d) aperfeiçoar o sistema de sensores da ferrovia.
1.2
ESTRUTURA DO TRABALHO
Este trabalho está divido em quatro capítulos. O primeiro traz uma introdução ao
assunto e do que se trata o trabalho. O segundo apresenta uma fundamentação teórica dos
1
Controlador é utilizado no texto para representar o hardware que envia e recebe mensagens aos dispositivos
(trens e cruzamentos).
15
conhecimentos necessários ao desenvolvimento. O terceiro descreve detalhes sobre a
especificação, implementação e testes realizados. O quarto capítulo trata das conclusões e
sugestões para extensões no trabalho.
16
2 FUNDAMENTAÇÃO TEÓRICA
Neste capítulo são apresentados os conceitos necessários ao desenvolvimento deste
trabalho, os quais são: sistema de controle de ferrovias, microcontroladores, software
embarcado, PWM, transmissão sem fio, detecção e correção de erros, o componente TRF2.4G e trabalhos correlatos.
2.1
SISTEMAS DE CONTROLE DE FERROVIAS
Segundo Janczura (1998, p. 6), as sinalizações são muito importantes para o controle
de uma malha ferroviária, tanto para segurança quanto na movimentação dos trens na ferrovia.
O desenvolvimento e a implementação dos primeiros sistemas de sinalização começaram logo
após o surgimento das ferrovias no século 19. Os meios de controle eram primitivos, sendo
que todo o controle do tráfego era realizado por pessoas que ficavam em determinados locais
para fazer a sinalização aos maquinistas. O problema destes sistemas controlados e
sinalizados diretamente por pessoas estavam nas chances de haver falha na interpretação dos
sinais passadas ao maquinista, podendo ocorrer também falhas nas decisões tomadas pelo
operador.
Após esta fase inicial surgiram novos meios para o controle do tráfego, entre eles citase o uso de semáforos. Os semáforos primeiramente manuais, eram difíceis de serem
visualizados pelo maquinista, tornando-os inseguros. Os sinais apresentados pelo semáforo
manual eram compostos por três estados, stop (parado), caution (atenção) e all right (avante,
livre), que foram representados pela posição de um braço, respectivamente nas posições:
horizontal, inclinado para baixo e verticalmente para baixo. Por se tratar de um sistema
mecânico, existia o perigo do semáforo estar quebrado e consequentemente com o braço
verticalmente para baixo, caído (all right), podendo assim indicar um sinal inconsistente. No
período da noite utilizava-se a luz amarela para indicar o estado all right, sendo que nesta
ocasião existia o problema do maquinista confundir a luz com a luz de outro trem que
estivesse estacionado (JANCZURA, 1998, p. 7).
As operações nos semáforos eram baseadas em tempo, por exemplo, depois de um
determinado trem sair da estação, o semáforo era colocado no estado de stop, impossibilitando
17
um segundo trem a sair. Após um espaço de tempo pré-determinado, o semáforo é passado
para o estado caution, possibilitando outro trem a sair da estação. Como o campo de visão do
operador de semáforo era limitado, o mesmo poderia liberar um trem para sair da estação
mesmo tendo acontecido um acidente ou quebra com o primeiro trem, onde poderia ocorrer
uma colisão entre os mesmos.
Conforme Janczura (1998, p. 8), melhoramentos foram acrescentados. Os semáforos
deixaram de ser baseados em tempo e passaram a ser baseados por intervalo de espaço. Nessa
condição, o operador do semáforo só liberava a passagem de outro trem após a confirmação
de chegada ou passagem do outro trem por outro semáforo. Para que isso fosse possível foi
utilizado o telégrafo como meio de comunicação entre os operadores dos semáforos.
Hoje existem diversos tipos de sistemas de sinalizações ao redor do mundo. O
princípio desses sistemas é muito parecido com o descrito anteriormente, mudando
principalmente a forma de comunicação e automatizando as operações dos semáforos,
utilizando meios mais eficientes que o telégrafo.
Dos sistemas atuais destacam-se os que foram desenvolvidos pela empresa América
Latina Logística, os quais são (AMÉRICA LATINA LOGÍSTICA, 2005):
a) Computador de Bordo de Locomotivas (CBL): permite monitorar os trens e
verificar se as autorizações para circulação enviadas pelo centro de controle estão
sendo atendidas;
b) detector de descarrilamento: sistema de monitoramento instalado ao longo da
ferrovia para monitorar o rodado dos trens; se sair dos trilhos é enviado um alerta
para que o trem pare imediatamente, podendo assim evitar um acidente;
c) Global Position System (GPS): através do uso do GPS é possível saber se um
determinado trem está atrasado ou até parado em seu percurso.
2.2
MICROCONTROLADORES
O microcontrolador corresponde a um microprocessador e seus periféricos típicos,
todos juntos num só chip. Os microprocessadores executam operações matemáticas, lógicas,
conversões de analógico para digital, comunicam-se com o mundo exterior através das portas
de entradas e saídas (E/S), PWM, entre outros recursos (ZANCO, 2005, p. 33).
18
Existe uma grande variedade de famílias de microcontroladores, dentre elas
exemplifica-se: MCS51; PIC e HC08. A escolha de um microcontrolador varia muito,
dependendo de suas características.
2.2.1
Microcontrolador PIC16F628A
Os microcontroladores PIC são fabricados pela empresa Microchip Tecnology. Esses
microcontroladores utilizam a arquitetura Reduced Instruction Set Computer (RISC), o que
permite que eles tenham um reduzido número de instruções. Podem operar com freqüências
de até 40MHz (ZANCO, 2005, p. 37).
Conforme Microchip (2005, p. 5), as principais características do microcontrolador
PIC16F628A são (figura 1):
a) 16 pinos de E/S: o desenvolvedor tem a opção de selecionar individualmente cada
pino como entrada ou saída conforme sua necessidade;
b) freqüência de até 20MHz: permite o uso de uma fonte geradora de clock externa,
limitando-se a um clock máximo de 20MHz;
c) oscilador interno de 4MHz/37KHz: com uma precisão menor em relação ao clock
externo, tem a vantagem de não precisar utilizar os pinos RA7 e RA6 para o
cristal externo;
d) 2K bytes de memória FLASH de programa: espaço em memória destinado para
gravação do programa que será executado no microcontrolador;
e) 224 bytes de memória Random Access Memory (RAM) para dados:
disponibilidade de memória volátil para uso do programa. Após um reset os dados
são perdidos;
f) 128 bytes de memória Electrically Erasable Programmable Read-Only Memory
(EEPROM) interna: memória não volátil. O programa tem a possibilidade de
gravar e regravar sem perder os dados após um reset;
g) módulos TIMER 0, TIMER 1 e TIMER 2: estes módulos podem ter função de
temporizadores e ou de contadores;
h) módulo CCP (modos Capture, Compare e PWM): o módulo CCP é um periférico
que pode funcionar de três modos diferentes: capture, utilizado para medir o
tempo entre dois eventos ocorridos no pino RB3/CCP1; compare, compara a todo
19
o instante o conteúdo do par de registradores TMR1H:TMR1L com
CCPR1H:CCPR1L e PWM, modulação por largura de pulso;
i)
dois comparadores analógicos: o comparador é um circuito que compara duas
tensões analógicas;
j)
um canal de comunicação serial: dispõem de um módulo específico para
transmissão de dados serial;
k) WatchDog Timer (WDT): é um temporizador com um oscilador próprio.
Independente do oscilador principal, caso o WDT produza um timeout, provoca
um reset no programa;
l)
tensão de operação entre 2,5 a 5,5v: o microcontrolador pode operar com tensões
entre 2,5 e 5,5 volts;
m) interrupções: o PIC16F628A possui nove fontes de interrupção independentes:
estouro Timer 0; interrupção externa RB0/INT; mudança de estado no pinos
(RB7:RB4); término de escrita na EEPROM; módulo comparador; interrupção de
USART; módulo CCP; estouro Timer 1; interrupção quando Timer 2 igual ao PR2.
Fonte: Microchip (2005, p. 4).
Figura 1 – Pinagem do PIC16F628A
2.3
SOFTWARE EMBARCADO
Segundo Taurion (2005, p. 1-4), “Software embarcado é o software que é embutido em
um equipamento como um sistema de injeção eletrônica de um automóvel, permitindo que
este equipamento atue com maior funcionalidade e flexibilidade”. Exemplos de equipamentos
que possuem software embarcado são: aparelhos de Digital Versatile Disc (DVD), televisores,
20
microondas, aviões e Personal Digital Assistants (PDAs).
Taurion (2005, p. 5) destaca que devido a rápida evolução tecnológica, equipamentos e
dispositivos estarão utilizando cada vez mais software embarcado. A indústria automotiva
pode ser usada como exemplo. Os automóveis atuais pouco evoluíram mecanicamente, mas
em compensação a quantidade de software embarcado aumenta a cada nova funcionalidade
inserida.
O software embarcado diferentemente do software de uso geral limita-se a um número
fixo de tarefas a serem executadas. O caso do software do sistema de injeção eletrônica de um
automóvel é limitado apenas a rodar no hardware especifico para tal função. Em outras
palavras, o software exercerá função de controlador de motor ao longo de toda a sua vida útil
(LOMBARDO, 2002, p. 16).
2.4
PWM
Segundo Barr (2001), PWM é uma técnica avançada para controlar circuitos
analógicos com a saída digital de um microcontrolador. Zanco (2005, p. 236) acrescenta que
PWM é um sinal digital com freqüência fixa, mas com largura de pulso variável. Há uma
variedade de usos e aplicações, destacando-se: medições, comunicação para controle de
potência e principalmente controle analógico. Exemplo de um controle analógico é o botão de
volume de um rádio. Ao girar o botão, é aumentado ou diminuído o fluxo de corrente elétrica,
controlando-se assim o volume.
A figura 2 mostra o sinal digital da saída PWM de um microcontrolador e demonstra
três níveis diferentes. O primeiro valor de saída está a 10% de sua capacidade total, ou seja, o
pulso está em 10% do tempo alto e 90% em baixo. Em seguida estão demonstrados os valores
em 50% e 90%, respectivamente.
21
Fonte: adaptado de Barr (2001).
Figura 2 – Exemplo de saídas do PWM
Ghirardello (2006) conclui que em teoria o PWM em condição de aberto, valor de
saída alto em 0%, nenhuma corrente circula sobre o dispositivo de controle, portanto, sua
dissipação é nula. Na condição de fechado, valor de saída alto em 100%, teoricamente,
apresenta uma resistência nula, sem queda de tensão e dissipação de potência. Na teoria o
controle por PWM não existe nenhum tipo de perda de potência, consistindo em uma solução
ideal para controle de uma saída analógica, como por exemplo o controle da velocidade de um
motor.
2.5
TRANSMISSÃO SEM FIO
Há vários meios de transmissão sem fio, como: rádio freqüência, microondas e
infravermelho. A grande vantagem vem da inexistência de instalações de cabos, a mobilidade
e flexibilidade. As desvantagens de maneira geral é que são mais lentas e têm problemas com
condições ambientais e segurança dos dados transmitidos, já que o meio de propagação pode
ser interceptado por qualquer um (DOYLE; ZACKER, 2000, p. 875).
As ondas de rádio são fáceis de gerar, podem percorrer longas distâncias e podem
passar facilmente paredes de prédios ou casas. A rádio freqüência é amplamente utilizada para
comunicação, seja em locais abertos ou fechados. Estas ondas também são omnidirecionais, o
que significa que elas viajam a todas as direções a partir do transmissor, ou seja, o transmissor
e receptor não precisam estar fisicamente alinhados (TANENBAUM, 2003, p. 109).
Dos tipos de transmissão de pacotes destacam-se: unicast (emissor envia para um
destinatário), multicast (emissor envia para vários destinatários) e broadcast (emissor envia
22
para todos destinatários).
Conforme Tanenbaum (2003, p. 17), em broadcasting é utilizado apenas um canal de
comunicação compartilhado entre todos os equipamentos pertencentes à rede. Pacotes
enviados por qualquer equipamento são recebidos por todos os outros, sendo que dentro do
pacote existe o endereço do equipamento destinatário. Todo equipamento ao receber um
pacote verifica se este o pertence, caso não seja destinado a ele, o pacote será descartado.
Existe também a possibilidade de um pacote ser enviado a todos os equipamentos
pertencentes a rede, sendo que para isto é utilizado um código especial para o endereço do
destinatário.
2.6
DETECÇÃO E CORREÇÃO DE ERROS
Erros de transmissão de dados são relativamente comuns, principalmente em alguns
meios como nas transmissões sem-fios. Como resultado dos processos físicos que os geram,
os erros tendem a acontecer com mais freqüência em grandes volumes (rajadas) do que
separadamente (PÉRICAS, 2003, p. 42).
Existe basicamente duas estratégias para tratar erros. A primeira utiliza códigos de
correção de erros, na qual inclui-se informação redundante suficiente em cada bloco de dados
enviados, onde o receptor pode deduzir qual o dado que está faltando na transmissão. A
segunda utiliza códigos de detecção de erros, na qual se inclui redundância suficiente para
permitir que o receptor deduza que houve um erro, mas sem possibilidade de corrigí-lo,
pedindo assim uma retransmissão.
Uma forma mais simples usada para a detecção de erros é através da utilização de bit
de paridade. Esse bit adicionado ao byte a ser transmitido é escolhido pela quantidade de bits
altos (1) que o byte possui. Quando ocorrer um erro de qualquer bit composto pelo byte
haverá um erro de paridade.
Outra técnica utilizada para a detecção de erros é método polinomial ou também
conhecido como Cyclic Redundancy Check (CRC). Quando o método do CRC é empregado, o
transmissor gera o polinômio e o anexa ao dado a ser transmitido. O receptor pega o dado
recebido e gera o seu polinômio para em seguida compará-lo com o recebido pelo
transmissor. Se os resultados forem iguais o dado está correto.
23
2.7
COMPONENTE TRF-2.4G
O componente TRT-2.4G (transceiver) é um circuito confeccionado por Laipac Tech
(1998) para transmissão de dados sem fio. Seu circuito é composto por antena, sintetizador de
freqüência, amplificador de sinal e possui embutido um cristal para o oscilador. Trabalha na
freqüência de 2.4 GHz, aceita transmissão full-duplex, incluindo codificação, decodificação e
buffer de dados.
O TRF-2.4G tem incorporado a função de CRC para detecção de erros, já tendo
implementado a geração e verificação de CRC (LAIPAC TECH, 2005).
Na figura 3 é mostrado o componente TRF-2.4G e o funcionamento de cada pino do
componente é apresentado no quadro 1.
Fonte: Laipac Tech (2005, p. 4).
Figura 3 – Componente TRF-2.4G
Pino
1
2
3
4
5
6
7
Nome
GND
CE
CLK2
CS
CLK1
DATA
DR1
8
9
DOUT2
DR2
10
VCC
Função
Alimentação
Entrada
E/S
Entrada
E/S
E/S
Saída
Descrição
Terra (0v)
Habilita modo receptor ou transmissor
Entrada de clock receptor canal 2
Habilita modo de configuração
Entrada de clock receptor canal 1
Recepção dos dados canal 1
Indicação de dados para leitura no canal 1
(somente no modo ShockBurst)
E/S
Recepção dos dados canal 2
Saída
Indicação de dados para leitura no canal 2
(somente no modo ShockBurst)
Alimentação Alimentação 3V/DC
Fonte: Laipac Tech (2005, p. 5).
Quadro 1 – Funcionalidade dos pinos do TRF-2.4G
O componente TRF-2.4G pode operar em dois modos: ShockBurst e Direct Mode. O
modo de operação ShockBurst é dividido em duas etapas: o microcontrolador transfere o dado
a ser transmitido ao transceiver; e o transceiver transmite este dado aos demais transceivers
(receptores). Nesta primeira etapa o microcontrolador pode enviar o dado na velocidade em
24
que o desenvolvedor entender mais adequado, normalmente mais lento, permitindo o uso de
microcontroladores com baixa velocidade de processamento. O dado é armazenado no buffer
interno ao transceiver. A segunda etapa consiste em transmitir o dado já armazenado no
buffer aos demais transceivers (receptores) presentes no ambiente, independente do
microcontrolador. Para velocidade de transmissão da segunda etapa é possível escolher entre
250 Kbps e 1 Mbps, configurados no transceiver. Para a recepção do dado pelo
microcontrolador de um receptor, é realizado o processo inverso ao descrito anteriormente.
Na figura 4 é demonstrado o princípio de funcionamento do modo ShockBurst.
Figura 4 – Funcionamento do modo ShockBurst
No modo Direct Mode o transceiver funciona como um transmissor e receptor
convencional, não sendo utilizado nenhum tipo de buffer interno ao componente. Caso desejase transmitir a uma velocidade de 1 Mbps, o microcontrolador precisa enviar o dado ao
transceiver nesta velocidade. Como não utiliza buffer, o dado enviado do microcontrolador ao
componente é diretamente transmitido.
2.8
RX/TX
De acordo com Jarvi (1998), RX/TX é uma Application Programming Interface (API)
para a plataforma Java que oferece suporte a escrita e leitura em portas seriais e paralelas de
computadores. O ponto de maior relevância desta API, em relação a Java Communications
API (CommAPI) da Sun, é a sua portabilidade a vários sistema operacionais, como por
exemplo: Windows, MacOS, Linux, Solares, entre outros. Outro ponto positivo desta
biblioteca é a compatibilidade com a especificação da CommAPI da empresa Sun.
No quadro 2 é apresentado um exemplo de código. Neste exemplo é demonstrada a
maneira de reconhecer as portas existentes do computador. A API fornece o método
getPortIdentifier
que retorna em uma estrutura Enumeration as portas disponíveis. Com
o laço while são adicionadas as portas encontradas no array portas. A variável ips é uma
25
instancia da classe CommPortIdentifier e representa uma porta.
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
.
.
.
Enumeration listaDePortas;
listaDePortas = CommPortIdentifier.getPortIdentifiers();
.
.
.
int i = 0;
portas = new String[10];
while (listaDePortas.hasMoreElements()) {
CommPortIdentifier ips = CommPortIdentifier)listaDePortas.nextElement();
portas[i] = ips.getName();
i++;
}
.
.
.
Fonte: adaptado de Jarvi (1998).
Quadro 2 – Exemplo de código utilizando classe da API RX/TX
Para o envio de dados (quadro 3) para porta serial é necessário abrir a porta, passar os
parâmetros da porta, criar um fluxo de saída e escrever os dados na porta.
...
//identificar a porta
CommIdentifier cp = CommPortIdentifier.getPortIdentifier(PortaEscolhida);
//abrir a porta a serial
SerialPort porta = (SerialPort)cp.open("NomeDaClasse",timeout);
//setar parâmetros de configuração da porta
porta.setSerialPortParams(baudrate, DATABITS_8, STOPBITS_2, PARITY_NONE);
//atribuir fluxo de saída para classe abstrata de saída de dados
OutputStream saida = porta.getOutputStream();
//escrever na porta serial
String msg = “Olá Mundo!”;
saida.write(msg.getBytes());
saida.flush();
...
Fonte: adaptado de Jarvi (1998).
Quadro 3 – Exemplo de código utilizado para enviar bytes
2.9
TRABALHOS CORRELATOS
A seguir são explanados três trabalhos correlatos desenvolvidos, apresentados em
26
Shubert (2003), Raulino (1999) e Kluge (1999).
2.9.1
Aplicativo para controle de ferrovia utilizando processamento em tempo real e redes
de Petri
Schubert (2003) construiu um protótipo de uma malha ferroviária (figura 5) utilizando
uma maquete para testes. O foco de seu trabalho era a utilização de Redes de Petri para fazer a
especificação do controle de uma malha ferroviária. O sistema visava o controle em tempo
real de trens. O trabalho teve problemas com a comunicação por rádio freqüência, devido a
ruídos gerados pelo motor do trem. O microcontrolador utilizado para controle dos trens era o
PIC16F84A, o qual não possibilitava a utilização de PWM em hardware para a aceleração e
desaceleração destes.
Fonte: Schubert (2003, p. 73).
Figura 5 – Visão geral da maquete
A alimentação do circuito do trem (figura 6) foi feita através de pilha, isolada da
alimentação do motor, a qual era feita através dos trilhos energizados. Tal configuração foi
arquitetada objetivando a diminuição de interferências geradas pelos ruídos causados pelo
motor do trem.
27
Fonte: Schubert (2003, p. 73).
Figura 6 – Visão do trem desenvolvido por Schubert (2003)
Antes dos cruzamentos haviam sensores que indicavam suas presenças ao circuito do
trem. As mudanças de direção dos desvios dos cruzamentos não foram automatizados, sendo
realizados de forma manual quando necessário (figura 7).
Fonte: Schubert (2003, p. 73).
Figura 7 – Visão do cruzamento desenvolvido por Schubert (2003)
28
2.9.2
Uma aplicação para controle do tráfego ferroviário usando processos concorrentes
Raulino (1999) teve como objetivo mostrar a especificação e implementação de um
protótipo para o controle de uma malha ferroviária. Utilizou em seu trabalho para a
modelagem do protótipo, um modelo formal de especificação e controle de fluxo, chamado de
Redes de Petri. Para a implementação do protótipo foi usada a linguagem de programação
Ada. Processos concorrentes foram utilizados no sistema. Nenhuma implementação em
hardware foi realizada neste trabalho, apenas simulações em software (figura 8).
Fonte: Raulino (1999, p. 76).
Figura 8 – Interface de execução da aplicação desenvolvida por Raulino
2.9.3
Controle computacional de malha ferroviária (Modellbahnanlage der Informatik)
Em Kluge (1999) é relata a construção de uma maquete de malha ferroviária. A
maquete é utilizada para aulas de graduação para o ensino de Redes de Petri, software
embarcado e programação em tempo real. Seu foco é mostrar o comportamento e organização
dos trens na malha, como também ocorrências de concorrência, conflitos e deadlocks e a
solução destes problemas. Na implementação do software foi utilizada a linguagem de
programação C e C++, sendo executado em plataforma Unix. Praticamente todo o hardware
do projeto foi desenvolvido exclusivamente para a maquete, que inclui fontes de alimentação
dos trens e controladores, placas de comunicação entre computador e controladores, sensores
29
para os trilhos (figura 9) e cabo para comunicação. A malha desenvolvida por Kluge (1999)
foi dividida em trechos (seguimentos de trilhos). Estes trechos são eletricamente separados
entre si, sendo que para acionar um trem é energizado o trecho em que o mesmo encontra-se.
Fonte: Kluge (1999).
Figura 9 – Utilização de reed-switch como sensores
2.9.4
Considerações sobre os trabalhos correlatos
No quadro 4 são apresentadas características sobre os trabalhos de Schubert (2003),
Raulino (1999) e Kluge (1999).
Características
Redes de Petri
Schubert (2003)
Raulino (1999)
Kluge (1999)
Processos concorrentes
Implementação em
hardware
Rádio freqüência
Alimentação dos motores
Trilhos
dos trens
Alimentação do circuito
Pilhas
dos trens
Sensores para detecção da
posição dos trens
Cruzamentos com opção
de desvio automatizado
PWM para aceleração dos
trens
Linguagem de
Delphi
Ada
programação
Quadro 4 – Características dos trabalhos correlatos
Trilhos
C++
30
3 DESENVOLVIMENTO
Nas próximas seções são apresentados os requisitos do sistema, a especificação do
hardware e software, a implementação, a operacionalidade da implementação, os resultados e
discussão e a conclusão.
3.1
REQUISITOS DO SISTEMA
Os Requisitos Funcionais (RF) e Requisitos Não-Funcionais (RNF) do sistema, são:
a) controle de velocidade nos trens (RF);
b) comunicação broadcast entre os trens, os cruzamentos e o controlador (RF);
c) verificação dos pacotes transmitidos via RF com CRC (RF);
d) uso do microcontrolador PIC16F628A (RNF);
e) uso do circuito TRF-2.4G (RNF);
f) uso de uma maquete para testes, objetivando simular o mundo real (RNF);
g) uso da linguagem Java para programação do controle no PC (RNF);
h) uso da linguagem C para programação dos microcontroladores (RNF).
3.2
ESPECIFICAÇÃO
O sistema desenvolvido visa controlar um protótipo de uma malha ferroviária. Para tal
foi utilizado um ferrorama, assim como foram desenvolvidos circuitos eletrônicos e software
embarcado para comunicar e controlar dispositivos externos ao computador, como os trens e
cruzamentos.
No computador foram implementadas as rotinas de envio e recebimento de mensagens
aos dispositivos externos, a interface com o usuário e o controle central que vai fazer o
gerenciamento da malha. A comunicação entre o computador e os dispositivos externos (trens
e cruzamentos) é feita através de mensagens enviadas via porta serial.
Para cada dispositivo foi feita uma modelagem individual de hardware e software
31
(exceto controle central, no qual só foi feita a parte do software). O sistema está dividido em
controle central, controlador, trens e cruzamentos, os quais serão detalhados adiante.
3.2.1
Visão geral da solução proposta
Para a construção da malha ferroviária foram utilizados componentes da empresa
Frateschi (2007). Estes componentes são: trilhos, trens e cruzamentos. O hardware foi
montado de maneira artesanal, com o auxílio de placas padrão para confecção dos circuitos,
os quais são responsáveis pelo controle da locomoção dos trens, da detecção de sensores, do
posicionamento de cruzamentos e comunicação entre controlador-trem e controladorcruzamento. Nestes circuitos está presente o microcontrolador PIC16F628A, o qual tem a
função de interpretar e executar comandos recebidos através de mensagens enviadas pelo
computador. Além do microcontrolador, existe em cada dispositivo o componente TRF-2.4G,
que é o responsável por fazer a comunicação entre todos os dispositivos envolvidos na malha.
Por fim, existe o controlador que é o hardware que recebe e envia as mensagens aos trens e
cruzamentos. Este hardware está conectado via porta serial ao computador, o qual possui o
software que gerencia a malha.
Na figura 10 é ilustrada a interligação dos componentes do sistema. Caso o trem passe
por um sensor no trilho, encaminhará via rádio freqüência uma mensagem de passagem por
sensores ao controlador, o qual repassará a informação via porta serial ao sistema de controle
central. O mesmo procedimento ocorre no cruzamento. Com base nas informações recebidas,
o sistema de controle central encaminhará comandos para serem executados. Estes comandos
são enviados para o controlador via porta serial, e então via rádio freqüência para trens e
cruzamentos.
32
Figura 10 – Ligação entre componentes do sistema
3.2.2
Hardware
Os diagramas esquemáticos do hardware envolvido no sistema estão descritos nas
subseções seguintes. Para a confecção dos diagramas esquemáticos foi utilizada a ferramenta
de desenho e simulação Proteus (JAMESON, 2006).
3.2.2.1
Diagrama esquemático do controlador
A placa desenvolvida tem o intuito de fazer a ponte de comunicação entre o
computador e os demais dispositivos. Para realizar a comunicação o computador envia
mensagens para a porta serial no padrão RS232. Como o microcontrolador utiliza o padrão de
comunicação TTL, fez-se necessário o uso do componente RS232 para fazer a conversão
entre os padrões. Na interligação entre o componente TRF-2.4G com o microcontrolador,
foram utilizados resistores de 220 Ohms, devido a diferença da tensão de operação destes
componentes, que são respectivamente 3 e 5 volts. Para estabilizar a tensão do circuito em 5
volts fez-se o uso do regulador L7805. O diagrama esquemático da placa do controlador está
representada na figura 11.
33
Figura 11 – Diagrama esquemático do controlador
3.2.2.2
Diagrama esquemático do trem
A figura 12 apresenta o diagrama esquemático do trem. O diagrama foi dividido em
quatro partes para facilitar o entendimento. A área 1 é responsável pela comunicação do trem,
que para tal foi usado o componente TRF-2.4G. Para a detecção de marcações magnéticas
(imãs) nos trilhos, o trem possui em seu circuito um reed-switch (área 2), que ao ser acionado
muda o valor lógico do pino RB7, sendo assim identificado pelo software como a passagem
pelo sensor. O pino RA1 do microcontrolador é destinado a acionar o relé que inverte o
sentido de rotação do motor. O sinal de saída do pino é de baixa corrente, fazendo com que
seja necessária a utilização de um transistor para fazer o acionamento do relé (área 3). Para a
aceleração e desaceleração do motor utilizou-se a saída PWM disponível no microcontrolador
(PIC16F628A). Na área 4 do esquemático é demonstrada a amplificação do sinal PWM,
gerado pelo microcontrolador, para acionar (movimentar) o motor.
34
Figura 12 – Diagrama esquemático do trem
3.2.2.3
Diagrama esquemático do cruzamento
Para controlar o cruzamento foi desenvolvida uma placa (figura 13) que aciona o
desvio e faz a leitura de três sensores do trilho (reed-switch). O acionamento do desvio é
realizado com a magnetização de uma bobina instalada nos trilhos do cruzamento. Com a
utilização de relés é possível a inversão na polarização, possibilitando o fechamento e a
abertura do desvio. O circuito conta com o microcontrolador PIC16F628A e o componente
TRF-2.4G para comunicação via rádio freqüência.
35
Figura 13 – Diagrama esquemático do cruzamento
3.2.3
Software
Nas
subseções
seguintes
são
apresentados
os
diagramas
relacionados
ao
desenvolvimento do software envolvido no sistema. Para a especificação do software do
controle central é utilizada a Unified Modeling Language (UML), com auxílio da ferramenta
Enterprise Architect (SPARX, 2007), através de diagramas de casos de uso e de classes. Para
a especificação do software embarcado (controlador, trem e cruzamento) foi utilizado o
diagrama de Nassi-Schneiderman com o auxílio da ferramenta NSD-Editor (KALT, 1997).
3.2.3.1
Especificação do controle central
Controle central é o software contido no computador que faz o controle total de cada
dispositivo pertencente a malha ferroviária. As mensagens recebidas e enviadas via rádio
freqüência aos dispositivos são processadas neste software. Cabe ao software gerenciar a
posição de cada trem, evitando possíveis colisões, e o posicionamento dos desvios dos
cruzamentos.
Ao usuário do sistema estão disponíveis as funções de cadastrar trens e cruzamentos,
36
iniciar o controle da malha, fazendo com que os trens e cruzamentos sejam gerenciados pelo
software, e parar o controle da malha. O diagrama de casos de uso é apresentado na figura 14.
Figura 14 – Diagrama de casos de uso
A figura 15 mostra o diagrama de classes do protótipo do controle central.
Figura 15 – Diagrama de classes
37
A classe Malha é criada para armazenar as informações de ligações entre trechos e
cruzamentos e também conta com instâncias dos objetos Trem. Cada objeto de Trem é um
processo, o qual tem sua execução independente para cada objeto. Nesta execução é
processada a rota já definida em que o trem deverá seguir na malha. No objeto de Cruzamento
tem-se o estado atual do desvio, se está aberto ou fechado. Trecho e Ponto são classes que
demarcam regiões na malha. Os objetos instanciados destas classes possuem controle de
mútua exclusão, pois são considerados recursos e são disputados pelos objetos do tipo Trem.
Os objetos do tipo Sensor são utilizados para saber os pontos de início e fim dos trechos e
pontos, e assim saber a qual trecho está ligado a qual ponto.
A comunicação é realizada pela classe Comunicacao, que se responsabiliza por receber
e enviar mensagens aos dispositivos. É tarefa deste objeto a retransmissão de mensagens e
aguardo de respostas de dispositivos.
Na figura 16 é mostrado como foi modelada a malha do protótipo. Os trechos da malha
foram chamados de T01, T02 e T03. Cada trecho é delimitado por sensores que são
representados por S01 até S06. P01 e P02 são regiões onde existe o cruzamento dos trilhos.
Figura 16 – Modelagem da malha do protótipo
No quadro 4 é demonstrado como foi representado os dados fornecidos pela figura 16.
Todo trecho é delimitado por dois sensores. Tornando-se isso uma regra, sabe-se que do
sensor S01 até o S05 é composto o trecho T01, do S03 até o S06 o trecho T02 e do S02 até o
S04 o trecho T03 (quadro 5).
38
Trechos da malha
T01
S01
S05
T02
S03
S06
T03
S02
S04
P01
S02
S01-S03
P02
S04
S05-S06
Pontos da malha
Quadro 5 – Representação da modelagem da malha representada na fig. 16
Os pontos (P01 e P02) do quadro 5, além de identificarem os sensores os quais estão
relacionados, informam o sentido o qual é possível fazer o desvio. Caso um trem atinja o
sensor S02 do ponto P01, é possível afirmar que o trem poderá (dependendo de sua rota)
escolher se irá passar pelo sensor S01 ou S03. No caso contrário, se o trem detectar os
sensores S01 ou S03 do ponto P01, é obrigatória a passagem pelo sensor S02, não tendo
escolha.
3.2.3.2
Especificação do controlador
O software do controlador tem o papel de encaminhar as mensagens recebidas de uma
ponta para outra (de um lado o computador, ligado via porta serial, e do outro lado os trens e
cruzamentos, ligados via rádio freqüência). Na figura 17 é ilustrado o diagrama geral do
software controlador. As duas formas de receber mensagens são: via porta serial e via rádio
freqüência. Se o controlador recebe via rádio freqüência uma mensagem, irá encaminhá-la
para porta serial. O inverso também é verdadeiro, caso receba via porta serial encaminhará via
rádio freqüência. Para cada byte enviado do computador ao controlador é gerada uma
interrupção no microcontrolador. A rotina tratadora da interrupção é a responsável por
armazenar estes bytes recebidos em um buffer. Quando o buffer está preenchido, indica que
existe uma mensagem pronta para ser enviada via rádio freqüência. Cabe ao software enviar
(figura 18) o buffer bit-a-bit (figura 19) para o componente TRF-2.4G. Caso o componente
tenha dados em seu buffer interno, indica que recebeu uma mensagem via rádio, sendo que o
software irá retirar (figura 20) bit-a-bit (figura 21) para posteriormente enviá-lo para o
computador.
39
Figura 17 – Diagrama de Nassi-Schneiderman do controlador
Figura 18 – Diagrama da rotina para enviar dados para o TRF-2.4G
Figura 19 – Diagrama da rotina para enviar bit-a-bit ao TRF-2.4G
40
Figura 20– Diagrama da rotina para receber dados para o TRF-2.4G
Figura 21 – Diagrama da rotina para receber bit-a-bit ao TRF-2.4G
No início do diagrama do controlador está sendo atribuído o endereço de uma rotina
(figura 22) para ser executada caso ocorra uma interrupção. Esta interrupção ocorerá toda vez
em que o microcontrolador receber dados pela porta serial.
Figura 22 – Diagrama da rotina executada em caso de interrupção
Configurações do transceiver como endereço e velocidade de comunicação, potência
da antena, a habilitação do uso de CRC e o canal de comunicação são apresentados na figura
23.
41
Figura 23 – Diagrama da rotina de configuração
As rotinas para realizar a mudança do transceiver em receptor (figura 24) e para
transmissor (figura 25) são demonstradas nos diagramas das respectivas figuras.
Figura 24 – Diagrama da rotina de mudança para receptor
42
Figura 25 – Diagrama da rotina de mudança para transmissor
Na figura 26 é apresentada a rotina para enviar o dado recebido via rádio para porta
serial.
Figura 26 – Diagrama da rotina para mandar dados via serial
3.2.3.3
Especificação do trem
O software embarcado no trem não possui autonomia de decidir sobre a locomoção e
direção do trem. Decisões sobre a locomoção do trem são de responsabilidade do software
que gerencia a malha no computador. Cabe ao software do trem receber via rádio freqüência
os comandos enviados a ele pelo controle central, os quais são: aceleração e desaceleração na
velocidade desejada, parada total e inversão do motor.
Na figura 27 é ilustrado o diagrama do programa embarcado no trem. No laço principal
do programa testa-se a existência de mensagens disponíveis no TRF-2.4G. Caso tenha
mensagem, é verificado se a mesma pertence ao trem. Se pertencer, será analisado se este
comando já foi executado, evitando que o mesmo comando seja executado mais de uma vez
43
(caso seja uma retransmissão). Após a execução do comando, é enviada uma resposta de
confirmação do recebimento ao computador. Outro teste realizado no laço refere-se ao sensor
magnético presente no trilho. Existe um flag de passagem pelo trilho. Caso estiver ativo, o
software irá informar ao computador a passagem pelo sensor. Neste momento o software
aguarda uma resposta do computador por um tempo determinado. No caso de não receber
uma resposta dentro do tempo determinado, é executada a rotina de parada imediata do trem,
garantindo assim que o mesmo não avance sobre um trecho não autorizado da malha. O flag é
ativado dentro da rotina de tratamento da interrupção. Ainda no laço é verificado se existem
dados para serem enviados por rádio freqüência para o computador.
Figura 27 – Diagrama de Nassi-Schneiderman do trem
No inicio do diagrama do trem (figura 27) está sendo atribuída uma rotina (figura 28)
para ser executada caso ocorra uma detecção de um sensor (rotina atribuída a partir de uma
interrupção). Sempre que o trem passar sobre um sensor do trilho ocorrerá uma interrupção.
44
Figura 28 – Diagrama da rotina de interrupção do trem
3.2.3.4
Especificação do cruzamento
O software do cruzamento tem o papel de chaveador do desvio. Sempre que solicitado
pode alterar o posicionamento dos trilhos, mudando assim o destino do trem que passar no
cruzamento. Além de desviar os trens, é tarefa do cruzamento informar ao controle central a
chegada de trens neste cruzamento. Sempre que um sensor for acionado, o software entrará
em uma rotina de tratamento de interrupção, na qual será ativado um flag do sensor
correspondente. Durante a execução do laço principal do programa, é verificado se existem
flags de sensores ativados. Caso tenha, são enviadas mensagens ao controle central avisandoo dos respectivos sensores. O diagrama da especificação do software do cruzamento é
demonstrado na figura 29.
45
Figura 29 – Diagrama de Nassi-Schneiderman do cruzamento
No começo do diagrama apresentado na figura 29 é atribuída uma rotina para ser
executada caso ocorra uma interrupção.
3.3
IMPLEMENTAÇÃO
A seguir é apresentada a implementação, mostrando as técnicas e ferramentas
utilizadas na confecção do hardware e software.
3.3.1
Técnicas e ferramentas utilizadas
Para implementação do hardware foram utilizados os componentes TRF-2.4G para
comunicação de dados e o microcontrolador PIC16F628A. Para implementação do software
46
no computador foi utilizada a linguagem Java com o ambiente de desenvolvimento Eclipse,
usando a programação orientada a objetos conforme a especificação no diagrama de classes
(figura 15). Para o software embarcado nos microcontroladores foi utilizada a linguagem C,
com o ambiente PIC C, usando a programação estruturada, conforme especificação através
dos diagramas de Nassi-Schneiderman.
3.3.2
Hardware
O hardware corresponde as placas desenvolvidas para controlar trens, cruzamentos e a
comunicação entre os dispositivos com o computador. Nas subseções seguintes é apresentada
a montagem de cada placa, conforme diagramas esquemáticos descritos na especificação.
3.3.2.1
Montagem da placa do controlador
O circuito foi montado em uma única placa (figura 30), conforme diagrama
esquemático apresentado na figura 11. Utilizou-se uma placa do tipo universal para fixação
dos componentes. A fonte de alimentação ficou externa a placa. Para estabilizar a tensão do
circuito em 5 volts fez-se o uso do regulador L7805. Para gerar o clock do microcontrolador
foi utilizado um cristal de 4Mhz.
O componente que tem destaque nesta placa em relação as demais placas (placas do
trem e cruzamento) desenvolvidas no protótipo é o MAX232N, o qual tem a função de
converter sinais do padrão RS232 (usado no computador) para o TTL (usado no
microcontrolador).
47
Figura 30 – Placa do controlador
3.3.2.2
Montagem da placa do trem
A montagem do trem consistiu na modificação de uma locomotiva de ferrorama,
modelo G12 fabricado pela empresa Frateschi (2007). Originalmente os pólos de ligação do
motor estavam ligados indiretamente aos trilhos, através de fios com uma escova de contato
encostada às rodas. Como as rodas e os trilhos são metálicos, a corrente elétrica chega até o
motor (figura 31). Neste modelo existe um controlador (variador de tensão) que libera mais ou
menos energia nos trilhos, fazendo assim com que todos os trens contidos nos trilhos possam
alterar suas velocidades. Desta forma original, torna-se impossível a possibilidade de parar
um trem em um cruzamento e fazer com que outro trem sobre a mesma malha continuasse
andando. Para solucionar este problema teve-se de modificar os trens.
Figura 31 – Ligação original do motor do trem
48
Determinou-se que a alimentação dos trens continuasse vindo dos trilhos, sendo que a
tensão foi fixada em 12 volts. Caso um trem no modelo original fosse colocado nos trilhos
nesta situação, iria andar em velocidade máxima. A primeira modificação feita foi o
desligamento do motor com os fios vindos das rodas. Os fios foram então ligados ao circuito
(placa) confeccionado para controlar o trem. Com isso, o circuito é alimentado com a tensão
que vem dos trilhos. Em seguida o motor foi ligado ao circuito, possibilitando o controle da
velocidade e do sentido de rotação do mesmo. A figura 32 mostra a modificação na ligação do
trem.
Figura 32 – Ligação da roda com placa e motor do trem
A placa controladora do trem, construída conforme diagrama esquemático apresentado
na figura 12, foi instalada sobre a carenagem do mesmo, devido a falta de espaço entre o
motor e a carenagem. Mesmo ficando do lado de fora, a largura da placa não ultrapassou a
largura do trem. Na montagem da placa não foi possível instalar o componente TRF-2.4G
junto à mesma. Devido a isso, fez-se a confecção de duas placas, uma para abrigar o
transmissor e outra para os demais componentes. Um mini-relé duplo foi utilizado para
realizar a inversão do motor. A instalação do reed-switch foi feita no chassi do trem, logo
abaixo do motor.
Após alguns testes verificou-se a presença de ruídos gerados pelo motor. Para
amenizar o nível destes ruídos sobre o circuito, foram trocados os fios de ligação originais do
trem. Os fios foram substituídos por cabos coaxiais e aterrados para evitar interferências
eletromagnéticas. Foi utilizada a malha externa ao cabo para fazer o aterramento. Usou-se
capacitores para resolver possíveis problemas de desligamentos momentâneos entre as rodas e
os trilhos (devido a vibrações).
Na figura 33 é mostrada a placa instalada ao trem.
49
Figura 33 – Trem com placas instaladas
3.3.2.3
Montagem da placa do cruzamento
Os cruzamentos do protótipo são desvios fabricados pela empresa Frateschi (2007).
Estes desvios, ao contrário dos trens, não precisaram sofrer modificações em suas partes
elétricas. A base de funcionamento destes desvios é o eletromagnetismo. Cada desvio possui
uma bobina que tem a função de um eletroímã, que por sua vez, ao ser energizado polariza
(magneticamente) e faz a mudança nos trilhos. Para voltar a posição inicial dos trilhos é
necessário inverter os pólos positivo com o negativo e energizar novamente a bobina. A figura
34 ilustra o desvio utilizado no desenvolvimento do trabalho.
Figura 34 – Desvio Frateschi
O acionamento da bobina do desvio é acionada através de relés, permitindo uma
50
passagem maior de corrente elétrica. Para evitar o aquecimento e uma possível queima das
bobinas, o microcontrolador aciona a bobina por um curto intervalo de tempo, o suficiente
para fazer a mudança dos trilhos, e então a desliga.
A placa do cruzamento (figura 35), confeccionada a partir do diagrama esquemático
apresentado na figura 13, além de ter a função de mudança dos desvios tem a função de
monitorar sensores (reed-switch) nos trilhos. Os sensores são acionados sempre que um trem
passa sobre eles.
Figura 35 – Placa do cruzamento
3.3.3
Software
As implementações dos softwares envolvidos no sistema são apresentados nas
subseções seguintes, seguindo a especificação apresentadas nas figuras 15, e 17 a 29.
3.3.3.1
Controle central
Conforme mencionado na especificação (figura 15), a classe Comunicacao é
responsável pela comunicação entre o controlador e o software controle central. Cabe a classe
o envio e recebimento de mensagens. Toda mensagem enviada para um dispositivo recebe um
51
número que identifica e a torna única. Esta identificação é utilizada para garantir que um
dispositivo não execute mais de uma vez a mesma mensagem. Esta situação poderá ocorrer
caso o dispositivo receba a mensagem e não comunique o recebimento ao controle central,
fazendo com que haja uma retransmissão da mensagem.
As mensagens enviadas ao controlador precisam ser convertidas para um array de 6
bytes. No quadro 6 é apresentado método para o envio de mensagens ao controlador.
private void EnviarUmByte(int[] it) {
if (escrever == true) {
try {
saidaStream = sPorta.getOutputStream();
} catch (Exception e) {
e.printStackTrace();
}
try {
//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();
} catch (Exception e) {
System.out.println("Houve um erro durante o envio.");
e.printStackTrace();
System.exit(1);
}
} else
System.exit(1);
}
Quadro 6 – Método de envio para porta serial
O processo de receber mensagem é implementado utilizando-se um evento (listener)
para os dados recebidos pela porta serial. O método (serialEvent(SerialPortEvent ev))
que trata o evento verifica a quantidade de bytes recebidos e com estes é preenchido um array
de 6 bytes (itBuffer[iBuff]). Ao completar o array, a mensagem foi totalmente recebida e
então é armazenada em um ArrayList chamado resp. O método é apresentado no quadro 7.
52
public void serialEvent(SerialPortEvent ev) {
String dados = null;
switch (ev.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferler = new byte[6];
try {
while (entradaStream.available() > 0) {
nodeBytes = entradaStream.read(bufferler);
}
String dadosLidos = new String(bufferler);
dados = dadosLidos;
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 0; i < nodeBytes; i++) {
if (dados.substring(i, i + 1).getBytes()[0] == '+') {
// nova 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++;
}
}
}
break;
}
}
Quadro 7 – Método de recebimento de dados
Na classe Malha foram criadas listas para o armazenamento dos componentes da
malha. O quadro 8 apresenta as declarações das listas de trechos, pontos, sensores,
cruzamentos e trens. Foram implementados nessa classe os métodos de pesquisa para essas
listas. Dos métodos de pesquisa destaca-se o PesquisaTrechoSeguinte(Trem t, Sensor
s).
Nesse método é informado o trem e um sensor acionado por ele (com estas informações
pesquisa-se o trecho seguinte ao trecho atual do trem).
53
Public class Malha {
//lista dos com os objetos de trens cadastrados no sistema
private ArrayList listaTrens = new ArrayList();
//lista dos com os objetos de cruzamentos cadastrados no sistema
private ArrayList listaCruzamentos = new ArrayList();
//lista dos com os objetos de trechos que compõem a malha ferroviária
private ArrayList trechosMalha = new ArrayList();
//lista dos com os objetos de sensores que compõem a malha ferroviária
private ArrayList sensoresMalha = new ArrayList();
//lista dos com os objetos de pontos que compõem a malha ferroviária
private ArrayList pontosMalha = new ArrayList();
//lista das mensagens recebidas e que precisam ser processadas
private CmdMensagens mensagensRecebidas = new CmdMensagens();
...
public boolean PesquisaTrechoSeguinte(Trem t, Sensor s){
boolean retorno = false;
ArrayList tSeguintesTemp = new ArrayList();
Trecho trechoAtual = t.getTrechoAtual();
for (int i=0; i<trechosMalha.size(); i++){
if (!((Trecho)trechosMalha.get(i)).equals(trechoAtual)){
Trecho trechoTemp = (Trecho)trechosMalha.get(i);
if (trechoTemp.getSensor1().equals(s)){
tSeguintesTemp.add(trechoTemp); //achou trecho seguinte
retorno = true;
} else if (trechoTemp.getSensor2().equals(s)){
tSeguintesTemp.add(trechoTemp); //achou trecho seguinte
retorno = true;
}
}
}
for (int i=0; i<pontosMalha.size(); i++){
Ponto pontoTemp = (Ponto)pontosMalha.get(i);
if (pontoTemp.getSensor1().equals(s)){
pontoSeguinte = pontoTemp; //ponto seguinte tem opção de desvio
for (int y=0; y<pontoTemp.getSensoresDesvio().size(); y++){
Sensor sensorTemp = (Sensor)pontoTemp.getSensoresDesvio().get(y);
tSeguintesTemp.add(ProcuraTrecho(sensorTemp));
}
retorno = true;
} else //ponto sem opção de desvio
for (int y=0; y<pontoTemp.getSensoresDesvio().size(); y++){
Sensor sensorTemp = (Sensor)pontoTemp.getSensoresDesvio().get(y);
if (sensorTemp.equals(s)){
pontoSeguinte = pontoTemp;
tSeguintesTemp.add(ProcuraTrecho(pontoTemp.getSensor1()));
retorno = true;
}
}
}
trechosSeguintes = tSeguintesTemp;
return retorno;
}
Quadro 8 – Trecho de código da classe Malha
54
3.3.3.2
Controlador
O software controlador (especificado na figura 17) tem por finalidade detectar
mensagens recebidas dos dispositivos via rádio e encaminhá-las via porta serial para o
computador e vice-versa (receber do computador e enviá-las ao dispositivo endereçado)
(figura 36). Para a tarefa de comunicação por rádio freqüência foi utilizado o componente
TRF-2.4G.
Figura 36 – Comunicação entre as partes envolvidas
Toda mensagem enviada e recebida é composta por um array de seis bytes. Cada byte
tem uma função especifica. No array de envio (quadro 9) a dispositivos (do tipo trem e
cruzamento), o byte [idDisp] é responsável por armazenar o identificador do dispositivo
destino da mensagem. O comando a ser executado no microcontrolador é armazenado no byte
[funcao]. Dependendo da função (comando) a ser executada, é necessário a passagem de
valores (parâmetros), sendo que para tal estão disponíveis os bytes [valor1] e [valor2].
Cada mensagem enviada pelo controle central para os dispositivos possui um número de
identificação. Esta identificação é armazenada no byte [numPacEnv]. Caso a contagem do
byte [numPacEnv] chegar a 255, é reiniciado do número 0. Para o último byte [X] do array
não foi implementada nenhuma função, ficando este disponível.
[idDisp][funcao][valor1][valor2][numPacEnv][X]
Quadro 9 – Array de bytes para envio de mensagens a dispositivos do tipo trem e cruzamento
As mudanças do array de envio para o de recebimento de mensagens são poucas. O
byte [0] representa que a mensagem é destinada ao software de controle central.
[idDispRem]
é o identificador do dispositivo remetente (trens ou cruzamentos). Os demais
55
bytes são conforme descritos anteriormente. As mensagens encaminhadas dos dispositivos ao
controlador têm seu array demonstrado no quadro 10.
[0][idDispRem][funcao][valor1][valor2][numPacEnv]
Quadro 10 – Array de bytes para recebimento de mensagens pelo controlador
Estando o array de envio preenchido, cabe ao software do microcontrolador
encaminhá-lo para o componente TRF-2.4G. O primeiro passo é percorrer o array de bytes,
denominado de buf, para retirar cada byte a ser enviado. O segundo passo é colocar bit-a-bit
no transmissor cada byte a ser enviado. O código responsável pelas operações descritas é
mostrado no quadro 11, respectivamente os métodos putBuf() e putByte(). Foram também
implementados os métodos getBuf() e getByte(), que seguem os mesmos passos do
putBuf()
e putByte(), mas com objetivos contrários (quadro 12).
...
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();
}
}
...
Quadro 11 – Métodos para envio de dados
56
...
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;
}
...
Quadro 12 – Métodos para recebimento de dados
No código descrito no quadro 13, verifica-se a cada ciclo do laço while se existem
dados para pegar ou enviar no transmissor. O envio do dado recebido pelo transmissor é feito
em seguida byte-a-byte pelo comando putc().
57
#define BUFFER_SIZE 6
...
int8 q[BUFFER_SIZE]; //buffer temporário
int8 i=0;
int8 j=0;
...
while (1){
//loop infinito
if(input(TRW_DR1)){//verifica se exite dados no TRF para pegar
getBuf();
//pega dados e coloca no buffer (buf)
//envia bytes para porta serial
putc('+');
// caracter de inicialização
putc(buf[0]);
putc(buf[1]);
putc(buf[2]);
putc(buf[3]);
putc(buf[4]);
putc(buf[5]);
putc('-');
// caracter de finalização
}
if(i>=BUFFER_SIZE){//testa se já tem dados p/ transmitir via RF
for(j=0 ; j < BUFFER_SIZE; j++) {
buf[j] = q[j];
}
i = 0;
trwSetTx();
// muda para transmissor
delay_ms(1);
putBuf();
// manda pacote (buf)
delay_ms(1);
trwSetRx();
// muda para receptor
delay_ms(1);
}
...
}
...
//trata interrupção na chegada de bytes na porta serial
#int_rda
void serial_isr() {
int8 a;
a = getchar();
q[i] = a;
i++;
}
Quadro 13 – Laço principal do programa
No código apresentado no quadro 13 também foi apresentada a rotina que trata a
interrupção da porta serial. Todo byte recebido pela porta é colocado temporariamente no
array q[], que mais tarde é transmitido via rádio freqüência.
3.3.3.3
Controle trem
As funcionalidades do software embarcado no trem (especificado na figura 27) são:
58
acelerar e desacelerar, parar, inverter rotação do motor e detectar sensores dos trilhos. Sempre
que um trem passar sobre um sensor, será chamada uma rotina tratadora desta interrupção
(quadro 14). Com o comando enable_interrupts(int_rb) são habilitadas as interrupções
nos pinos RB7, RB6, RB5 e RB4. Caso haja uma mudança em algum destes pinos de alto
para baixo ou baixo para alto, a execução do software é desviada para a rotina
detect_rb_change().
sensorTrilho
Dentro do método é feito um teste (teste A) para certificar que o flag
não esteja ativado. No passo seguinte é testado (teste B) se o pino RB7 passou
do estado alto para baixo. Caso tenha, ativa-se o flag sensorTrilho para que em uma
próxima etapa do software seja enviada uma mensagem ao controle central, informando-o da
passagem do trem pelo sensor.
...
enable_interrupts(int_rb);
enable_interrupts(global);
...
#int_rb
void detect_rb_change() {
int1 current;
static int1 last=0;
if (!sensorTrilho){
current=input(pin_b7);
if ((last)&&(!current)){
sensorTrilho = 1;
}
last=current;
}
}
Teste A
Teste B
Quadro 14 – Rotina tratadora de interrupção do trem
No quadro 15 é apresentado o método responsável pela aceleração e desaceleração do
trem. A rotina tem como funcionalidade incrementar ou decrementar o valor da variável
velocidade.
A cada passagem pelo laço é informado o novo valor da variável a função
set_pwm1_duty(),
que faz a atualização do PWM. Para a função do PWM são aceitos
valores entre 0 e 255, sendo respectivamente a variação entre o trem estar parado ou em
velocidade máxima.
59
byte velocidade = 0;
...
//velocidade trem: acelera ou desacelera
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);
}
}
...
veloc(buf[2]); //chamada do método veloc()
Quadro 15 – Método de aceleração e desaceleração com PWM
Os valores dos bytes [funcao], [valor1] e [valor2] que integram o array das
mensagem enviadas do controle central ao trem são descritos no quadro 16.
Função
Valor1
Valor2
a
0 até 255
0 até 255
p
-
-
i
-
-
R
0 até 255
Descrição
Comando para acelerar o trem, o valo1
representa a velocidade desejada e o
valor2
velocidade
necessária
para
o
arranque do motor.
Comando para parar o trem. Valor1 e valor2
não são necessários.
Comando para inverter o sentido da rotação
do motor.
Aviso de recebimento de uma resposta do
controle
central.
Valor1
contém
o
identificador
da
mensagem
que
foi
respondida.
Quadro 16 – Comandos aceitos pelo trem
3.3.3.4
Cruzamento
O quadro 17 apresenta a rotina que faz o tratamento da interrupção gerada pelos
sensores dos trilhos. Sempre que houver uma mudança nos estados dos pinos RB7 (sensor 1),
RB6 (sensor 2) e RB5 (sensor 3) a execução do programa será desviada para a rotina
detec_rb_change().
Neste método é verificado se a mudança de estado do pino foi para alto
ou baixo através da condição if ((last7)&&(!current7)). Caso tenha sido para baixo é
setado o flag sensorTrilho1.
60
#int_rb
void detect_rb_change() {
int1 current7;
static int1 last7=0;
int1 current6;
static int1 last6=0;
int1 current5;
static int1 last5=0;
//detecta a passagem no sensor1 / PIN RB7
if (sensorTrilho1 == 0){
current7=input(pin_b7);
if ((last7)&&(!current7)) {
sensorTrilho1 = 1;
}
last7=current7;
}
//detecta a passagem no sensor2 / PIN RB6
if (sensorTrilho2 == 0){
current6=input(pin_b6);
if ((last6)&&(!current6)) {
sensorTrilho2 = 1;
}
last6=current6;
}
//detecta a passagem no sensor3 / PIN RB5
if (sensorTrilho3 == 0){
current5=input(pin_b5);
if ((last5)&&(!current5)) {
sensorTrilho3 = 1;
}
last5=current5;
}
}
Quadro 17 – Rotina que detecta passagem por sensores
No quadro 18 é mostrado o código para o acionamento da bobina do cruzamento.
Foram implementados dois métodos, um para abrir o desvio e outro para fechar. Com a
instrução output_bit(pin_b3,1) é acionada a bobina. Após ser acionada é aguardado o
tempo de 800 milisegundos e então desligada, evitando assim o aquecimento da mesma. Para
abrir o desvio é necessário também acionar o relé para inverter a polarização da bobina.
void AbrirDesvio(){
output_bit(pin_a1,1);
output_bit(pin_b3,1);
delay_ms(800);
output_bit(pin_b3,0);
output_bit(pin_a1,0);
}
//relé da bobina
//saída da bobina
//desaciona bobina
//desliga o relé
void FecharDesvio(){
output_bit(pin_b3,1);
delay_ms(800);
output_bit(pin_b3,0);
}
Quadro 18 – Métodos para abrir e fechar desvio
61
Os valores dos bytes [funcao], [valor1] e [valor2] que integram o array das
mensagem enviadas do controle central ao cruzamento são descritos no quadro 19.
Função
Valor1
Valor2
m
a
-
m
f
-
R
0 até 255
Descrição
Comando para mudar a posição do desvio do
cruzamento.
O
valor1
identifica
que
deseja-se abrir o desvio. Valor2 não é
necessário.
Comando
para
fechar
o
desvio
do
cruzamento.
Aviso de recebimento de uma resposta do
controle
central.
Valor1
contém
o
identificador
da
mensagem
que
foi
respondida.
Quadro 19 – Comandos aceitos pelo cruzamento
3.4
OPERACIONALIDADE DA IMPLEMENTAÇÃO
A operacionalidade do hardware inicia-se com as ligações das fontes dos trilhos,
cruzamentos e do controlador. O segundo passo é colocar os trens nos trechos indicados pela
rota de cada um como trecho inicial.
Para iniciar o gerenciamento da malha pelo software do controle central é necessário
clicar no menu de Controle e em seguida escolher a opção de Iniciar (figura 37).
62
Figura 37 – Tela inicial do software
No menu de Cadastro estão disponíveis as opções de cadastro de trens e cruzamentos.
Na figura 38 é apresentada a tela de cadastro dos trens. Neste cadastro deve se informar: o ID
do trem, nome para identificação, velocidade de arranque, velocidade mínima e o caminho do
arquivo onde está descrita a rota em que o trem deve percorrer. A velocidade de arranque e
mínima é representada por um número percentual de 1 à 100%.
Figura 38 – Tela de cadastro de trens
A tela para cadastrar cruzamentos é apresentada na figura 39. Para cadastrar um
63
cruzamento é necessário informar o ID do cruzamento, um nome para identificação e os
identificadores de três sensores.
Para o preenchimento dos campos de sensores é levada em conta a montagem do
hardware na malha. No campo desvio aberto é informado qual o identificador do sensor que o
trem irá detectar ao passar pelo desvio na posição de aberto (quando o desvio está voltado
para parte curva). O mesmo ocorre para desvio fechado (quando o desvio está voltado para
parte reta). Os campos de sensor ID 1, 2 e 3 são para calibrar o sistema. Quando o software do
controle central receber do cruzamento que o sensor com ID 1 foi acionado, verificará qual o
identificador que foi informado no campo sensor ID 1 (S02). Em seguida será informado ao
trem que sua passagem foi pelo sensor S02.
Figura 39 – Tela de cadastro de cruzamentos
3.5
RESULTADOS E DISCUSSÃO
Desenvolver um protótipo de controle de uma malha ferroviária foi considerado
complexo, devido a quantidade de dispositivos envolvidos. A dificuldade está em adaptar um
ferrorama convencional para ser controlado por circuitos com microcontroladores.
A utilização do microcontrolador PIC16F628A para o controle realizado no hardware
mostrou-se eficiente para tarefas de controle de velocidade (PWM) e o uso de interrupções
para detecção de sensores. O componente TRF-2.4G proveu grande facilidade para transmitir
e receber mensagens.
Na montagem do hardware do trem teve-se problemas com o ruído gerado pelo motor
64
e com mau contato das rodas com os trilhos. Para resolver os problemas de mau contato foram
limpos os trilhos, as rodas e as palhetas (escovas que ficam encostadas nas rodas). Na placa
do trem foi adicionado na entrada do circuito um capacitor de 220uF para atenuar os picos
gerados pelo mau contato. Foram adicionados ao circuito capacitores cerâmicos para tentar
resolver o problema do ruído gerado pelo motor. Sem sucesso, foi revestida internamente a
carenagem do trem com papel alumínio e ligado ao terra. Mesmo com essas medidas, ainda
teve-se problemas de ruído. A última modificação foi a troca dos fios originais do trem por
cabos coaxais. Após aterrá-los notou-se uma melhora significativa na interferência dos ruídos.
Exceto pelos problemas citados acima, todas as outras funcionalidades esperadas do
protótipo foram alcançadas.
No quadro 20 é apresentado o comparativo das características do protótipo
desenvolvido com os trabalhos correlatos.
Características
Protótipo
desenvolvido
Trilhos
Trilhos
Trilhos
Pilhas
Redes de Petri
Processos concorrentes
Implementação em
hardware
Rádio freqüência
Alimentação dos
motores dos trens
Alimentação do
circuito dos trens
Sensores para detecção
da posição dos trens
Cruzamentos com
opção de desvio
automatizado
PWM para aceleração
dos trens
Schubert (2003)
Raulino
(1999)
Kluge (1999)
Trilhos
Java e C para
Linguagem de
Delphi
Ada
C++
microcontroladores
programação
PIC
Quadro 20 – Características do protótipo desenvolvido e trabalhos correlatos
65
4 CONCLUSÕES
Os objetivos propostos foram alcançados. A substituição do microcontrolador
PIC16F84A pelo PIC16F628A foi bem sucedida. O controle de velocidade (aceleração e
desaceleração) também foi bem sucedido, conforme desenvolvido. Com o novo componente
para comunicação, o TRF-2.4G, foi possível tornar mais eficiente e confiável a comunicação
entre controlador, trens e cruzamentos. A troca dos sensores (reed-switch) da lateral dos
trilhos (como acontecia no protótipo de Schubert (2003)) para dentro dos trilhos trouxe maior
precisão na detecção e também uma maior segurança, visto que sua fixação ficou mais
protegida, dificultando que seja retirado da posição estabelecida acidentalmente.
O componente TRF-2.4G teve fundamental importância no desenvolvimento deste
trabalho, pois apresenta um ambiente de alto nível para o envio e recebimento de dados via
rádio freqüência.
Para execução deste trabalho fez-se necessário o estudo do funcionamento do
componente
TRF-2.4G,
construção
de
circuitos
eletrônicos,
linguagem
C
para
microcontroladores e a utilização do microcontrolador PIC16F628A. Todos estes
componentes mostram-se adequados para o referido projeto. A linguagem Java também se
mostrou adequada para o desenvolvimento do software do controle central.
Há, no entanto limitações no trabalho desenvolvido. No software do controle central,
não é realizada consistência das rotas definidas para o trem, faltando um editor e um
compilador de rotas. O circuito desenvolvido para os cruzamentos é limitado a controlar
apenas um desvio e monitorar no máximo três sensores por cruzamento.
4.1
EXTENSÕES
Existem pontos que podem ser agregados ou melhorados no protótipo. Como sugestão
pode-se citar:
a) desenvolver um dispositivo para medir a velocidade do trem em tempo real,
possibilitando um controle mais suave e preciso no arranque inicial do motor;
b) controlar a passagem dos trens (entrada e saída) nos pontos da malha levando em
conta o tamanho dos mesmos (inclusive com número variado de vagões);
66
c) desenvolver um dispositivo capaz de identificar o real posicionamento do trem
sobre a malha ferroviária;
d) disponibilizar um controle manual dos dispositivos envolvidos na malha;
e) desenvolver um editor da malha ferroviária para a modelagem de trechos e
cruzamentos, possibilitando mostrar o mapa construído com a localização de cada
trem;
f) substituir porta serial do controlador por porta Universal Serial Bus (USB);
g) confeccionar as placas com a tecnologia Surface Mounted Devices (SMD), visando
diminuir o espaço ocupado nos trens;
h) utilização de sensores ópticos para detecção da passagem dos trens;
i)
utilização de ponte H (STMICROELECTRONICS, 2000) para inversão dos
motores dos trens.
67
REFERÊNCIAS BIBLIOGRÁFICAS
AMÉRICA LATINA LOGÍSTICA. Gestão voltada para segurança. Curitiba, [2005?].
Disponível em: <http://www.fae.edu/publicacoes/pdf/revista_fae_business/n13/all.pdf>.
Acesso em: 9 set. 2006.
BARR, Michael. Introduction to pulse width modulation. [S.l.], 2001. Disponível em:
<http://www.embedded.com/story/OEG20010821S0096>. Acesso em: 9 set. 2006.
DOYLE, Paul; ZACKER, Craig. Redes de computadores: configuração, manutenção e
expansão. São Paulo: Makron, 2000.
FRATESCHI. [Brasil], [2007?]. Disponível em: <http://www.frateschi.com.br>. Acesso em:
21 mar. 2007.
GHIRARDELLO, Ariovaldo. Apostila sobre modulação PWM. [São Paulo], [2006?].
Disponível em:
<http://www.equipetecnica.com.br/cursos/apostila_curso_pwm/apostila_pwm.pdf>. Acesso
em: 05 abr. 2007.
JANCZURA, Chris W. Modelling and analysis of railway network control logic using
coloured Petri nets, 1998. 246 f. Thesis (Doctor of Philosophy in Mathematics) - School of
Mathematics and Institute for Telecommunications Research, University of South Australia,
Australia. Disponível em:
<http://citeseer.ist.psu.edu/cache/papers/cs/19121/http:zSzzSzwww.itr.unisa.edu.auzSztech_r
eszSzpublicationszSzcwj.pdf/janczura98modelling.pdf>. Acesso em: 27 ago. 2006.
JAMESON, John. Proteus. [Inglaterra], 2006. Disponível em: <http://www.labcenter.co.uk>.
Acesso em: 9 set. 2006.
JARVI, Keane. RXTX: the prescription for transmission. [S.l.], 1998. Disponível em:
<http://www.rxtx.org>. Acesso em: 25 fev. 2007.
KALT, Marcel. NSD-Editor: Nassi-Shneiderman diagram editor. [S.l.], 1997. Disponível em:
< http://diuf.unifr.ch/softeng/student-projects/completed/kalt/ftp-nsd.html>. Acesso em: 28
abr. 2007.
KLUGE, Werner. The model railway. [Alemanha], [1999?]. Disponível em:
<http://www.informatik.uni-kiel.de/~railway/index.html>. Acesso em: 27 ago. 2006.
LAIPAC TECH. [Canadá], [1998?]. Disponível em: <http://www.laipac.com>. Acesso em:
15 set. 2006.
68
_____. TRF-2.4G transceiver data sheet. [Canadá], [2005?]. Disponível em:
<http://www.tato.ind.br/files/RF-24G_datasheet.pdf>. Acesso em: 15 set. 2006.
LOMBARDO, John. Embedded Linux. Indiana: New Riders, 2002.
MICROCHIP. Microchip PIC16F628A. [S.l], 2005. Disponível em:
<http://ww1.microchip.com/downloads/en/DeviceDoc/40044D.pdf>. Acesso em: 27 ago.
2006.
PÉRICAS, Francisco A. Redes de computadores: conceitos e arquitetura Internet.
Blumenau: EdiFurb, 2003.
RAULINO, Rangel G. Uma aplicação para o controle do tráfego ferroviário usando
processos concorrentes. 1999. 82 f. Trabalho de Conclusão de Curso (Bacharelado em
Ciências da Computação) – Centro de Ciências Exatas e Naturais, Universidade Regional de
Blumenau, Blumenau.
RONCARATI, Vinícius S. Ferrovias e ferreomodelismo. [S.l.], [1998?]. Disponível em:
<http://www.fortunecity.com/marina/manatee/71/trens.html>. Acesso em: 27 ago. 2006.
SCHUBERT, Lucas A. Aplicativo para controle de ferrovia utilizando processamento em
tempo real e redes de Petri. 2003. 88 f. Trabalho de Conclusão de Curso (Bacharelado em
Ciências da Computação) - Centro de Ciências Exatas e Naturais, Universidade Regional de
Blumenau, Blumenau.
SPARX. Enterprise Architect. [Austrália], 2007. Disponível em:
<http://www.sparxsystems.com.au>. Acesso em: 03 feb. 2007.
STMICROELECTRONICS. [Itália?], [2000]. Disponível em:
<http://www.st.com/stonline/books/pdf/docs/1773.pdf>. Acesso em: 16 jul. 2007.
TAURION, Cezar. Software embarcado: oportunidades e potencial de mercado. Rio de
Janeiro: Brasport, 2005.
TANENBAUM, Andrew S. Redes de computadores. Rio de Janeiro: Campus, 2003.
VENCOVSKY, Vitor P. Sistema ferroviário e o uso do território brasileiro: uma análise
do movimento dos produtos agrícolas. 2006. 167 f. Dissertação (Mestrado em Geografia) –
Curso de Pós-graduação em Geografia, Universidade Estadual de Campinas, Campinas.
Disponível em: < http://libdigi.unicamp.br/document/?code=vtls000376994>. Acesso em: 27
ago. 2006.
ZANCO, Wagner S. Microcontroladores PIC16F628A/648A: uma abordagem prática e
objetiva. São Paulo: Érica, 2005.
Download

da Monografia - Departamento de Sistemas e Computação