fbpx
ArduinoNovidade

Como Controlar o CDR CAR via Bluetooth usando o Módulo HC-06

O CDR CAR é um robô seguidor de linha exclusivo da Casa da Robótica. Ele foi pensado e desenvolvido para auxiliar iniciantes na área da robótica a aprender de forma prática. Com chassi impresso em 3D e componentes de fácil montagem, ele possibilita aprender os fundamentos da robótica, incluindo eletrônica, programação e mecânica.

Além de ser uma excelente plataforma para montagem de um robô seguidor de linha, o CDR CAR também pode ser transformado em um robô controlado pelo celular via Bluetooth. Esse projeto adicional amplia as possibilidades de aprendizado. Neste tutorial, vamos utilizar o módulo Bluetooth HC-06 para controlar o CDR CAR via celular Android com o aplicativo Dabble.

Imagem com o robô CDR CAR montado.
Figura 1 – Kit CDR CAR: Robô seguidor de linha.

MATERIAIS NECESSÁRIOS

1x Módulo Bluetooth HC 06;
1x KIT para montar Robô Seguidor de Linha – CDR Car;
1 x Mini protoboard de 170 furos / pontos;
3 x Resistores de 220 Ω.

OBSERVAÇÃO: Ao adquirir o Kit CDR CAR, você receberá uma apostila digital contendo o passo a passo para a montagem mecânica e eletrônica, bem como toda a lógica necessária para realizar a programação. Certifique-se de que ele esteja montado corretamente e vamos ao esquemático para adicionar o módulo Bluetooth.

ESQUEMÁTICO DE LIGAÇÃO

Com o circuito desenergizado, observe a Figura 2 e faças as ligações necessárias.

Esquemático de ligação para controlar o CDR CAR via Bluetooth.
Figura 2 – Esquemático de ligação para controlar o CDR CAR via Bluetooth.

Ao montar o circuito, observe os seguintes pontos:

  • No nosso projeto, usaremos as portas 2 e 3 como TX e RX, respectivamente. Sendo assim, conecte o TX do módulo HC-06 na porta 2 da Shield e a RX na porta 3;
  • O módulo Bluetooth HC-06 possui nível logico em 3,3V enquanto o Arduino em 5V. Então, para não danificar o módulo precisamos fazer divisor de tensão. Para tal, usamos um resistor de X entre o pino digital 3 do Arduino e o RX do módulo e dois resistores de X em série entre o Rx do módulo e o GND;
  • Conecte o GND do módulo a um dos pinos GND da Shield Ponte H;
  • Conecte o VCC do módulo HC-06 ao pino 5V.

ATENÇÃO:

  • O conector fêmea BT12 disponível no Shield Ponte H não servem para o módulo HC-06, pois fornece uma alimentação de apenas 3,3V e o HC-06 necessita de uma tensão de alimentação na faixa de 3,6 a 6 V;
  • Recomendamos o uso de pilhas alcalinas, que possuem maior durabilidade.

IMPORTANTE: O módulo vem com algumas configurações importantes pré-definidas de fábrica, como:

  • Nome: HC-06;
  • Senha: 1234 ou 0000;
  • Tipo: Escravo;
  • Modo: Dados.

ELABORANDO O CÓDIGO

Após a montagem do circuito, vamos a programação. A proposta deste projeto é utilizar o módulo Bluetooth HC-06 conjunto com o Arduino para controlar o CDR CAR via celular usando o aplicativo Dabble.

Para tal, será necessário instalar a biblioteca Dabble.h. Então, abra o Arduino IDE, acesse o Gerenciador de Bibliotecas (atalho: Ctrl + Shift + I) e busque a biblioteca, conforme a Figura 3.

Biblioteca Dabble no Gerenciador de Bibliotecas do Arduino IDE.
Figura 3 – Biblioteca Dabble no Gerenciador de Bibliotecas do Arduino IDE.

ELABORANDO O CÓDIGO

Logo após, podemos prosseguir com a programação. Acompanhe os seguintes passos para melhor compreensão da lógica de programação do código:

1.Incluir as bibliotecas necessárias para o projeto

Iniciamos o código adicionando as bibliotecas

  • CUSTOM_SETTINGS, para informar ao compilador que usaremos configurações pesonalizadas;
  • INCLUDE_GAMEPAD_MODULE, para incluir o GamePad da
  • Dabble, permite a comunicação com o celular via Bluetooth usando o aplicativo Dabble.

2. Declaração dos pinos e variáveis

Em seguida, declaramos os pinos e variáveis para PWM e ENABLE dos motores A e B, que serão responsáveis para controlar a velocidade e direção dos motores, respectivamente.

Definimos também as variáveis veloc0, veloc1 e veloc2 que serão usadas para definir a velocidade dos motores A e B.

3. Configurações iniciais

Na função setup(), configuramos os pinos conectados aos motores como saída (OUTPUT), preparando-os para receber comandos para controlar o movimento do CDR CAR.

Além disso, inicializamos a comunicação serial e a comunicação da biblioteca Dabble com as funções Serial.begin() e Dabble.begin(), respectivamente.

4. Função loop()

Iniciamos o loop() chamando a função Dabble.processInput(), responsável por atualizar e processar os comandos recebidos do aplicativo no smartphone.

Em seguida, verificamos se algum dos botões direcionais (cima, baixo, esquerda, direita) do GamePad no aplicativo está sendo pressionado. Dependendo do botão pressionado, chamamos uma função específica (frente(), re(), esquerda(), direita()) que configura os pinos dos motores para criar o movimento desejado.

Além disso, chamamos a função parar() no início de cada ciclo do loop() para garantir que o robô pare antes de mudar de direção, evitando movimentos inesperados e garantindo uma transição suave entre comandos.

