12 agosto 2018

Como programar o módulo RF APC220 com Arduino

O módulo rádio wireless APC220 é um excelente módulo RF que já tem alguns anos de estrada e ainda não tinha aparecido aqui no blog. Tive a oportunidade de usá-lo algumas vezes e recentemente percebi a dificuldade de algumas pessoas em configurar esse módulo usando o RF-Magic, um programa que não é atualizado a um bom tempo e (até onde eu sei) só existe para Windows. Resolvi então escrever este tutorial mostrando como programar o módulo APC220 usando Arduino.

Comunicação Módulo wireless APC220 e Arduino

O procedimento abaixo será bastante útil se você tem problemas com a instalação e/ou configuração do RF-Magic.

O módulo rádio wireless APC220


O módulo rádio wireless APC220 é geralmente encontrado em um kit que contém dois módulos e um adaptador USB para que você possa configurar a placa usando o RF-Magic, que já comentamos anteriormente.

Módulo Wireless APC220 e adaptador USB

O APC220 tem um alcance máximo de 1KM em área aberta, e suporta frequências entre 418 e 455MHz, o que permite que você configure o módulo de acordo com as suas necessidades sem interferir na comunicação de outros equipamentos. A comunicação com o computador e/ou microcontrolador é feita pela interface serial (pinos RX e TX) e a alimentação vai de 3.5 à 5.5VDC.

O módulo vem com antena e, uma vez configurada a velocidade da porta serial, frequência de comunicação e demais parâmetros, já pode ser utilizado para conectar os mais variados dispositivos.

Não vou me estender aqui na configuração do RF-Magic (download), pois todas as informações sobre isso você pode encontrar neste post que fiz para o blog FilipeFlop, mas basicamente ele é um software para Windows que você usa para configurar o módulo usando uma interface gráfica, mostrada abaixo:

RF-Magic APC220 Windows

Assim, se você não consegue usar o RF-Magic no seu equipamento, seja porque o software não roda, você não usa Windows ou simplesmente não gosta do RF-Magic, confira o procedimento abaixo que mostra em poucos passos como configurar o APC220 usando Arduino.

Conexão do módulo APC220 no Arduino


Use o circuito abaixo para conectar o APC220 no seu Arduino Uno (como sempre, podem ser utilizadas outras placas da linha Arduino). Vamos utilizar a biblioteca SoftwareSerial para comunicação, deixando os pinos da serial por hardware livres para acompanharmos o processo pelo serial monitor da IDE do Arduino:

Circuito Arduino e módulo APC220

O circuito não tem muito segredo. Usamos os pinos 6 e 7 do Arduino para comunicação RX/TX com o módulo e o pino 5 para trabalhar com o pino SET, responsável por colocar o APC220 em modo de configuração ou modo de operação.

Configurando o módulo usando IDE Arduino


No programa abaixo, vamos usar apenas a biblioteca SoftwareSerial, já presente na IDE do Arduino.

A linha 18 é a parte do programa que realiza a gravação dos parâmetros que desejamos para o nosso módulo. Observe que temos cinco valores nessa linha, após o "WR". São eles:

  • 435000 - Esta é a frequência na qual o módulo vai se comunicar. Colocamos a frequência em KHz. Logo, se desejamos a frequência de 435MHz, colocamos como parâmetro 435000
  • 3 - Define a velocidade de comunicação do módulo (não confundir com a velocidade da serial). Aceita os valores 1 (para 2400 bps), 2 (4800 bps), 3 (9600 bps) e 4 (19200 bps)
  • 9 - Define a potência de transmissão e tem o valor entre 0 e 9, sendo que o 9 representa a potência máxima: 13dBm (20mW)
  • 3 - Essa sim é a velocidade de comunicação serial. Aceita os valores 0 (1200 bps), 1 (2400 bps), 2 (4800 bps), 3 (9600 bps), 4 (19200 bps), 5 (38400 bps) e 6 (57600 bps)
  • 0 - Paridade da serial, aceitando valores 0 (sem paridade), 1 (paridade par) ou 2 (paridade impar)

