28 janeiro 2014

Controlando um servo motor utilizando Android e Bluetooth

A um tempo atrás eu escrevi um post sobre como controlar as portas do Arduino usando um módulo bluetooth JY-MCU. Recentemente, mostrei como enviar dados do Arduino para o Android no post Enviando dados do Arduino para o Android usando bluetooth.

Vou agora usar o mesmo princípio desses artigos, mas dessa vez para controlar um servo motor, um Micro Servo 9G, com ângulo de rotação de 180 graus :
 
servo motor android arduino


Desta vez, o módulo bluetooth utilizado tem nível de sinal de 3.3 v (verifique no verso do seu módulo BT qual a tensão do nível de sinal) :

Módulo bluetooth JY-MCU

O funcionamento deste circuito segue um dos exemplos da biblioteca SERVO, e que eu já utilizei anteriormente para montar o post com o sugestivo nome de Controlando um Servo. No exemplo, é utilizado um potenciômetro para controle do ângulo de rotação do motor.

Seguindo esta idéia, e usando o programa MicrocontrollerBT no Android, vou criar um botão deslizante para fazer a função do potenciômetro e controlar o motor.

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 a tensão de saída no campo correspondente, lembrando que por segurança esta deve ser, no máximo, de 3.3v.

Circuito Arduino - Bluetooth HC-06 - Servo


Monte o circuito e carregue o programa abaixo no Arduino, mas antes desconecte o Vcc do módulo blueooth, pois como ele também utiliza a comunicação serial para transmitir dados ao Arduino, pode gerar algum erro na hora da transmissão 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
// Programa : Controle de servo pelo Android utilizando Bluetooth  
// Autor : Arduino e Cia  
   
#include <Servo.h>  
   
Servo myservo;  
   
int val;  
   
void setup()  
{  
  //Pino de dados do servo ligado na porta 4  
  myservo.attach(4);  
  Serial.begin(9600);  
}  
    
void loop()  
{  
   if(Serial.available()>=2)  
   {  
     int key=Serial.read();  
     int val=Serial.read();  
     myservo.write(val);  
   }  
}  

Conecte o Vcc novamente ao módulo BT. Vamos passar agora para a parte de configuração do Android. Carregue o Microcontroller BT :

Microcontroller BT - Tela inicial


Clique no botão MENU do seu celular, e escolha a opção NEW LAYOUT :

Microcontroller BT - New Layout


Adicione um nome ao seu layout. Utilizei Arduino Servo :

Microcontroller BT - 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 :

Microcontroller BT - Layout criado


 Clique novamente o botão MENU, e em EDIT MODE :
 
Microcontroller BT - Modo de edição

Note que a parte superior do layout ficará vermelha, indicando que vc está no modo de edição. Arraste a aba na parte inferior, até que aparecam os botões que podem ser adicionados ao layout. Clique no botão deslizante, conforme destacado, e segure até que o mesmo apareça na tela principal do layout :

Microcontroller BT - Modo de edição - Botões


Agora clique sobre o botão deslizante para configurar suas propriedades. Na parte superior esqueda, selecione Analog Input. em Set Key, escolha 5. Abaixo, em MAX, escolha 180, que é o valor máximo, em graus, que o servo irá rotacionar . A configuração do botão deslizante ficará assim :

Microcontroller BT - Configuração


Terminada a parte de configuração, basta apertar a teclar RETORNAR, no seu celular. Note que o layout ficara na cor cinza novamente, indicando que você saiu do modo de edição :

Microcontroller BT - Configuração finalizada


Clique agora no botão MENU, depois em Connect :

Microcontroller BT - Connect

Escolha 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 :

Microcontroller BT - Conectado

Feito isso, mexa no botão deslizante para ver o servo se movimentar até o ângulo correspondente, lembrando que o botão foi configurado até o valor máximo de 180 graus, que é o ângulo máximo de movimentação deste servo.

Você pode utilizar mais motores no Arduino usando este procedimento. Fique atento apenas ao fato de que esses motores costumam exigir muita corrente da placa, e provavelmente você terá que utilizar uma fonte de alimentação externa para alimentá-los.


