Circuitos RF, Comunicações sem fio, Hobby, Microcontroladores, Microeletrônica, Projetos, Tutorial

Arduino com o módulo Bluetooth HC-05

Neste post, é mostrado como controlar um Arduino com um smartphone usando um método fácil, através de um módulo Bluetooth HC-05 ou HC-06.

Para saber como funciona a tecnologia Bluetooth, clique no link abaixo.

BluetoothClique aqui

Os módulos HC-05 e HC-06

Além do número de pinos, como mostra a figura acima, o HC-06 só pode ser usado como escravo, ou seja, apenas recebe dados e transmite para o Arduino. Enquanto o HC-05 também pode operar no modo mestre, ou seja, pode transmitir dados para outros módulos Bluetooth. Nos projetos apresentados neste post, o HC-05 é usado apenas para receber comandos do celular. As funções dos pinos do módulo são:

  • VCC: a alimentação positiva, pode ir de 3,6V a 6V. Pode ser conectado diretamente ao terminal 5V do Arduino.
  • GND: chamado de terra, deve ser ligado ao GND do Arduino.
  • TXD: o terminal de transmissão de dados, deve ser ligado ao pino digital 0 do Arduino.
  • RXD: o terminal de recepção de dados, fica conectado ao pino digital 1 do Arduino.
  • STATE: este pino está conectado ao LED. Indica se o módulo está conectado com algum dispositivo via Bluetooth. Se estiver conectado, retorna nível “ALTO” (5V), caso contrário, retorna nível “BAIXO” (0V).
  • EN: é usado para configurar o HC-05 como mestre. Com este pino, pode-se habilitar o módulo para modo de dados ou modo de comando AT, este é para ser usado como mestre. Por padrão de fabricação, o estado padrão do HC-05, sem receber um sinal externo, é o modo de dados.

O aplicativo

Existem vários aplicativos para controlar o Arduino via Bluetooth. Para os projetos neste post, escolhi o aplicativo “Bluetooth Automation HC-05”, cujo link está aqui.

Projetos com o módulo HC-05

Controlando dispositivos pelo celular

Materiais necessários:

  • Arduino Uno.
  • Protoboard.
  • Fios.
  • Resistores: 1 de 470Ω e 1 de 1kΩ.
  • LED de qualquer cor.
  • Buzzer.
  • Diodo zener.
  • MOSFET IRF640N.
  • Motor CC.
  • HC-05.
teste de projeto com HC-05

O código a seguir.

char data;

int LED=12;
int buzzer=11;
int motor=10;

void setup() {
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
  pinMode(buzzer,OUTPUT);
  pinMode(motor,OUTPUT);
}

void loop() {
  data=Serial.read();
  Serial.println(data);
  switch(data){
    case 'A':
    digitalWrite(LED,HIGH);
    break;

    case 'a':
    digitalWrite(LED,LOW);
    break;

    case 'B':
    digitalWrite(buzzer,HIGH);
    break;

    case 'b':
    digitalWrite(buzzer,LOW);
    break;

    case 'C':
    digitalWrite(motor,HIGH);
    break;

    case 'c':
    digitalWrite(motor,LOW);
    break;
  }
}
aplicativo controla HC-05
Abrindo o aplicativo, clique nos 3 botões acima à direita e depois em “Select Device”. Círculo vermelho indica que não está conectado e círculo verde indica que há conexão.
Em seguida, clique em “SCAN” para o aplicativo encontrar o módulo HC-05. A senha de pareamento é 1234. Uma vez pareado, basta clicar no módulo HC-05, como aparece na imagem.

Este projeto deve funcionar como mostra o vídeo.

Veículo controlado pelo celular

Lista de materiais para este projeto:

  • Arduino Uno.
  • Chassi de robô com 4 rodas Mecanum para Arduino.
  • Shield de ponte H para 4 motores.
  • Fios.
  • Chave de 1 polo e 3 terminais.
  • 2 baterias recarregáveis Li-ion de 4,2V e 12000mAh.
  • Suporte para baterias.
  • Um sensor LDR.
  • Resistores: 1 de 15kΩ e 4 de 1kΩ.
  • LEDs brancos de alto brilho.
  • Módulo Bluetooth HC-05.
