domingo, 6 de maio de 2012

Arduino Wireless parte II - via Bluetooth!

Comunicação Bluetooth entre Arduino e Android.
Esse post é uma continuação do anterior, que pode ser acessado aqui. No primeiro, mostrei o teste de um módulo que permite a comunicação sem fio entre o Arduino e o computador (ou entre outros dispositivos) usando um módulo de rádio muito interessante, da Wixel Shield.

Agora, apresento um teste simples que fiz com um módulo Bluetooth. De fato, reproduzi o teste descrito pelo professor Cássio Agnaldo Onodera numa vídeo aula que ele tem no YouTube (acesse aqui), para verificar o funcionamento do módulo de comunicação Bluetooth.

O módulo Bluetooth que testei é de muito fácil utilização com o Arduino. Trata-se do modelo JY-BT03, fabricado pela Shenzhen Jiayuan Electronic Co. Ltd. Este módulo é muito prático, pois se conecta ao Arduino através dos pinos RX e TX, comportando-se como um dispositivo serial padrão! O próprio módulo cuida de toda a parte de comunicação Bluetooth. Ou seja, do ponto de vista do Arduino, tudo o que é necessário fazer é enviar e receber caracteres pela porta serial.

Módulo Bluetooth JY-BT03.
Algumas características do módulo Bluetooth são:

  • Comunicação Bluetooth 2.0;
  • Baud rate: 2.400 a 1.382.400 bps;
  • Tensão de alimentação: 5,0 V (3,6V a 6,0V);
  • Corrente: 35mA quando realiza "pareamento"; 8mA quando conectado;
  • Antena impressa na própria placa;
  • Possui 7 pinos de entrada e saída na placa;
  • Possui LED que indica o estado da conexão Bluetooth;
  • Senha padrão: 1234
Conexão ao módulo Bluetooth.
Como já mencionei, a conexão entre o Arduino e o módulo Bluetooth é muito simples. Ligue os dois pinos de alimentação do módulo (+5,0V e GND) aos pinos correspondentes do Arduino, de maneira que o módulo seja alimentado pelo próprio Arduino.

Quanto aos pinos de comunicação, basta conectar o pino de recepção de dados (RX) do módulo ao pino de transmissão de dados (TX) do Arduino, e vice-versa.

Observação importante: para transferir o programa ao Arduino é necessário que o módulo Bluetooth não esteja alimentado, ou não esteja conectado aos pinos RX e TX. Como o programa é transferido ao Arduino usando comunicação serial, a conexão do módulo Bluetooth vai interferir na comunicação, impedindo a correta transferência do programa. Só depois de programar o Arduino você pode fazer a conexão do módulo Bluetooth como indicado.

O código utilizado para teste do módulo é este:


void setup()
{
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  char c = Serial.read();
  
  if (c=='1') digitalWrite(13,HIGH);
  if (c=='2') digitalWrite(12,HIGH);  
  if (c=='3') digitalWrite(11,HIGH);  
  
  if (c=='A') digitalWrite(13,LOW);  
  if (c=='B') digitalWrite(12,LOW);  
  if (c=='C') digitalWrite(11,LOW);  
 
  delay(1000);
}


O programa é bastante simples: apenas aguarda a chegada de um caractere pela serial e, de acordo com seu valor, coloca uma das portas digitais do Arduino em nível alto ou baixo. Especificamente, foram utilizados três LEDs ligados aos pinos 11, 12 e 13 do Arduino. Cada um dos LEDs é  ligado quando um dos caracteres "1", "2" ou "3" é recebido, e desligado com a recepção dos caracteres "A", "B" ou "C".


Você pode testar o programa usando o Serial Monitor da IDE do Arduino. Nesse caso, lembre-se de desconectar a alimentação do módulo Bluetooth para evitar interferências na comunicação. Usando o Serial Monitor, experimente enviar os caracteres "123ABC" e veja se o resultado é o acendimento e desligamento de todos os LEDs, em sequência. Se tudo funcionar como esperado, desconecte o cabo USB do Arduino e reconecte os pinos ao módulo Bluetooth.