5. Criar as funções de movimentação

Por fim, criamos as funções que configuram os motores para movimentar o CDR CAR, sendo:

  • frente(): Configura os motores para mover o robô para frente;
  • direita(): Configura os motores para girar o robô à direita;
  • esquerda(): Configura os motores para girar o robô à esquerda;
  • re(): Configura os motores para mover o robô para trás;
  • parar(): Configura os motores para parar o robô.

ATENÇÃO: Antes de realizar o upload do código, mude a chave liga/desliga do suporte para 6 pilhas AA para a posição ON.

No final, o código deverá ficar assim:

#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_MODULE
#include <Dabble.h>

//Motores – Saídas digitais
int motorA_PWM = 10; //Controle de velocidade do motor A (Esquerdo)
int motorB_PWM = 11; //Controle de velocidade do motor B (Direito)
int motorA_EN = 12; //Controle de direção do motor A (Esquerdo)
int motorB_EN = 13; //Controle de direção do motor B (Direito)
//Sensor TCRT5000 – Entradas digitais

//Velocidade PWM
int veloc0 = 0; //Velocidade para parar os motores
int veloc1 = 254; //Velocidade motor A
int veloc2 = 254; //Velocidade motor A


void setup() {
  //Configura os motores como saída
  pinMode (motorA_PWM, OUTPUT);
  pinMode (motorA_EN, OUTPUT);
  pinMode (motorB_PWM, OUTPUT);
  pinMode (motorB_EN, OUTPUT);
  Serial.begin(250000);
  Dabble.begin(9600); 

}
void loop(){
  Dabble.processInput();           //Esta função é usada para atualizar os dados obtidos do smartphone. Portanto, chamar esta função é obrigatório para obter os dados corretamente do seu celular.
  Serial.print("KeyPressed: ");
  parar();
  if (GamePad.isUpPressed())
  {
    Serial.print("UP");
    frente();
  }

  if (GamePad.isDownPressed())
  {
    Serial.print("DOWN");
    re();
  }

  if (GamePad.isLeftPressed())
  {
    Serial.print("Left");
    esquerda();
  }

  if (GamePad.isRightPressed())
  {
    Serial.print("Right");
    direita();
  }

}
void frente(){
  digitalWrite(motorA_EN, HIGH); //Motor A. HIGH = Frente
  digitalWrite(motorB_EN, HIGH); //Motor B. HIGH = Frente
  analogWrite(motorA_PWM, veloc1); //Motor A com pwm = veloc1
  analogWrite(motorB_PWM, veloc2); //Motor B com pwm = veloc2
}
void direita(){
  digitalWrite(motorA_EN, HIGH); //Motor A. HIGH = Frente
  digitalWrite(motorB_EN, LOW); //Motor B. HIGH = Frente
  analogWrite(motorA_PWM, veloc1); //Motor A com pwm = veloc3
  analogWrite(motorB_PWM, veloc0); //Motor B com pwm = veloc0
}
void esquerda(){
  digitalWrite(motorA_EN, LOW); //Motor A. HIGH = Frente
  digitalWrite(motorB_EN, HIGH); //Motor B. HIGH = Frente
  analogWrite(motorA_PWM, veloc0); //Motor A com pwm = veloc0
  analogWrite(motorB_PWM, veloc2); //Motor B com pwm = veloc4
}
void re(){
  digitalWrite(motorA_EN, LOW); //Motor A. HIGH = Frente
  digitalWrite(motorB_EN, LOW); //Motor B. HIGH = Frente
  analogWrite(motorA_PWM, veloc1); //Motor A com pwm = veloc1
  analogWrite(motorB_PWM, veloc2); //Motor B com pwm = veloc2
}

void parar(){
  digitalWrite(motorA_EN, LOW); //Motor A. HIGH = Frente
  digitalWrite(motorB_EN, LOW); //Motor B. HIGH = Frente
  analogWrite(motorA_PWM, veloc0); //Motor A com pwm = veloc1
  analogWrite(motorB_PWM, veloc0); //Motor B com pwm = veloc2
}

CONEXÃO COM O CELULAR

Para conectar o CDR CAR ao celular via Bluetooth, primeiramente será necessário o download do aplicativo Dabble, você pode baixá-lo na Google Play Store.

Quando concluir a instalação, abra o aplicativo e siga os passos:

1º passo: Clique no indicador de conexão no canto superior indicado pela primeira seta da Figura 4.

2º passo: Selecione o módulo HC-06 indicado pela segunda seta.

3º passo: Agora o celular já está conectado, escolha a opção Gamepad.

Passos para conexão e configuração do aplicativo Dabble.
Figura 4 – Passos para conexão e configuração do aplicativo Dabble.


Para começar a controlar seu robô, use as setas do controle virtual que acabou de abrir.

Controle virtual do aplicativo Dabble.
Figura 5 – Controle virtual do aplicativo Dabble.

Veja abaixo o vídeo demonstrando o funcionamento do CDR CAR controlado via Bluetooth por um celular.

Vídeo 1 – CDR CAR controlado via Bluetooth com o módulo HC-06.

Espero que tenha gostado, volte sempre!

Caso ainda tenha alguma dúvida, deixe um comentário abaixo

Dúvidas? Deixe seu comentário
Estagiário no setor de desenvolvimento na Casa da Robótica

Graduando em Engenharia da Computação pela Faculdade Independente do Nordeste. Estagiário do setor de desenvolvimento da Casa da Robótica.

Raphael Christian

Graduando em Engenharia da Computação pela Faculdade Independente do Nordeste. Estagiário do setor de desenvolvimento da Casa da Robótica.

Deixe uma pergunta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.