Tutorial: Controlando plataforma robótica através de aplicativo Android com Arduino

Olá Garagistas! Neste tutorial mostremos como você pode utilizar o aplicativo Arduino Bluetooth RC Car para controlar a plataforma Multi Chassis através de uma comunicação bluetooth.

 

Material Utilizado:

1x Multi Chassis - 4WD Robot Kit

1x Arduino

1x Dual Motor Shield

1x Bluetooth Shield

5x Pilha AA

1x Bateria 9V

1x Plug Bateria 9V (Super Kit)

Alguns Jumpers

1x Fita Dupla Face

1x Dispositivo Android (Smartphone/Tablet com suporte a bluetooth)

1. Conhecimentos Necessários

Imagem 1 - Dual Motor Shield e Bluetooth Shield

Para o total entendimento deste tutorial, é aconselhável anteriormente executar os 3 tutoriais abaixo:

Como acender leds pelo Serial Monitor do Arduino

Como utilizar o Dual Motor Shield

Acionamentos via Bluetooth utilizando Bluetooth Shield e aplicativo Android

2. Funcionamento

Após parear o seu dispositivo Android com o Bluetooth Shield que esta no Multi Chassis, é criado um link serial via comunicação bluetooth entre ambos. O Bluetooth Shield vai trabalhar em modo slave, enquanto o seu dispositivo Android irá enviar comandos para o acionamento dos motores, fazendo o Multi Chassis se mover para frente, trás, direita ou esquerda. 

 

2.1) Aplicativo

Figura 1 - Arduino Bluetooth RC Car (Aplicativo)

Utilizaremos o aplicativo Arduino Bluetooth RC Car para controlar o Multi. Ele é um aplicativo desenvolvido para Android, e possui uma interface gráfica para o envio de diversos comandos via bluetooth. Cada botão do aplicativo envia um caractere (letra) para o Arduino, através do link serial bluetooth. Neste tutorial utilizaremos apenas os comandos/botões para movimentar o Multi.

 

 Figura 2 - Tabela de movimentos e tela do aplicativo

2.2) Carrinho

Imagem 2 - Carrinho montado

O Carrinho é composto por:

Multi Chassis: É a estrutura do carrinho, onde estão incluídos nesta estrutura as rodas, a caixa de metal e dentro da caixa, os 4 motores.

Arduino: É o controlador do carrinho, fica responsável por tratar os códigos recebido através do link serial bluetooth enviados do dispositivo Android e fazer os respectivos comandos de acionamento.

Dual Motor Shield: Shield para Arduino que contém o driver para controle dos motores, ele é controlado pelo Arduino com o auxílio da biblioteca DualMotor.h, que facilita o acionamento dos motores.

Bluetooth Shield: Este shield contém um módulo bluetooth que fica responsável por tratar todo o protocolo de comunicação bluetooth utilizado entre o Carrinho e o aplicativo Android e enviar ao Arduino todos os caracteres recebidos.

3. Montagem

3.1) Retire o jumper do Vin_Mot do Dual Motor Shield, conforme a figura abaixo:

Imagem 3 - Jumper Vin_Mot retirado

3.2) Conecte os jumpers de RX_BT e TX_BT do Bluetooth Shield, conforme a imagem abaixo:

Imagem 4 - Conexão dos jumpers para a comunicação serial via software

Conecte os positivos (vermelho) e os negativos (preto) dos motores da esquerda, depois conecte os positivos (vermelho) e os negativos (preto) dos motores da direita, conforme a figura abaixo:

Figura 3 - Ligação entre os motores

Assim, você irá controlar os 4 motores, como se fossem 2, então temos acionamento dos motores da direita, e acionamento dos motores da esquerda. Após feita essas ligações, conecte os motores e as pilhas no Dual Motor Shield, conforme a imagem abaixo:

Imagem 5 - Conexões dos motores e das pilhas no Dual Motor Shield

Após feita as conexões dos motores e das pilhas, faça as conexões dos Shields:

Imagem 6 - Conexão dos shields

Fixe a bateria 9V ao Multi Chassis, como por exemplo a fixação da imagem abaixo:

Imagem 7 - Fixação da bateria 9V no Multi Chassis

Por último faça a conexão da bateria 9V utilizando o plug de bateria e conectando os terminais VIN (Fio Vermelho) e GND (Fio Preto).

Imagem 8 - Conexão da bateria 9V com o Arduino, pinos VIN e GND

4. Sketch para V1

#include <SoftwareSerial.h>   //Inlcui a biblioteca SoftwareSerial.h
#include <DualMotor.h> //Inclui a biblioteca DualMotor.h

#define RxD  3 //Define RxD como 3
#define TxD  2 //Define TxD como 2

DualMotor dualmotor; //Instância a DualMotor.h
SoftwareSerial blueToothSerial(RxD,TxD); //Instância a biblioteca SoftwareSerial.h

void setup()
{
  
  parear_dispositivo(); //Executa a função para parear o dispositivo
  
}

