Bluetooth é um método de transmissão de dados sem fio de curta distância. Você deve já ter ouvido falar quando foi conectar seu fone sem fio, ou mesmo conectar seu celular em uma caixa de som. Antigamente (com antigamente eu me refiro aos anos 2000) era um importante método de transmissão de dados entre celulares, mas o Bluetooth é capaz de transmitir muito mais coisa e entre diversos dispositivos diferentes, desde imagens e sons até informações de sensores.
O bluetooth foi lançado em meados dos anos 2000 por uma união de empresas de tecnologia. Seu nome é uma homenagem a um rei dinamarquês do século X, o rei Harald Blatand, mais conhecido como Harald Bluetooth ou Harald Dente Azul. Segundo a lenda, este apelido devia-se ao fato dele possuir na arcada dentária uma incrustação azulada. Essa tecnologia ficou rapidamente difundida por ser um método de comunicação barato, de fácil implementação em dispositivos e de uso simples.
Por ser uma tecnologia sem fio, utiliza uma frequência de 2.4 GHz, a qual é utilizada em muitos países como uma frequência de uso livre. Seu funcionamento é muito parecido com a tecnologia WI-FI, mas enquanto o Wi-fi é focado em transmitir informação entre um dispositivo e um roteador, o Bluetooth foi feito para transmitir entre dispositivos. Também, dispositivos com bluetooth gastam muito menos energia para transmitir dados. Dependendo de sua versão, são utilizados por volta de 1 mW (0,01W). Para efeitos de comparação uma caneta laser (daqueles que o seu gatinho gosta de brincar) gasta entorno de 5mW (0,05W).
Introduzimos o bluetooth, mas se queremos usar ele em nosso projeto, agora que você me pergunta, como faço? Onde encontro?
Seus problemas acabaram, aqui iremos utilizar um módulo bluetooth com Arduino Uno e conectaremos com o seu celular, tanto para receber dados, quanto para enviar.
módulo
Neste projeto iremos utilizar o módulo HC-05, facilmente encontrado no mercado. Suas principais características são:
- Tensão (para sinais de comunicação): 1.8 até 3.6V;
- Bluetooth SPP(Serial Port Protocol);
- Reconexão automática em 30 min caso desconectado;
- Antena integrada;
- Baixo consumo de energia
Pino | Nome do pino | Função |
1 | ENABLE | Este pino é usado para alternar entre o modo de dados (definido baixo) e o modo de comando (AT COMMAND) (definido alto). Por padrão está no modo de dados. |
2 | VCC | Energizar o módulo (positivo, 5V) |
3 | GND | Energizar o módulo (negativo) |
4 | TX | Transmitir os dados |
5 | RX | Receber os dados |
6 | STATE | Pino ligado ao LED da placa, útil para verificar se o módulo está funcionando de forma apropriada |
Controlador ou periférico
Quando falamos de comunicação sem fio, normalmente temos o conceito de “controlador” e “periférico”. Sempre temos que programar nossos módulos para funcionar como controlador ou como periférico, mas quando sei como configurar meu módulo em um destes modos de operação?
Controlador: Quando configurado no modo controlador, o módulo pode se conectar a outros periféricos, podendo procurar e selecionar os dispositivos interessantes. Pode também se conectar a mais de um dispositivo ao mesmo tempo. Porém, para se conectar precisamos saber o endereço e a senha do dispositivo (periférico).
Periférico: O módulo bluetooth trabalhando no modo periférico só pode ser pesquisado pelo host e não pode ser pesquisar outros dispositivos. Depois que o dispositivo estiver conectado ao host (controlador), ele também poderá enviar e receber dados com o dispositivo
Curiosidade
Nos últimos anos tornou-se cada vez mais comum a adoção de terminologias mais inclusivas e que não pudessem ser consideradas politicamente incorretas. Assim, diversas empresas e associações têm alterado a nomenclatura “mestre/escravo” para “controlador/periférico” ou outras equivalentes. Saiba mais neste link.
Configurar o módulo HC-05
Para utilizar o módulo HC-05 precisamos configurar seu modo de operação, para isso utilizamos a linguagem AT, que também é aplicada a uma grande gama de dispositivos ao mesmo tempo (muita calma, não é tão difícil). Com essa linguagem podemos também mudar várias outras configurações do módulo como: nome, senha, velocidade de comunicação, funcionamento e muito mais.
Para programar o módulo, vamos precisar do auxílio de um Arduino Uno. Assim, utilizaremos a IDE Arduino para comunicar com o módulo.
Nesta forma de operação o pino ENABLE foi ligado em sinal alto (5v) para o módulo entrar em modo para configuração. Os dois resistores ligados no pino RX são parte de um divisor de tensão, para diminuir a tensão dos sinais de comunicação de 5V para 3,3V. No exemplo acima foram utilizados dois resistores iguais de 1kΩ, fazendo a tensão cair de 5V para 2,5V, o que também funciona, pois fica na faixa aceitável de 1,8 a 3,6V. Esse divisor de tensão só é necessário para os sinais que saem do Arduino e vão para o módulo; os sinais que vão do módulo para o Arduino não precisam de nenhuma alteração, pois o Arduino consegue “entender” sinais de 3,3V.
Quando ligado, você pode verificar o LED embutido no módulo piscando lentamente.
Importante!!!
Algumas versões do módulo HC-05 só entram no modo de comando (AT) se o botão próximo ao pino “Enable” no módulo estiver sendo pressionado enquanto o módulo é ligado (energizado). Neste caso, a ligação do pino “Enable” ao 5V não é necessária!
Você pode saber se o módulo entrou no modo de comando verificando se o LED da módulo pisca lentamente (uma vez a cada 2 segundos). Caso pisque rapidamente, o módulo não está no modo de comando.
// Comunicação com o módulo Bluetooth HC05
//
// Programa de comunicação com o módulo Bluetooth HC05,
// usado para enviar comandos AT para configuração do
// módulo.
//
// IMPORTANTE: Algumas versões do módulo HC05 só entram no modo
// AT se o botão próximo do pino 'Enable' estiver pressionado
// quando o módulo é ligado.
//
// Também pode ser usado para enviar e receber dados de
// um celular, por exemplo, quando o pino 'Key'
// estiver desconectado.
//
// Criado por: Lucas Jácome Cabral, 2022
#include <SoftwareSerial.h>
SoftwareSerial SerialHC05(10, 11); /* RX pino 10 , TX pino 11 */
///////////////////////////////////////////////
// Esta função só roda uma vez, no início
void setup() {
Serial.begin(115200); // Porta Serial do computador
SerialHC05.begin(38400); // Porta Serial do HC05
// Caso a comunicação com o HC05 não funcione, teste com outras velocidades:
// 9600, 19200, 38400 (padrão), 57600, 115200, 230400 ou 460800
Serial.println("Digite os comandos para o módulo:");
}
///////////////////////////////////////////////
// Esta função se repete indefinidamente
void loop() {
if (SerialHC05.available()) { // Se chegou algum dado do módulo
while (SerialHC05.available()) { // Enquanto tiver dados disponíveis
char c = SerialHC05.read(); // Lê um caractere
Serial.write(c); // Envia o dado na Serial do computador
}
}
if (Serial.available()) { // Se chegou algum dado do computador
delay(10);
String comando = "";
while (Serial.available()) { // Enquanto tiver dados disponíveis
comando += (char)Serial.read();// Lê os caracteres escritos no monitor serial
}
SerialHC05.print(comando); // Envia os dados para o HC05 */
}
}
Você pode encontrar este e outros códigos do blog no link: https://github.com/edlbcamargo/embarcasaude |
Depois de carregado para o Arduino Uno, e com todas as conexões feitas, abra o monitor serial e altere as configurações deste para:
Para saber se a comunicação está funcionando, digite AT e clique em enviar. Caso retorne OK, seu dispositivo e ligações estão ótimas, mas caso retorne ERROR:(X), tivemos algum erro entre as comunicações, sendo “X” sendo um número que significa algum destes erros:
Para configurar como periférico ou Controlador
Periférico:
(Seu módulo já vem configurado como periférico de fábrica, então esta etapa só é necessária se você alterou seu módulo para controlador em algum momento antes)
Comandos para configurar o módulo como periférico, envie um comando por vez.
- AT+ROLE=0 (Para configurar como PERIFÉRICO)
- AT+ADDR (Endereço do módulo, salve este numero para utilizar dois módulos se comunicando)
- AT+UART=38400,0,0 (Configurar velocidade do módulo para 38400 bps, caso queira alterar)
Caso depois de cada um dos comandos seja retornado OK todos os comandos foram enviados com sucesso.
CONTROLADOR:
(Só recomendado se você sabe o que está fazendo… quase sempre você irá utilizar o módulo no modo periférico)
Comandos para configurar o módulo como controlador, envie um comando por vez.
- AT+ROLE=1 (Para configurar como CONTROLADOR)
- AT+CMODE=0 (Para conectar o módulo em um endereço especifico, dado pelo comando BIND)
- AT+BIND=<endereço> (Por exemplo, para se conectar com o periférico no endereço “98d3:31:300e42”, você digitaria “AT+BIND=98d3,31,300e42”. Observe as vírgulas em vez de dois pontos fornecidas pelo módulo periférico)
- AT+UART=38400,0,0 (Configurar velocidade do módulo para 38400 bps)
Caso depois de cada um dos comandos seja retornado OK todos os comandos foram enviados com sucesso.
Existem muitos mais comandos muito úteis para você conhecer e alterar informações importantes. Como são muitos, podem serem vistos neste pdf.
Comunicação entre celular e módulo
Vamos introduzir a utilização do módulo com um projeto simples para envio de informações vindas de um sensor ultrassônico para um smartphone. Primeiramente para utilizar o celular como receptor de dados bluetooth, você terá que usar um app terminal bluetooth, ou até mesmo fazer o seu próprio!
Neste tutorial, iremos utilizar o app disponível neste link para dispositivos Android, basta baixá-lo por enquanto.
ESQUEMA
Utilizando os tópicos anteriores, caso necessário, configure o módulo para o modo periférico antes de iniciar a montagem deste passo.
programação
Como o Arduino utiliza a comunicação serial com o computador para fazer o upload de códigos (RX/TX ligados aos pinos 0 e 1), podemos aproveitar também esta ligação e utilizá-la em nosso módulo bluetooth, e usar diretamente o comando Serial.
// Comunicação com o módulo Bluetooth HC05
//
// Programa de comunicação com o módulo Bluetooth HC05,
// lê a distância de um objeto medida por um sensor
// ultrassônico e envia pelo módulo HC05 para um celular.
//
// Criado por: Lucas Jácome Cabral, 2022
long distancia;
int pinoTrig = 3; // pino usado para disparar os pulsos do sensor
int pinoEcho = 2; // pino usado para ler a saída do sensor
///////////////////////////////////////////////
// Esta função só roda quando é chamada dentro de outra função
void leitura() {
digitalWrite(pinoTrig, HIGH); // Manda um sinal de nível alto por 10 microssegundos
delayMicroseconds(10);
digitalWrite(pinoTrig, LOW);
distancia = pulseIn(pinoEcho, HIGH); // Le o comprimento de onda em alta
distancia = distancia / 2; // Divide por 2 pois esse e o tempo da onda ir e voltar
distancia = distancia * 0.034029; // calcula a distância usando a velocidade do som
}
///////////////////////////////////////////////
// Esta função só roda uma vez, no início
void setup() {
pinMode(pinoTrig, OUTPUT); // configura pino TRIG como saída
pinMode(pinoEcho, INPUT); // configura pino ECHO como entrada
Serial.begin(38400); // Velocidade da comunicação com o módulo HC05 (ou monitor serial)
}
///////////////////////////////////////////////
// Esta função se repete indefinidamente
void loop() {
leitura(); // executa a leitura do sensor de ultrassom
Serial.print("VALOR DO SENSOR:"); //envia para o módulo via serial
Serial.println(distancia); // envia para o módulo via serial
delay(2000); //espera 2 segundos
}
app
Faça uma busca pelos dispositivos bluetooth perto de você, nas configurações de seu dispositivo. Quando terminada, algum deles pode ter o nome “HC-05” ou um código hexadecimal muito diferente dos outros. Clique neste dispositivo e insira a senha, por padrão a senha pode ser “0000” ou “1234”. Caso não conecte, talvez seu vizinho esteja fazendo este projeto junto com você 😉
Depois de baixado, abra o APP em sua pagina principal e clique no botão listrado e logo depois em “devices“.
Na aba devices, selecione o seu modulo:
O dispositivo logo irá se conectar e o terminal irá aparecer. Se tudo foi feito certo, as informações do sensor logo irão aparecer:
A cada dois segundos o sensor fará uma leitura da distância e irá enviá-la via bluetooth para seu celular.
Texto por: Lucas Jácome Cabral
Revisão: Erick León