Para evitar problemas com a comunicação, não alimente o Arduino através da conexão USB do computador. Prefira alimentar o Arduino com uma fonte externa ou com uma bateria, como mostrado na primeira foto do post.

Fiz o teste do Bluetooth com um celular Android. Usei o programa S2 Bluetooth, disponível gratuitamente na Play Store (há outros, que você pode testar). Esse programa permite o envio de caracteres através da comunicação Bluetooth. Antes de abrir o programa, ative o Bluetooth no dispositivo Android e faça o "pareamento" com o módulo. A senha padrão é 1234. Em seguida, abra o programa S2 Bluetooth, clique no menu "Conect a Device" e escolha o dispositivo "linvor", conforme mostrado a seguir.

S2 Bluetooth: realizando conexão ao módulo.

Quando a conexão for realizada com sucesso, o LED do módulo Bluetooth vai permanecer aceso. Então, escreva os caracteres "123ABC" no programa S2 Bluetooth e clique em "SEND".

S2 Bluetooth: envio de caracteres.

Se tudo deu certo, você deve ver os LEDs acendendo e apagando em sequência. Pronto! Agora, com um pouco de criatividade, você já pode controlar o seu robô a partir de seu celular ou tablet Android via Bluetooth!

----- Editado em 26/set/2012 -----

Se você estiver animado, pode fazer seu próprio programa para Android usando o AppInventor! Esta é uma ferramenta de programação desenvolvida e mantida pelo MIT. A programação é feita de forma gráfica e é bastante intuitiva.

Um tutorial bem direto está disponível no site do Laboratório de Garagem (veja aqui). Com base nesse tutorial, Joanesburgo conseguiu fazer um programa que se comunica com o Arduino via Bluetooth!

JoanesApp - o aplicativo da Joanesburgo para Android.

Divirta-se e até a próxima!


Referências:
Módulo Bluetooth no Deal Extreme: http://www.dealextreme.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299?item=1
Especificações do módulo Bluetooth: http://www.globalsources.com/gsol/I/Arduino-Bluetooth-Module/p/sm/1045071327.htm
Arduino: http://www.arduino.cc/
Vídeo-aula do professor Cássio Agnaldo Onodera: http://youtu.be/IwnofqvGKow
Tutorial do AppInventor: http://labdegaragem.com/forum/topics/tutorial-criando-aplica-o-para-android-para-controlar-o-arduino
AppInventor: http://appinventor.mit.edu/