O esquemático da parte elétrica do veículo. A representação da bateria é meramente ilustrativa.

Abaixo o algoritmo, quando o sensor com LDR não detectar luz, os LEDs acendem.

#include <AFMotor.h>
//Portas analogicas     A0 A1 A2 A3 A4 A5
//Portas Digitais 12 13 14 15 16 17 18 19
char dados;

int LEDS=14;
const int LDR=A3;
int stateLDR=0;
AF_DCMotor motor1(1,MOTOR12_64KHZ);
AF_DCMotor motor2(2,MOTOR12_64KHZ);
AF_DCMotor motor3(3,MOTOR34_64KHZ);
AF_DCMotor motor4(4,MOTOR34_64KHZ);

void setup() {
  Serial.begin(9600);
  pinMode(LEDS,OUTPUT);
  pinMode(LDR,INPUT);
  motor1.setSpeed(150);
  motor2.setSpeed(150);
  motor3.setSpeed(150);
  motor4.setSpeed(150);
}

void loop() {
  stateLDR=analogRead(LDR);
     if(stateLDR<950){
        digitalWrite(LEDS,LOW);
        mechanum();
      }else{
        digitalWrite(LEDS,HIGH);
        mechanum();
      }
}
void mechanum(){
    while(Serial.available()>0){
    dados=Serial.read();
    Serial.println(dados);
    switch(dados){
      case 'A':  //Todas as rodas giram no mesmo sentido.
      motor1.run(FORWARD);
      motor2.run(BACKWARD);
      motor3.run(FORWARD);
      motor4.run(BACKWARD);
      break;

      case 'a':  //Todas as rodas giram no mesmo sentido.
      motor1.run(BACKWARD);
      motor2.run(FORWARD);
      motor3.run(BACKWARD);
      motor4.run(FORWARD);
      break;

      case 'B':
      motor1.run(BACKWARD);
      motor2.run(BACKWARD);
      motor3.run(BACKWARD);
      motor4.run(BACKWARD);
      break;

      case 'b':
      motor1.run(FORWARD);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(FORWARD);
      break;

      case 'C':
      motor1.run(RELEASE);
      motor2.run(BACKWARD);
      motor3.run(RELEASE);
      motor4.run(BACKWARD);
      break;

      case 'c':
      motor1.run(RELEASE);
      motor2.run(FORWARD);
      motor3.run(RELEASE);
      motor4.run(FORWARD);
      break;

      case 'D':
      motor1.run(BACKWARD);
      motor2.run(RELEASE);
      motor3.run(BACKWARD);
      motor4.run(RELEASE);
      break;

      case 'd':
      motor1.run(FORWARD);
      motor2.run(RELEASE);
      motor3.run(FORWARD);
      motor4.run(RELEASE);
      break;

      case 'E':  
      motor1.run(FORWARD);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(BACKWARD);
      break;

      case 'e':  
      motor1.run(BACKWARD);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(FORWARD);
      break;

      case 'F': 
      motor1.run(RELEASE);
      motor2.run(FORWARD);
      motor3.run(BACKWARD);
      motor4.run(RELEASE);
      break;

      case 'f':  
      motor1.run(RELEASE);
      motor2.run(BACKWARD);
      motor3.run(FORWARD);
      motor4.run(RELEASE);
      break;

      case 'G':  
      motor1.run(BACKWARD);
      motor2.run(BACKWARD);
      motor3.run(FORWARD);
      motor4.run(FORWARD);
      break;

      case 'g':  
      motor1.run(FORWARD);
      motor2.run(FORWARD);
      motor3.run(BACKWARD);
      motor4.run(BACKWARD);
      break;

      case 'H':  
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(FORWARD);
      motor4.run(FORWARD);
      break;

      case 'h':  
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(BACKWARD);
      motor4.run(BACKWARD);
      break;

      case '@':
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
      break;
    } 
  }  
}

Dica importante: é possível usar as portas analógicas do Arduino como portas digitais. Caso você queira adicionar sensores com este shield ou precisar de mais saídas ou entradas digitais, basta declarar uma porta digital de números 14 a 19, como mostra no começo do código.

O veículo completo.

O vídeo de demonstração.

About Pedro Ney Stroski

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *