sistema de automação veicular com arduino e android

Transcrição

sistema de automação veicular com arduino e android
CENTRO UNIVERSITÁRIO ADVENTISTA DE SÃO PAULO
ENGENHEIRO COELHO
WAGNER ROCHA BARROS
SISTEMA DE AUTOMAÇÃO VEICULAR COM ARDUINO E ANDROID
ENGENHEIRO COELHO
2012
WAGNER ROCHA BARROS
SISTEMA DE AUTOMAÇÃO VEICULAR COM ARDUINO E ANDROID
Trabalho de Conclusão de Curso do Centro
Universitário Adventista de São Paulo do curso
de Tecnólogo em Sistemas para Internet, sob
orientação do Prof. Me.Thales de Társis Cezare.
ENGENHEIRO COELHO
2012
Trabalho de Conclusão de Curso do Centro Universitário Adventista de São Paulo, do curso
de Tecnólogo em Sistemas para Internet apresentado e aprovado em 18 de Junho de 2012.
_________________________________________________
Prof. Me.Thales de Társis Cezare
_________________________________________________
Prof. Me. Peterson Peixoto dos Santos
_________________________________________________
Prof. Me. Mateus dos Santos
Dedico esse trabalho primeiramente a Deus que
me deu a capacitação e a força necessária,
agradeço também aos meus pais pelo incentivo
e amor. Dedico também aos meus professores
em especial ao professor Thales pelo apoio e
dedicação. Dedico ainda aos meus amigos por
me animarem e encorajarem na conclusão
desse trabalho
AGRADECIMENTOS
 A Deus em primeiro lugar pelo dom da vida e por me conduzir sempre em caminhos
de paz mesmo nos momentos mais difíceis, nunca me abandonou cuidando dos
menores detalhes da minha existência .
 Aos meus pais Francisco e Maria pela educação, cuidado e dedicação de me ensinar o
caminho da verdade. O enorme sacrifício pra poder me acompanha nesse momento
tão importante.
 Ao Unasp Campus Engenheiro Coelho pela privilegio de aqui estudar, sou
extremamente agradecido pelo apoio e base para construção de um sonho.
 A todo corpo docente pelo conhecimento passado nesses três anos de convivência
que vão marcar minha vida pra sempre. Em especial quero agradecer pelo carinho,
empenho e dedicação do meu orientador o professor Thales de Társis Cezare.
 Aos meus amigos que sempre me encorajaram durante a jornada de projeto e
