21 janeiro 2014

Enviando dados do Arduino para o Android usando bluetooth

No primeiro post sobre o Android e Arduino (leia aqui), eu mostrei como usar um celular com Android para enviar comandos e controlar as portas do Arduino através do bluetooth.

Hoje vou mostrar o caminho inverso, ou seja, como enviar dados do Arduino Uno R3 para o Android, também usando o programa Microcontroller BT, disponível no Google Play.

Para isso, montei um circuito usando o nosso já conhecido sensor óptico reflexivo TCRT5000 (leia aqui um artigo referente à esse sensor), um módulo bluetooth JY-MCU e um potenciômetro. O Arduino enviará os dados recebidos do sensor (que funcionará como um contador incremental) e também do potenciômetro, gerando no Android uma tela como essa :

Tela final Android - Recebendo dados


Observe na montagem do circuito que eu utilizei 2 resistores no pino RX do módulo Bluetooth. A função desses resistores é atuar como um divisor de tensão, já que o módulo BT que estou utilizando trabalha com 3.3 v no pino de sinal, e se ligarmos diretamente esse pino no Arduino, que trabalha com 5 volts, corremos o risco de danificar o módulo BT. Utilizei 2 resistores, um de 220 ohms e um de 330 ohms, que fizeram com que a tensão do sinal vindo do Arduino caísse para aproximadamente 3 volts.

Você não tem resistores de 220 e 330 ohms ? Não tem problema. Acesse este link, digite 5 para a tensão de entrada, digite os valores dos resistores (R1 e R2)  que você possui, e pressione o botão Calcular para verificar no campo tensão de saída o valor correspondente, lembrando que por segurança esta deve ser, no máximo, de 3.3v.

Para o sensor óptico, utilizei um resistor de 10 K para o transistor (parte inferior/preta do sensor), e um resistor de 330 ohms para o led infravermelho (parte superior/azul) :

Circuito Arduino Android Bluetooth
Antes de partir para a configuração do Android, desconecte o Vcc do módulo bluetooth e carregue o programa abaixo no Arduino. Por que desligar o Vcc ? Porque o módulo bluetooth também utiliza a comunicação serial com o Arduino, e isso pode gerar algum conflito na hora de transferirmos o programa pelo computador :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Programa : Envio de dados Arduino => Android  
// Autor : Arduino e Cia  
   
int contador = 0;  
int pinosensor = 7; //Ligado ao pino "coletor" do sensor optico  
int leitura; //Armazena o valor lido pelo sensor  
int pinpot = A0; //Ligado ao pino central do potenciometro  
   
void setup() 
{  
  pinMode(pinosensor, INPUT); //Define o pino do sensor como entrada  
  pinMode(pinpot, INPUT); //Define o pino do potenciometro como entrada   
  Serial.begin(9600);  

  //Envia o valor inicial zero do contador para o Android  
  Serial.write(201);   
  Serial.write(highByte(contador));  
  Serial.write(lowByte(contador));  
}  
   
void loop()  
{  
  //Le as informacoes do pino do sensor 
  leitura = digitalRead(pinosensor);  
  if (leitura != 1) //Verifica se o objeto foi detectado  
  {  
    contador = contador++; //Incrementa o valor do contador 

    //Loop caso o objeto pare sobre o sensor  
    while(digitalRead(pinosensor) != 1)  
    {  
      Serial.println(contador);  
      //Envia o valor atualizado do contador para o Android  
      Serial.write(201);  
      Serial.write(highByte(contador));  
      Serial.write(lowByte(contador));  
    }  
  }  

  //Envia as informacoes do potenciometro para o Android  
  int valor_pot = analogRead(pinpot);  
  Serial.write(202);  
  Serial.write(highByte(valor_pot));  
  Serial.write(lowByte(valor_pot));  
  delay(50);  
}  