O programa escreve então esses parâmetros no módulo e em seguida realiza uma leitura para que você confira no Serial Monitor se a gravação foi feita corretamente.

 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
//Programa: Configuracao modulo wireless APC220 com Arduino
//Autor: Arduino e Cia

#include <SoftwareSerial.h>

const int pinoRX = 6;
const int pinoTX = 7;
const int pinoSET = 5;

SoftwareSerial apc220(pinoRX, pinoTX);

void setSettings(void)
{
  //Coloca o pino SET em low e habilita o modo config do APC220
  digitalWrite(pinoSET, LOW);
  delay(10);
  //Escreve os parametro no modulo
  apc220.println("WR 435000 3 9 3 0");
  delay(10);
}

void getSettings(void)
{
  //Rotina de leitura dos parametros
  digitalWrite(pinoSET, LOW);
  delay(10);
  apc220.println("RD");
  delay(10);
  while (apc220.available())
  {
    Serial.write(apc220.read());
  }
  digitalWrite(pinoSET, HIGH);
  delay(200);
}

void setup()
{
  Serial.begin(9600);
  pinMode(pinoSET, HIGH);
  apc220.begin(9600);
}

void loop()
{
  Serial.println("Gravando as configuracoes no modulo APC220...");
  setSettings();
  delay(1000);
  Serial.println("\nConfiguracao finalizada. Lendo os parametros...");
  getSettings();
  Serial.println("\nModulo configurado!");
  delay(100000);
}

Use o programa acima para configurar os dois módulos da mesma maneira, pois agora chegou a hora de testar a comunicação e verificar se tudo está funcionando corretamente.

Testando a comunicação com módulo APC220


Vamos testar a comunicação dos dois módulos APC220 que configuramos com um deles ligado ao computador usando o adaptador USB e o outro conectado no Arduino Uno conforme o esquema abaixo, que é o mesmo usado anteriormente e onde adicionamos um led conectado na porta 3.

APC220 com Arduino - Recepção

Carregue o programa abaixo:

 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
//Programa: Comunicação modulo APC220 com Arduino
//Autor: Arduino e Cia

#include <SoftwareSerial.h>

int porta_led = 3;
int pino_set = 5;
int pino_rx = 6;
int pino_tx = 7;

//Armazena o caracter recebido
char buf;

SoftwareSerial apc220(pino_rx, pino_tx);

//Variaveis para controle do estado dos leds
int estado_led = 0;

void setup()
{
  //Inicializa a serial
  Serial.begin(9600);
  //Inicializa a serial do modulo APC220
  pinMode(pino_set, HIGH);
  apc220.begin(9600);
  delay(10);
  pinMode(pino_set, LOW);
  delay(100);
  //Define porta do led como saida
  pinMode(porta_led, OUTPUT);
  //Informacoes iniciais
  apc220.println("Envie o numero 1 para ligar/desligar o led!");
  apc220.println();
}

void loop()
{
  //Aguarda os dados na serial
  while (apc220.available() > 0)
  {
    buf = apc220.read();
    //Caso seja recebido o numero 1, altera o estado do led
    if (buf == '1')
    {
      estado_led = !estado_led;
      digitalWrite(porta_led, estado_led);
      apc220.print("Recebido! Led ");
      if (estado_led == 1)
      {
        apc220.println(" ligado");
      }
      else
      {
        apc220.println(" desligado");
      }
    }
  }
}

O led conectado na placa vai acender ou apagar quando enviarmos o número 1 à partir do computador. Para isso, use um programa de comunicação serial como o Termite (download), com a porta serial configurada para o adaptador USB (no nosso caso, porta COM8):

Termite enviando e recebendo dados pelo APC220

Reinicie o Arduino para que as primeiras informações sejam enviadas pelo módulo e mostradas no Termite. Em seguida, digite 1 na parte de baixo do programa e pressione ENTER para controlar a porta 3 do Arduino remotamente. Repare que assim que o dado é recebido pelo Arduino, uma resposta é enviada mostrando se o led está ligado ou desligado.

4 comentários: