29 novembro 2016

Comunicação sem fio com módulo wireless HC-12 e Arduino

O módulo wireless HC-12 é um módulo que promete comunicação em distâncias de até 1000m, e funciona por interface serial na conexão com um microcontrolador, PC, sistemas embarcados, etc. É mais uma boa opção para conexão wireless se você procura um módulo fácil de usar e que se conecta aos mais variados tipos de dispositivos.

Como usar o módulo Wireless HC-12 com Arduino


O módulo wireless HC-12 usa radiofrequência para comunicação, trabalhando na faixa de 433.4 à 473MHz. Essa faixa de frequência você pode configurar utilizando comandos AT, e você também pode alterar outros parâmetros, como a potência de transmissão do módulo (máximo de 100mW).

O módulo wireless HC-12


O HC-12 lembra um pouco os módulos bluetooth HC-05 e HC-06, pois trabalha com comunicação serial com o microcontrolador, ou seja, você precisa de apenas 2 pinos para ligação do RX e TX do módulo.

Módulo HC-12 Detalhes

Na imagem acima podemos ver que temos, a princípio, duas formas de ligar uma antena nesse módulo, já que ele não conta com antena embutida. A primeira é soldar uma antena tipo "mola" na placa (essa antena já vem com o módulo), e a outra é utilizar uma antena externa no conector U.FL.

No HC-12 também temos um pino para que o módulo entre em modo de comando AT (pino SET), que é ativado em nível baixo. Com isso, você configura os parâmetros do módulo por meio de comandos AT, como veremos a seguir.

Configurando o módulo wireless HC-12 por comandos AT


E pra que você precisa configurar o módulo HC-12? Bom, como eu falei anteriormente, o módulo HC-12 trabalha com frequências entre 433.4 e 473MHz, e se você quer fazer dois (ou mais) módulos se comunicarem, eles precisam estar na mesma frequência.

Para realizar a configuração do módulo, vamos utilizar um conversor USB-TTL FTDI RS232, mas você pode, se preferir, usar também um Arduino para fazer esse processo. Na montagem do circuito abaixo eu não usei a alimentação de 5V do módulo FTDI porque a corrente não foi suficiente para alimentar o HC-12, então optei por alimentação externa. 

Observe que o pino SET do módulo está ligado ao GND, o que indica que o HC-12 deve entrar em modo de comando AT:

Conexão HC-12 e módulo FTDI


Após a montagem, abra um programa de terminal como por exemplo o Termite (download), configure a velocidade padrão do módulo, que é 9600 bps,  e teste a comunicação usando o comando AT. O módulo deve responder com um "OK", conforme imagem abaixo, onde eu também usei o comando AT+C100 para alterar a frequência de comunicação do módulo:

Termite acessando o HC-12

Agora você pode usar os outros comandos para alterar a velocidade de comunicação, frequência e outros parâmetros do módulo:
  • AT - Instrução de teste. Retorna "OK"
  • AT+Bxxxx - Altera a velocidade da porta serial, onde xxxx é a velocidade desejada: 1200bps, 2400bps, 4800bps, 9600bps, 19200bps, 38400bps, 57600bps e 115200bps. A velocidade padrão do módulo é 9600bps. Após o comando, o módulo retorna com a mensagem "OK+Bxxxx"
  • AT+Cxxx - Altera o canal de comunicação wireless, onde xxx aceita valores entre 001 e 127. O valor padrão é 001, operando na frequência de 433.4MHz. Após o comando, o módulo retorna com a mensagem "OK+Cxxx"
  • AT+Px - Altera a potência de transmissão do módulo, onde x pode assumir valores de 1 à 8: 1 (-1 dBm), 2 (2 dBm), 3 (5 dBm), 4 (8 dBm), 5 (11 dBm), 6 (14 dBm), 7 (17 dBm) e 8 (20 dBm). Após o comando, o módulo retorna com a mensagem "OK+Px"