Finalizada a transferência do programa para o Arduino, ligue novamente o Vcc do módulo bluetooth e, no Android, execute o aplicativo Microcontroller BT (disponível para download nesse link) :

Android - Bluetooth - Tela inicial

Aperte a tecla MENU no seu celular e escolha a opção NEW LAYOUT :

Android - Bluetooth - New Layout

Dê um nome ao seu layout. Escolhi "Arduino Monitor" :

Android - Bluetooth - Nome Layout

Após digitar o nome, o programa volta para a tela anterior, com o layout em branco, e o nome do layout escolhido no canto superior esquerdo. Aperte novamente a tecla MENU do seu celular e escolha a opção EDIT MODE :

Android - Bluetooth - Layout vazio

Repare que o layout ficará na cor vermelha, indicando que você está no modo de edição. Na base da tela, arraste a aba até aparecerem os botões para criarmos o layout :

Android - Bluetooth - Botoes disponiveis

Clique no botão TextView e segure até que o mesmo seja transferido para a tela principal do layout. Faça isso 4 vezes, criando 4 botões texto. Seu layout inicialmente ficará assim :

Android - Bluetooth - Layout botoes texto

Clique no botão TEXTVIEW superior esquerdo, e configure-o com as opções abaixo. Clicando no ícone de edição, conforme destacado, você consegue alterar o texto do botão, que no meu caso eu configurei como "CONTADOR :". Clique em DONE quando terminar de configurar :

Android - Bluetooth - Configurar botao texto Contador

Faça o mesmo com o botão inferior esquerdo. Utilizei o texto "Potenciometro" :

Android - Bluetooth - Botoes texto configurados

Vamos agora configurar os botões de texto que receberão os dados do Arduino. Clique no botão superior direito, referente ao sensor óptico e configure-o da seguinte maneira :

Android - Bluetooth - Botao texto dados sensor

O botão inferior direito receberá os dados lidos do potenciômetro  :

Android - Bluetooth - Botao texto dados potenciometro

Terminada a configuração do layout, sua tela estará parecida com essa :

Android - Bluetooth - Layout finalizado

Aperte a tecla "retornar", do seu celular, e o layout voltará a ficar em cinza, indicando que você saiu do modo de edição. Aperte a tecla MENU do seu celular, e escolha a opção Connect. :

Android - Bluetooth - Connect

Selecione o dispositivo bluetooth, que deve estar previamente pareado com o seu aparelho, e após alguns segundos o layout do programa ficará verde, indicando que o mesmo está conectado ao módulo bluetooth no Arduino. Observe no lado direito, no topo do layout, que o meu celular está conectado ao dispositivo LINVOR e o programa está recebendo os dados referentes ao sensor óptico e ao potenciômetro :

Android - Bluetooth - Recebendo dados

Veja neste link um vídeo demonstrando o circuito apresentado neste artigo.

