Escolha uma Página

Umidade-Temperatura-Presença no Smartphone com Módulo Bluetooth HC05

12 dez - 2018

Imagine que o seu desafio é medir a umidade relativa do ar e a temperatura no ambiente de uma sala e que, além disso, você precisa informar se existe ou não um corpo (pessoa ou animal) presente nesse local. Para tornar o desafio ainda mais interessante, foi estabelecido que você deve ter essas informações disponíveis no seu smartphone.

Parece interessante! O projeto que vamos apresentar nesse artigo faz exatamente todas essas coisas! Portanto, vamos em frente.

Naturalmente, vamos usar projetos apresentados em outros artigos que, certamente, serão de grande ajuda. Para elaborar o medidor de umidade e de temperatura usaremos o sensor DHT11 e a informação contida no artigo “Termo Higrômetro com Arduino”. Por sua vez, para detectar a presença de um corpo usaremos como base o artigo “Detector de Presença com Sensor PIR HC-SR501”. Se você leitor está tendo contato com o Blog da Módulo Eletrônica pela primeira vez, recomendo clicar nos links e ler os artigos mencionados.

A parte que falta no projeto é a conexão do smartphone com o Arduino e isso será feito usando um módulo Bluetooth HC-05.

Sobre o Bluetooth

O protocolo Bluetooth é um padrão usado para enviar e receber dados através de um link sem fio de 2,4 GHz estabelecido entre dispositivos eletrônicos.

O Bluetooth já é amplamente utilizado e permite que computadores, smartphones, tablets e afins troquem dados entre si e se conectem a mouses, teclados, fones de ouvido, impressoras, caixas de som e outros dispositivos. Para usar a comunicação Bluetooth no Arduino existem módulos específicos para tal finalidade como, por exemplo, o HC-05, que será adotado nesse projeto.

Antes de se conectar a um dispositivo Bluetooth é necessário parear o smartphone (o tablet e outros) com este dispositivo. Parear significa juntar-se em par, verificando a compatibilidade entre os conjuntos de dados de cada dispositivo. Depois do pareamento os dispositivos poderão se conectar um ao outro automaticamente.

Uma rede Bluetooth é uma rede pessoal chamada de PAN (Personal Area Network), que funciona de modo semelhante a um barramento para extensão de portas de um dispositivo, como o USB (Universal Serial Bus) encontrado nos computadores PC.  Dessa forma, o Bluetooth poderia ser comparado a um USB sem fio, no qual um dispositivo mestre (PC no caso do USB) se comunica com seus periféricos. A diferença é que no Bluettoth qualquer dispositivo pode assumir o papel de mestre e montar a sua rede de periféricos denominada de piconet. Em uma piconet toda comunicação ocorre entre mestre e escravos. Não existe comunicação direta entre escravos em uma piconet. No modo mestre, o dispositivo Mestre se conecta a outros dispositivos Escravos. Por sua vez, no modo escravo, o dispositivo Escravo aceita a conexão de outros dispositivos Mestre.

Módulo HC-05

O HC-05 é um módulo Bluetooth SPP (Serial Port Protocol) de fácil utilização que trabalha tanto no modo Mestre como no modo Escravo. A base desse módulo é o CI BC417 da empresa CSR (Cambridge Silicon Radio), responsável pela interface de radio e que necessita de uma memória externa como a flash de 8 Mbits, o outro CI do módulo HC-05.

Alimentação: de 4 à 6 Volts (típico 5 V).

Método de comunicação: Comunicação serial.

Versão de Bluetooth: 2.0 + EDR (Enhanced Data Rate).

Modos de operação: Mestre e Escravo.

Taxas de transmissão em que pode operar: 9600, 19200, 38400, 57600, 115200, 230400 e 460800 bps.

Taxa de transmissão default: 9600 bps.

Pin code default: 0000 ou 1234.

Modos de operação: Data Mode e Command Mode

Modo default: Data Mode.

Configuração default: Escravo

Nome default: HC-05

Firmware default: LINVOR