34 comentários:

  1. Tem empresa de Satnta Rita do Sapucai, que faz modulos de raio frequencia digitais, nao recordo o nome.

    Poderia fazer um topico, sobre software para auxuliar no projetos de robos. Sobre a dinamica de movimentação, simulação por software ou atraves dados online.
    Software que agilizei, no estudo dos movimentos,graus de liberdade e mostre dados de inercia, energia necessária para mover em função dos dados de massa,aceleração e velocidade.

    ResponderExcluir
    Respostas
    1. Tenho vontade de escrever um tópico sobre softwares de simulação mesmo. Assim que eu tiver tempo para estudar (e aprender) um que seja legal, eu posto aqui!
      Obrigado pela visita e pela dica!

      Excluir
    2. Ah! Enquanto não sai um tópico sobre simulação de manipuladores, dê uma olhada nesse que falei sobre simulação de robôs móveis com MATLAB:
      http://nossosrobos.blogspot.com.br/2011/11/controle-de-robos-moveis.html

      E nesse, em que comento sobre um simulador muito legal feito por um colega do doutorado, que serve para robôs terrestres e aéreos:
      http://nossosrobos.blogspot.com.br/2010/07/robos-voadores.html

      Excluir
    3. Muito legal, comprei um modulo igual a esse, vc sabe como configurar ele? Alterar nome e taxa de bits?
      Se souber tem como me explicar? Meu e-mail é barretojuniormail@gmail.com
      Muito Obrigado!

      Excluir
    4. Olá, Camilo.
      Infelizmente não mexi na configuração do módulo Bluetooth. Mas, a taxa de transferência pode ser definida no próprio programa do Arduino. Basta alterar o valor da função Serial.begin para o valor desejado (entre 2400 e 115200 bps, respeitando os valores aceitos pelo Arduino - veja os valores listados na caixa de seleção de velocidade do Serial Monitor do programa do Arduino). O módulo irá transmitir na taxa selecionada.
      Abraços!

      Excluir
  2. Olá Felipe, será que poderia me ajudar ?
    Não consegui fazer o parelhamento do modulo bluetooth com o celular.
    Usei um N8. Será que preciso mexer na configuração que vem padrão do modulo bluetooth do arduino ???
    Grato pela atenção e aguardo retorno...
    Augusto
    São Paulo
    gutosoft@hotmail.com

    ResponderExcluir
    Respostas
    1. Olá, Augusto!
      Eu não precisei mexer na configuração do módulo bluetooth. Usei as configurações de fábrica mesmo. A senha para fazer o pareamento com o módulo é 1234, pelo menos no módulo que eu tenho. Verifique se o modelo do seu módulo o mesmo. Se não for, a senha pode ser diferente!
      Uma boa ideia é fazer os testes com o Arduino alimentado por uma bateria para evitar que a alimentação via porta USB do computador provoque alguma interferência na comunicação (pois o módulo bluetooth usa os pinos RX e TX).
      Espero que ajude.
      Abraços!

      Excluir
  3. qual a distancia maxima que eu consigo com o modulo bluetooth?

    ResponderExcluir
    Respostas
    1. O alcance depende da potência do módulo e do ambiente em que você está. Bluetooth foi feito para comunicação de perto (até 10 metros ou perto disso). Existem módulos que permitem distâncias maiores, mas com o celular normalmente você não vai conseguir passar de 10 metros. Em ambientes externos normalmente o alcance é maior. Em ambientes internos pode ser até menor.

      Excluir
  4. Eu tenho um Arduino Nano e não estou conseguindo fazer funcionar.
    Como seria com essa plataforma?

    ResponderExcluir
    Respostas
    1. Não testei no Arduino Nano. Mas, a princípio, o procedimento seria exatamente o mesmo. Esteja atento à questão da alimentação do Arduino não ser feita pela porta USB!

      Excluir
  5. Não consegui baixar o código. Parece que esse codeupload não está mais disponível. Pode me enviar o código ou disponibilizar em outro servidor por favor?

    Att,
    Pedro
    pedro.f.neves@gmail.com

    ResponderExcluir
    Respostas
    1. Olá, Pedro. Realmente, o site do CodeUpload parou de funcionar. Coloquei o código direto no texto.
      Abraços!

      Excluir
  6. Olá Felipe, tdo bem?
    Primeiramente parabéns pelo post!
    Estou pensando em desenvolver um projeto que usa bluetooh, e claro, o arduino. porém não possuo Android para executar o s2 bluetooh. Por isso, peço-lhe se existe algum programa com a mesma função só que em java para celulares mais simples. Meu modelo é um lg c310.
    Desde já agradeço. Um abraço

    ResponderExcluir
    Respostas
    1. Olá, Fernando. Obrigado pela visita ao blog!
      Infelizmente, não conheço nenhum programa similar ao S2 Bluetooth para outras plataformas móveis. Mas, existem programas que permitem acesso à conexão Bluetooth como se fosse uma porta serial no Windows. Nunca usei um desses, mas você pode testar e dar um retorno pra gente por aqui! :-)

      http://www.billproduction.com/bluetooth_rs232/index.html

      Abraços!

      Excluir
  7. É possível utilizar um programa.ino para configuração automática com arduino da taxa de transmissão do modem bluetooth de 9600 para 19200 (mais rápido). O tutorial de os programas estão disponíveis no link: https://dl.dropbox.com/u/101922388/ModemBluetooth19200.zip e no link: https://dl.dropbox.com/u/101922388/sanusbee.zip

    Ligações dos pinos arduino com o modem bluettoth:
    modem--------Arduino
    RX--------------- PINO 3
    TX----------------PINO 2
    GND---------------GND
    VCC-----------------5V

    ResponderExcluir
  8. Eu gostaria de saber o que pode esta acontecendo, porque envio um caractere e recebo outro.

    ResponderExcluir
    Respostas
    1. Olá, Bruno. Você poderia dar mais detalhes? Envia que caractere? De onde pra onde? Recebe o que? Como você está verificando o caractere recebido?

      Excluir
  9. não consigo fazer funcionar...pois eu encontro o dispositivo livor e consigo me conectar...porem ele nao esta enviando os caracter...estranho demais...alguem pode me ajudar???

    ResponderExcluir
    Respostas
    1. Olá! Que programa você está usando?
      Verifique se a taxa de comunicação está configurada para a mesma velocidade em todos os dispositivos (Arduino e Android). Também verifique as conexões do módulo ao Arduino e lembre-se de alimentar o Arduino com uma fonte externa, mantendo o cabo USB desconectado quando for realizar a comunicação Bluetooth.
      Boa sorte!

      Excluir
  10. parabens pelo topico vc é o cara

    ResponderExcluir
  11. Para fazer a comunicação via bluetooth só pode ser com celular que tem android ?

    ResponderExcluir
    Respostas
    1. Olá. Usei celular com Android porque queria testar. Em tese, qualquer dispositivo compatível com Bluetooth deveria ser capaz de se comunicar com o Arduino através do módulo que usei (poderia usar um computador ou celular com Windows, por exemplo). A questão é conseguir estabelecer a comunicação e conseguir controlar os caracteres enviados. Não testei com aparelhos da Apple, mas, até onde eu sei, eles bloqueiam essa conexão.

      Excluir
  12. Muito bom mesmo este post....gostaria de saber onde consigo esse modelo de bluetooth...poderia me indicar onde comprar?
    Grato
    Adriano

    ResponderExcluir
    Respostas
    1. Olá, Adriano. Que bom que gostou do post!
      Você pode comprar esse módulo Bluetooth no Deal Extreme. Veja:
      http://dx.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299

      Excluir
  13. Felipe gostaria de saber se tem como o Arduino enviar que recebeu o caractere "A" enviado para a tela do app no android utilizando o bluetooth. se tiver como poderias me reponder no meu e-mail biel.fiamoncini@gmail.com

    desde ja fico grato.

    ResponderExcluir
    Respostas
    1. Olá, Gariel. Infelizmente eu não sei te responder pois não fiz esse teste e estou sem minha placa bluetooth para testar. Recomendo que você use o programa S2 Bluetooth e faça o teste! No Arduino, use o comando Serial.print(c) para enviar o caracter recebido. Compartilhe os resultados aqui no blog!
      Abraços!

      Excluir
    2. Felipe,fiz os teste com o serial.print(C)porem sem resultado, se preferir posso te mandar o codigo fonte do meu APP e do ARDUINO para voce verificar onde possos estar errando.

      desde ja fico grato.

      Excluir
    3. Cara, infelizmente estou com tempo bastante apertado nessas próximas semanas. Eu posso dar uma olhada no seu código do Arduino, mas recomendo que você teste primeiro usando o programa S2 Bluetooth. Eu tenho que instalar o AppInventor novamente para conseguir olhar seu programa.

      Excluir
  14. Fala ae...
    Cara você me salvou, estava procurando um código para usar com automação residencial por bluetooth acionando os dispositivos por celular pelo app que criei. Esse código me ajudou a adaptar com o relé, só tive que tirar do pino 13, pois, quando ligava a fonte o relé disparava, tive que colocar um digitalWrite HIGH no void setup para que o relé ficasse desligado e quando eu enviasse um caractere ...
    Segue abaixo o código que adaptei para acionamento de 02 reles

    void setup() {
    pinMode(10,OUTPUT);
    pinMode(11,OUTPUT);
    Serial.begin(9600);
    digitalWrite(10,HIGH);
    digitalWrite(11,HIGH);
    }

    void loop() {

    char c = Serial.read();

    if (c=='1') digitalWrite(10,LOW);
    if (c=='2') digitalWrite(11,LOW);

    if (c=='A') digitalWrite(10,HIGH);
    if (c=='B') digitalWrite(11,HIGH);

    delay(1000);
    }

    ResponderExcluir