void loop()
{
  
  char letra; //Variável char para armazenar o caractere recebido

  if(blueToothSerial.available()) //Se algo for recebido pela serial do módulo bluetooth
  {
 
    letra = blueToothSerial.read(); //Armazena o caractere recebido na variável letra
    
    if(letra == 'F') //Se o caractere recebido for a letra 'F'
    {
      //Move o carrinho para frente
      dualmotor.M1move(255,1);
      dualmotor.M2move(255,1);
      //==================
    }
    
    else if (letra == 'B') //Se o caractere recebido for a letra 'B'
    {
      //Move o carrinho para trás
      dualmotor.M1move(255,0);
      dualmotor.M2move(255,0);
      //==================
    }
    
    else if(letra == 'R') //Se o caractere recebido for a letra 'R'
    {
      //Move o carrinho para direita
      dualmotor.M1move(255,1);
      dualmotor.M2parar();
      //==================
    }
    
    else if (letra == 'L') //Se o caractere recebido for a letra 'L'
    { 
      //Move o carrinho para esquerda
      dualmotor.M1parar();
      dualmotor.M2move(255,1);
      //==================
    }
    
    else if(letra == 'S') //Se o caractere recebido for a letra 'S'
    {
      //Para o carrinho
      dualmotor.M1parar();
      dualmotor.M2parar();
      //==================
    }  
    
  }  
  
}

void parear_dispositivo()
{
  
  blueToothSerial.begin(38400); // Configura o baud rate do bluetooth como 38400
  blueToothSerial.print("\r\n+STWMOD=0\r\n"); // Configura o módulo bluetooth para trabalhar como slave
  blueToothSerial.print("\r\n+STNA=SeedBTShield\r\n"); // Configura o nome do disopsitivo bluetooth
  blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permite que outros dispositivos encontrem o módulo bluetooth
  blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Desabilita a auto conexão
  delay(2000); // Aguarda 2 segundos
  blueToothSerial.print("\r\n+INQ=1\r\n"); // Habilita modo de paridade
  delay(2000); // Aguarda 2 segundos
  blueToothSerial.flush(); // Dá um flush na serial do módulo bluetooth
  
}

 

4. Sketch para V2

////////////////////////////////////////////////////////////////////////////////////////////////

//* Laboratorio de Garagem Serviços e Comercio LTDA.

//* Website    : www.labdegaragem.com

//* Autor      : Anderson dos Santos

//* Criado     : AGOSTO 2015

//* Tema       : Sketch Dual Motor Shild com Bluetooth Shield

////////////////////////////////////////////////////////////////////////////////////////////////

#include <SoftwareSerial.h>                 //Inlcui a biblioteca SoftwareSerial.h

#include <DualMotor.h>                     //Inclui a biblioteca DualMotor.h

#define RxD  3                             //Define RxD como 3

#define TxD  2                             //Define TxD como 2

DualMotor dualmotor;                       //Instância a DualMotor.h

SoftwareSerial blueToothSerial(RxD,TxD);   //Instância a biblioteca SoftwareSerial.h

void setup()

{

  parear_dispositivo();                   //Executa a função para parear o dispositivo

}

void loop()

{

  char letra; //Variável char para armazenar o caractere recebido

  if(blueToothSerial.available()) //Se algo for recebido pela serial do módulo bluetooth

  {

    letra = blueToothSerial.read(); //Armazena o caractere recebido na variável letra

 

    if(letra == 'F') //Se o caractere recebido for a letra 'F'

    {

      //Move o carrinho para frente

      dualmotor.M1move(255,1);

      dualmotor.M2move(255,1);

      //==================

    }

    else if (letra == 'B') //Se o caractere recebido for a letra 'B'

    {

      //Move o carrinho para trás

      dualmotor.M1move(255,0);

      dualmotor.M2move(255,0);

      //==================

    }

    else if(letra == 'R') //Se o caractere recebido for a letra 'R'

    {

      //Move o carrinho para direita

      dualmotor.M1move(255,1);

      dualmotor.M2parar();

      //==================

    }

   

    else if (letra == 'L') //Se o caractere recebido for a letra 'L'

    {

      //Move o carrinho para esquerda

      dualmotor.M1parar();

      dualmotor.M2move(255,1);

      //==================

    }

   

    else if(letra == 'S') //Se o caractere recebido for a letra 'S'

    {

      //Para o carrinho

      dualmotor.M1parar();

      dualmotor.M2parar();

      //==================

    } 

  } 

}

void parear_dispositivo()

{

                blueToothSerial.begin(9600);                   //Configura o baud rate do bluetooth como 9600

                blueToothSerial.print("AT");

                delay(400);

                blueToothSerial.print("AT+DEFAULT");          // Restaura configuração de fabrica do Bluetooth

                delay(2000);

                blueToothSerial.print("AT+NAMELabDeGaragem"); // Configura o nome do disopsitivo bluetoothpara "LabDeGaragem" , a legenda do bluetooth não pode passar de 12 caracteres

                delay(400);

        blueToothSerial.print("AT+PIN1234");          // Muda o codigo de acesso para "1234"

                delay(400);

                blueToothSerial.print("AT+AUTH1");

        delay(400);  

        blueToothSerial.flush();                      // Dá um flush na serial do módulo bluetooth

}

Referências:

https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller

http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-o-dual-motor-shield

http://labdegaragem.com/profiles/blogs/tutorial-acionamentos-via-bluetooth-utilizando-bluetooth-shield-e

Exibições: 35523

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Antonio Carlos Fonseca de Amorim em 16 dezembro 2015 às 13:49

Amigos comprei esse 4WD-Bluetooth montei com esta na figura mais como sou iniciante ñ sei os códigos para programa tem com os amigos mim da uma ajuda

 

http://pt.aliexpress.com/item/4WD-Bluetooth-Controlled-Line-Finder-...

Comentário de Lucas Trevisan Malheiros em 6 outubro 2015 às 14:04

da pra usar esse mesmo tutorial para robô com apenas dois motores?

Comentário de Tamires Layane da Silva em 29 setembro 2015 às 17:58

Gostaria de saber como fazer a comunicação da placa bluetooth shield v2.2 com o aplicativo bluetooth rc car...

Comentário de Alef Carvalho em 3 março 2015 às 18:51

para esse projeto alguém teria o mapa das ligações?

Comentário de Agnaldo Carloni Bolonha Junior em 3 março 2015 às 16:29

Minha Shield de Bluetooth so acende a luz VERDE, mesmo sem estar conectado com o android, sabem me dizer o porque?

Comentário de Thiago Marchi Duran em 20 julho 2014 às 0:42

É possivel incluir uma função para ligar/desligar leds, e no caso, também uma função para ativar leds que piscam como as luzes da polícia? Pois o aplicativo para android tem os botoes para ligar os leds dianteiros, traseiros, e tambem um triangulo, que no caso, eu gostaria de usar para ligar os leds com efeito de policia.

Comentário de Flavio Carvalho em 20 maio 2014 às 21:46

Como eu faço para incluir a biblioteca DualMotor.h nos Sketch? Eu só copie e aparece uma mensagem com os seguintes erros :

DualMotor_H.ino:10:23: error: DualMotor.h: No such file or directory
DualMotor_H:20: error: 'DualMotor' has not been declared
DualMotor_H:20: error: ISO C++ forbids declaration of 'DualMotor' with no type
DualMotor_H.ino: In function 'int DualMotor()':
DualMotor_H:22: error: 'pwmPinM1' was not declared in this scope
DualMotor_H:23: error: 'sentidoPinM1' was not declared in this scope
DualMotor_H:24: error: 'pwmPinM2' was not declared in this scope
DualMotor_H:25: error: 'sentidoPinM2' was not declared in this scope
DualMotor_H.ino: At global scope:
DualMotor_H:33: error: 'DualMotor' is not a class or namespace
DualMotor_H.ino: In function 'void M1move(int, int)':
DualMotor_H:35: error: 'pwmPinM1' was not declared in this scope
DualMotor_H:36: error: 'sentidoPinM1' was not declared in this scope
DualMotor_H.ino: At global scope:
DualMotor_H:39: error: 'DualMotor' is not a class or namespace
DualMotor_H.ino: In function 'void M1parar()':
DualMotor_H:41: error: 'pwmPinM1' was not declared in this scope
DualMotor_H.ino: At global scope:
DualMotor_H:44: error: 'DualMotor' is not a class or namespace
DualMotor_H.ino: In function 'void M2move(int, int)':
DualMotor_H:46: error: 'pwmPinM2' was not declared in this scope
DualMotor_H:47: error: 'sentidoPinM2' was not declared in this scope
DualMotor_H.ino: At global scope:
DualMotor_H:50: error: 'DualMotor' is not a class or namespace
DualMotor_H.ino: In function 'void M2parar()':
DualMotor_H:52: error: 'pwmPinM2' was not declared in this scope

Como se resolve isso ?

Comentário de pedrware em 8 maio 2014 às 18:36

Ola amigo,

Estava tentar seguir este tutorial, desde de já parabens :)

Meu shield é este http://www.dfrobot.com/wiki/index.php?title=Arduino_Motor_Shield_(L298N)_(SKU:DRI0009)

da para usar ?

O que tenho de mudar ?

Pedro de Portugal :)

Comentário de lianderson lima em 3 maio 2014 às 23:29

tem como um sensor ultrasonico ligar um led endicador quando algo tiver procimo e quando algo se afastar ligar um rele por tantos segundos e desligar sozinho alguem sabe diser 

Comentário de Eduardo castellani em 18 abril 2014 às 10:15

Legal o tutorial, mais do ponto de vista do aprendizado da programação do que do robo, pois Shield  é bom para quem esta com pressa, e para quem vende, mas em termos de aprendizado, seria melhor a plaquinha sem os componentes e um kit com todos os componentes para a galera apreender a soldar e etc.

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço