Módulo Bluetooth HC-05 e HC-06 – Acionando um módulo relé via Bluetooth
Dentre os mais diversos protocolos de comunicação atuais, o Bluetooth certamente é um dos mais populares. Sendo assim, neste tutorial, iremos aprender como montar um projeto com uma placa Arduino, usando um smartphone para ligar e desligar uma pequena bomba submersa com o auxílio de um módulo relé e do módulo Bluetooth HC-06 / HC-05 . Para estabelecer a comunicação entre nosso smartphone e o Arduino, iremos utilizar o aplicativo Bluetooth Controller. O aplicativo possui uma interface simples, onde com uma configuração básica seremos capazes de controlar o nosso módulo relé.
[toc]
A importância de um sistema de comunicação sem fio
Sistemas automáticos precisam de meios para interagir com o usuário ou com outros sistemas, de modo que, isso faz da comunicação um assunto muito importante quando estamos tratando de automação.
Ter uma forma de comunicação sólida em um projeto é muito importante, pois será através dela que iremos estabelecer a interface que permitirá a comunicação entre o usuário e o sistema.
Infelizmente, grande parte dos microcontroladores não possuem uma interface sem fio já embutida e como consequência temos a criação de uma grande dificuldade em projetos onde existe a necessidade de um canal de comunicação sem fio. Com isso, uma solução interessante é o uso do padrão Bluetooth, que é voltado para aplicações de baixo consumo. Um módulo capaz de suprir esta demanda, é o módulo HC-06, que veremos a seguir.
Seguindo a linha de raciocínio anterior, o padrão Bluetooth, tem como principais vantagens:
- Baixo consumo energético
- Velocidade de transmissão considerável
- Integração com smartphones
- Padrões retrocompatíveis
Com todas estas características, podemos considerar que o padrão Bluetooth é de fato um ótimo meio para se transmitir dados de forma fácil e com um baixo custo energético para o sistema. Porém, o padrão tem suas limitações, como:
- Curto alcance
- Conexão ponto a ponto ( apenas dois pares podem se comunicar por vez )
Protocolo Bluetooth e o uso com Arduino
Em suas versões mais simples, as placas Arduino não contam com uma conexão Bluetooth nativa. Porém, é possível a aquisição de módulos capazes de estabelecer a conexão e a troca de mensagens entre a sua placa Arduino e um outro dispositivo com interface Bluetooth.
Um módulo com este propósito é o HC-06, este circuito é capaz de abstrair toda a parte da comunicação sem fio necessária para a comunicação bluetooth, fornecendo uma interface serial para que o microcontrolador possa enviar ou receber dados.
Com o uso do Bluetooth, você pode desenvolver uma vasta gama de projetos, como por exemplo:
- Controlar robôs:
- Automatizar praticamente qualquer coisa que esteja conectada ao seu Arduino
Módulo Bluetooth HC-05 e HC-06
Estes módulos utilizam a versão 2 do padrão Bluetooth, que por sua vez, apesar de já estar ultrapassado, ainda é viável em projetos como o que será desenvolvido neste tutorial. Com eles você abstrai toda a parte da comunicação sem fio, bastando enviar os dados via comunicação serial para eles.
Esses módulos são muito semelhantes e para nosso projeto você poderá optar por qualquer um dos dois. A diferença entre eles, além da versão do firmware, é o número de pinos. Geralmente os módulos HC-06 possuem apenas 4 pinos, enquanto que geralmente os módulos HC-05 contam com 6 pinos.
É importante ressaltar que o módulo Bluetooth HC-06 não possui o modo de funcionamento master dessa forma se optar pelo seu uso, o módulo ficará restrito a sempre precisar solicitar uma conexão com o dispositivo para a requisição ou transmissão de dados. Caso tenha a necessidade de um módulo capaz de funcionar tanto no modo master quanto slave, você pode utilizar o módulo Bluetooth HC-05, que é capaz de operar nos dois modos.
– Módulo HC-05
O módulo Bluetooth HC-05, dispõe de 6 pinos de entrada e saída de dados, sendo dois deles para alimentação do sistema, dois para transmissão e recepção de dados via serial e dois para programa-lo em modo master. Logo abaixo temos a especificação do dispositivo:
- Especificações
- Bluetooth: 2.0V
- Tensão de funcionamento: 3.3v~5v
- Taxa de transmissão: 2Mbps
- Frequência: 2,4 Ghz
- Nível lógico: 3.3v
- Pinos: VCC , GND , TXD , RXD;
- Perfis suportados: Escravo (slave) e Mestre (master)
– Módulo HC-06
O módulo Bluetooth HC-06, dispõe de apenas 4 pinos de entrada e saída de dados, sendo dois deles para alimentação do sistema, e os outros dois para transmissão e recepção de dados via serial. Logo abaixo temos a especificação do dispositivo:
- Especificações
- Bluetooth: 2.0V
- Tensão de funcionamento: 3.3v~5v
- Taxa de transmissão: 2Mbps
- Frequência: 2,4 Ghz
- Nível lógico: 3.3v
- Pinos: VCC , GND , TXD , RXD;
- Perfis suportados: Escravo (slave) e Mestre (master)
Módulo Relé
É comum, em projetos de automação, termos que acionar ou desligar dispositivos mediante algum parâmetro tal como a temperatura do ambiente, pressão, ou até mesmo a simples solicitação do usuário. Para que isso seja possível, podemos utilizar um circuito comumente conhecido como relé, que por sua vez, nada mais é do que uma simples chave eletromecânica acionada através de uma bobina em seu interior, permitindo ligar e desligar equipamentos elétricos, através da abertura ou fechamento de seu contato em virtude do fornecimento de energia a esta bobina.
Neste projeto, iremos também utilizar um módulo relé para realizar o acionamento da nossa bomba quando requisitado pelo usuário. Este módulo utiliza apenas três pinos, sendo dois para alimentação (5 Volts) e outro para acionamento.
Mãos à obra – Acionando um módulo relé utilizando o módulo Bluetooth HC-06 ou HC-05 – Arduino
Como esse projeto irá usar o módulo Bluetooth no modo Slave, poremos usar tanto o HC-05 quanto o HC-06. Para nosso projeto usaremos o HC-06, mas você pode adotar os mesmos procedimentos para o HC-05.
Componentes utilizados
- 1x Placa Arduino Uno
- 1x Módulo Bluetooth HC-06 ou 1x Módulo Bluetooth HC-05
- 1x módulo Relé 1 canal
- Mini bomba submersa 5V ou outro equipamento
- Fios Jumper
Montando o projeto
A montagem deste projeto, pode ser feita seguindo a seguinte ordem para os fios:
A montagem do sistema deve ficar semelhante a imagem abaixo
ATENÇÃO: Tanto o módulo HC-06, quanto o HC-05 utilizam o nível lógico de 3.3 volts, logo para utilizar o pino de transmissão TX, você deve adicionar ao projeto um divisor de tensão, já que o nível lógico do Arduino Uno ( 5 Volts ) pode danificar o seu módulo. Porém como neste tutorial não iremos transmitir informações do arduino para o telefone, não iremos precisar do divisor de tensão.
Sempre monte seu projeto com a alimentação desligada para evitar possíveis curtos circuitos que podem danificar o seu dispositivo.
Programando
Agora que temos o nosso circuito montado, iremos partir para o código responsável por receber os dados através do Bluetooth e determinar se o relé deve ser acionado ou não. Neste exemplo em especial, não será necessária nenhuma biblioteca de terceiros, ou seja todas as bibliotecas que iremos utilizar já se encontram disponíveis na IDE do Arduino. O código abaixo ilustra todo o processo de funcionamento do nosso sistema:
#include <SoftwareSerial.h> #define RX 8 #define TX 9 #define RELE 7 SoftwareSerial bluetooth(RX, TX); // RX, TX void setup() { Serial.begin(9600); // Inicializa a serial nativa do Arduino pinMode(RELE,OUTPUT); // Inicializamos o pino 7 do relé como output digitalWrite(RELE,HIGH); // Inicializa a chave como desligada bluetooth.begin(9600); // Inicializa a serial via software (Onde está conectado o nosso módulo bluetooth) } void verificaBluetooth(){ // Verifica se existe algum dado a ser lido da serial if (bluetooth.available()){ // verifica se existem bytes a serem lidos da porta serial virtual char dados = bluetooth.read(); // Lê 1 byte da porta serial Serial.print(dados); // Mostra esse dado lido na porta serial if (dados=='0'){ // Se o byte lido for igual a 0 digitalWrite(RELE,HIGH); // Desliga a chave } else{ if (dados=='1'){ // Se o byte lido for igual a 1 digitalWrite(RELE,LOW); // Liga a chave e aciona a bomba } } } } void loop (){ verificaBluetooth(); }
Conectando o celular ao Arduino
Agora que temos o código que irá rodar no Arduino, devemos agora instalar o aplicativo que iremos utilizar no controle da bomba. Para instalar o aplicativo basta seguir os seguintes passos:
- Na play store pesquisar por Bluetooth Controller, e instalar o aplicativo que está marcado
- Com o aplicativo instalado, iremos agora criar dois botões que serão utilizados para ligar e desligar a nossa mini bomba submersa, para isso devemos clicar no botão SET KEYS:
- Ao clicar em SET KEYS, seremos direcionados para a tela onde configuramos os botões q serem utilizados. Neste primeiro caso, iremos configurar apenas dois botões, sendo eles responsáveis por ligar e desligar o relé, o tipo de dado enviado também deverá corresponder ao que o nosso código espera, logo enviaremos 1 quando quisermos que a bomba seja ligada, e 0 quando quisermos que a bomba seja desligada.
- Agora com todos os botões configurados, iremos buscar o dispositivo que queremos nos conectar, para isso selecionamos a opção SCAN
- Ao clicar no botão SCAN, seremos novamente redirecionados para outra tela, sendo esta no caso para selecionar o dispositivo com o qual desejamos nos conectar. No meu caso o dispositivo se chama Controle rele, porém pode ser que o seu se chame HC-05 ou HC-06 dependendo do qual esteja usando.
Na primeira conexão, você deverá fornecer uma senha para que o pareamento seja feito com sucesso, por padrão esta senha é 1234.
- Com a conexão estabelecida, agora podemos ligar e desligar a nossa bomba sem a necessidade de contato direto com ela.
Colocando para funcionar
Entendendo a fundo
Software
– Incluindo as bibliotecas necessárias
Neste código, em especial, iremos apenas incluir uma única biblioteca, chamada SoftwareSerial. Neste exemplo iremos simular uma porta serial, através dos pinos 8 e 9 do Arduino, desta forma, mantemos a serial em hardware livre para ser utilizada no debug e gravação do código a ser executado. Essa biblioteca é nativa da IDE Arduino.
#include <SoftwareSerial.h>
– Parâmetros de configuração
Para facilitar o uso dos pinos selecionados para este sistema, iremos definir as seguintes constantes como mostra o código logo abaixo:
#define RX 8 #define TX 9 #define RELE 7
– Objeto bluetooth
Como dito anteriormente, iremos utilizar uma biblioteca que simula uma comunicação serial, desta forma evitamos a utilização da serial nativa, que pode ser utilizada posteriormente para depuração do código. O trecho de código abaixo, cria o objeto bluetooth, que será responsável por enviar os dados a serem transmitidos através pelo módulo HC-06. Algo que é importante ressaltar é que o módulo HC-06 abstrai toda a parte de comunicação do usuário, bastando apenas com que ele envie os dados que deseja transmitir utilizando a comunicação serial.
SoftwareSerial bluetooth(RX, TX); // RX, TX
– Inicializando portas de comunicação e configurando relé para desativado
Na função setup, iremos inicializar as duas portas de comunicação (nativa e a que conectamos o nosso módulo bluetooth), através dos comandos Serial.begin(9600) e bluetooth.begin(9600). Também inicializamos o pino onde o módulo relé está conectado como OUTPUT, e inicializamos o módulo relé no estado HIGH. Algo que também deve ser levado em consideração, é o fato de que este módulo relé, diferente dos outros é ativo no nível lógico LOW, por isso inicializamos ele como HIGH.
void setup() { Serial.begin(9600); // Inicializa a serial nativa do arduino pinMode(RELE,OUTPUT); // Inicializamos o pino 7 do módulo relé como output digitalWrite(RELE,HIGH); // Inicializa a chave como desligada bluetooth.begin(9600); // Inicializa a serial via software (Onde está conectado o nosso módulo bluetooth) }
– Função Verifica loop
Já na função verificaBluetooth, iremos seguir a seguinte lógica:
- Verificamos se existe algum dado a ser lido em nossa serial virtual
- Se existir nós iremos ler apenas o primeiro byte desta mensagem através do comando bluetooth.read()
- Mostramos este dado lido na tela afim de ver se ele é realmente o que enviamos
- Logo em seguida verificamos se este valor é 0
- Se o valor for igual a 0 iremos abrir a chave do módulo relé ( desligar a bomba )
- Caso seja 1 iremos fechar a chave do módulo relé ( ligar a bomba )
- Caso não seja nenhum dos dois casos, iremos manter o sistema como está
void verificaBluetooth(){ // Verifica se existe algum dado a ser lido da serial if (bluetooth.available()){ // verifica se existem bytes a serem lidos da porta serial virtual char dados = bluetooth.read(); // Lê 1 byte da porta serial Serial.print(dados); // Mostra esse dado lido na porta serial if (dados=='0'){ // Se o byte lido for igual a 0 digitalWrite(RELE,HIGH); // Desliga a chave } else{ if (dados=='1'){ // Se o byte lido for igual a 1 digitalWrite(RELE,LOW); // Liga a chave e aciona a bomba } } } }
Considerações Finais
Este tutorial, teve como objetivo mostrar a utilização do módulo Bluetooth HC-06 e HC-05 no modo slave, em um contexto onde a utilização do Arduino é muito aplicada, que é a automação de equipamentos. Com este código apresentado como base, podem ser criados diversos projetos, como automatização residencial e controle de robôs, utilizando um smartphone. Espero que tenham gostado do conteúdo apresentado, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.
Caso esteja começando com Arduino recomendamos que conheça a Apostila Arduino Básico.
Formado em Ciência da computação pela UFV-CAF em 2017 e atualmente cursando pós-graduação Stricto Sensu em Ciência da computação pela Universidade Federal de Viçosa, na área de arquitetura de computadores. É um entusiasta na área de sistemas embarcados e robótica.
15 Comments
Deixe uma pergunta, sugestão ou elogio! Estamos ansiosos para ter ouvir!Cancelar resposta
Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.
Olá me chamo Michael de Salvador! Cara, seu material é muito bom! Agora me diz uma coisa : o aplicativo q vc baixou no cel eu n consegui baixar o mesmo. O arduíno bluetooth serve?
Obrigado pelo tutorial Danilo!
Não consegui fazer o relé funcionar, conecto o celular ao módulo bluetooth mas nada acontece quando mando desligar ou ligar o relé :/
Você pode me ajudar?
Boa noite,
Show de bola esse código mas tem como eu enviar um comando como ligar o relé e checar um sensor de umidade por exemplo? E como seria feito?
Não consegui encontrar o software no APP Store, como faço para instalar no celular???
Ola Danilo tudo bem preciso de umas aulas de arduino em são paulo bairro Jabaquara.
Ótima explicação!
Sou iniciante em Arduíno e gostaria de saber como faço a ligação de um modulo Bluetooth H05 ao Arduíno Uno com uma Ponte H L298N (que servira pra controlar um motor DC). Obrigado!
Opa, que bom que a explicação te ajudou Wesley. Você pode ligar o módulo da mesma forma como o artigo mostra e utilizar os outros pinos para controlar a ponte H. Daí você pode seguir o mesmo esquema mostrado no código para controlar o sentido do motor.
Ola Amigo boa tarde !! sou novo neste tema mas decidi fazer uma pesquisa para apresentar um TCC sobre este modulo HC-05, meu PC tem Bluetooth integrado, gostaria de saber se consigo me comunicar com um dispositivo que se comunica com rs232 com um modulo HC-05 instalado nesta porta
Seria assim
PC ==> transmissão <== HC-05=conexão fisica=| equipamento rs232|
Desde já agradeço
Antonio Sousa
Olá Danilo! Eu comprei um módulo hc-06 e após alimenta-lo com a tensão recomendada (5vcc), não consegui detecta-lo em nenhum dispositivo bluetooth (quando ponho para pesquisar dispositivos próximos, meu celular por exemplo, detecta outros dispositivos menos o módulo hc-06)
Procurei em diversos tutoriais, sobre o assunto, porém todos eles só apontam outros tipos de problemas, mas pelos menos conseguem visualizar o módulo bluetooth para parear.
Gostaria de saber se existe alguma configuração a fazer, para o módulo apenas ser encontrado por outros dispositivos bluetooths. Ou não, este módulo que eu comprei estava com defeito.
Você poderia me ajudar nessa questão, por favor?
Boa tarde, obrigado pelo artigo, foi de suma importância. Porém eu estou fazendo um projeto de tcc, e eu teria que pegar dados da placa mpu6050 usada com o arduino, e enviar via bluetooth para o meu pc, especificamente para a ide netebeans para eu poder trabalhar com esses valores. Você saberia me dizer se isso é possível? Obrigado
O suporte de bluetooth no java pra pc é bastante Restrito David. Eu mesmo quando precisei enviar dados via bluetooth não consegui. Só consegui fazendo em python.
Boa tarde amigo.. Utilizei teu código e funcionou, mas não consigo usar uma palavra com mais de 1 digito para dar o comando..Sabe como posso fazer para usar mais de 1 caracter para acionar o relé?
Olá Ed, neste tutorial como estou lendo apenas um único byte da porta serial você irá apenas receber um único caractere. Uma coisa que você pode fazer para solucionar este problema é utilizar a função String dados = bluetooth.readString(); desta forma você irá ler todo o texto que está escrito no buffer e armazenar dentro da variável.
muito obrigado deu tudo certo, o primeiro que consegui fazer funcionar.
Fico feliz que tenha dado certo :D