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
5x Pilha AA
1x Bateria 9V
1x Plug Bateria 9V (Super Kit)
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
Comentar
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-...
da pra usar esse mesmo tutorial para robô com apenas dois motores?
Gostaria de saber como fazer a comunicação da placa bluetooth shield v2.2 com o aplicativo bluetooth rc car...
para esse projeto alguém teria o mapa das ligações?
Minha Shield de Bluetooth so acende a luz VERDE, mesmo sem estar conectado com o android, sabem me dizer o porque?
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 ?
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 :)
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
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)