Comunicação Serial Java + Arduino

Sobre a comunicação Serial Java + Arduino

 

Neste artigo demonstrarei como ligar e desligar um led, através de comandos enviados pela porta serial (USB) utilizando Java e uma placa Arduino.  

 

Para ler outro artigo que aborda a comunicação serial clique aqui para ler o artigo de Fábio Souza, e caso queira saber mais sobre programação no arduino clique aqui.

 

Mas por que utilizar Universal Serial Bus (USB)?

 

A comunicação USB é uma tecnologia que tornou mais simples e rápida a conexão de diversos tipos de aparelhos (Pendrives,MP3-players, impressoras, celulares, HDs externos, etc). Além de facilitar a conexão de diversos dispositivos, o padrão USB oferece:

 

  • Plug-and-play: a maioria dos dispositivos são reconhecidos automaticamente;
  • Alimentação: os dispositivos não precisam ser ligados a uma fonte de energia externa, já que a própria USB fornece energia. (Lembrado a USB fornece no máximo 5 Volts e 500 mA de corrente);
  • Múltipla conexão: vários dispositivos podem ser conectados através de uma única porta, mas para isso deve-se utilizar um Hub;
  • Compatibilidade: são compatíveis com a maioria dos sistemas operacionais disponíveis no mercado.

 

 

A comunicação entre os sistemas embarcados e os computadores muitas vezes são realizadas via porta paralela (DB25) e porta serial (DB-9).  A utilização desses meios de comunicação pode facilitar uma alteração futura mas, por outro lado, dependendo do dispositivo, a implementação do software no computador pode ser complexa e trabalhosa. Além do mais, podemos danificar permanentemente a placa mãe do computador quando estamos utilizando a porta paralela e ocorre uma descarga elétrica ou invertermos a polaridade de um componente.

 

Esse artigo foi elaborado utilizado o Arduino Mega 2560, NetBeans 7.4, Windows 7 Professional x64 e Ubuntu 12.04 LTS (x64), estou considerando que as IDE's Arduino 1.0.5 ou superior e NetBeans 7.4 ou superior já estejam instaladas e funcionando corretamente.

Obs.: Pode-se utilizar também o Arduino Uno, ADK, Pro. 

 

Layout projeto

 

 

Passo 01: Download dos arquivos

 

Acesse o site http://jlog.org/rxtx.html e faça download dos arquivos rxtxSerial.dll, librxtxSerial.so e RXTXcomm.jar.

 

Obs.: Lembrando de que devemos fazer download dos arquivos de acordo a arquitetura do sistema operacional 32-bits (x86) ou 64-bits (x64).

 

 

Passo 02: Instalação dos arquivos

 

Windows

 

      Copie o arquivo rxtxSerial.dll para:

  • C:\Program Files\Java\jdkx.x.x\bin, onde x.x.x é a versão do JDK, por exemplo C:\Program Files\Java\jdk1.6.40\bin;
  • C:\Program Files\Java\jrex\bin,  onde x é a versão do JRE, por exemplo C:\Program Files\Java\jre7\bin;
  • C:\Windows\System32;
  • C:\Windows\SysWOW64 (caso sistema operacional 64-bits (x64)).

     Copie o arquivo RXTXcomm.jar para:

  • C:\Program Files\Java\jre\jrex\lib\ext, onde x é a versão do JRE, por exemplo C:\Program Files\Java\jre7\lib\ext.

 

Linux

 

      Copie o arquivo librxtxSerial.so para:   

  • /usr/lib/, exemplo: cp /home/Usuario/librxtxSerial.so /usr/lib/.

      Copie o arquivo RXTXcomm.jar para:

  • /usr/share/java/, exemplo.: cp /home/Usuario/RXTXcomm.jar /usr/share/java/.

 

 

Passo 03: Programa Arduino

 

Conecte o cabo USB no Arduino e abra a IDE do Arduino, defina a porta COM (Tools > Serial Port > COM3 ou /dev/ttyUSB0), digite o código abaixo e depois clique no upload. Pronto, o programa já foi carregado no arduino. 

 

Obs.: Geralmente utiliza-se a porta COM3 (Windows) e /dev/ttyUSB0 (Linux), caso apareça outra porta não tem problema, desde que a porta correta seja informada no programa em Java.

 

 

 

Passo 04: Programa Java

 

Abra o programa NetBeans 7.4 criei um projeto Aplicação Java (Arquivo > Novo Projeto > Java > Aplicação Java) e vamos chamá-lo de ComunicacaoSerial.

Renomeie o pacote "comunicacaoserial" para "br.com.embarcados.comunicaoserial" e depois apague a classe ComunicacaoSerial.java que foi gerada. 

Feito isso, adicione um JFrame no pacote br.com.embarcados.comunicaoserial (botão direito em cima do pacote > Novo > Form Frame), e chame-o de JFInterface.

 Novo JFrame

 

 

Na Paleta de controle de Swing (lado direito da tela), clique em cima do botão e arraste para dentro do JFInterface. Após esse passo altere o nome da variável jButtom1 para jBLenOn e altere o texto do botão para Ligar. Basta clicar com o botão direito em cima do botão e escolher as opções Editar Texto e Alterar nome da variável. 

 

Copie mais 02 botões para o JFInterface e repita o mesmo processo renomeando-os para ID: jBLenOff, jBClose e Text: Desligar e Sair.

 Interface Renomeada

 

Acrescente duas classes no projeto "Arduino.java e ControlePorta.java" (botão direito em cima do pacote > Novo > Classe Java.

 

No arquivo Arduino.java realizaremos o envio das informações para o Arduino e no arquivo ControlePorta.java faremos toda a programação para enviar os dados através da porta serial.

 

Adicione o código abaixo no arquivo ControlePorta.java.

 

 

Após adicionar o código acima acontecerá vários erros conforme a mensagem abaixo.

 

 

Esses erros aconteceram porque não adicionamos o arquivo RXTXcomm.jar no nosso projeto. Para adicioná-lo clique com o botão direito em cima da pasta Biblioteca e escolha Adicionar JAR/Pasta... e informe o diretório onde o arquivo RXTXcomm.jar (C:\Program Files\Java\jre7\lib\ext\RXTXcomm.jar, caso esteja utilizando Windows) ou (/usr/share/java/ RXTXcomm.jar, caso esteja utilizando Linux).

 

Limpe e construa o projeto (botão direito em cima do projeto ComunicacaoSerial > Limpar e Construir) e os problemas serão corrigidos conforme pode-se ver na imagem abaixo.

  

Erro import gnu.io (corrigido)

 

Agora adicione o código abaixo no arquivo Arduino.java.

 

 

Feito isso, falta implementar a ação a ser executada quando um determinado botão for pressionado.

Abra o arquivo JFInterface.java, clique com o botão direito em cima do botão “Ligar” e acione o método MousedClicked. Será criado automaticamente um método dentro da classe JFInterface.java conforme a imagem abaixo.

 

Código gerado para o LedOnClicked

 

Declare uma variável do tipo Arduino antes do construtor da classe JFInterface, conforme a figura abaixo.

 

Declaração da variável

 

 

Dentro do método jBLedOnMouseClicked criado anteriormente adicione o código conn.comunicacaoArduino(jBLedOn).

 

LedOnClicked com ação

 

Esse comando irá acionar o método comunicacaoArduino(), passando o botão clicado, que por sua vez irá enviar o dado pela porta serial.

 

Adicione o mesmo evento para o botão “Desligar” e coloque o código abaixo:

  

LedOffClicked

 

Adicione o mesmo evento para o botão “Sair” e coloque o código abaixo:

  

CloseClicked

 

 

Passo 05: Executando o programa

 

Agora basta apenas conectar o seu Arduino à porta USB do seu computador e clicar em Executar o projeto Java. Ao aparecer a Tela, basta apenas clicar no botão "Ligar" para ligar, "Desligar" para desligar o Led e “Sair” para encerrar aplicação.

 

Os códigos fontes utilizados na elaboração desse artigo estão disponíveis em: https://github.com/klauder/ComunicacaoSerial

 

Espero que tenham gostado e até breve. 

 

Referências

 

http://jlog.org/rxtx.html

http://arduino.cc/en/Main/ArduinoBoardMega2560

http://arduino.cc/en/reference/serial