Os pinos RX e TX utilizam sinais de 3.3V para se comunicar.

Alcance: aproximadamente 10 metros.

Potência máxima: 10 mW.

(Default significa o padrão pré-definido de fábrica).

Figura 1: Módulo HC-05

Pinos do HC-05: RX, TX, GND, +5V, EN (KEY) e STATE (LED).

RX: Recepção do HC-05. Deve ser conectado ao pino de transmissão do Arduino (Nível lógico alto = 3,3 V).

TX: Transmissão do HC-05. Deve ser conectado ao pino de recepção do Arduino (Nível lógico alto = 3,3 V).

GND: Referência de terra.

+ 5 Vcc: Alimentação do HC-05

EN (KEY): EN ou Enable, em algumas placas chamado de KEY. Em nível baixo (0 V) ou não contectado (no ar), o HC-05 está em Data Mode, chamado de modo de pareamento que coloca o HC-05 como Escravo. Em nível alto (3,3 V), o HC-05 está em Command Mode, também chamado de modo AT.

STATE (LED):STATE é relacionado ao status de funcionamento do módulo, em algumas placas chamado de LED. Ligado ao Led do HC-05 para indicar o status do módulo. Pode ser usado como feedback que indica como o módulo está operando.

No modo AT, ou Command Mode, será possível configurar um módulo HC-05 como mestre ou como escravo, através de comandos AT, modificando os parâmetros “default”.

LED de status na placa do HC-05:

Piscando uma vez a cada 2 segundos – módulo entrou em Command Mode

Piscando rapidamente – aguardando por conexão em Data Mode

Piscando 2 vezes por segundo – conexão bem sucedida em Data Mode

Botão da placa do HC-05: Usado para controlar o pino EN (KEY) para alternar entre Data Mode e Command Mode.

Os pinos TX e RX do HC-05 utilizam sinais de 3,3 V e isso nos leva ao seguinte: O TX do HC05 poderá ser ligado diretamente ao RX do Arduino, pois o microcontrolador conseguirá reconhecer esses níveis lógicos corretamente. Todavia, para ligar o TX do Arduino ao RX do HC-05 será necessário utilizar um divisor de tensão para obter o nível de sinal de 3.3 V a partir da saída de 5V do TX do Arduino. Esse pequeno arranjo pode ser visto na figura 2.

Figura 2: Divisor de Tensão p/ compatibilizar TX-Arduino com RX-HC-05.

Usando resistores de 1K Ohms em R1 e 2K Ohms, para um sinal de entrada de 5 Volts, a tensão de saída Vo será igual a 3,33 V.

Vo = (2000 x 5)/(1000 + 2000) = 10.000 / 3.000 = 3,33 Volts

Para o HC-05 funcionar o valor de Vo não necessita ser exatamente 3,3 V, podendo ser um valor próximo. Na minha montagem usei resistores de 1K Ohms para R1 e 1K5 Ohms para R2, pois não tinha disponível naquele momento o valor de 2K Ohms. Isso me levou ao resultado de Vo igual a 3 Volts e o circuito funcionou perfeitamente.

Vo = (1500 x 5) / (1000 + 1500) = 7.500 / 2.500 = 3 Volts

Em nosso projeto, os componentes serão ligados da seguinte forma:

PIR HC-SR501: Vcc no Vcc do Arduino, GND no GND do Arduino e a saída no pino digital 9 do Arduino.

Led: O anodo do Led é ligado ao pino digital 8 do Arduino.

DHT11: Vcc no Vcc do Arduino, GND no GND do Arduino e a saída no pino analógico A5 do Arduino.

HC-05: Vcc no Vcc do Arduino, GND no GND do Arduino, TX do HC-05 no RX do Arduino e RX do HC05 no divisor resistivo e deste para o TX do Arduino.

Figura 3: Montagem do projeto no protoboard para carregamento do sketch