exclusão desse trabalho.
Nossa tecnologia passou a frente de nosso
entendimento,
e
a
nossa
inteligência
desenvolveu-se mais do que a nossa sabedoria.
Roger Revelle
RESUMO
Este trabalho descreve o projeto e implementação de uma plataforma de controle
construída em módulos, possibilitando ao usuário escolher quais funções do veiculo se
deseja automatizar utilizando assim hardwares Open Source onde os conceitos de
automação serão aplicados. O projeto propõe o controle de um veículo de passeio utilizando
um celular SmartPhone com sistema operacional Android, efetuando os controles
relacionados a partida do motor, abertura de portas e capô. A novidade dessa abordagem é
o uso de um servidor socket desenvolvido em linguagem de programação Java e o hardware
de controle dos atuadores Open Source. O sistema de gerenciamento dos atuadores foi
desenvolvido utilizando o microcontrolador Atmel 2560 e a linguagem de programação C
para a programação dos códigos possibilitando assim a automação das ações desejadas no
automóvel. A aplicação cliente utilizada no celular foi desenvolvida no ambiente de
programação Eclipse com framework Android. Utilizando a linguagem de programação Java
para codificação das classes. A comunicação entre o sistema de gerenciamento dos
atuadores do veículo, intermediado pelo servidor socket, e o sistema de controle do celular
SmartPhone a aplicação cliente foi utilizado a rede de acesso a internet de alta velocidade
3G e o protocolo TCP para troca de mensagens entre a aplicação cliente e o sistemas de
gerenciamento dos atuadores. Esta abordagem abre uma grande variedade e possibilidades
de utilização deste projeto para outras áreas da automação.
Este projeto torna possível o controle das principais funções de um veículo automotor de
passeio, possibilitando assim uma maior segurança e conforto ao usuário permitindo-o
desligar o veículo remotamente em caso de emergência.
Palavras Chave: Automação veicular; Android; Arduino.
ABSTRACT
This paper describes the design and implementation of a control platform built in modules,
enabling the user to choose which functions of the vehicle so if you want to automate using Open
Source hardware where automation concepts will be applied. The project proposes the control of a
passenger vehicle using a mobile Smartphone with Android operating system, making the controls
related to starting the engine, opening doors and hood. The novelty of this approach is the use of a
socket server developed in Java programming language and hardware control actuators Open
Source. The management system of the actuator was developed using the Atmel 2560
microcontroller and C programming language for programming codes thus enabling the automation
of desired actions in the car. The client application used in the cell was developed in the
programming environment Eclipse with Android framework. Using the Java programming language
for encoding classes. Communication between the management system of the vehicle actuators,
brokered by the socket server, and control system SmartPhone mobile client application was used to
access network high-speed 3G Internet and the TCP for exchanging messages between the client
application management systems and actuators. This approach opens a wide variety and possibilities
to use this project to other areas of automation.
This design makes it possible to control the main functions of a motor vehicle drive, allowing for
greater security and comfort to the user allowing you to remotely turn off the vehicle in an
emergency.
Keywords: Automation vehicle; Android; Arduino.
LISTA DE ILUSTRAÇÕES
Figura 1 - Partes técnicas do microcontrolador Arduino Mega 2560. .................................................21
Figura 2 - Ambiente de desenvolvimento Arduino 0022. ...................................................................24
Figura 3 - Arquitetura Android. .........................................................................................................27
Figura 4 - Plataforma de desenvolvimento Eclipse com plug-in Android. ...........................................28
Figura 5 - Arquitetura simplificada da plataforma eclipse. .................................................................29
Figura 6 - Emulador Andoid. ..............................................................................................................30
Figura 7 - Arduino Atmega 2560. .......................................................................................................32
Figura 8 - Diagrama de bloco do sistema proposto. ...........................................................................38
Figura 9 - Arquitetura conceitual do módulo de controle e automação. ............................................39
Figura 10 - Diagrama de classe Módulo Cliente. ................................................................................41
Figura 11 - Telas Emulador e Conexão com Servidor. .........................................................................42
Figura 12 - Layout módulo cliente. ....................................................................................................42
Figura 13 - Diagrama de classe modulo servidor. ...............................................................................43
LISTA DE ABREVIATURAS E SIGLAS
SiAV – Sistema de Automação Veicular
SWT – Standard Widget Toolkit
IDE – Ambiente Integrado de Desenvolvimento
PHP – Personal Home Page – linguagem interpretada livre
ABS – Anti Block System – Sistema anti bloqueio
ESP – Eletronic Stability Program – Programa eletrônico de estabilidade
INRIA – Intitut National de Recherche en Informatique et en Automatique – Instituto de
pesquisas em informática e automação
DARPA – Defense Advanced Research Projects Agency – Agência da defesa em projetos de
pesquisa avançada.
MCU – Movimento Circular Uniforme
ICSP – In Circuit Serial Programming
VIN – Vehicle Identification Number
FTDI – Future Technology Devices International
GND – Graduated Neutral Density Filter – Filtro Graduado de Densidade Neutra
RAM – Random Access Memory – Memória de acesso
EPROM - Erasable Programmable Only Memory – Memória programável apagável.
SUMÁRIO
1 INTRODUÇÃO ................................................................................................................................12
1.1 Fundamentos Tecnológicos ....................................................................................................13
1.2 Tecnologia Aplicada a Automação Veicular ............................................................................15
1.2.1 Aspectos Gerais das Tecnologias Aplicadas a Sistemas de Automação Veicular ..............15
1.2.2 Sistemas Inteligentes Veiculares ......................................................................................16
1.3 Sistema de Automação Veicular .............................................................................................18
1.3.1 Sistema de Apoio ao Motorista ........................................................................................19
1.3.2 Sistemas Veiculares Robóticos .........................................................................................19
1.4 Hardware Arduino e Seus Conceitos .......................................................................................20
1.4.1 Aspectos do Arduino ........................................................................................................20
1.4.2 Funcionamento do Arduino .............................................................................................21
1.4.3 Especificações técnicas do Arduino ..................................................................................22
1.5 Ambiente de Desenvolvimento e seus Conceitos ...................................................................23
1.5.1 Plataforma de desenvolvimento Arduino ........................................................................24
1.5.2 Plataforma de desenvolvimento Android ........................................................................26
1.5.2.1 Estrutura geral da plataforma ....................................................................................26
1.5.2.2 Arquitetura ................................................................................................................27
1.5.2.3 Bibliotecas .................................................................................................................27
1.5.3 Plataforma de desenvolvimento Eclipse ..........................................................................28
1.5.3.1 Arquitetura Eclipse ....................................................................................................29
1.5.3.2 Emulador Android ......................................................................................................30
1.6 Caracterização do Problema ...................................................................................................31
1.7 Projeto SiAV............................................................................................................................31
1.8 Motivação deste Trabalho ......................................................................................................32
1.9 Justificativa .............................................................................................................................33
2 OBJETIVOS .....................................................................................................................................35
2.1 Objetivos Gerais .....................................................................................................................35
2.2 Objetivos específicos ..............................................................................................................35
3 METODOLOGIA ..............................................................................................................................36
4 SISTEMA DE AUTOMAÇÃO VEICULAR COM ARDUINO E ANDROID - Desenvolvimento .................37
4.1 Arquitetura do Sistema...........................................................................................................37
4.1.1 Arquitetura na primeira fase do projeto SiAV ..................................................................37
4.1.2 Arquitetura na segunda fase do projeto SiAV ..................................................................38
4.2 Aspectos Gerais Desenvolvimento do Software de Controle ..................................................40
4.2.1 Módulo controlador cliente .............................................................................................40
4.2.1.1 Diagrama de classe do Módulo Cliente.......................................................................40
4.2.1.2 Layout do módulo cliente...........................................................................................41
4.2.2 Modulo controlador servidor ...........................................................................................42
4.2.2.1 Diagrama de classe do Modulo Servidor.....................................................................43
5 CONCLUSÃO ..................................................................................................................................44
5.1 Trabalhos futuros ...................................................................................................................44
6 REFERÊNCIAS .................................................................................................................................45
APÊNDICES .......................................................................................................................................49
12
1 INTRODUÇÃO
Atualmente, os sistemas autônomos são utilizados em diferentes áreas da tecnologia
e varias aplicações utilizam microcontrolador que cada vez mais são exigidos a atender as
crescentes evoluções e necessidades de desempenho, baixo custo, tempo de ciclo e
dispositivos cada vez menores. Um sistema autônomo pode ser caracterizado por sua
capacidade de execução das tarefas para as quais foi projetado, sem a interferência de
qualquer controle externo (Baltes J. e Lin Y. Lin, 1999).
O sistema embarcado vem ganhando espaço com o aumento da tecnologia e várias
aplicações vêm sendo desenvolvidas ao redor do mundo, os dispositivos móveis vem
ganhando destaque pela integração com os sistemas embarcados, essa nova integração traz
grandes avanços no desenvolvimento possibilitando assim a criação de sistemas integrados
cada vez mais inteligentes e possibilitando ao usuário interagir com ele.
Junto à evolução dos microcontrolador veio a miniaturização dos dispositivos móveis
que faz parte da quinta geração dos computadores, os chamados computadores invisíveis,
como exemplo, os Smartphones que são máquinas completas de propósito geral e que já
contam com sistemas operacionais baseados em softwares livres.
O advento dos sistemas operacionais de código livre trouxe grande flexibilidade no
desenvolvimento de sistemas, possibilitando a criação de software de qualidade atendendo
uma vertente importante no desenvolvimento de baixo custo, como exemplo: Linux e
Android. Simultaneamente surgiu também a ideia de criação de hardwares Open Source para
uma maior interação com o desenvolvimento de sistemas autômatos utilizando, por
exemplo, o microprocessador Atmega 2560 montado em uma plataforma Arduino.
Utilizando de técnicas cada vez mais elaboradas para o desenvolvimento de sistemas
e a grande complexidade dos atuais sistemas de automação veicular envolvendo dispositivos
mecânicos, eletrônicos e sistemas computacionais, estimulam a introdução de novas
metodologias de projeto. Um ponto importante é que as metodologias de desenvolvimento
exigem um nível de abstração alto para elaboração, verificação e validação do sistema
proposto.
Este trabalho descreve um sistema de controle e automação veicular baseado em
técnicas de arquitetura de software e hardware Open Source. Desta maneira foi definido um
fluxo de projeto que permite um alto nível de abstração para validação do sistema. O
13
sistema proposto é composto de um controlador (desenvolvido com hardware Open Source)
e diversos atuadores, interfaces, sensores e etc. Tendo como objetivo a construção da base
de controle do veículo. Para o projeto de automação veicular o sistema foi projetado e
implementado utilizando técnicas e tecnologias que estão ganhando cada vez mais
visibilidade internacional.
A implementação do sistema de controle e automação foi desenvolvida em etapas
diferentes durante sua elaboração que são descritas neste trabalho. Inicialmente, foi
projetado o sistema de controle e automação, utilizando os conceitos de microcontrolador
embarcado para o controle dos atuadores instalados no veículo. A segunda etapa consistiu
no desenvolvimento do ambiente de interação com o usuário, utilizando-se de um celular
SmartPhone com sistema operacional android.
1.1 Fundamentos Tecnológicos
Inicialmente, descreve-se um breve histórico dos sistemas de automação veicular,
enfatizando a evolução e a incorporação de sistemas automatizados. Também são
abordadas as principais tecnologias aplicadas a veículos de passeio a evolução dos sistemas
e os conceitos que revolucionaram a forma de dirigir um veículo possibilitando novos
patamares de segurança, conforto e economia.
As pesquisas em automação veicular abriram as portas para o surgimento de
sistemas que auxiliam o motorista na execução de tarefas pré-estabelecidas e no
gerenciamento de funções específicas ou gerais como: manter a velocidade do veículo,
manter a distância do veículo a sua frente, controle de funções do veículo ou até mesmo o
monitoramento da temperatura no interior do veículo.
Com o avanço das tecnologias relacionadas aos veículos automatizados, surgiram
novos paradigmas na área de sistemas veiculares robotizados. Estes sistemas ganham
espaço em aplicações industriais (e.g. carga e descarga) e, em aplicações urbanas
objetivando cada vez mais isentar as pessoas de executarem tarefas repetitivas e/ou
desgastantes.
Por outro lado, os sistemas de automação veicular objetivam o aumento de
segurança, pois com o desenvolvimento desses sistemas não haveria mais excesso de
velocidade, ultrapassagens perigosas, roubo de veículos poderiam ser minimizados com um
14
sistema automatizado de controle do veículo, desenvolvimento de sistemas de vigilância e
acionamento via satélite. Com o surgimento de novas tecnologias e o avanço das linguagens
de programação tornou possível o desenvolvimento de sistemas cada vez mais seguros e
confiáveis.
O ambiente de programação eclipse para o desenvolvimento de códigos na
linguagem de programação Java foi iniciado na IBM desenvolvendo a primeira versão do
produto e fazendo a doação deste para a comunidade Open Source. Possui forte orientação
ao desenvolvimento baseado em plug-ins. Possibilitando assim um amplo suporte ao
desenvolvedor com centenas de plug-ins que procuram atender as diferentes necessidades
dos programadores.
Utilizando a IDE Eclipse com plug-ins pode-se desenvolver não só em Java, mas
também em C, C++, PHP e Python.
Juntamente com o desenvolvimento dos sistemas veiculares automatizados o
surgimento de novas tecnologias de sistemas embarcados tem se mostrado necessário para
dar suporte as necessidades cada vez mais pujantes. A quantidade de eletrônica embarcada
nos veículos, atualmente, já está na casa de centenas no caso de veículos mais luxuosos.
Visando este crescimento as indústrias de desenvolvimento de sistemas eletrônicos
para aplicações veiculares estão investindo na pesquisa de novas metodologias para o
controle dos sistemas veiculares embarcados. Nessa dinâmica a computação reconfigurável
vem se mostrando uma tecnologia interessante. O projeto Arduino iniciou-se na cidade de
Ivrea, Itália, em 2005, com o intuito de interagir em projetos escolares de forma a ter um
orçamento menor que outros sistemas de prototipagem disponíveis naquela época. Seu
sucesso foi sinalizado com o recebimento de uma menção honrosa na categoria
Comunidades Digitais em 2006, pela Prix Ars Electronica, além da marca de mais de 50.000
placas vendidas até outubro de 2008.
Atualmente, o hardware é feito através de um microcontrolador Atmel AVR, que
pode ser estendido se necessário for para implementação do projeto. A flexibilidade e
reconfigurabilidade do hardware tem se mostrado competitiva em termos de custo do chip e
do seu ciclo de projeto.
Na seção seguinte são abordados os conceitos tecnológicos aplicados no
desenvolvimento do sistema de controle e automações de um veículo de passeio Estes
15
conceitos estão relacionadas com a aplicação de Sistemas Reconfiguráveis para o projeto de
Sistemas de Automação Veicular.
1.2 Tecnologia Aplicada a Automação Veicular
Dentro dos conceitos relacionados à automação veicular são descritas as tecnologias
aplicadas aos veículos de passeio seus conceitos e o estado da arte em sistemas inteligentes
para o controle veicular.
1.2.1 Aspectos Gerais das Tecnologias Aplicadas a Sistemas de Automação Veicular
A automação veicular, além de proporcionar ao motorista segurança em situações
críticas, pode também auxiliá-lo dando-lhe informações necessárias para que possa executar
manobras, ou mesmo automatizar alguma das tarefas relacionadas à dirigibilidade. A
indústria automotiva tem investido nesta área visando aumentar o conforto, segurança,
estabilidade e rendimento dos veículos, utilizando-se de sistemas embarcados que
controlam a ação de frenagem ABS – Anti-lock-Breaking-System (Kelber, 2003a), estabilidade
do veículo ESP – Eletronic Stability Program (Kelber, 2003a), controle da velocidade, controle
da autonomia, controle do consumo médio de combustível, controle de temperatura.
Com o aumento das necessidades de tornar os veículos mais inteligentes, soluções
computacionais tornaram-se cada vez mais comuns. Em diversos países os motoristas
podem contar com computadores que possuem os mapas das ruas da cidade e recebem
informações sobre as condições de trânsito escolhendo para o motorista o melhor trajeto.
As tecnologias atualmente desenvolvidas apresentam em sua maioria um grande
conjunto de sensores, transdutores, atuadores, sistemas de comunicação modernos, que
possibilitam a estes veículos cada vez mais executar tarefas mais complexas de forma
segura. Para dotar estes veículos de comportamentos inteligentes são incorporados
componentes de percepção garantindo maiores níveis de autonomia e robustez.
Cada vez mais os projetos de veículos inteligentes estão incorporando tecnologias de
desenvolvimento de robôs autônomos, estudos da cinemática (Dudek G. and Jenkin M.,
2000), comunicação, controle e inteligência para execução de tarefas.
16
A concepção de um veículo com graus de autonomia é uma ideia que vem sendo
explorada e estudada por todo o mundo. A automação veicular, mesmo em seus diferentes
níveis, proporciona aos motoristas e ocupantes, maior segurança em condições adversas.
Auxilia na condução do veículo executando tarefas de forma automatizadas, como por
exemplo: manter o veículo na pista dentro da faixa correta, manter a distância dos veículos a
sua frente, controlar a velocidade do veículo conforme o trânsito ou achar o caminho mais
curto e seguro para se chegar ao destino (Kelber C. R, et al., 2005).
Em 1997, o I.N.R.IA – Institut National de Recherche en Informatique et en
Automatique apresentou ao público um veículo de fabricação em série, chamado de CyCab,
com diversos modos de movimentação automatizados (Baille, Gérard et all., 1999). O CyCab
já está sendo produzido pela empresa Robosoft, que já apresenta inclusive outros modelos,
com o RoBUCAB, o RobuRIDE e o RoBUCAR (Robosoft, 2003).
Em 2003, a Toyota lançou, no Japão, o Prius, um modelo de veículo com capacidade
de efetuar manobras de estacionamento autonomamente (Self-parking, 2003).
Em outubro de 2005, quatro veículos conseguiram completar o percurso da
competição promovida pelo DARPA – Defense Advanced Research Projects Agency, o DARPA
Grad Chalenge Race. 132 milhas (aproximadamente 212 km) foram percorridas pelo deserto
de Nevada, nos Estados Unidos da América, de maneira completamente autônoma (CNN (a),
2005).
1.2.2 Sistemas Inteligentes Veiculares
Um ponto importante é a introdução de sistemas inteligentes na indústria
automobilística, neste caso, na literatura o termo “Sistema Inteligente” é mais aplicado na
introdução de novas tecnologias (eletrônica embarcada, sistema micro processados, etc.)
para viabilizar técnicas que aumentem a segurança, conforto e aspectos ambientais.
Nas últimas décadas os veículos de passeio têm deixado de serem máquinas
essencialmente mecânicas e incorporado cada vez mais sistemas eletrônicos de controle e
acionamentos controláveis usando informações desse sistema. A princípio foi uma “simples”
substituição do sistema de ignição com platinado pela Ignição Eletrônica. O desenvolvimento
dos sistemas de ignição eletrônica ocorreu simultaneamente com os sistemas de injeção
eletrônica.
17
Atualmente, veículos apresentados como carro conceito, dispõem de sistemas
completos totalmente drive-by-wire. Exemplos destes são o Pivo, da Nissan (CNN (b), 2005) e
o PM da Toyota (Toyota, 2006).
Com o surgimento e a popularização cada vez maior dos conceitos de sistemas
eletrônicos embarcados aplicados aos veículos de passeio, o mercado mundial responde
cada vez mais de forma positiva, dando suporte para o desenvolvimento de novas técnicas e
a realização de projetos e conceitos.
Com o crescimento das pesquisas na área de aplicação e projetos de sistemas surgem
novas necessidades tecnológicas para aumentar a segurança e o conforto do motorista e
ocupante. Os projetos de sistemas inteligentes embarcados nos veículos vêm contribuindo
para o desenvolvimento de vários ramos, tecnológico, acadêmicos e de mercado. Segundo
(Kelber C. R, et all., 2005), um dos motivos principais do surgimento de carros inteligentes é
propiciar ao motorista maior segurança e conforto em condições adversas.
Os conceitos mais aplicados nos sistemas inteligentes embarcados nos veículos
de passeio são:

ABS – Anti-lock-Breaking-System;

BAS – Breaking-Assistant;

ESP – Electronic Stability Program;

TCS – Traction Control System;

by-Wire;

Cruise Control;

Lane keeping Assistance;

Parking Assistance.
Estes sistemas foram desenvolvidos com o objetivo de proporcionar ao motorista
maior segurança em condições críticas ou auxiliado na execução de tarefas relacionadas a
condução do veículo. Cada dia os veículos inteligentes somam as novas tecnologias
formando assim uma plataforma embarcada mais complexa. Para gerenciar todos estes
sistemas estão sendo aplicados conceitos estruturais, o que tem dado aos projetistas destes
sistemas novas direções para projetar sistemas modulares responsáveis por controlar ações
do veículo.
18
Acompanhando esta tendência, este trabalho possui uma arquitetura modular onde
cada um dos módulos é responsável por ações sendo os módulos subdivididos em blocos
formando uma arquitetura distribuída. Estas tecnologias têm apresentado bons resultados,
no projeto Autonomies Fahren, (Becker, 1998), (Simon, 1999), (Sönitz, 1999), (Simon, 2000) e
(Sönitz, 2001).
1.3 Sistema de Automação Veicular
Nos últimos anos as pesquisas focadas na área de veículos inteligentes têm gerado
conceitos que estão revolucionando o mundo no que se diz respeito a transporte pessoal. As
linhas de pesquisas são as mais diversas possíveis, mas em comum, focam pontos como
segurança, conforto, cuidados ambientais e adaptabilidade para diferentes circunstâncias
(por exemplo, soluções veiculares voltadas para deficientes).
Por outro lado, os novos desenvolvimentos buscam cada vez mais substituir as
soluções mecânicas por soluções eletromecânicas (Kelber, 2003a). Nesta seção serão
estudados os diferentes sistemas de automação veicular. Do ponto de vista dos objetivos e
das técnicas aplicadas, os sistemas de automação veicular podem ser divididos em: Sistemas
de Apoio ao Motorista e Sistemas Veiculares Robóticos.
No primeiro caso, as técnicas têm como objetivo auxiliar o motorista na execução de
tarefas determinadas melhorando o desempenho do usuário e a segurança. No segundo
caso, trata-se de resolver o problema conhecido na literatura como Hands-free Vehicle
Driving (Giove D, 2004).
No caso do sistema envolver todos os controles parciais do veículo o termo usado na
literatura é Automated Highway System (AHS) (Han_Shue, et al., 1999).
19
1.3.1 Sistema de Apoio ao Motorista
Os sistemas de apoio ao motorista surgiram na década de 80 com o intuito de
proporcionar maior conforto e segurança ao motorista e os passageiros. São classificados em
dois grandes grupos: sistemas passivos e sistemas ativos (Kelber C. R, et al., 2005).
No sistema passivo a eletrônica identifica os sinais das variáveis que indicam um
cenário e alerta o motorista, que toma as devidas providências com a finalidade de
contornar a situação.
Já no caso do sistema ativo ele funciona como um “copiloto eletrônico” e em casos
de situações perigosas ele atua diretamente sobre as variáveis para efetuar a correção
necessária para auxiliar o piloto a contornar o problema. O princípio deste sistema nunca
tira do motorista o controle do veículo, ou seja, mantém a responsabilidade do condutor
atuando como auxiliar em situações de perigo.
Os sistemas de identificação de obstáculos podem ser aplicados em veículos de
pequeno e grande porte. Um sistema muito útil para a segurança dos motoristas e
passageiros em condições de pouca visibilidade ou de cochilo do motorista é o Sistema de
Aviso do Abandono de Pista. Fontes de estudo das causas dos acidentes apresentam um
elevado número de acidentes causados por motivos relacionados a perda de controle da
direção do veículo pelo abandono da pista (Kelber, 2003a).
Outro sistema muito utilizado atualmente com a popularização cada vez maior dos
GPS – Global Positioning System são os de navegação. Baseados em mapas digitais das
regiões estes sistemas funcionam como um guia instantâneo para o motorista auxiliando na
definição das rotas a serem percorridas para alcançar seu destino. Atualmente, muitos
destes sistemas estão ligados a sistemas mais complexos, o que possibilita ao motorista
obter informações das condições de trânsito, se o combustível que está no tanque é
suficiente para chegar até o destino, e oferece rotas alternativas mais rápidas e seguras
(Kelber, 2003a).
1.3.2 Sistemas Veiculares Robóticos
Recentemente surgiram os robôs móveis destacando-se por sua mobilidade guiada,
semiautônoma ou totalmente autônoma. A tecnologia dos robôs móveis tornou-se grande
20
foco de pesquisa sendo difundida em diferentes áreas e em diversas aplicações (e.g.
exploração de ambiente hostil). Pesquisas também tem se intensificado na aplicação dos
conceitos da robótica móvel em veículos de passeio.
Dentre os projetos que tem se destacado estão os participantes do Grand DARPA
Challenge 2004 – Autonomous Ground Vehicles, este evento vem ocorrendo anualmente e
tem como objetivo vencer uma distância de 300 quilômetros de forma completamente
autônoma, a equipe vencedora recebe um prêmio de 1 milhão de dólares.
O setor de carga, descarga e transporte tem se destacado nos investimentos de apoio
ao motorista. Projetos de carregadeiras, empilhadeiras autônomas foram desenvolvidos
pelas empresas FOX GmbH e Goetting KG.
1.4 Hardware Arduino e Seus Conceitos
Nesta seção são apresentados a descrição da configuração do hardware, as
ferramentas utilizadas e os conceitos aplicados para se configurar um microcontrolador
embarcado em lógica reconfigurável. Também é apresentada a descrição do software
desenvolvido, seu funcionamento no controle de cada um dos módulos e suas variáveis.
Adicionalmente, são apresentados os resultados do desenvolvimento do hardware de
controle, a ocupação dos recursos lógicos do Arduino e seu desempenho.
A configuração do Hardware de controle representa uma das etapas primordiais
desse trabalho e objetiva o projeto e implementação de um sistema para o controle e
automação do veículo que atenda as necessidades de segurança e os objetivos definidos
para o controle do veículo dentro das especificações do projeto SiAV.
1.4.1 Aspectos do Arduino
O Arduino faz parte do conceito de hardware e Open Source e está aberto para uso e
contribuição de toda sociedade. O conceito Arduino surgiu na Itália em 2005 com o objetivo
de criar um dispositivo para o controle de projetos construídos de uma forma menos
dispendiosa do que outros sistemas disponíveis no mercado.
Arduino é uma plataforma de computação física (são sistemas digitais ligados a
sensores e atuadores, que permitem construir sistemas que percebam a realidade e
21
respondam com ações físicas), baseada em uma simples placa de Entrada/Saída micro
controlada e desenvolvida sobre uma biblioteca que simplifica a escrita da programação em
C/C++. O Arduino pode ser usado para desenvolver artefatos interativos stand-alone ou
conectados ao computador através do Adobe Flash, Processing, Max/MSP, Pure Data ou
SuperCollider.
Um microcontrolador (também denominado MCU) é um computador em um chip,
que contem processador, memória e periféricos de entrada/saída. É um microprocessador
que pode ser programado para funções específicas, em contraste com outros
microcontrolador de propósito geral (como os utilizados nos PCs). Eles são embarcados no
interior de algum outro dispositivo, no nosso caso o Arduino, para que possam controlar
suas funções ou ações (Silva l. a, 2010).
1.4.2 Funcionamento do Arduino
O Arduino Mega 2560 é uma placa de microcontrolador baseada no ATmega2560
(datasheet). Ele possui 54 pinos de entradas/saídas digitais, 16 entradas analógicas, 4 UARTs
(portas seriais de hardware), um oscilador de cristal de 16 MHz, uma conexão USB, uma
entrada de alimentação, uma conexão ICSP e um botão de reset.
Figura 1 - Partes técnicas do microcontrolador Arduino Mega 2560.
22
1.4.3 Especificações técnicas do Arduino
Tabela 1 - Especificações técnicas do ATmega2560.
Micro controlado
ATmega2560
Tensão de operação
5V
Tensão de entrada (recomendada)
7-12V
Tensão de entrada (limites)
6-20V
Pinos de entrada e saída (I/O) digitais
54 (dos quais 14 podem ser saídas PWM)
Pinos de entradas analógicas
16
Corrente DC por pino I/O
40mA
Corrente DC para pino de 3,3V
50mA
Memória Flash
256KB (dos quais 8KB são usados para o bootloader)
SRAM
8KB
EEPROM
4KB
Velocidade de Clock
16MHz
A Tabela 1 demostra as principais especificações do hardware embarcado Arduino.

