69
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

CONTROLE DE TRÁFEGO FERROVIÁRIO UTILIZANDO ...dsc.inf.furb.br/arquivos/tccs/monografias/2007-1andreystarkesardo... · dados. É desenvolvido também o software embarcado dos microcontroladores

Embed Size (px)

Citation preview

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õe-

se 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 TRF-

2.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 cita-

se 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 Nome Função Descrição 1 GND Alimentação Terra (0v) 2 CE Entrada Habilita modo receptor ou transmissor 3 CLK2 E/S Entrada de clock receptor canal 2 4 CS Entrada Habilita modo de configuração 5 CLK1 E/S Entrada de clock receptor canal 1 6 DATA E/S Recepção dos dados canal 1 7 DR1 Saída Indicação de dados para leitura no canal 1

(somente no modo ShockBurst) 8 DOUT2 E/S Recepção dos dados canal 2 9 DR2 Saída Indicação de dados para leitura no canal 2

(somente no modo ShockBurst) 10 VCC 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 deseja-

se 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.getPortIdentifie rs(); . . . int i = 0; portas = new String[10]; while (listaDePortas.hasMoreElements()) { CommPortIdentifier ips = CommPortIdentifier)lista DePortas.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.getPortIdent ifier(PortaEscolhida); //abrir a porta a serial SerialPort porta = (SerialPort)cp.open("NomeDaClass e",timeout); //setar parâmetros de configuração da porta porta.setSerialPortParams(baudrate, DATABITS_8, STO PBITS_2, PARITY_NONE); //atribuir fluxo de saída para classe abstrata de s aí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 Schubert (2003) Raulino (1999) Kluge (1999) Redes de Petri � � �

Processos concorrentes � � � Implementação em

hardware � � Rádio freqüência �

Alimentação dos motores dos trens

Trilhos Trilhos Alimentação do circuito

dos trens Pilhas

Sensores para detecção da posição dos trens � �

Cruzamentos com opção de desvio automatizado �

PWM para aceleração dos trens �

Linguagem de programação

Delphi Ada C++

Quadro 4 – Características dos trabalhos correlatos

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 controlador-

cruzamento. 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

Pontos da malha

P01 S02 S01-S03

P02 S04 S05-S06

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 avisando-

o 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 e nvio."); 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).getByt es()[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).getB ytes())[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 n o sistema private ArrayList listaTrens = new ArrayList(); //lista dos com os objetos de cruzamentos cadastr ados no sistema private ArrayList listaCruzamentos = new ArrayLis t(); //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õe m 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 se r processadas private CmdMensagens mensagensRecebidas = new Cmd Mensagens(); ... public boolean PesquisaTrechoSeguinte(Trem t, Senso r 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(trech oAtual)){ Trecho trechoTemp = (Trecho)trechosMalha.get( i); if (trechoTemp.getSensor1().equals(s)){ tSeguintesTemp.add(trechoTemp); //achou tre cho seguinte retorno = true; } else if (trechoTemp.getSensor2().equals(s)) { tSeguintesTemp.add(trechoTemp); //achou tre cho 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 t em opção de desvio for (int y=0; y<pontoTemp.getSensoresDesvio() .size(); y++){ Sensor sensorTemp = (Sensor)pontoTemp.getSe nsoresDesvio().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.getSe nsoresDesvio().get(y); if (sensorTemp.equals(s)){ pontoSeguinte = pontoTemp; tSeguintesTemp.add(ProcuraTrecho(pontoTem p.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 T RF para pegar getBuf(); //pega dados e coloca no buffe r (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/ tra nsmitir 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 se rial #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() . Dentro do método é feito um teste (teste A) para certificar que o flag

sensorTrilho 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; } }

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.

Teste A

Teste B

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.

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 .

Função Valor1 Valor2 Descrição

a 0 até 255 0 até 255 Comando para acelerar o trem, o valo1 representa a velocidade desejada e o valor2 velocidade necessária para o arranque do motor.

p - - Comando para parar o trem. V alor1 e valor2 não são necessários.

i - - Comando para inverter o sentido da rotação do motor.

R 0 até 255 Aviso de recebimento de uma resposta do controle central. Valor1 conté m o identificador da mens agem que foi respondida.

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); //relé da bobina output_bit(pin_b3,1); //saída da bobina delay_ms(800); output_bit(pin_b3,0); //desaciona bobina output_bit(pin_a1,0); //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.

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).

Função Valor1 Valor2 Descrição

m a - Comando para mudar a posição do desvio do cruzamento. O valor1 identifica que deseja- se abrir o desvio. Valor2 não é necessário.

m f - Comando para fechar o desvio do cruzamento.

R 0 até 255 Aviso de recebimento de uma resposta do controle central. Valor1 conté m o identificador da mensagem que foi respondida.

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 Schubert (2003) Raulino

(1999) Kluge (1999)

Redes de Petri � � � Processos concorrentes � � � �

Implementação em hardware � � �

Rádio freqüência � � Alimentação dos

motores dos trens Trilhos Trilhos Trilhos

Alimentação do circuito dos trens

Trilhos Pilhas Sensores para detecção

da posição dos trens � � � Cruzamentos com

opção de desvio automatizado

� �

PWM para aceleração dos trens � �

Linguagem de programação

Java e C para microcontroladores

PIC Delphi Ada C++

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_reszSzpublicationszSzcwj.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.