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 { { } } }