Sobre o módulo
O módulo APC220 é um modulo de RF de baixo consumo de energia e fácil
configuração para utilização em projetos que necessitam de comunicação
sem fio alternativa às tradicionais. Utiliza frequências nas faixa dos
418 Mhz a 455 Mhz para comunicações em distância superior às frequências
de 2.4 Ghz e 5.8 Ghz.
Geralmente frequências mais baixas conseguem penetrar em ambientes com
um maior número de obstruções porém estão mais suscetíveis a
interferências.
A programação do módulo é feita por software através de um dispositivo
USB que acompanha o módulo sendo possível selecionar Frequência, Taxa de
Transferência RF, Potência de Transmissão e configurações da rede.
É possível a utilização em projetos que necessitam de controle remoto
para Drones, Roovers, Robos, etc. Funciona conectado diretamente a um PC
ou à dispositivos de IoT. Possuem uma antena removível que pode ser
substituída por uma de maior ganho adequada à frequência
utilizada.
Realizamos alguns testes de transmissão e de distância com alguns
módulos. Os resultados podem ser encontrados abaixo junto com os códigos
utilizados.
Especificações
- Frequência de funcionamento: 418 MHz a 455 MHz
- Voltagem: 3.5-5.5V
- Consumo de corrente: <25-35mA
- Temperatura de funcionamento: -20℃~+70℃
- Alcance: 1200m em linha aberta (1200 bps)
- Interface: UART/TTL
- Taxa de transferência (Serial): 1200-19200 bps
- Taxa de transferência (Ar): 1200-19200 bps
- Potência máxima de transmissão> 20mW
- Buffer de recebimento: 256 bytes
- Tamanho: 37mm × 17 mm × 6.6mm
- Peso: 30g
Pinagem
Os pinos necessários para funcionamento são apenas VCC, GND, RXD e
TXD. Os demais são utilizado apenas no modo de programação.
A alimentação pode ser desde 3.3V até 5.5V. Nós testes que realizamos
conseguimos uma melhor performance alimentando o módulo com 5V.
Mesma com alimentação em 5V a voltagem do pino TXD se mantém em 3.3V o
que torna possível a utilização do módulo com ESP8266
|
Experimentos
Experimento 1
Realizamos um teste inicial utilizando para isso um Arduino Uno como
transmissor e um ESP8266(ESP-01) como receptor ambos montados em
protoboard. O teste foi realizado em ambiente urbano e com linha de
visão entre ambos os módulos.
O teste funciona da seguinte maneira:
- O emissor escreve a cada 1 segundo uma string "LHC#" na serial do
módulo emissor pré configurado em frequência e identificação de
rede.
- O receptor aguarda o recebimento de dados na porta serial e trata
esses dados todas as vezes que é recebido o caracter #
equivalente a uma quebra de linha.
- Um led vermelho pisca no receptor enquanto não são
recebidos os dados esperados, ou seja a string "LHC#",
ou quando os dados recebidos são diferentes do esperado.
- Quando a string esperada é recebida o receptor para de piscar o led
vermelho e ascende o led verde por 1 segundo e volta a
piscar o led vermelho até receber novamente a string esperada.
- Desta forma é possível identificar mesmo sem um display todas as vezes
que uma comunicação esperada foi recebida corretamente pelo módulo
receptor.
No teste que realizamos posicionamos o módulo emissor em frente ao LHC e
começamos a andar em linha reta. No início o led verde do receptor
piscava com bastante frequência. Conforme nos afastamos cerca de 100
metros o led verde ainda piscava porem foi necessário realizar algumas
paradas pois enquanto em movimento a recepção pareceu mais
prejudicada.
Continuamos andando até uma distância de cerca de 200 metros aonde não
foi mais possível verificar o led verde piscando indicando que os dados
não estavam mais sendo recebidos.
Conclusão: é possível que a distância alcançada tenha sido
limitada por alguns fatoes principais:
- 1: A taxa de transferência(baud rate) configurada foi de 9600 bps o
que pode limitar o alcance.
- 2: As antenas utilizadas são as que acompanham o produto e de tamanho
reduzido, tamanho esse que talvez não seja ideal para a frequência de
trabalho.
- 3: O ambiente urbano pode causar mais interferências devido a outros
aparelhos que operam na mesma frequência.
Experimento 2
Neste experimento iremos realizar a redução da taxa de transferência
pelo ar para 1200bps e verificar se a distância de transmissão será
maior.
Planejamos também conectar um display de LCD no receptor para acompanhar
o recebimento dos dados em tempo real.
Códigos
Emissor: ArduinoMegaAPC220-TX.ino
// Base TX Arduino Mega
//Variavel que armazena os caracteres recebidos
char buf;
//Definicoes das portas dos leds
int porta_led_verm = 8;
int porta_led_amar = 9;
//Variaveis para controle do estado dos leds
int estado_verm = 0;
int estado_amar = 0;
void setup(){
pinMode(porta_led_verm, OUTPUT);
pinMode(porta_led_amar, OUTPUT);
Serial.begin(9600);
Serial1.begin(9600);
Serial.println (" LHC TESTA " );
}
void loop(){
//Aguarda os dados na serial
while(Serial.available() > 0) {
buf = Serial.read();
if (buf == 'LHC#'){
digitalWrite(porta_led_amar, HIGH);
digitalWrite(porta_led_verm, LOW);
delay(1000);
}
}
digitalWrite(porta_led_verm, 1);
delay(500);
Mandar();
}
void Mandar(){
Serial.print("LHC#");
digitalWrite(porta_led_amar, 0);
delay(500);
digitalWrite(porta_led_amar, 1);
digitalWrite(porta_led_amar, 0);
}
Receptor:
init.lua
function startup()
print('Iniciando...')
dofile('receptor_apc220_teste_campo.lua')
end
-- Espera 4 segundos para iniciar o programa sendo possivel o timer ser finalizado com tmr.stop(0) para reprogramacao do ESP
-- Muda o baud rate para 9600 bps para funcionar com a serial do APC220.
tmr.alarm(0,4000,0,uart.setup(0,9600,8,0,1) startup)
receptor_apc220_teste_campo.lua
-- Codigo para receber dados com ESP-01 via modulo APC220 para teste de campo
-- Certifica que o wifi esta desligado para economizar bateria
wifi.sta.disconnect()
-- Definicao dos pinos dos leds
led_vermelho = 4
led_verde = 3
--Definicao do estado dos leds
status_led_vermelho = gpio.LOW
status_led_verde = gpio.LOW
-- Inicializa LEDs apagados
gpio.mode(led_vermelho, gpio.OUTPUT)
gpio.write(led_vermelho, status_led_vermelho)
gpio.mode(led_verde, gpio.OUTPUT)
gpio.write(led_verde, status_led_verde)
function desliga_led_vermelho()
gpio.write(led_vermelho, gpio.LOW)
end
function pisca_led_vermelho()
gpio.write(led_vermelho, status_led_vermelho)
if status_led_vermelho == gpio.LOW then
status_led_vermelho = gpio.HIGH
else
status_led_vermelho = gpio.LOW
end
end
tmr.alarm(0, 200, 1, pisca_led_vermelho)
-- Limpa variavel data antes de ler a serial
data = ""
uart.on("data", "#",
function(data)
print ("Recebido do APC220:", data)
if (data=="LHC#") then
tmr.stop(0)
desliga_led_vermelho()
status_led_verde = gpio.HIGH
gpio.write(led_verde, status_led_verde)
tmr.delay(1000000)
status_led_verde = gpio.LOW
gpio.write(led_verde, status_led_verde)
tmr.alarm(0, 200, 1, pisca_led_vermelho)
end
end, 0)
Experimentos futuros
- Utilizar antenas indicadas para a frequência de trabalho (faixa dos
433 Mhz). Alguns modelos indicados são por exemplo um fio rígido de
17,3cm, antena do tipo dipolo e antenas do tipo Yagi para transmissões
direcionais do sinal.
- Realizar o teste em campo aberto (preferencialmente em área rural)
menos suscetíveis a interferências.
- Teste de distância utilizando antenas direcionais do tipo Yagi em área
urbana e rual.
Referências
Página
com especificações do módulo no site DFROBOT
Exemplo
de antena diplo para 433 Mhz utilizada com APC220
Exemplo
de antena Yagi para 433 Mhz
Manual
de construção de uma antena Yagi para tracking em 433 Mhz
Vídeo sobre
diferentes tipos de antenas UHF
GitHub do LHC com os códigos
utilizados para teste do APC220
Teste
simples de piscagem de LEDs utilizando APC220 e Arduino