Usamos então os comandos AT acima para configurar dois módulos na mesma frequência, e realizar um teste de comunicação entre o computador e o Arduino.

Comunicação PC x Arduino usando HC-12


Nesse teste vamos usar dois módulos wireless HC-12, configurados da mesma maneira (velocidade de 9600 e frequência de 433.4 MHz).

O primeiro módulo continuará ligado no computador, que será de onde vamos enviar os comandos para acionar as portas do Arduino. Não esqueça de desligar o GND do pino SET, para que o módulo saia do modo de comandos AT.

O segundo módulo será ligado ao Arduino, nos pinos 10 e 11, onde vamos criar uma serial (RX e TX) por software usando a biblioteca SoftwareSerial do Arduino. 

Circuito Arduino Uno e módulo wireless HC-12

Nos pinos 5, 6 e 7 temos 3 leds que vão acender conforme os comandos enviados do computador.

Depois de montar o circuito, carregue o seguinte programa no Arduino:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//Programa : Modulo Wireless HC-12 e Arduino
//Autor : Arduino e Cia

//Armazena o caracter recebido
char buf;

#include <SoftwareSerial.h>

//Define os pinos para conexao serial do modulo wireless HC-12
SoftwareSerial mySerial(10, 11); // RX, TX

//Define os pinos dos leds
int pinoled_verm = 5;
int pinoled_verd = 6;
int pinoled_azul = 7;

//Armazena o estado dos pinos
int estadoled_verm = 0;
int estadoled_verd = 0;
int estadoled_azul = 0;

void setup()
{
  mySerial.begin(9600);
  //Define os pinos dos leds como saida
  pinMode(pinoled_verm, OUTPUT);
  pinMode(pinoled_verd, OUTPUT);
  pinMode(pinoled_azul, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  while (mySerial.available() > 0)
  {
    buf = mySerial.read();
    //Led vermelho
    if (buf == '1')
    {
      //Inverte o estado do led (HIGH/LOW)
      estadoled_verm = !estadoled_verm;
      //Aciona a porta do led
      digitalWrite(pinoled_verm, estadoled_verm);
      //Responde com msg sobre o estado do led
      mySerial.println("Estado do led vermelho alterado!");
    }
    //Led verde
    if (buf == '2')
    {
      estadoled_verd = !estadoled_verd;
      digitalWrite(pinoled_verd, estadoled_verd);
      mySerial.println("Estado do led verde alterado!");
    }
    //Led azul
    if (buf == '3')
    {
      estadoled_azul = !estadoled_azul;
      digitalWrite(pinoled_azul, estadoled_azul);
      mySerial.println("Estado do led azul alterado!");
    }
  }
}

O programa usa a biblioteca SoftwareSerial para emular uma porta serial nos pinos 10 e 11 do Arduino, e aguarda os valores 1, 2 ou 3 para acender os leds dos pinos 5, 6 e 7 respectivamente. 

Testando a comunicação com o HC-12


Para testar a comunicação, alimente o Arduino Uno com uma fonte externa para isolar completamente a placa do computador, e abra uma janela do Termite para realizar a comunicação com o módulo wireless HC-12 ligado ao módulo FTDI. Em seguida, envie os valores 1, 2 ou 3 para acender os leds:

Termite e HC-12 Teste de comunicação

Observe quer conforme os comandos são enviados para o Arduino, este envia uma resposta também pela serial, indicando que os comandos foram recebidos com sucesso.

E antes de finalizar este post, gostaria de compartilhar um programa interessante (créditos The Back Shed) para configuração do módulo wireless HC-12. Com ele você pode ler as informações de configuração do módulo e também alterar os parâmetros que desejar. Tudo isso sem precisar digitar comandos AT:

HC-12 Configuration Utility

O download do HC-12 Configuration Utility pode ser feito neste link.

Nenhum comentário:

Postar um comentário