54 comentários:

  1. Boa Noite, gostaria de saber se pode me ajudar, preciso configurar o bluetooth, para que quando ele perder o sinal ( quando eu me afastar a mais de um metro, do bluetooth / arduino ele acende um Led. ou teria como ao me afastar, perceber a queda de sinal em valores, e regular isso, como por exemplo, apos eu verificar que um determinado sinal, a um metro, fica com um valor, eu colocava no programa e quando atingisse esse valor, o led acenderia, ou apagaria.

    ResponderExcluir
    Respostas
    1. Boa noite Eduardo,

      O que você precisa é de algo que fique constantemente "conversando" com o celular via Bluetooth e, quando o sinal fosse perdido/alterado, o Arduino executaria algum comando, certo ?

      Olha, eu creio que isso seja possível apenas via programação (no celular/tablet/etc), pois o mesmo precisaria enviar sinais, ou responder sinais, constantemente ao módulo bluetooth do Arduino.

      Acho que os amigos aqui do blog podem te ajudar melhor, mas a princípio, eu vejo como "ideal", montar um programa específico para isso no Android.

      Mesmo assim, se souber de algo ou precisar de ajuda com isso, entre em contato.

      Abraços !

      Excluir
  2. Amigo manda o link deste app ou o para download do apk dele pois num to achando...

    ResponderExcluir
  3. Nossa cara, você está de parabéns!!!
    Ótimo post, vou implementá-lo amanha.
    Abraço

    ResponderExcluir
  4. Teste e funcionou td ok!! 100%
    Obrigado cara. Gostaria de te ajudar com teu canal de youtube, como entro em contato com vc?
    Abraço

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Obrigado. Utilize o formulário de contato aqui no lado direito da página do site, ok ?

      Abraço !

      Excluir
  5. Amigos,

    Uma dúvida, tenho um projeto que qualquer pessoa poderia se parear ao Arduino via bluetooth, e assim que isto acontecer, o Arduino envia uma mensagem para o celular da pessoa, seja uma imagem, um texto, etc. A minha dúvida, todos os celulares teriam que ter obrigatoriamente esta app Microcontroller ? Ou o cel recebe normalmente uma mensagem vinda do bluetooth do Arduino.


    Abraços
    Cleiton

    ResponderExcluir
  6. Bom dia Cleiton,

    Não. O cel recebe a mensagem do BT, e ela pode ser analisada/tratada por qualquer programa, seja o Microcontroller BT, o Bluetooth SPP, que eu também já utilizei, ou qualquer outro.

    Abraço !

    ResponderExcluir
  7. Galera,

    Eu preciso que o celular receba um sinal do arduino, mais necessariamente são 3 sinais diferentes, e o celular ou vibrasse, ou tocasse de acordo com cada sinal. isso é possivel? Dá pra fazer com o Microcontroller BT?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      O MMicrocontroller BT não tem essas funções. Você precisaria de um programa específico.

      Abraço.

      Excluir
  8. Assim como o colega mais acima comentou, o Microcontroller BT não está mais disponível no Google Play e o link que está no texto direciona para um outro aplicativo.
    Realmente está bem difícil achar esse app, quem conseguiu baixá-lo poderia subir o apk para gente fazer download.

    ResponderExcluir
  9. Prezados, bom dia.
    Gostaria de um exemplo que enviasse a temperatura de um LM35 para o Microcontroller BT, porém com variável "float" (pelo menos uma cassa decimal).

    ResponderExcluir
    Respostas
    1. Boa noite,

      Se não me engano, o microcontroller só trabalha com valores inteiros.

      Abraço !

      Excluir
  10. Não da pra salvar o App criado não??? Fiz um mais não consigo encontrar ele.

    ResponderExcluir
  11. boa noite

    Gostaria de enviar um arquivo de áudio pelo Arduíno e por sua vez gostaria de fazer o Android executar tal arquivo de áudio para isso preciso fazer alguma configuração a mais ?

    obrigado

    ResponderExcluir
    Respostas
    1. OI Lucas,

      Belo projeto, mas sinceramente ainda não tenho ideia de como implementar isso. rs

      Mas vou estudar uma solução. :)

      Abraço !

      Excluir
    2. Onde encontro a versão paga?
      já procurei e nada.
      Obg.

      Excluir
  12. essa programação na qual foi apresentada acima, ela também se enquadra na programação para o bluetooth cz-hc-05?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Sim, pode ser utilizado no HC-05. Eu tenho um post em que falo sobre a configuração do HC-05 com comandos AT :

      http://www.arduinoecia.com.br/2015/01/diferenca-bluetooth-hc-05-hc-06.html

      Abraço !

      Excluir
  13. Amigo, seria possível colocar na tela do microcontroller bt um botão para zerar a contagem quando necessário? se sim, como?

    ResponderExcluir
    Respostas
    1. Boa tarde Gabriel,

      Infelizmente não tenho essa informação, pois o aplicativo não está mais disponível para download no Google Play, mas creio que seja necessário mexer na programação.

      Abraço.

      Excluir
  14. desculpe eu nao havia percebido q voce ja tinha respondido obrigado!!!

    ResponderExcluir
  15. Muito bom cara parebens, vc acha possivel enviar este dados via wifi ou ate mesmo internet para ser acessado de qquer lugar?
    Obrigado

    ResponderExcluir
    Respostas
    1. Boa tarde Eduardo,

      É possível sim, eu tenho alguns exemplos de uso com ethernet shield e módulos wireless aqui no site.

      Abraço !

      Excluir
  16. Boa noite, estou desenvolvendo um trabalho de conclusão de curso onde parte do meu projeto preciso resolver a seguinte questão : fazer meu relógio , através de bluetooth ou algo melhor , se conectar ou com um app do smartphone ou enviar uma mensagem para o smatphone, pode me ajudar?
    ( Obs: me socorre, pfvr )
    Agradeço desde já !

    ResponderExcluir
    Respostas
    1. Boa noite Thayná,

      Legal, o que você já tem do projeto ?

      Abraço!

      Excluir
    2. Então, depois de algumas pesquisas vi que o Bluetooth não seria muito viável pois tem uma distância muito curta, o que faria meu projeto em vão. Logo pensamos em usar o Rfid, mas não sabemos como colocá-lo no relógio sem perder a garantia ou se é possível colocar na pulseira do relógio. E desculpa se eu não estiver sendo clara, é que realmente não entendo nada sobre o assunto kkk

      Excluir
  17. Boa tarde. Eu gostaria de saber se tem como usar o mesmo código, alterando algumas coisas, mas usando um módulo HC-05 bluetooth para enviar os dados de um GPS, para um APP no Android. Sabe se tem como? Poderia me ajudar?

    ResponderExcluir
    Respostas
    1. Oi Juliana,

      Tem como, mas não tenho nenhum post sobre isso ainda.

      Abraço!

      Excluir
  18. Pessoal, instalem o Aptoide que a partir dele é possível fazer o download do MicroController BT

    ResponderExcluir
  19. Onde encontro a versão paga desse app?
    Procurei na Play Store, mas não o encontrei.
    Obg.

    ResponderExcluir
  20. olá Boa Noite eu queria fazer essa mesma comunicação do arduino para o app, porém eu estarei utilizando outros componentes, a programação seria a mesma ou eu teria que criar uma outra programação dependendo do componente?

    ResponderExcluir
  21. estou começando a desenvolver projetos entre arduino e apps e durante os aprendizados entre forúns, video-aulas, etc surgiu uma dúvida.

    Tenho um protótipo que desejo enviar os dados para o app onde serão visualizados pelo usuário, não pretendo fazer nenhum tipo de tratamento pelo app, apenas visualização msm, porém eu gostaria que a pessoa pudesse visualizar não só em sua residencia, mas no trabalho, no transito, etc.

    Quais medidas devem ser tomadas e quais componentes são responsáveis para realizar tal feito ?

    Lembrando que gostaria apenas de uma direção, pensei na possibilidade de enviar os dados para um servidor e através do app conectar com o server para adquirir as informações.

    Bom é isso, espero que tenha ficado claro as informações

    Desde já agradeço

    ResponderExcluir
    Respostas
    1. Boa noite,

      A ideia é essa mesmo: enviar para um servidor e de lá o usuário se conecta pelo App.

      Eu inclusive postei recentemente um artigo mostrando como utilizar um GSM shiedl para enviar dados para um servidor e gravar no MySQL. Se puder, dê uma olhada, acho que vai te ajudar:

      http://www.arduinoecia.com.br/2015/11/acessar-internet-arduino-gsm-shield-sim-900.html

      Abraço!

      Excluir
  22. Bom dia.
    Gostaria de saber se consigo comunicar o arduino com GPS do meu android.
    E retorna-se a posição que estou por um fone Bluetooth

    ResponderExcluir
    Respostas
    1. Bom dia,

      Não tenho essa informação no momento, mas vou pesquisar e postar aqui no site.

      Abraço!

      Excluir
  23. Oi!

    Gostaria de saber se teria como postar aki o link do apk na versão pró, pois só se encontra a versão free que não salva o layout.

    ResponderExcluir
  24. Bom dia,Eu gostaria de saber se é possível armazenar os dados recebidos do arduíno e gerar um gráfico com estes valores .

    ResponderExcluir
    Respostas
    1. Boa noite,

      É possível sim, recomendo você usar o Processing, tenho alguns posts sobre ele aqui no site.

      Abraço!

      Excluir
  25. Olá,
    Preciso de um sistema que receba dados e os envia a longa distancia, para que possamos velos em um celular.
    Caso eu use esse mesmo sistema, seria possível enviar os dados automaticamente para outro celular via SMS?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Talvez o GSM Shield seja a solução para o seu caso. Dê uma olhada neste post, por favor: http://www.arduinoecia.com.br/2015/09/arduino-gsm-shield-sim900-efcom.html

      Abraço!

      Excluir
  26. Eu queria saber se é possível controlar a saúde de áudio de uma mesa de som com este aparelho via androide Bluetooth

    ResponderExcluir
  27. olá,
    Preciso que o arduino envie uma mensagem de alerta para um celular. É possivel fazer isto utilizando o modulo wi-fi ESP8266?


    ResponderExcluir
    Respostas
    1. Oi Eduardo,

      É sim, estou montando um post sobre isso... ;)

      Abraço!

      Excluir
  28. É possível enviar e receber dados utilizando apenas um arduino e um módulo bluetooth para controlar através do android?

    ResponderExcluir
  29. Boa noite, queria montar um circuito com o arduino, um botão, um led, modulo bluetooth e um celular, para que quando eu aperte o botão eu possa acender o led e automaticamente mandasse o código para o celular via bluetooth, teria como me falar como faria com a programação?

    ResponderExcluir
  30. É possivel enviar as informações do giroscopio do arduino para um smartphone que não tenha giroscopio, e dessa forma ele tenha condição de utilizar o smart em realidade virtual?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      É possível sim, você só precisa criar uma aplicação parar interpretar esses dados, mas o envio é tranquilo.

      Abraço!

      Excluir
  31. Bom dia amigo, obrigado pelo seu trabalho, sempre me ajudando.
    Vc poderia enviar o link do aplicativo microcontrolador BT, este leva para a página do desenvolvedor, mas não mostra o aplicativa certo para baixar,só vem propagandas, e o QR Code dele esta com erro de análise do pacote.Não esta disponivel Google Play.

    ResponderExcluir
  32. Muito boa noite Amigo... ótima postagem vai me servir muito... preciso fazer umas perguntas se me permite, esse valor do potenciômetro é em relação a tensão? se sim qual a relação matemática feita? se não, como faço pra ler a tensão deste dispositivo... na realidade eu precisava de uma relação tensão e grau de giro do potenciômetro...

    eu posso "simplesmente tirar" esse sensor óptico ? quero usar o potenciômetro como sensor de angulação e enviar o angulo e tensão para o android...

    muito obrigado pela sua atenção!!!

    ResponderExcluir
    Respostas
    1. Oi Rico,

      Obrigado pela visita. O potenciômetro, nesse caso, vai gerar uma tensão entre 0 e 5V no pino analógico. Essa tensão vai ser, digamos assim, "transformada" em um valor entre 0 e 1024 para utilizarmos no programa.

      Eu acho que o que você precisa é de um encoder rotativo. Dê uma olhada neste post, por favor: http://www.arduinoecia.com.br/2015/08/como-usar-encoder-rotativo-ky-040-arduino.html

      Abraço!

      Excluir