Memória flash: é capaz de preservar os dados armazenados por um longo tempo sem
a presença de corrente elétrica;

EEPROM: memória não volátil, pode ser programada e apagada várias vezes,
eletricamente;

SRAM: memória de acesso aleatório que mantém os dados armazenados desde que
seja mantida sua alimentação;

Shields: são placas de circuito impresso com uma função específica.
A placa pode operar com alimentação externa entre 6 e 20 volts. No entanto, se
menos de 7 volts forem fornecidos o pino de 5V pode fornecer menos de 5 volts e a placa
pode ficar instável. Com mais de 12V o regulador de voltagem pode superaquecer e danificar
a placa. A faixa recomendável é de 7 a 12 volts.
Os pinos de alimentação são os seguintes:
23

VIN. Relacionado à entrada de voltagem da placa Arduino quando se está usando
alimentação externa (em oposição aos 5 volts fornecidos pela conexão USB ou outra
fonte de alimentação regulada). É possível fornecer alimentação através deste pino
ou acessá-la se estiver alimentando pelo conector de alimentação;

5V. Fornecimento de alimentação regulada para o microcontrolador e outros
componentes da placa;

3V3. Uma alimentação de 3,3 volts gerada pelo chip FTDI. A corrente máxima é de 50
mA;

GND. Pinos terra. Cada um dos 54 pinos digitais do Mega2560 pode ser usado como
entrada ou saída. Eles operam a 5 volts. Cada pino pode fornecer ou receber um
máximo de 40 mA e possui um resistor interno de 20-50 KΩ.
O Atmega2560 tem 256 KB de memória flash para armazenamento de código(dos
quais 8KB são usados pelo bootloader), 8 KB de SRAM e 4 KB de EEPROM
1.5 Ambiente de Desenvolvimento e seus Conceitos
Esta seção apresenta os ambientes de programação utilizados no sistema de
automação veicular.
Um IDE – Integrated Development Environment (Ambiente de desenvolvimento
integrado) - consiste em um software que contém um conjunto de funcionalidades
embutidas, cuja finalidade é prover um modo mais fácil e interativo de construir e manipular
seus programas. Entre estas ferramentas geralmente figuram:

Um editor de texto com facilidades especialmente desenhadas para a linguagem;

Um compilador (e um interpretador, no caso de Java e outras linguagens
interpretadas);

Um editor gráfico, com facilidades para criação e edição da interface gráfica do
programa a ser desenvolvido;

Um debugger, que possibilita um monitoramento mais elegante do funcionamento
do programa, facilitando a detecção e remoção dos erros.
24
1.5.1 Plataforma de desenvolvimento Arduino
O ambiente de desenvolvimento Arduino contém um editor de texto para a escrita
de código, uma área de mensagens, um console de texto, uma barra de ferramentas com
botões para variadas funções, e uma série de menus. Ele se conecta ao hardware do
Arduino, permitindo o upload de programas e a comunicação com eles.
Os programas escritos usando Arduino são chamados sketches. Essas sketches são
escritas no editor de texto, e são salvas com a extensão de “arquivo”. Elas permitem
funcionalidades como recortar/colar e procurar/substituir texto. Na área de mensagem,
temos retorno de ações como salvar e exportar, além da exibição de erros. O console mostra
a saída de texto do Arduino, incluindo mensagens de erro completas e outras informações.
O canto inferior direito mostra a board atual e a portal serial. Os botões da barra de
ferramentas permitem que você verifique e faça upload de programas, crie, abra e salve
sketches, e abra o monitor serial.
Na Figura 2 é possível observar o ambiente de programação do Arduino.
Figura 2 - Ambiente de desenvolvimento Arduino 0022.
Principais comandos disponíveis:
25
(a)
Verify: Verifica se o código contém erros;
(b)
Upload: Compila o código a faz o upload para o Arduino;
(c)
New: Cria uma nova sketch;
(d)
Open: Exibe um menu com todas as sketches no seu sketchbook. Ao clicar em
uma, a mesma será aberta na janela atual;
(e)
Save: Salva sua sketch;
(f)
Serial Monitor: Abre o monitor serial.
Comandos adicionais são encontrados através dos menus: File, Edit, Sketch, Tools, Help. As
funções disponíveis pelos menus File, Edit e Help são semelhantes a outros programas bem
conhecidos e, por isso, não iremos detalhá-las aqui.
Menu Sketch:

Verify/Compile - Verifica se seu código tem erros;

Import Library - Adiciona bibliotecas ao seu programa;

Show sketchfolder - Abre a pasta onde o programa está salvo;

Add File - Adiciona um arquivo fonte ao programa. O novo arquivo aparece em uma
nova aba.
Menu Tools:

Auto format - Formata o código para uma melhor leitura, alinhando as chaves e
indentando seu conteúdo;

Board - Seleciona o kit de desenvolvimento onde se deseja realizar o projeto;

Serial Port - Mostra todas as portas seriais que o computador possui;
26

Burn Bootloader - Permite gravar um bootloader no kit de desenvolvimento do
Arduino.
1.5.2 Plataforma de desenvolvimento Android
O Android é uma plataforma desenvolvida pela Google voltada para dispositivos
móveis. Em 5 de novembro de 2007, a empresa tornou pública a primeira plataforma Open
Source de desenvolvimento para dispositivos móveis baseada na plataforma Java com
sistema operacional Linux, a qual foi chamada de Android. Essa plataforma é mantida pela
OHA (Open Handset Alliance), um grupo formado por mais de 40 empresas as quais se
uniram para inovar e acelerar o desenvolvimento de aplicações, serviços, trazendo aos
consumidores uma experiência mais rica em termos de recursos, menos dispendiosa em
ternos financeiros para o mercado móvel. Pode-se dizer que a plataforma Android é a
primeira plataforma móvel completa, aberta e livre.
1.5.2.1 Estrutura geral da plataforma
Android é a plataforma Open Source para dispositivos móveis da OpenHandset
Alliance (OHA). O Android SDK é o kit de desenvolvimento que disponibiliza as ferramentas e
APIs necessárias para desenvolver aplicações para a plataforma Android, utilizando a
linguagem Java.
Recursos:

Application framework proporciona a reutilização e substituição de componentes;

Dalvik virtual machine otimizada para dispositivos móveis;

Browser Integrado baseado no webkit engine;

Gráficos Otimizados possui uma biblioteca 2D; e 3D baseada na especificação
OpenGL ES 1.0 (aceleração de hardware é opcional);

SQLite para guardar dados estruturados;

Suporte multimídia para áudio, vídeo e formatos de imagem (MPEG4, H.264, MP3,
AAC, AMR, JPG, PNG, GIF);

Telefonia GSM (dependente de hardware);
27

Bluetooth, EDGE, 3G, e WiFi (dependente de hardware);

Câmera, GPS, compasso, e acelerômetro (dependente de hardware);

Rico ambiente de desenvolvimento, incluindo um emulador de dispositivo,
ferramentas de depuração, memória, performance e um plugin para o Eclipse (ADT).
1.5.2.2 Arquitetura
Na Figura 3 é possível observar a arquitetura computacional do Android.
Figura 3 - Arquitetura Android.
1.5.2.3 Bibliotecas

- System C library – uma implementação derivada da biblioteca C padrão sistema
(libc) do BSD sintonizada para dispositivos rodando Linux;

- Media Libraries – baseado no PacketVideo’s OpenCORE; as bibliotecas suportam os
mais populares formatos de áudio e vídeo, bem como imagens estáticas;

- Surface Manager – gerencia o acesso ao subsistema de exibição bem como as
múltiplas camadas de aplicações 2D e 3D;
28

- LibWebCore – um web browser engine utilizado tanto no Android Browser quanto
para exibições web;

- SGL – o engine de gráficos 2D;

- 3D libraries – uma implementação baseada no OpenGL ES 1.0 APIs; as bibliotecas
utilizam aceleração 3D via hardware (quando disponível) ou o software de
renderização 3D altamente otimizado incluído no Android;

- FreeType – renderização de fontes bitmap e vector;

- SQLite – um poderoso e leve engine de banco de dados relacional disponível para
todas as aplicações.
1.5.3 Plataforma de desenvolvimento Eclipse
A integração entre o ambiente Eclipse e o Android através de plug-ins possibilitou
uma forma pratica e rápida de desenvolver um aplicativo pra dispositivos móveis.
O Eclipse é uma plataforma de desenvolvimento de Open Source extensível, baseada
em Java. Por si só, é simplesmente uma estrutura e um conjunto de serviços para
desenvolvimento de aplicativos e componentes de plug-ins.
O Eclipse possui um conjunto padrão de plug-ins, incluindo as amplamente
conhecidas Ferramentas de Desenvolvimento Java (JDT). Figura 4 mostra plataforma de
desenvolvimento Eclipse com plug-in Android instalado.
Figura 4 - Plataforma de desenvolvimento Eclipse com plug-in Android.
29
1.5.3.1 Arquitetura Eclipse
Na Figura 5 observar-se a arquitetura simplificada da plataforma eclipse.
Figura 5 - Arquitetura simplificada da plataforma eclipse.
As partes em azul (Help e Update) são componentes da parte principal da Rich Client
Platform (RCP) do Eclipse. Considere a RCP apenas como um conjunto de plug-ins que
podem usados para desenvolver aplicativos, como o Lotus Notes. As partes em azul claro são
opcionais (mais recomendadas) para serem incluídas em aplicativos baseados em RCP. E as
partes em cinza(Text, IDE Text, Compare, Debug, Search, Team/CVS, IDE personality e
Resources) são totalmente opcionais. A plataforma é composta por vários componentes.
Tempo de execução:
O tempo de execução é o código que define o modelo de plug-in do Eclipse, com base
na especificação de OSGi e noção de extensão e pontos de extensão. O tempo de execução
também fornece serviços adicionais como criação de log e simultaneidade.
JFace/SWT
O Standard Widget Toolkit (SWT) é um conjunto de widget que proporciona ao
Eclipse sua aparência. O JFace é simplesmente uma camada no alto do SWT que fornece
algumas classes Model-View-Controller (MVC) para simplificar o desenvolvimento de
aplicativos gráficos.
30
Workbench
O ambiente de trabalho concede ao Eclipse sua personalidade. O conceito das
visualizações, perspectivas e itens como editores são definidos nesse nível.
Ajuda (Assistência ao Usuário)
O componente do Eclipse permite que você forneça assistência a seus usuários. Isso
pode ser feito por meio do sistema de ajuda, que permite aos usuários fazer procuras na
documentação de ajuda ou usando folhas de dicas, que podem ser consideradas como listas
de tarefas interativas para usuários finais.
Update
O componente de atualização do Eclipse fornece as facilidades para permitir a
atualização dos seus aplicativos entre versões.
Team
O componente Team é composto por uma estrutura para permitir que fornecedores
se conectem nos seus próprios sistemas de controle de versão. Uma implementação
exemplar de provedor é o plug-in CVS fornecido fora da caixa do Eclipse.
1.5.3.2 Emulador Android
O kit de desenvolvimento Android é fornecido como plug-in e conta com o emulador
embutido auxiliando na criação de aplicativos para dispositivos móveis com sistema
operacional Android. A Figura 6 mostra emulador Android.
Figura 6 - Emulador Android.
31
1.6 Caracterização do Problema
O tema tratado, controle e automação de veículos, vêm sendo largamente
pesquisado em diferentes áreas pelo mundo.
A problemática proposta consiste no projeto e desenvolvimento de um sistema de
controle e automação de um carro de passeio aplicando processamento embarcado e Open
Source no projeto do sistema.
Diante da possibilidade de automação de um veículo, questiona-se a viabilidade de
automação utilizando-se um dispositivo SmartPhone. Visto que este proporcionaria total
liberdade para o usuário, questiona-se também a segurança e conforto.
O projeto SiAV possui arquitetura em blocos que pode ser gerenciado de forma
dinâmica que será apresentado de maneira mais abrangente nos capítulos seguintes.
A proposta do SiAV é tornar o veículo capaz de realizar tarefas por meio de um
Celular SmartPhone utilizando da tecnologia 3G e possibilitando comandos específicos ao
automóvel.
1.7 Projeto SiAV
O projeto SiAV teve início com o surgimento dos primeiros autômatos (ancestrais dos
atuais robôs), podemos considerar como um marco na história da humanidade a construção
da primeira máquina de calcular, criada por Pascal em 1642. A partir desta época inúmeros
autômatos foram desenvolvidos, mas foi somente a partir de 1923 que o termo “robot”
começou a ser empregado, tendo sido usado pela primeira vez por Karel Capek (Dudek
2000).
Com a evolução dos robot e o desejo de se automatizar cada vez mais os
componentes do nosso dia-a-dia, o projeto SiAV traz para o cotidiano a experiência de se
automatizar um veículo pequeno de passeio possibilitando assim um maior conforto,
segurança e praticidade ao usuário.
Este projeto foi desenvolvido em três etapas distintas. Na primeira etapa foram
identificados quais comandos deveriam ser automatizados, a partir daí projetou-se os
atuadores para efetuar o acionamento para esses comandos. Na segunda etapa definiu-se a
32
arquitetura de software e hardware livres para o controle das variáveis automatizadas. Na
terceira e ultima etapa desenvolveram-se os algoritmos de controle do sistema.
Vale ressaltar que o intuito do projeto é a utilização de dispositivos de baixo custo
buscando o desenvolvimento de um produto acessível à comercialização.
Foram projetados e construídos os circuitos eletroeletrônicos para a primeira versão
do software de controle e automação do veículo baseado em um microprocessador Atmega
2560 sobre plataforma Arduino.
Na Figura 7, observa-se o equipamento Arduino que foi utilizado no SiAV.
Figura 7 - Arduino Atmega 2560.
1.8 Motivação deste Trabalho
Atualmente, os sistemas autônomos veiculares vêm ganhando cada vez mais espaço.
Fatores relacionados à segurança e conforto são os principais motivadores, os quais têm
despertado o interesse de montadoras e laboratórios de pesquisa a redirecionarem suas
pesquisas em sistemas autônomos.
Entretanto, grande parte desses sistemas são projetados em arquiteturas de sistemas
microprocessados com diferentes conceitos (Shimazaki et al., 2004), (Wada M., 2003) e
33
(Good et al., 1988). As aplicações desenvolvidas em sua grande maioria são desenvolvidas
para
carros
com
motores
elétricos
com
diversos
acessórios
automáticos
ou
semiautomáticos.
O projeto em questão, por sua vez, pode ser definido como diferenciado das
aplicações já desenvolvidas, pois possuem premissas que estabelecem a utilização de um
veículo popular, visando a obtenção de um sistema de baixo custo flexível o suficiente para
adaptar-se a diferentes modelos de carros realizando a tarefa de automação dos
equipamentos do veículo.
Os sistemas já desenvolvidos utilizam sistemas sofisticados e complexos instalados
em veículos modernos que contam com inúmeros dispositivos de controle já instalados.
Todo esse trabalho envolve um detalhado estudo para o desenvolvimento de um sistema
robusto, simples e barato que implique em modificações mínimas no veículo.
1.9 Justificativa
Na área de veículos autônomos ou automação veicular, tem aumentado a cada dia a
importância dos conceitos de segurança, conforto e eficiência. Visando maximizar cada vez
mais estes princípios, muito se tem investido em novas pesquisas dentro dos conceitos de
sistemas de apoio ao motorista e de automação de tarefas repetitivas dando maior conforto
e segurança.
Estudos mostram o aumento da utilização de sistemas eletrônicos para o controle e
monitoração de diversos dispositivos, sistemas e até tarefas. Os automóveis representam os
produtos que vêm a cada dia incorporando mais equipamentos e dispositivos
microeletrônicos, o que contribui para o aumento do consumo de semicondutores.
Os equipamentos incorporados aos automóveis representam a eletrônica embarcada
na forma de sensores, computadores de bordo, circuitos eletrônicos, freios inteligentes,
instrumentação, câmbios automáticos, entre outros (Consoni F., 2004).
Um ponto importante é que a capacidade para executar um projeto cresce mais
lentamente se comparada com o aumento da complexidade do mesmo. Este ponto se
reflete em um aumento lento da produtividade do ciclo de projeto de sistemas complexos
(Harteinsten R., 2002).
34
O mercado tem respondido de forma positiva com o crescimento de unidades
produzidas e comercializadas. Estima-se que nos próximos anos o aumento do consumo
destas tecnologias e novos conceitos em eletrônica embarcada nos veículos tragam maior
segurança e conforto ao motorista e aos ocupantes.
Torna-se cada vez maior o relacionamento de computadores e da indústria de
semicondutores com os automóveis. Esta modernização está trazendo aos motoristas e
passageiros diversos benefícios como: maior segurança ao dirigir, apoio ao motorista em
situações de emergência, limitadores e controladores de velocidade e estabilidade do
veículo e os sistemas de ajuda no estacionamento dos veículos.
Em países da Europa como a Alemanha, França e Itália existem rodovias com alto
grau de automatização atuando de forma inteligente, são as chamadas AHS – Automated
Highway Systems.
Essas rodovias, por sua vez, são equipadas com diversos dispositivos que auxiliam o
motorista no controle e condução do veículo, podendo estabelecer o controle de velocidade
eletronicamente, avisando o motorista das condições de alerta e emergência.
35
2 OBJETIVOS
2.1 Objetivos Gerais
Este trabalho tem como objetivo principal desenvolver um controlador de automação
para o veículo acionando os atuadores de acordo com as necessidades, seguindo as
especificações de arquitetura flexível em sistemas distribuídos (Bellardi, T., 2005).
A abordagem aplicada para este propósito baseia-se no projeto e implementação de
um controlador de automação embarcado em lógica configurável propiciando a um veículo
de passeio receber comandos para automação de forma segura e controlada. Por outro lado,
este trabalho também visa desenvolver uma interface entre o controlador e o operador para
o envio dos comandos.
2.2 Objetivos específicos