Para carregar o sketch monte cuidadosamente o seu projeto, deixando DESLIGADO a alimentação do módulo HC-05, como apresentado na figura 3. Afinal de contas, a comunicação serial do computador PC com a Arduino e a comunicação serial do Arduino com o modulo HC-05 usa a mesma interface serial, nos pinos 0 e 1 do Arduino.

Figura 4: Montagem do projeto em funcionamento normal

Uma vez carregado o sketch desligue o cabo USB e ligue a alimentação do módulo HC-05. O circuito deve operar com uma fonte de alimentação externa, como apresentado na figura 4.

O sketch do projeto encontra-se no final desse artigo. Entenda o funcionamento desse sketch acompanhando as observações abaixo.

Em primeiro lugar, para tratar o componente DHT11, o sketch utiliza a biblioteca <DHTLib.h> que é inclusa na primeira linha do código. Em seguida, um objeto dht é declarado através de dht DHT, e definido que o pino de saída do DHT11 está ligado ao pino analógico A5 do Arduino. Essa parte inicial do sketch ainda estabelece que o sensor PIR está conectado ao pino 9 do Arduino e o Led está conectado ao pino 8 do Arduino. Além disso, a variável inteira LeituraPIR é declarada com valor inicial igual a zero.

Na parte do setup() a comunicação serial é iniciada com 9600 bps, o pino do PIR é definido como entrada e o pino do Led é definido como saída.

No loop() as funções LeDHT() e LePIR() são chamadas para execução. Essas funções estão na parte final do sketch.

A função LeDHT() faz a leitura do pino de saída do DHT e disponibiliza na interface serial os valores de temperatura e umidade relativa do ar. Lembrar que o computador PC não está ligado ao Arduino e, portanto, isso não será mostrado na tela do PC. Entretanto, esses valores estão sendo transmitidos na interface serial e poderão ser lidos pelo smartphone. Note que não há instruções específicas no sketch para o envio de dados da interface serial para o smartphone e isso será feito através de um aplicativo carregado no smartphone, como veremos mais adiante.

A função LePIR() faz a leitura do pino de saída do sensor PIR e interroga se esse valor está em nível lógico alto. O valor da variável LeituraPIR é disponibilizado na interface serial do Arduino e, como na função anterior, poderá ser lido pelo smartphone. Se a variável LeituraPIR é igual a 1, o Led será aceso – digitalWrite(Led, HIGH). E, por outro lado, se a variável LeituraPIR é igual a 0, o Led será apagado – digitalWrite(Led, LOW).

Dito isso, o próximo passo é entender como os dados na interface serial do Arduino serão lidos pelo smartphone. É aí que entra o Bluetooth!

Conectando via Bluetooth

Será necessário carregar um aplicativo no smartphone para fazer a conexão deste com o Arduino através do módulo HC-05. Como meu smartphone é um Android, escolhi o aplicativo Bluetooth SPP que é gratuito e pode ser facilmente localizado no Google Play. Para mais informações sobre esse aplicativo, o autor do mesmo pode ser encontrado através dos seguintes endereços:

carlos.quispe.359@gmail.com    …. Carlos359_7@hotmail.com e WhatsApp + 51991915652 ….. Lima – Peru – 2018.

Depois de baixar o aplicativo no seu smartphone e com o projeto ligado na fonte externa, abra a tela do seu smartphone na opção de ativação do Bluetooth.

Figura 5: Parear novo dispositivo no smartphone Android

Selecione a opção “Parear novo dispositivo” e verá o HC-05 na tela do smartphone. Escolha a senha 1234 para parear.

Figura 6: Senha para parear HC-05

Entre no aplicativo Bluetooth SPP e selecione a opção com símbolo do Bluetooth (figura 7) para fazer a conexão do HC-05 (já pareado) com o smartphone.

Figura 7: Fazendo a conexão do smartphone com o HC-05

Depois disso, selecione a opção Modo Terminal do aplicativo Bluetooth SPP e veja na tela do smartphone os valores medidos da umidade relativa do ar e da temperatura, além do valor do sensor PIR. Este último quando é igual a 0 indica presença não detectada, e quando é igual a 1 indica presença detectada.