47 comentários:

  1. como baixar esse aplicativo gratis? obrigado valew

    ResponderExcluir
  2. blz, quero baixar esse aplicativo tem como ? obrigado.

    ResponderExcluir
    Respostas
    1. Bom dia, tem sim. Acesse esse link :

      https://play.google.com/store/apps/details?id=com.kvndev.android.three&hl=en

      Abraço !

      Excluir
    2. por favor preciso de ajuda para acionar 4 servos por me enviar um codgo??????

      Excluir
  3. Qual programa é usado para simular o circuito android/servo/placa bluetooth?
    Obrigado.

    ResponderExcluir
    Respostas
    1. Bom dia Bruno !

      Eu uso o Fritzing para montar os circuitos :

      http://fritzing.org/download/

      E alguns componentes eu mesmo crio.

      Abraço !

      Excluir
  4. Oi bom dia gostaria de sabre como faço para adicionar mas 1 servo ?

    ResponderExcluir
    Respostas
    1. Boa tarde !

      Não tenho 2 servos para testar aqui no momento, mas você pode partir desse programa, criando um botão adicional no Android :

      //Programa : Controle de servo pelo Android utilizando Bluetooth
      //Autor : Arduino e Cia

      #include

      Servo myservo;
      Servo myservo2;

      int val;

      void setup()
      {
      //Pino de dados do servo ligado na porta 4
      myservo.attach(4);
      //Pino de dados do servo2 ligado na porta 6
      myservo2.attach(6);
      Serial.begin(9600);

      }

      void loop()
      {
      if(Serial.available()>=2)
      {
      int key=Serial.read();
      int val=Serial.read();
      myservo.write(val);
      myservo2.write(val);
      }
      }

      Abraço !

      Excluir
    2. Amigo eu não estol conseguindo ,Quais os valores devo colocar no programa ??

      Excluir
    3. Boa tarde,

      Você pode usar esse programa que eu passei. O que você precisa agora é configurar o aplicativo no Android para controlar o segundo motor, que está ligado na porta 6.

      Abraço !

      Excluir
    4. Oi,amigo entra em contato comigo,estou com dificuldades num código
      andredaltro2020@hotmail.com
      Quero ligar tres portas via bluetooth microcontroller BT,e junto ligar pela botoeira, pra ter opçao,me ajuda, meu email vai ficando ai,eu nao achei o seu pra entrar em contato com vc

      Excluir
  5. olá, o link de download do aplicativo não está funcionando. Poderia verificar isso. Obrigado.

    ResponderExcluir
  6. Consigo usar o MicroController BT, para realizar o exemplo acima, mas com 2 servos, sendo que gostaria de executar comandos distintos ora para um servo, ora para outro. Como configuro isso no MicroController BT e no loop() do Arduino.?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Por favor veja a minha resposta acima para o thuliofuse, ele teve a mesma necessidade. Basta utilizar o programa exemplo que eu passei, e adicionar os botões correspondentes no Microcontroller BT.

      Abraço !

      Excluir
  7. olá..
    meu Modulo BT não consegue conectar.. diz no programa que incapaz de se conectar com o dispositivo.

    ResponderExcluir
    Respostas
    1. Boa tarde. O módulo precisa ser pareado com o celular antes de utilizar o Microcontroller BT. Abraço !

      Excluir
  8. como usar essa barra do microcontroller bt para controlar uma porta pwm ou o brilho de um led?

    ResponderExcluir
    Respostas
    1. Boa tarde.

      Você pode usar esse mesmo programa como base, apenas mudando a porta para PWM e enviando à ela o valor desejado.

      Abraço !

      Excluir
  9. ola fiz tudo corretamente , ele ate conectou porem mexo no celular e nao faz nada na placa , pq sera que nao ta indo ? ja config pino e tudo , obg

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Qual o seu módulo ? você montou o divisor de tensão ?

      Abraço !

      Excluir
  10. da pra salvar o painel que vc faz no aplicativo ?

    ResponderExcluir
  11. Binary sketch size: 5.936 bytes (of a 258.048 byte maximum)
    avrdude: stk500v2_ReceiveMessage(): timeout
    avrdude: stk500v2_ReceiveMessage(): timeout
    avrdude: stk500v2_ReceiveMessage(): timeout
    avrdude: stk500v2_ReceiveMessage(): timeout
    avrdude: stk500v2_ReceiveMessage(): timeout
    avrdude: stk500v2_ReceiveMessage(): timeout
    avrdude: stk500v2_getsync(): timeout communicating with programmer


    aparece isso , nao sei o pq

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Qual programa você está compilando ?

      Abraço !

      Excluir
  12. Boa tarde testei o codigo acima para controle de dois servos, porem movimenta apenas um pois estão lendo a mesma variavel (val) gostaria de saber se alguem conseguiu alguma outra maneira ? Ou se você mesmo conseguiu

    ResponderExcluir
    Respostas
    1. Boa tarde Robson,

      Não testei ainda, mas vou ver se arrumo 2 servo motores para testar isso.

      Abraço !

      Excluir
  13. Olá, gostaria de saber como faço para adicionar mais de um servo ?

    ResponderExcluir
  14. Respostas
    1. Boa tarde,

      Sim, tente o Bluetooth Serial Terminal: http://www.windowsphone.com/pt-br/store/app/bluetooth-serial-terminal/59d3cfee-90ae-4d5f-a5e5-0bf180c66d93

      Abraço !

      Excluir
  15. Olá, alguém por gentileza pode me enviar o .apk do "microcontroller BT" para meu e-mail?
    Pois o aplicativo saiu do Google Play e o link dado acima instala um tal de "1Mobile Market"
    Meu e-mail é rafaelgdacruz@gmail.com

    ResponderExcluir
  16. Boa tarde como ficaria o codico com 3 servos e cada um mover se separadamente

    ResponderExcluir
    Respostas
    1. Bom dia,

      Coloque mais linhas com as outras portas do servo, por exemplo 5 e 6:

      myservo.attach(5);
      myservo.attach(6);

      Depois, é só criar no aplicativo botões para essas portas, alterando o "Set Key".

      Abraço!

      Excluir
  17. Olá voce teria a programação pra acionar o servo por controle de voz,pra utilizar no app também

    ResponderExcluir
  18. Olá, alguém por gentileza pode me enviar o .apk do "microcontroller BT" para meu e-mail?
    Pois o aplicativo saiu do Google Play e o link dado acima instala um tal de "1Mobile Market"
    Meu e-mail é leandromagnog@gmail.com

    ResponderExcluir
  19. Olá, estou tendo problemas, ainda não descobri nos fóruns uma solução definitiva, podem me ajudar?
    O erro que aparece é esse aqui:

    avrdude: stk500v2_ReceiveMessage(): timeout
    avrdude: stk500v2_getsync(): timeout communicating with programmer

    ResponderExcluir
    Respostas
    1. Boa tarde Aryel,

      Qual IDE e qual Arduino você está usando ?

      Abraço!

      Excluir
    2. Boa tarde,
      É a versão 1.6.6 da IDE para Linux, baixada do site www.arduino.cc, antes estava usando a versão anterior que está disponível nos repositórios da versão 14.04 do Lubuntu, mas devido ao problema acima baixei essa versão mais nova, porém o problema ainda persiste. Em alguns fóruns estavam comentando que talvez seria necessário atualizar o "firmware" da placa ao que me pareceu.
      Testei com uma placa UNO do laboratório da faculdade e com minha placa Funduino Mega 2560, o problema foi o mesmo.

      Excluir
    3. Bom dia Aryel,

      Conseguiu resolver o problema ? consegue baixar a IDE em outro computador e ver se o problema persiste ?

      Me parece que esse negócio de atualizar firmware da placa é um caso extremo..

      Abraço!

      Excluir
    4. Bom dia,

      Consegui resolver, era muito simples, esqueci que era preciso desconectar o módulo bluetooth na hora de fazer upload do código para a placa. Feito isso, e seguindo os passos corretamente deu tudo certo.

      Excluir
  20. estou montando um carrinho com 4 motores com ponte H gostaria de saber a programação que vc usaria ?

    ResponderExcluir
  21. boa tarde amigo, como eu configuro esse controle de um ou mais servos no aap inventor 2 ???

    ResponderExcluir
    Respostas
    1. Olá Jordan, aqui nesse link ensinam a fazer o controle de vários servos com App Inventor 2:
      http://mitappsinventor.blogspot.com.br/2015/05/control-multiple-servo-motors-using.html

      Excluir
  22. ola como eu faço para enviar horarios para acionar o um motor pelo Bluetooth ? por exemplo enviar pelo app 30s 1minuto ou 30 minutos ai fazer o motor le um desses codigos ?

    ResponderExcluir
  23. boa noite eu gostaria de saber como faço para salvar o layout pois toda vez tenho que refazer tudo de novo quando saio do apk

    ResponderExcluir
  24. Como controlar dois servos com movimentos distintos ?

    ResponderExcluir
  25. Boa noite , preciso de um tutorial para ligar um servo motor de 5 fios mod: 28BYJ-48 5V via bluetooth?
    Alguém sabe e pode me ajudar
    adilsonboliveira.77@gmail.com

    ResponderExcluir