Estudar, projetar e implementar a programação dos módulos e seus respectivos
blocos para o controle de automação em um microcontrolador embarcado em
hardware Open Source;

Projetar e implementar os periféricos para o microcontrolador embarcado em
hardware Open Source e conectar ao barramento de comunicação;

Definir e projetar uma comunicação entre o operador e o controlador de forma
automática propiciando ao sistema receber comandos e executar as ações
necessárias para a automação do veículo.
36
3 METODOLOGIA
A metodologia aplicada neste trabalho dedicou-se ao projeto de um sistema de
controle e automação para um veículo de passeio comum a partir dos conceitos da
arquitetura flexível, modular e distribuída definida por (Bellardi, T., 2005). Esta arquitetura é
dividida em módulos a fim de propiciar futuras modificações do sistema e o acréscimo de
outras funcionalidades.
O sistema de controle e automação foi subdividido em dois módulos: módulo de
controle e automação, módulo de interface com o operador, sendo que estes serão
estudados posteriormente.
Desenvolveu-se a sistemática de controle e automação usando as ferramentas do
Arduino SDK 0.24 (Software Development Kit) para a codificação do software do
microcontrolador embarcado Arduino mega 2560 o qual é responsável por controlar os
atuadores do veículo.
O módulo de interface com o operador foi desenvolvido usando a ferramenta de
desenvolvimento Eclipse Idigo com pacote SDK Android (Software Development Kit). Para
codificação da interface utilizou-se a linguagem de programação Java.
A presente metodologia de projeto, envolvendo arquiteturas reconfiguráveis,
mostra-se promissora devido à grande flexibilidade das técnicas utilizadas. O projetista pode
modelar diversas técnicas de controle para validar desempenho e viabilidade
técnica/econômica do projeto.
37
4 SISTEMA DE AUTOMAÇÃO VEICULAR COM ARDUINO E ANDROID - Desenvolvimento
4.1 Arquitetura do Sistema
Esta seção apresenta arquitetura proposta na elaboração do controle de automação
do veículo. Sendo apresentadas partes mecânicas, eletroeletrônicas e computacionais
propostas nesses trabalhos.
Sabe-se que para o projeto de sistemas de controle o estudo da arquitetura do
sistema é um dos passos iniciais na concepção do projeto. É durante a elaboração da
arquitetura do sistema que os projetistas dedicam sua atenção para a definição da
comunicação, interação e o funcionamento entre os subsistemas.
Para a elaboração do sistema de controle e automação dedicaram-se esforços na
concepção de uma arquitetura que atendesse os requisitos de segurança, desempenho e
baixo custo.
A elaboração desse projeto passou por duas fases diferentes. Na primeira fase foram
definidas os parâmetros principais do projeto SiAV e seus objetivos. A segunda fase por sua
vez, consistiu no estudo e definição da arquitetura flexível e modular do sistema de controle.
As duas fases que antecederam esse trabalho contribuíram de forma importante para
a obtenção de resultados consideráveis em termos tecnológicos e científicos na elaboração e
implementação da arquitetura.
As implementações nessas fases realizadas trouxeram a possibilidade de se
desenvolver soluções a partir do ponto até onde essas fases alcançaram dando sequência ao
projeto SiAV em busca do objetivo principal do projeto: automação de um veículo utilizando
um celular Smartphone .
4.1.1 Arquitetura na primeira fase do projeto SiAV
Na primeira fase do projeto foram definidos os parâmetros de projeto e seu objetivo
obteve-se também os modelos de abertura de portas, capo e partida do motor.
Durante a elaboração da arquitetura do sistema foi seguido o fluxo de projeto saindo
do acionamento mecânico para a interface com o operador. Uma vez definida a arquitetura
38
de acionamento foram definidas as arquiteturas computacional e de acionamento
eletroeletrônico para o controle do veículo.
Na Figura 8 pode-se visualizar a arquitetura computacional e de acionamento
eletroeletrônico proposta.
Figura 8 - Diagrama de bloco do sistema proposto.
Nessa arquitetura do sistema proposta e implementada, o notebook é o responsável
por processar os comandos e enviar ao microcontrolador Arduino.
4.1.2 Arquitetura na segunda fase do projeto SiAV
Na segunda fase do projeto, foi definida uma arquitetura flexível para o controle da
movimentação do veículo. Inicialmente, aplicou-se a metodologia de se dividir o sistema e
organizá-lo em diferentes módulos os quais possuem funções bem específicas para a
realização das tarefas relacionadas ao controle da movimentação do veículo.
39
O desenho da arquitetura foi projetado pensando-se em quatro módulos sendo
esses: mapeamento, controle dos módulos de atuação, controle de automação e interface
com o usuário.
Essa estrutura apresentada por (Bellardi T, 2005) tem um caráter de orientar o
desenvolvimento do projeto, não consistindo em um critério rígido (podendo sofrer
modificações com os avanços do projeto).
Na Figura 9 observa-se a arquitetura detalhada do módulo de automação:
Figura 9 - Arquitetura conceitual do módulo de controle e automação.
Busca-se com a arquitetura proposta alcançar o objetivo inicial do projeto SiAV e
possibilitar assim automatizar outras tarefas (Correia A., et al., 2007a). Sendo assim, os
principais conceitos desenvolvidos nesta fase foram concentrados em duas frentes:
a) O desenvolvimento do controlador de automação em um microcontrolador
embarcado em lógica reconfigurável;
b) O projeto e desenvolvimento das placas de interface de sinais e potência.
40
4.2 Aspectos Gerais Desenvolvimento do Software de Controle
A seção Apêndices descreve a codificação dos principais módulos de controle
desenvolvidos no sistema de automação veicular.
4.2.1 Módulo controlador cliente
O sistema foi projetado e construído utilizando a ferramenta de desenvolvimento
eclipse onde foi adicionado o plug-in do ambiente de desenvolvimento Android utilizando a
linguagem de programação Java. O projeto partiu da criação de um pacote Android cujo
nome é (Self-Car) dentro do pacote foram criadas as classes; Cliente, ConexãoSocket, Envio e
Mensagem com extensão .java.
A classe Cliente é responsável por chamar os métodos necessários para iniciar
aplicação (Ver Apêndice A).
A classe ConexaoSocket é responsável por iniciar uma conexão com o servidor e
preparar o envio de mensagens (Ver Apêndice B).
A classe Envio é responsável por preparar o envio de mensagens ao servidor (Ver
Apêndice C).
A Classe Mensagem é responsável por enviar as mensagens para o servidor (Ver
Apêndice D).
4.2.1.1 Diagrama de classe do Módulo Cliente
Observa-se na Figura 10 do diagrama de classe Modulo Cliente, onde a classe Cliente
informa para classe ConexãoSocket o IP e Porta para conexão com o servidor socket
instalado no veículo, a classe Mensagem e responsável por informar as mensagem coletadas
da tela layout para classe Envio essa por sua vez envia as mensagem para o servidor socket.
41
Figura 10 - Diagrama de classe Módulo Cliente.
4.2.1.2 Layout do módulo cliente
A seguir é apresentado o layout do modulo cliente, onde temos uma breve
explicação das telas seguintes. A Figura 11 apresenta a tela principal do Android, quando
emulador é iniciado após clicar no ícone do software criado abrirá a tela de conexão com o
servidor onde se pode informar o IP e porta do servidor que estará alocado no veículo.
42
Figura 11 - Telas Emulador e Conexão com Servidor.
A Figura 12 apresenta a tela após a autenticação no servidor, mostrando os 4 botões
de automação do veículo onde os mesmos estarão desligados, após o acionamentos os
botões mudaram de status para on e sinalização verde.
Figura 12 - Layout módulo cliente.
4.2.2 Modulo controlador servidor
O sistema foi projetado e construído utilizando a ferramenta de desenvolvimento
eclipse utilizando a linguagem de programação Java. O projeto partiu da criação de um
Servidor Socket com duas classes: Servidor e ControlePorta.
A Classe Servidor é responsável por instanciar o servidor (Ver Apêndice E).
43
A Classe ControlePorta é responsável por enviar os comandos do servidor para o
controlador Arduino (Ver Apêndice F).
4.2.2.1 Diagrama de classe do Modulo Servidor
Observa-se na Figura 13, o diagrama de classe do modulo servidor onde a classe
Servidor envia comandos para a classe ControlePorta, esta por sua vez é a classe responsável
por instanciar uma comunicação com hardware Arduino e assim enviar comandos para o
mesmo.
Figura 13 - Diagrama de classe módulo servidor.
44
5 CONCLUSÃO
Neste trabalho foi desenvolvido um controlador de automação para o veículo
automotor de passeio possibilitando ao usuário a instalação de módulos de acordo com sua
necessidade, o projeto buscou possibilitar assim um maior conforto, segurança e praticidade
ao usuário.
Foram implementados a programação dos módulos e seus respectivos blocos para o
controle de automação em um microcontrolador embarcado em hardware Open Source.
Foram implementados os periféricos para o microcontrolador embarcado em
hardware Open Source e a conexão com o barramento de comunicação.
Foi projetada a comunicação entre o operador e o controlador de forma automática
propiciando ao sistema receber comandos e executar as ações necessárias para a
automação do veículo utilizando a tecnologia 3G, Android e Arduino para o sucesso deste
projeto.
5.1 Trabalhos futuros
As perspectivas de trabalhos futuros relacionados objetivam atingir um nível
funcional do sistema para atender as expectativas do projeto SiAV.
A implementação de um Módulo de mapeamento e localização do veículo utilizando
a tecnologia GPS (Global Positioning System) para monitoramento do automóvel.
A implementação de um Módulo de câmeras de vigilância integradas com o modulo
cliente para visualização instantânea do interior e exterior do veículo.
45
6 REFERÊNCIAS
ADADE FILHO, A. – Fundamentos de Robótica – Cinemática, Dinâmica e Controle de
Manipuladores Robóticos. São José dos Campos, ITA, 1992.
AMATO João Neto (2004) – Relatório setorial FINEP – Semicondutores
http://www.finep.gov.br/PortalDPP/45oolean45t_setorial – acessado em 2004
–
AMBIENTES VIRTUAIS INTERATIVOS E INTELIGENTES: Fundamentos, Implementação e
Aplicações Práticas. XXIV Congresso da SBC – JAI 2004 (Jornadas de Atualização em
Informática). Tutorial. Salvador, Bahia. Web.
ANDEEN, G.B. (ED.) – Robot Design Handbook. NY, McGraw-Hill, 1988.
BELLARDI Thiago C., (2005). Definição de uma arquitetura flexível para controle de
movimentos de um veículo de passeio. Publicação DM – 002 Dissertação de mestrado
apresentada no departamento de mecânica da Universidade de Brasília, novembro.
BROWN S.; Vranesic Z. (2000). Fundamentals of Digital Logic with VHDL Design. McGraw
Hill, Toronto.
BUSHBY S. (1997). BACnet: a Standard Comunication Infrastrutures for intelligent Buildings.
In: Elsevier, Automation in Construction 6, pg. 529-540.
CORREIA A.; Llanos C. H. Q.; Carvalho R. W.; Alfaro S. A. (a) (2007): A Design/Testing
Platform Based on Reconfigurable Architectures and Virtual Instrumentation Applied to
the Hands-free Driving Automobile Problem, WSEAS transactions on systems and control.
Issue 3, vol. 2, Março 2007.
CORREIA A.; Llanos C. H. Q.; Carvalho R. W.; Alfaro S. A. (b) (2007): A Platform Based on
Reconfigurable Architectures and Virtual Instrumentation Applied to the Driving
Automobile Problem. 6th WSEAS International Conference on SIGNAL PROCESSING,
ROBOTICS and AUTOMATION (ISPRA ’07). Ilha de Corfu, Grécia, Fevereiro, 2007. Pg. 242 a
248.
CORREIA, A. P. Um projeto de Controle de Movimentação Veicular Projetado em um
Processador Embarcado em FPGA com Ambiente de Simulação Usando Instrumentação
Virtual. 2007. 178f. Dissertação (MESTRADO EM SISTEMAS MECATRÔNICOS)-Universidade
de Brasília – Faculdade de Tecnologia Departamento de Engenharia Mecânica, Brasília, 2007.
DEHON A. “The Density Advantage of Configurable Computing”, IEEE Computer. Vol. 33,
No. 4, 2000.
DEITEL,H.;DEITEL,P.C++: Como Programar.5 Edição. Editora Prentice-Hall.
DEITEL,H.;DEITEL,P.J.Java: Como Programar.8 Edição. Editora Prentice-Hall.
46
DORF, R. C. (ED.) – Concise International Encyclopedia of Robotics. NY, Wiley, 1990.
DUDEK, G. and Jenkin, M. (2000). Computational Principles of Mobile Robotics. Cambridge
University Press, Cambridge, UK. EDK MicroBlaze tutorial – Xilinx 2005.
FONSECA, E. G. P. da, Beppu, M. M. Apostila Arduino. 2010. 23 f. Apostila – Universidade
Federal Fluminense Centro Tecnológico Escola de Engenharia Curso de Engenharia de
Telecomunicações Programa de Educação Tutorial, Niterói, 2010.
FU, K.S. et alii – Robotics: Control, Sensing, Vision and Intelligence. NY, McGraw-Hill, 1987.
GARRIDO R. (2001). Automação e Controle Aplicados em Veículo de Combustão interna
Convencional em Deslocamento Linear. Dissertação de mestrado UnB.
GOETTING, H.H. (2001). FOX GmbH: Automatisierte Fahrzeuge. Disponível em:
http://www.foxit.de. Acessado em: 11/06/2012.
I.N.R.I.A institute – Disponível em: <http://www.inria.fr/index.en.html>. Acessado em 2007.
KELBER Christian R., Cláudio R. Jung, Farlei Heinen (2005). Computação Embarcada; Projeto
e Implementação de Veículos Autônomos Inteligentes. XXV Congresso da SBC, Janeiro.
KELBER, C.R.; Dreger, R.S.; Gomes, G.K.; Webber, D.; Schirmbeck, J.; Netto, R.H.
KELBER, C.R.; Osório, F.S.; Jung, C.R.; Heinen, F.J.; Dreger, R.S.; Gules, R.; Mello Jr., C.D.;
Silveira, M.A.; Schumacher, W.; (2003ª) “Tecnologias para Automação Veicular – Soluções
em Mecatrônica e Sistemas de Apoio ao Motorista”; Engenharia- Estudos Tecnológicos;
ISSN 1517-3615, Vol. XXIII, No. 24, p.37-47.
LEWIS, T. G.; El-Rewini, H. (1998). “Distributed and Parallel Computing”, Manning.
L’HOTE, F. et alii – Robot Technology, Vol. 4 – Robot Components and Systems. London,
Kogan Page/Prentice-Hall, 1983.
Li J. H, Lee, Li, P. M. (2005) A Neural Network Adaptive Controller Design for Free- PitchAngle Diving Behavior of an Autonomous Underwater Vehicle. Robotics and Autonomous
Systems. Elsevier, 52 pg 132 – 147
MINGJIE Lin.; Gamal A.; Chang Y.; Wong S. (2006). Performance Benefits of Monolithically
Stacked 3D-FPGA. FPGA06 – USA.
MOORE G. E. (1997). The Microprocessador: Engine of the Technology revolution.
Communications of the AMC, Vol. 40 (2), pg. 112-114.
NETO,O. M. Entendendo e Dominando Java. 2ª Edição. Editora Universo dos Livros. 2007.
47
OSÓRIO, F. S.; Heinen, F.; Fortes, L. (2002). Controle da Tarefa de Estacionamento de um
Veículo Autônomo através do Aprendizado de um Autômato Finito usando uma Rede
Neural J-CC. In: VII Simpósio Brasileiro de Redes Neurais, 2002, SBC – Porto de Galinhas –
Recife.
PATTERSON, David A.; Hennessy, John L. (2000). Organização e projeto de computadores: A
interface Hardware/Software.2 Ed. Rio de Janeiro:LTC, pg. 551.
PEREIRA, K. R. C. Sistema para Controle e Supervisão Remota para Automação Residencial.
2009. 37f. Trabalho de Conclusão de Curso. Natal, 2009.
ROBOSOFT S.A. Automated People Transportation – Applications, Technologies and
Perspectives. Sep. 2003. Disponível em: http://www.robosoft.fr/Brochures/wptransports_EN.pdf.
SANCHEZ, E. et al. (1999). “Static and Dynamic Configurable Systems”, IEEE Transactions of
Computers, pp. 556-564.
SHIMAZAKI Kazunori; Kimura Tomio; Yamada Satoshi (2004). Parking assisting device –
Patent No US 6711473 B2 – United States
SILVA, L. A. da. Apostila de Android: Programando Passo a Passo. 2010. 132 f. Apostila, Rio
de Janeiro, 2010
SIPPER, M.; Sanchez, E. (2000). “Configurable Chips Meld Software and Hardware, IEEE
Computer, pp. 120-121.
SÖHNITZ, I. (2001); “Querregelung eines autonomen Strassenfahrzeugs”; ForschrittBerichte VDI, Reihe 8, Nr. 882.
SÖHNITZ, I., Schwarze, K., (1999) “Lateral Control of an Autonomous Vehicle: Design and
First Practical Results”, In Proceeding of the IEEE International Conference on Intelligent
Transportation Systems. Tokyo, Japan; 5-8 October.
STEVEN E. Shaladover; Charles A. Desoer (1991). Automatic Vehicle Control Developments
in the PATH Program. IEEE Transaction on Vehicle Technology, Vol., 40, No 1, Fevereiro.
TANAKA Yuu; Iwata Yoshifumi; Satonaka Hisashi; Endo Tomohiko; Kubota Yuichi; Matsui
Akira; Iwakiri Hideyuki; Sugiyama Toru; Kawakami Seiji; Iwazaki Katsuhiko; Kataoka Hiroaki
(2006): Vehicle backward movement assist device and vehicle parking assist device –
Patent No 7039504 – United States
TOYOTA MOTOR CORPORATION. The PM concept vehicle disponível
<http://www.toyota.com/vehicles/future/pm.html>. – Acessado em:10/11/2011.
em:
TURLEY, J. (1998). “Triscend E5 Reconfigures Microcontrollers”, Microprocessor Report,
Nov. 16, pg. 12-13.
48
WILLIANS R. (2006). Projeto de um Sistema Embarcado em Arquitetura Reconfigurável e
instrumentação Virtual Aplicados a Veículos Autônomos – Trabalho de Graduação – UnB.
WOLF, W. (1994). “Modern VLSI Design: A system Approach”, Englewood Cliffs, Prentice
Hall. Xilinx : Spartan-3 Starter Kit Board User Guide. UG130 (v1.1) Maio 2005.
YABARRENA, Jean Mimar Santa Cruz (2006). Tecnologias system on chip e CAN em sistemas
de controle distribuído. Dissertação de mestrado – USP.
YANG E., Gu, D., Mita, T., Hu, H (2004). Nonlinear Tracking Control of A Car-Likemobile
Robot via Dynamic Feedback Linearization. Control 2004, University of Bath, UK, Setembro.
49
APÊNDICES
APÊNDICE A- Classe Cliente
package br.Self.Car;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import br.Self.Car.R;
import br.Self.Car.ConexaoSocket;
import br.Self.Car.Mensagem;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Cliente extends Activity implements OnClickListener {
/**
* @uml.property name=”btnConectar”
* @uml.associationEnd
*/
private Button btnConectar;
/**
* @uml.property name=”lbIp”
* @uml.associationEnd
*/
private TextView lbIp;
/**
* @uml.property name=”edIp”
* @uml.associationEnd
*/
private EditText edIp;
/**
* @uml.property name=”edPorta”
* @uml.associationEnd
*/
private EditText edPorta;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Recupera componenentes da tela
btnConectar = (Button) findViewById(R.id.btnConectar);
btnConectar.setOnClickListener(this);
edIp = (EditText) findViewById(R.id.edIp);
edPorta = (EditText) findViewById(R.id.edPorta);
lbIp = (TextView) findViewById(R.id.lbIp);
lbIp.setText(getLocalIpAddress());
}
public void onClick(View view) {
if (view == btnConectar) { // Clicou no botão Conectar
try {
50
// Tenta iniciar uma conexão com o Servidor de Socket
ConexaoSocket connection =
ConexaoSocket.createConnection(edIp.getText().
toString(), edPorta.getText().toString());
connection.connect();
// Inicia tela para envio de mensagens
startActivity(new Intent(this, Mensagem.class));
} catch (Exception e) {
// Mostra erro na tela
Toast.makeText(this,
“Não foi possível conectar” + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
}
/**
*
* Método para recuperar ip do aparelho
*/
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
}
return null;
}
}
51
APÊNDICE B – Classe ConexaoSocket
package br.Self.Car;
import java.io.DataOutputStream;
import java.net.Socket;
import android.os.Handler;
import android.os.Message;
public class ConexaoSocket {
private static ConexaoSocket connection;
/**
* @uml.property name=”porta”
*/
private int porta;
/**
* @uml.property name=”host”
*/
private String host;
/**
* @uml.property name=”socket”
*/
private Socket socket;
/**
* @uml.property name=”sender”
* @uml.associationEnd
*/
private Envio sender;
public static final int CONNECTED = 1;
public static final int ERROR = 2;
public static final int SENDING_MESSAGE = 3;
public static final int DISCONNECTED = 4;
/**
* @uml.property name=”msg”
* @uml.associationEnd
*/
private Message msg;
/**
* @uml.property name=”out”
*/
private DataOutputStream out;
/**
* @uml.property name=”handler”
* @uml.associationEnd
*/
private Handler handler; // Handle para notificações na tela
private ConexaoSocket(String host, String porta) {
this.host = host;
this.porta = Integer.parseInt(porta);
}
// Método que cria Objecto ConnectionSocket
public static ConexaoSocket createConnection(String host, String porta) {
connection = new ConexaoSocket(host, porta);
return connection;
}
// Retorna conexão atual
public static ConexaoSocket getCurentConnection() {
return connection;
52
}
// Conecta com o Servidor
public void connect() throws Exception {
this.socket = new Socket(host, porta);
out = new DataOutputStream(socket.getOutputStream());
}
// Inicia Thread para envio de mensagens
public void startSender(Handler handler) {
sender = new Envio (out, handler);
new Thread(sender).start();
this.handler = handler;
}
// Método set mensagem para envio
public void senMessage(String mensagem) {
sender.setMessage(mensagem);
}
// Método para 52cole52tar dados do Servidor
public void disconnect() throws Exception {
sender.disconnect();
socket.close();
if (handler != null) {
msg = new Message();
msg.arg1 = ConexaoSocket.DISCONNECTED;
handler.sendMessage(msg);
}
}
}
53
APÊNDICE C – Classe Envio
package br.Self.Car;
import java.io.DataOutputStream;
import java.io.IOException;
import android.os.Handler;
import android.os.Message;
class Envio implements Runnable {
/**
* @uml.property name=”out”
*/
private DataOutputStream out;
/**
* @uml.property name=”running”
*/
private 53oolean running = true;
/**
* @uml.property name=”handler”
* @uml.associationEnd multiplicity=”(1 1)”
*/
private Handler handler;
/**
* @uml.property name=”msg”
* @uml.associationEnd
*/
private Message msg;
/**
* @uml.property name=”sendMessage”
*/
private String sendMessage;
public Envio (DataOutputStream out, Handler handler) {
this.out = out;
this.handler = handler;
}
public void run() {
while (running) {// Enquanto estiver executando
try {
if (sendMessage != null) { // Se existir uma mensagem para
// enviar
msg = new Message();
msg.arg1 = ConexaoSocket.SENDING_MESSAGE;
handler.sendMessage(msg); // Notifica Handler
out.writeUTF(sendMessage); // Escreve mensagem
out.flush();
sendMessage = null; // Seta nulo na mensagem
}
} catch (IOException e) {
e.printStackTrace();
msg = new Message();
msg.arg1 = ConexaoSocket.ERROR;
msg.obj = e.getMessage();
handler.sendMessage(msg);
running = false;
}
}
try {
54
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @return
* @uml.property name=”running”
*/
public 54oolean isRunning() {
return running;
}
/**
* @param running
* @uml.property name=”running”
*/
public void setRunning(54oolean running) {
this.running = running;
}
public void stop() {
running = false;
}
public void setMessage(String message) {
this.sendMessage = message;
}
public void disconnect() throws Exception {
msg = new Message();
msg.arg1 = ConexaoSocket.DISCONNECTED;
handler.sendMessage(msg); // Notifica Handler
running = false;
out.close();
}
}
55
APÊNDICE D – Classe Mensagem
package br.Self.Car;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.widget.Button;
public class Mensagem extends Activity {
/**
* @uml.property name="handler"
* @uml.associationEnd multiplicity="(1 1)"
*/
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
// Verifica mensagem do Handler e mostra na tela
synchronized (msg) {
switch (msg.arg1) {
case ConexaoSocket.CONNECTED:
break;
case ConexaoSocket.SENDING_MESSAGE:
break;
case ConexaoSocket.ERROR:
break;
case ConexaoSocket.DISCONNECTED:
break;
}
}
};
};
//Cria e instância os botões do tipo ToggleButton e seta a view tela1.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tela1);
Button butDesconectar = (Button) findViewById(R.id.butDesconectar);
butDesconectar.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// Método que verifica se a seleção foi marcada.
if (((Button) v).isClickable())
try {
ConexaoSocket.getCurentConnection().disconnect();
} catch (Exception e) {
// TODO Auto-generated catch block
e.toString( );
}
}
});
ToggleButton butmotor = (ToggleButton) findViewById(R.id.butmotor);
butmotor.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
56
{
// Método que verifica se a seleção foi marcada.
if (((ToggleButton) v).isChecked())
ConexaoSocket.getCurentConnection().senMessage("motor ligado");
else
ConexaoSocket.getCurentConnection().senMessage("motor desligado");
}
});
ToggleButton butporta = (ToggleButton) findViewById(R.id.butportas);
butporta.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// Método que verifica se a seleção foi marcada.
if (((ToggleButton) v).isChecked())
ConexaoSocket.getCurentConnection().senMessage("Porta
aberta");
else
ConexaoSocket.getCurentConnection().senMessage("Porta
fechada");
}
});
ToggleButton butcapo = (ToggleButton) findViewById(R.id.butcapo);
butcapo.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// Método que verifica se a seleção foi marcada.
if (((ToggleButton) v).isChecked())
ConexaoSocket.getCurentConnection().senMessage("Capô aberto");
else
ConexaoSocket.getCurentConnection().senMessage("Capô fechado");
}
});
try {
// Recupera Conexão atual
ConexaoSocket.getCurentConnection().startSender(handler);
} catch (Exception e) {
Toast
.makeText(this,"Não foi possível iniciar o Serviço de
Mensagens.",Toast.LENGTH_LONG).show();
finish();
}
}
}
57
APÊNDICE E - Classe Servidor
package com.sevidor;
import java.io.DataInputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Servidor {
private static boolean executando = true;
private static String mensagem;
private static final int PORTA = 1234;
private static ControlePorta arduino;
public void Controller(){
arduino = new ControlePorta();
arduino.initSerial();
}
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(1234);
InetAddress addr = InetAddress.getLocalHost();
System.out.println("----------- SERVIDOR CONECTADO "+ addr.getHostAddress() + "
PORTA " + PORTA + " -----------");
System.out.println("Esperando Conexões.");
Socket socket = server.accept();
System.out.println("Sevidor-> Conectou Ip " +
socket.getInetAddress().getHostAddress());
DataInputStream in = new DataInputStream(socket.getInputStream());
try {
}
//
}
mensagem);
}
System.out.println("Servidor-> Finalizado 1 ");
in.close();
socket.close();
//server.close();
} catch (Exception e) {
System.out.println("Servidor-> Finalizado 2 ");
socket.close();
server.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
58
APÊNDICE F – Classe ControlePorta
Package com.sevidor;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.SerialPort;
import java.io.IOException;
import java.io.OutputStream;
public class ControlePorta {
private OutputStream serialOut;
public void initSerial() {
try {
try {
}{
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void close(){
try {
serialOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void enviaDados(int 58oole){
try {
{
}
}
}

Documentos relacionados