Figura 8: Umidade relativa do ar, temperatura e valor do sensor PIR na tela do smartphone

No Modo Terminal, os dados presentes na interface serial do Arduino serão mostrados na tela do smartphone.

O aplicativo Bluetooth SPP ainda possui mais dois modos de operação: Modo Control e Modo On-Off, que permitem fazer acionamentos no smartphone para controlar elementos como, por exemplo, Leds, relés e motores ligados ao Arduino. Esse assunto será tema de nossos próximos artigos.

Se você tem alguma dúvida sobre qualquer parte desse artigo, nos envie suas perguntas. Continua nos seguindo no blog. É isso aí, até a próxima!

**********

Veja o sketch que faz tudo isso funcionar!

**********


#include &lt;dht.h&gt;
// Usa a biblioteca &lt;DHTLib.h&gt;
dht DHT; // Declara um objeto dht
#define PINOdoDHT11 A5 // DHT11 ligado ao pino A5

int PIR = 9;   //Sensor PIR ligado no pino digital 9 
int Led = 8;   // Led ligado no pino digital 8
int LeituraPIR = 0; //Declara variavel inteira LeituraPIR

 
void setup() {
  Serial.begin(9600); // Inicia a serial com 9600 bps
  pinMode(PIR,INPUT); // Pino PIR é entrada
  pinMode(Led,OUTPUT); // Pino Led é saida
}
 
void loop()  {
  
  LeDHT(); // Chama funcao LeDHT()
  LePIR(); // Chama funcao LePIR()
  delay (100);
}

void LeDHT() {
  // Inicia leitura no DHT11 no pino A5
  int leituras = DHT.read11(PINOdoDHT11);
  // Escreve na serial "Temperatura ="
  Serial.print("Temperatura = ");
  // Exibe temperatura em graus Celsius
  // Na interface serial do Arduino
  Serial.println(DHT.temperature);
  // Escreve na serial "Umidade ="
  Serial.print("Umidade = ");
  // Exibe a umidade em %
  // Na interdave serial do Arduino
  Serial.println(DHT.humidity);
  delay(2000); // Espera 2 segundos
}
void LePIR() {
  LeituraPIR = digitalRead(PIR);
 // Mostra leitura do PIR na serial 
  Serial.print("Valor do Sensor PIR: ");  
  Serial.println(LeituraPIR);

  if (LeituraPIR == 1) {
 digitalWrite(Led, HIGH);
 } else { 
 digitalWrite(Led, LOW);
 }
}


 
Haroldo Mamede Coutinho Simões

Haroldo Mamede Coutinho Simões

Engenheiro de telecomunicações e pós-graduado em gerenciamento de negócios, tendo trabalhado em empresas de médio e grande porte por mais de 30 anos, atuando em diferentes projetos e departamentos. É instrutor de treinamento, tendo ministrado workshops em várias empresas, professor universitário em cursos MBA presenciais e tutor de cursos à distância. É apaixonado por tecnologia, especialmente pela plataforma Arduino e tudo de positivo que ela pode fazer pelas pessoas quando dela se aproximam.

0 comentários

Enviar um comentário

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

Facebook

VEJA TAMBÉM

Regador automático de plantas com Arduino

Aprenda neste artigo, como automatizar a rega de suas plantas, utilizando o Arduino NANO. Este projeto, além do baixo custo, pode ser montado em menos de uma hora e irá garantir que as suas plantas sempre tenham água disponível, garantido um crescimento adequado e...

Fita de LEDs RGB endereçáveis WS2812B e a biblioteca fastLED

No post de hoje, vamos conhecer a fita de LEDs WS2812B endereçáveis e como utilizá-la com o Arduino UNO.  Essa fita de LEDs se destaca, em relação as outras do mercado, pelo fato de que seus LEDs podem ser controlados de maneira individual, permitindo que o...

NEWSLETTER

Assine nossa newsletter e receba as novidades.

ATENDIMENTO

(19) 3579-7189