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.

11 comentários:

  1. eu vo fazer um projeto que terá 3 módulos Wireless um q vai ficar no computador e os outros dois irão ficar isolados enviando informação para o q esta no computador, queria saber se isso daria certo ou um dos q estão isolados poderia enviar informação para o outro q esta isolado? e se vcs tiverem uma forma de q isso não aconteça ia ajudar muito, desde já abrigado

    ResponderExcluir
  2. È possivel controlar um servo motor de rotação continua (360º ) usando os modulos de 433Mhz e o arduino ou só com os HT 12E ??

    ResponderExcluir
    Respostas
    1. Oi Flavio,

      É possível sim. Você pode usar módulos 433, Bluetooth, Xbee.. são várias opções. :)

      Abraço!

      Excluir
  3. É possível utilizar deste aparato mostrado acima - na função de acionamento de um sistema simples de ar-condicionado (tipo split), no qual o mesmo monitore o funcionamento do aparelho através da informação de que há a necessidade das portas do ambiente estejam fechadas, para que então o sistema de ar entre em funcionamento, do contrário, caso uma das portas do cômodo esteja aberta o arduíno impediria o acionamento do ar-condiconado.

    ResponderExcluir
  4. Que usb é esse desse conversor? Não entendi como conectar no pc, não tem um conversor com usb tipo a macho?
    achei esse aqui: http://www.filipeflop.com/pd-2ba754-cabo-conversor-usb-ttl-pl-2303hx.html?ct=&p=1&s=1

    da algum problema fazer a comunicação com ele?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Usei um conversor FTDI USB-TTL, como esse: http://www.filipeflop.com/pd-14690c-placa-ftdi-ft232rl-conversor-usb-serial.html

      Abraço!

      Adilson

      Excluir
  5. Posso incorporar um gps no módulo externo para que o mesmo envie a posição?

    ResponderExcluir
    Respostas
    1. Oi Adão,

      Pode sim, é perfeitamente possível.

      Abraço!

      Excluir
  6. Boa tarde.

    Conectei conforme, porém quando envio o comando AT ele não responde nada..

    O LED do FTDI acende quando envio o comando, porém nenhuma resposta.. Testei em dois módulos e nada..

    Alguma ideia do que poderia ser?

    ResponderExcluir
  7. Olá,

    Gostei muito do tutorial. Seria possível automatizar um portão que aceita RF 433MHZ com esse modulo?

    Agradeço desde já!

    ResponderExcluir
    Respostas
    1. Oi Alvaro,

      Nunca tentei, mas seria uma boa se funcionasse. Vou pesquisar. :)

      Abraço!

      Adilson

      Excluir