Controlando um Auto Modelo com um Programa Escrito em Java e o Hardware Arduino Elaine A. R. Pires 1, Elisângela A. R. 2, Ivan Luiz P. Pires 3 1 Instituto Federal de Mato Grosso Campus Juína (IFMT) Caixa Postal 255 78.320 000 Juína MT Brasil 2 Universidade Tecnológica Federal do Paraná Campus Curitiba (UTFPR) 3 Departamento de Computação Universidade Estadual de Mato Grosso (UNEMAT) Colíder, MT Brasil elaine.rocha@jna.ifmt.edu.br, eli_a_rocha@hotmail.com, ivanpires@unemat.br Abstract. The Java programming language has been growing as a high level language with great support of new functionalities through a wide variety of available libraries. Furthermore, the communication between Java program and hardware device, like a Arduino, is possible through a serial communication. Thus, this article presents a Java and Arduino communication approach, for auto model control. Resumo. A linguagem de programação Java vem crescendo como uma linguagem de alto nível e com grande suporte de novas funcionalidades através de uma vasta variedade de bibliotecas disponíveis. Além disso, é possível comunicar de forma serial um programa Java com dispositivos de hardware, como a plataforma de hardware livre Arduino. Assim, este artigo apresenta uma abordagem de comunicação entre um software e um dispositivo de hardware para controlar um auto modelo. 1. Justificativa Com o crescimento da linguagem de programação Java como uma linguagem de alto nível e com grande suporte de novas funcionalidades, foram desenvolvidas uma vasta variedade de bibliotecas, sendo desenvolvida sob uma Máquina Virtual a qual possibilita a portabilidade entre diferentes sistemas operacionais. Uma das grandes características desta linguagem é sua interação com a comunicação serial, possibilitando o controle de dispositivos de hardware com microcontroladores, como a plataforma de hardware livre Arduino. O controle de dispositivos físicos através de software abre uma gama de possibilidades através da interação do mundo real com uso de sensores e atuadores, para diversas áreas de aplicação, sejam elas educacionais, comerciais e para fins de pesquisa. Este artigo apresenta um protótipo para a comunicação de um software com um dispositivo de hardware para controle de um auto modelo, mediado pela plataforma de 1
hardware livre Arduino. Este software é desenvolvido em Java, o que o torna multiplataforma, e comunica com um software embarcado no hardware Arduino através da porta serial, e este hardware comunica com um controle de rádio frequência do auto modelo através de portas lógicas, controlando o. Esta pesquisa, embora apresente resultados, é um passo preliminar na criação de uma base para aplicações que controlem dispositivos de forma automática e em um próximo passo, autônoma. 2. Fundamentação Teórica Os microcomputadores vem equipados com um recurso de comunicação que permite a troca de dados entre dois sistemas, este tipo de comunicação pode ser tanto via serial quanto paralela: na serial, os dados são enviados via sequencial e; na paralela, os dados são enviados de forma paralela. Para fazer um sistema comunicar se com outro sistema, é necessário conhecer circuitos, padrões de comunicação e uma linguagem de programação (RABELLO, 2009). A linguagem de programação Java é uma linguagem de alto nível, que vem se destacando no cenário de programação orientada a objeto, que pode ser caracterizada pela simplicidade, arquitetura neutra, orientada a objeto, portável, distribuída, de alta performance, multithreaded, robusta, dinâmica e segura (ORACLE, 2016). Esta linguagem é desenvolvida sobre a Máquina Virtual Java (LINDHOLM e YELLIN, 1999), e disponível para diferentes sistemas operacionais, sendo que a mesma classe é capaz de ser executada tanto para Windows (MICROSOFT, 2016), Solaris (SUN, 2016), Linux (LINUX, 2016) ou Mac OS (APPLE, 2016). Uma forte característica da linguagem Java é o uso de bibliotecas para diferentes aplicações, como a API RXTX (RXTX, 2016) e suas classes CommPortIdentifier, SerialPort, SerialPortEvent, SerialPortEventListener usadas nesta pesquisa, as quais possibilitam a comunicação de um programa escrito em Java com a porta Serial do hardware hospedeiro. A comunicação serial é um processo de transferência de dados de um bit por vez, podendo incluir os dispositivos de rede, teclados, mouses, modems e terminais. Quando é feita uma comunicação serial, cada byte (caractere) de dados que é enviado ou recebido é feito a um bit por vez. Cada bit pode ser representado pelo estado lógico ligado (1) ou desligado (0). A velocidade de envio dos dados por uma porta serial é expressa em bits por segundo, representado por bps, na nomenclatura inglesa, ou em baudot rate ( Taxa de Baud ), que representa o número de bits (zeros ou uns) que podem ser enviados ou recebidos em um segundo (COMER, 2001). Com a comunicação serial, um software pode interagir com dispositivos eletrônicos para interpretar os envios de bits de mensagem e executar determinadas funções e comunicar com programas embarcados nestes dispositivos, tais como placas compostas por microcontroladores ou hardwares que são disponibilizados com toda a estrutura física para estas aplicações, como o caso da plataforma de hardware livre Arduino, utilizado nesta pesquisa. O Arduino (ARDUINO, 2016) é uma plataforma de prototipagem eletrônica open source que se baseia em hardware e software fáceis de usar, sendo destinado a qualquer pessoa interessada em criar objetos ou ambientes interativos. O Arduino pode sentir o estado do ambiente que o cerca por meio de sensores que receptam os sinais e pode interagir com os seus arredores, controlando luzes, motores e outros atuadores, conectados através de suas portas digitais e analógicas. O microcontrolador na placa é 2
programado com a linguagem de programação C (SCHILDT, 1997), com bibliotecas próprias e no ambiente de desenvolvimento Arduino. Os projetos desenvolvidos com o Arduino podem ser autônomos ou podem comunicar se com um computador para a realização da tarefa, com uso de software específico. Existem várias placas que podem se comunicar com o Arduino, estas podem ser adquiridas já montadas ou construídas manualmente. A figura 1 apresenta o Arduino Duemilanove. Figura 1. Arduino Duemilanove (Fonte: (Arduino, 2016)) 3. Metodologia Inicialmente realizou se uma pesquisa bibliográfica como aporte teórico sobre a linguagem de programação Java, bem como a busca por bibliotecas e APIs que possibilitem a comunicação de um programa Java com a porta serial para leitura e escrita. Além disso, foram levantadas as informações sobre o Arduino, desde a identificação dos componentes e seus estudos até as suas funções e aplicações de exemplos. Após foi realizado um estudo sobre a arquitetura do auto modelo, no intuito de compreender o funcionamento de seus componentes eletrônicos. O auto modelo utilizado é um simples brinquedo de controle remoto sem recursos de hardwares para programação. Em seguida, foi construído o dispositivo eletrônico usado como interface entre o auto modelo e o programa Java, além de testes para comunicar o controle de rádio frequência do auto modelo com o Arduino. Para estes testes foram realizados pesquisas até concluir a necessidade do uso de transistores para chavear a alimentação do controle remoto do auto modelo e o Arduino, uma vez que trabalham respectivamente em 9 e 5 volts. Por fim, foi desenvolvido um software em Java para comunicar com o Arduino. Esta comunicação foi possível com o uso da API RXTX, uma biblioteca com vários métodos implementados para enviar e receber bytes pela porta USB, entre outras funcionalidades. 4. Desenvolvimento do Protótipo Como passo preliminar, foi desenvolvido um protótipo composto por um auto modelo 3
controlado por rádio frequência (RF), um software embarcado no microcontrolador do Arduino e um software Java para interação do Humano Hardware. A figura 2 ilustra esta arquitetura. Figura 2. Arquitetura do protótipo desenvolvido. O primeiro passo foi desmontar o controle do auto modelo para identificar em sua placa os componentes eletrônicos usados para a rádio frequência, e o envio das informações para avanço, retrocesso, virar à direita e à esquerda. Após a identificação, foi realizada a solda dos fios para conexão ao Arduino, organizados da seguinte forma: o fio 1 corresponde a ré, o fio 2 corresponde ao avanço do auto modelo, o fio 3 vira a roda para a direita, o fio 4 gira a roda para esquerda e o fio 5 é o condutor elétrico neutro responsável pelo aterramento (fio terra). A figura 3 ilustra os fios identificados. Figura 3. Frente e verso da placa de controle de rádio frequência Após, os 5 fios foram soldados em uma placa padrão para melhor organização e o uso de quatro transistores para regulagem e chaveamento entre a voltagem adequada, a fase e o neutro. A figura 4 ilustra os fios soldados na placa padrão e os transistores, no qual o número 1 indica o fio terra conectado ao controle de RF do auto modelo, os números 2 indicam contatos do aterramento para cada transistor, os números 3 indicam os fios responsáveis por enviar comando para o auto modelo, sendo da esquerda para a direita respectivamente: avançar, retroceder, virar as rodas dianteira para a direita, virar as rodas dianteiras para a esquerda, e os fios 4 conectam os fios 3 de comandos às portas do Arduino, após passagem pelo transistor. Como fonte de alimentação, utilizou se uma bateria de 9 volts, para alimentar o 4
controle de rádio frequência, e esta foi conectada ao Arduino possibilitando o envio correto dos comandos para o controle de rádio frequência. Em função do uso desta fonte de alimentação, houve a necessidade do uso destes transistores, pois o controle de Rádio Frequência do auto modelo se alimenta de 9 volts e o Arduino de 5 volts, assim o transistor foi utilizado como chaveador. Figura 4. Placa Padrão No Arduino os fios recebidos da placa padrão foram conectados da seguinte forma: o comando avançar foi conectado na porta 8, retroceder na porta 5, virar as rodas dianteiras para a direita na porta 2 e virar as rodas dianteiras para a esquerda na porta 11. Após foi desenvolvido um pequeno programa escrito em C e embarcado no microcontrolador do Arduino. Neste programa foi indicado a taxa de Baud 9600 bits por segundo para comunicação serial do Arduino com o programa Java desenvolvido, as portas utilizadas como saída para controle do auto modelo, além da leitura de entrada serial. Ao receber os caracteres pela porta serial, o programa executa as seguintes funções: caractere 1 para o auto modelo avançar, 0 para parar de avançar; 3 para retroceder, 2 para parar de retroceder; 5 para virar à direita, 4 para parar de virar à direita; 7 para virar à esquerda, e 6 para parar de virar à esquerda. O Arduino Duemilanove usado possui 32 KB de memória flash para armazenar o código, 1 KB de SRAM e 512 Bytes de EEPROM (que pode ser lido e escrito com a biblioteca EEPROM). Cada um dos 14 pinos digitais no Duemilanove pode ser usado como uma entrada ou saída, operando em 5 volts, utilizando as funções pinmode, digitalwrite e digitalread presentes na biblioteca própria do Arduino (ARDUINO, 2016). Para o desenvolvimento do programa embarcado foram utilizadas as funções pinmode, digitalwrite e digitalread. A função pinmode foi utilizada para indicar o uso de cada porta como entrada ou saída, a função digitalwrite foi utilizada para o envio de bits para as portas especificadas e a função digitalread foi utilizada para receber os dados enviados pelo software Java enviado pela porta serial. O software para interação com o usuário, desenvolvido em Java, utiliza a API RXTX para comunicação na porta serial, pois, de acordo com SCHILDT (1997), como o Java utiliza uma máquina virtual e não comunica diretamente com o Sistema Operacional (SO), a comunicação com o hardware torna se um pouco mais complexa, dependendo do uso de API s. A API RXTX é baseada na API Javacomm distribuída pela própria SUN e possibilita a comunicação da porta paralela e USB de forma simplificada (RXTX, 2010), sendo para o desenvolvimento do Software de interação com o usuário, 5
nesta pesquisa, foi necessário importar somente as bibliotecas gnu.io.commportidentifier, import gnu.io.serialport, import gnu.io.serialportevent, import gnu.io.serialporteventlistener e utilizar seus métodos e o evento SerialPortEventListener. O software de interação com o usuário escrito em Java utiliza apenas duas classes: Principal e Arduino. Na classe Principal está a construção de uma interface gráfica construída com a biblioteca javax.swing e suas classes e a biblioteca java.awt.event utilizando as classes KeyEvent e KeyListener para a leitura das teclas do computador através de eventos específicos. A classe Arduino configura os parâmetros necessários para a comunicação da porta serial, utilizando os métodos da API RXTX possibilitando tanto o envio quanto o recebimento de Bytes pela porta USB. Além disso, esta classe possui os métodos para o comando do auto modelo que são executados quando as teclas do computador são pressionadas e o método enviar para transmissão do comando ao Arduino. As teclas são utilizadas com eventos para acionamento dos métodos para controle do auto modelo. Utiliza se a tecla seta pra cima pressionada para invocar o método ligarfrente e ao não pressionar mais esta tecla é invocado o método desligarfrente comandando o avanço do auto modelo, e desta forma são utilizadas também as teclas seta esquerda, seta direita e seta para baixo. A figura 5 apresenta o diagrama de classe deste software contendo as classes, eventos e pacotes utilizados. Figura 5. Diagrama de Classe do Protótipo Desenvolvido. 5. Conclusão e Trabalhos Futuros Esta pesquisa apresentou o controle de um dispositivo físico por um software, utilizando a linguagem Java e o hardware Arduino. O uso da linguagem Java com a biblioteca RXTX possibilitou o desenvolvimento do software de forma simples e a plataforma Arduino simplificou a interação com o dispositivo eletrônico. A principal contribuição deste trabalho é apresentar uma forma de controlar um dispositivo físico por um software. Além disso, esta pesquisa pode servir de base para 6
novas abordagens de integração de software com hardware. Como trabalhos futuros estão a: extensão para controles de novos hardwares e software de controle pode ser substituída por um agente de software ou um sistema multiagentes. Com estas características pode se automatizar questões complexas no cenário de TI em diferentes aplicações (Bergenti et al, 2004). Referências Apple. (2016) Mac OS X website, http://www.apple.com/br/macosx/, Junho. Arduino. (2016) Arduino Website: playground, http://www.arduino.cc/playground/portugues/homepage, Junho. Bergenti, F.; Gleizes, M. e Zambonelli, F. (2004) Methodologies and Software Engineering For Agent Systems The Agent Oriented Software Engineering Handbook, Kluwer Academic Publishers, p. 505. Comer, D. (2001) Redes de Computadores e Internet, Bookman, 2ª edição traduzida, Porto Alegre RS, p. 48 52. Lindholm, T. e Yellin, F. (1999) The JavaTM Virtual Machine Specification, Prentice Hall, 2ª edição, Palo Alto, Califórnia, p. 496. Linux. (2016) Linux Online Website, http://www.linux.org/info/index.html, Junho. Microsoft. (2016) Windows Website, http://www.microsoft.com/windows/default.aspx, Junho. Oracle Corporation. (2016) The Java Tutorials Website, http://java.sun.com/docs/books/tutorial/index.html, Junho. Rabello, L. M. (2009) Comunicado Técnico: Programa em Linguagem JAVA para Comunicação Serial, Embrapa Publicações, São Paulo SP, p. 7. Rxtx. (2016) RXTX Original Website, http://www.rxtx.org, Junho. Schildt, H. (1997) C Completo e Total, Markron Books, 3ª edição, p. 827. Sun. (2016) Solaris Website, http://br.sun.com/practice/software/solaris/, Junho. 7