Você está na página 1de 45

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL

ESCOLA DE ENGENHARIA
TRABALHO DE CONCLUSO EM ENGENHARIA DE CONTROLE
E AUTOMAO

P ro j eto d e u m a Red e d e
C o m u n i c a o s e m F i o B as e ad a
n o Tra n s c e p to r n R F 2 4 L 0 1 +
Vo l tad a pa ra S i ste m as d e
A u to m a o P red i a l

Autor: Mateus Streit Giaretta


Orientador: Carlos Eduardo Pereira

Porto Alegre, julho de 14

ii Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

Sumrio
Sumrio

ii

Resumo

iv

Abstract

Lista de Figuras

vi

Lista de Tabelas

vii

Lista de Abreviaturas e Siglas

viii

1 Introduo

1.1

Objetivo Geral

1.2

Objetivos Especficos

2 Reviso Bibliogrfica

2.1
Anlise do Desempenho do Transceptor nRF24L01+ em um Cenrio com
Mltiplas Transmisses
3
2.2

Rede de Sensores Dividida em Clusters

2.3

Introduo ao Modelo de Referncia OSI

3 Descrio da Camada Fsica do Sistema Proposto

3.1
3.1.1
3.1.2
3.1.3

3.2
3.2.1
3.2.2
3.2.3

Descrio dos Componentes


Mdulo Integrado para o Componente nRF24L01+
Microcontrolador Arduino Pro-Mini
Fontes de Alimentao

Meio Fsico de Transmisso


Taxa de Transmisso e Uso de Banda de Frequncia
Compartilhamento da Banda de Frequncia
Alcance de Transmisso

4 Camada de Enlace

6
6
6
7

8
8
9
10

11

4.1

Protocolo Enhanced Shockburst

11

4.2

Biblioteca RF24

12

4.3

Recepo de Dados

12

4.4

Controle de Acesso ao Meio

13

4.5

Mecanismo para Evitar Colises em Acesso ao Meio

15

5 Camada de Rede

16

5.1

Definio de Cluster

16

5.2

Rede Dividida em Clusters

16

5.3

Retransmisso de Mensagens entre Clusters

19

5.3.1
5.3.2
5.3.3
5.3.4

Definio do Tamanho Mximo da Rede


Vetor de Alcance e Mapa de Rede
Mecanismo de Busca e Retransmisso
Construo e Atualizao do Mapa de rede

19
20
20
21

iii

UFRGS Mateus Streit Giaretta


6 Camada de Aplicao
6.1

Estrutura da Mensagem

6.1.1
6.1.2
6.1.3

Cabealho
Variveis
Comandos

7 Resultados de Ensaios Realizados

22
22
22
23
24

25

7.1

Ensaio de Comunicao Bidirecional entre Dois Componentes25

7.2

Ensaio de Comunicao Interna ao Cluster

25

7.3

Ensaio de Comunicao Entre Clusters

26

7.4

Ensaio com o uso de Retransmisso de Mensagens

27

7.5

Ensaio com o uso de componentes reais

28

8 Concluses e Trabalhos Futuros

29

9 Referncias

30

10 Anexos

31

10.1

Definies da Estrutura da Mensagem

31

10.2

Funo que Escuta por Rudos no Canal

31

10.3

Funo que Checa o Recebimento de Mensagens

32

10.4

Funo que Escreve a Mensagem e Aguarda pela Resposta 32

10.5

Funo que Escreve a Mensagem

33

10.6

Funo que Escreve um Comando

33

10.7

Funo que inicializa e Rotula Mensagem a ser Enviada

33

10.8

Funo que Interpreta Mensagem Recebida

34

10.9

Funo que Envia Mapa de Rede

36

10.10 Funo que Mapeia Dispositivos ao Alcance

37

iv Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

Resumo
Este trabalho prope o desenvolvimento de uma estrutura de rede sem fio, composta
por componentes de baixo custo, para aplicaes de automao. As estratgias
desenvolvidas tm como objetivo otimizar as caractersticas da rede para atendimento
dos requisitos das aplicaes alvo, em especial para a rea de automao residencial. Elas
se baseiam no uso e na expanso das funcionalidades do rdio transceptor nRF24L01+,
por meio da implementao de funes em um microcontrolador externo, definido como
sendo um Arduino Pro-mini.
Para evitar a ocorrncia de coliso entre mensagens determinada uma diviso
hierrquica entre os ns da rede, com um mestre centralizando a comunicao com os
demais dispositivos, tidos como escravos. Com o intuito de expandir o nmero de
dispositivos e o alcance da rede, proposta uma estrutura de rede dividida em clusters e
o uso de um mecanismo de roteamento. Adicionalmente, so definidas as interfaces de
troca de dados entre os dispositivos, por meio de comandos de leitura e escrita de
variveis compartilhadas. Ao final do trabalho so mostrados resultados de ensaios, que
capacitam o sistema desenvolvido ao objetivo proposto de atuar em uma rede de
automao residencial.
Palavras Chave: transceptor nRF24L01+, hierarquia mestre-escravo, diviso em
clusters, automao residencial

UFRGS Mateus Streit Giaretta

Abstract
This project proposes the development of a framework for a wireless network,
composed of low-cost components, for automation applications. The developed
approaches are intended to optimize the network characteristics for home automation
systems. The radio transceiver nRF24L01+ and an Arduino Pro-Mini were selected as
target hardware and the required functions were developed in C.
To avoid messages collision, a hierarchical network strategy was developed, following
a master-slave pattern. In order to expand the number and range of the network devices,
a cluster-based network division and a routing mechanism were proposed. In addition, to
allow data exchange between devices a shared memory interface was defined. The
developed ideas were experimentally validated and the obtained results are shown in the
last part of this report.
Keywords: nRF24L01 + transceiver, master-slave hierarchy, clustering division, home
automation

vi Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

Lista de F iguras
Figura 1 Perda de Pacotes em Diferentes Cenrios de Rede - Traduzido pelo autor de
figura em (Christ et al., 2011) ................................................................................................ 3
Figura 2 - Diviso em clusters - Fonte: (Urdiain et al., 2012) ................................................ 4
Figura 3 Camadas do modelo de Referncia OSI Fonte: (Redes da Organizao
Profibus, 2004) ...................................................................................................................... 5
Figura 4 Diagrama eltrico e placa do mdulo nRF24L01+ - Fonte: (Nordic, 2007) ......... 6
Figura 5 Placa Arduino Pro-Mini Fonte: (Arduino, 2014) ................................................ 7
Figura 6 Circuito Regulador de Tenso - Fonte: Autor ...................................................... 7
Figura 7 Utilizao de banda de sistemas sem fio operando na banda ISM de 2,4 GHz
Fonte: Traduo de figura contida em (Gerrior e Woodings, 2006) ..................................... 9
Figura 8 Diagrama de tempo para transmisso de dados Fonte Autor ........................ 11
Figura 9 - Formato do Pacote Fonte: (Nordic, 2007) ........................................................ 12
Figura 10 Topologia da organizao hierrquica de mestre e escravo Fonte: Autor.... 14
Figura 11 Diagrama de tempo para um ciclo de comunicao Fonte: Autor ................ 14
Figura 12 Topologia de rede dividida em clusters Fonte: Autor ................................... 17
Figura 13 Diagrama de tempo para comunicao entre clusters Fonte: Autor ............ 18
Figura 14 Topologia de rede com mecanismo de retransmisso entre ns mestres
Fonte: Autor......................................................................................................................... 19
Figura 15 Diagrama de tempo de uma mensagem retransmitida por um cluster
intermedirio Fonte: Autor .............................................................................................. 21
Figura 16 Estrutura da mensagem de dados Fonte: Autor ........................................... 22
Figura 17 Campo FLAGS Fonte: Autor ........................................................................... 23
Figura 18 Varivel comando Fonte: Autor ..................................................................... 24
Figura 19 Exemplos de interpretao de comandos Fonte: Autor................................ 24
Figura 20 Medida de latncia para ensaio com mltiplos dispositivos Fonte: Autor ... 26
Figura 21 Latncia em comunicao interna e externa ao cluster Fonte: Autor .......... 27
Figura 22 Latncia de uma mensagem retransmitida entre clusters Fonte: Autor ...... 28

UFRGS Mateus Streit Giaretta

vii

Lista de Tabelas
Tabela 1 Uso de Banda de Frequncia nRF24L01+ - Traduzido pelo autor a partir de
tabela contida em (Nordic, 2007).......................................................................................... 8
Tabela 2 Tipos de Variveis a serem trocadas Fonte (Brooks, 1999) ............................ 24
Tabela 3 Ensaio de Comunicao Bilateral Fonte Autor................................................ 25

viii Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

Lista de Abreviaturas e Siglas


SPI Interface Perifrica Serial
OSI - Open Systems Interconnection
ISO International Organization for Standardization
PWM Modulao por Largura de Pulso
GFSK - Gaussian Frequency Shift Keying
ISM Industrial Scientific and Medical
TX Transmissor
RX Receptor
ACK Pacote de Reconhecimento de Mensagem
CRC Verificao Cclica de Redundncia
FLAGS Bits de Configurao
RETR Bit de Configurao de Retransmisso
MAP Bit de Configurao de Mapeamento
RESP Bit de Configurao de Resposta
DATA - Bit de Configurao de Troca de Dados
BOOL Varivel Booleana
INT Varivel Inteira
UINT Varivel Inteira sem Sinal
FLOAT Varivel de Ponto Flutuante
LEIT Leitura
ESCR - Escrita

UFRGS Mateus Streit Giaretta

1 Introduo
Com uma presena j bem difundida em meios industriais, a automao tem sido uma
rea que tem recebido uma ateno cada vez maior nas aplicaes residenciais. Segundo
descrito em (Dias e Pizzolato, 2004) a automao predial e residencial, tambm chamada
de domtica, a integrao dos servios e tecnologias, aplicados a residncias, flats,
apartamentos, casas e pequenas construes, com o propsito de automatiz-los e obter
uma melhora em relao segurana e proteo, conforto, comunicao e
gerenciamento tcnico. Em seus diversos nveis de aplicao ela pode proporcionar o
controle automtico e remoto de uma grande variedade de dispositivos. Apesar de
usarem tcnicas e tecnologias semelhantes, a automao industrial necessita de um
padro mais elevado de responsabilidade e confiabilidade dos seus componentes e da
estrutura de rede em si, quando comparado com a residencial.
Ainda de acordo com descrio contida em (Dias e Pizzolato, 2004), dentre os
protocolos de comunicao sem fio utilizados na rea da automao residencial e predial
para interconexo de dispositivos sensores, atuadores e controladores, destacam-se os
protocolos ZigBee e Bluetooth. Apesar de serem tecnologias consolidadas, os seus custos
de implantao ainda limitam a sua aplicao em uma maior escala. Nesse contexto, este
projeto tem como objetivo propor uma soluo alternativa de baixo custo para o mesmo
fim, com o uso do transceptor nrF24L01+ (Nordic, 2007). Este dispositivo funciona como
um rdio transmissor e receptor que opera na banda de frequncia livre em nvel mundial
ISM de 2,4GHz. Neste componente so implementadas as funes do protocolo de
comunicao no padro Enhanced ShockBurst. Este protocolo aplica funes bsicas de
comunicao para pequenas redes.
Para fins de comparao, em pesquisa realizada no ms de maio de 2014 em um dos
maiores sites de revenda online do mundo (Aliexpress, 2014), o custo de um lote de 10
peas com frete internacional de um mdulo nRF24L01+ tinha um custo
aproximadamente 4,5 vezes menor do que o mdulo mais barato do protocolo Bluetooth
e cerca de 7 vezes menor do que um mdulo ZigBee. Ambos os dispositivos citados no
tm autonomia para trabalharem de maneira isolada, necessitando de um
microcontrolador externo que comande suas aes. Tal fato d o respaldo necessrio
para este trabalho, que pretende expandir as funcionalidades do transceptor nRF24L01+
atravs do uso de funes implementadas em um microcontrolador externo. Funes
estas, otimizadas para o uso em um ambiente de automao residencial.
O microcontrolador externo responsvel por configurar e comandar as aes do
rdio, o que feito atravs de comandos pr-definidos enviados atravs de uma Interface
Perifrica Serial (conhecida pela sigla em ingls SPI). Neste trabalho foi escolhido o uso de
um microcontrolador da plataforma Arduino. Escolha feita devido ao seu uso abrangente
e pela facilidade proporcionada na criao de prottipos.
1.1 Objetivo Geral
Este projeto prope o desenvolvimento de uma estrutura de rede de comunicao
sem fio com base no radio transceptor nRF24L01+. Com o objetivo de investigar um
conjunto de solues que melhor se adapte aos pontos fortes e limitaes dos
componentes utilizados, ampliando suas funcionalidades por meio de funes
implementadas em microcontrolador externo, de modo a melhor atender as
necessidades de uma rede complexa de automao predial.

2 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
1.2 Objetivos Especficos

O projeto deve priorizar o uso de hardware de baixo custo, de modo a


proporcionar uma alternativa tecnolgica com um padro de custo benefcio
maior ao que usado em aplicaes semelhantes.

Ampliar as possibilidades de uso do transceptor nRF24L01+ de modo a se


adaptar s necessidades de uma rede de automao residencial.

Desenvolver novas topologias de rede, proporcionando mecanismos capazes


de expandir e garantir de maneira plena a cobertura da rede nos diversos
espaos de um ambiente predial.

Rastrear possveis causas comuns de erros na comunicao e desenvolver


estratgias para evitar as suas ocorrncias.

Analisar a capacidade do sistema de atender aos requisitos de uma


comunicao de tempo determinstico.

Realizar ensaios capazes de caracterizar o desempenho de diferentes funes


e estruturas da rede desenvolvidas.

UFRGS Mateus Streit Giaretta

2 Reviso Bibliogrfica
2.1 Anlise do Desempenho do Transceptor nRF24L01+ em um Cenrio com
Mltiplas Transmisses
Um estudo proposto em (Christ et al., 2011) analisa exaustivamente a eficincia de
uma rede de comunicao constituda somente por rdio transmissores nRF24L01+.
Neste estudo foram realizados ao todo 500 ensaios com diferentes configuraes de
rede, onde componentes igualmente distribudos transmitiam 50000 pacotes de dados
em cada experimento. Em um primeiro teste foi colocado somente um receptor entre 14
transmissores, porm com somente um transmissor operando por vez. Ao longo dos
ensaios variou-se o tamanho e taxa de envio da mensagem. Neste teste foi detectado um
pequeno aumento na taxa de perda de pacotes, medida que pacotes maiores eram
enviados. Contudo a taxa mdia de perda de transmisso ficou na casa dos 0,5%.
Nos demais testes, adicionou-se um nmero maior de componentes transmitindo
simultaneamente. Do mesmo modo, o tamanho do pacote de dados foi alternado desde
15 at 35 bytes. A frequncia com que as mensagens eram transmitidas tambm foram
alteradas no intervalor de 25 a 250 mensagens por segundo. Os resultados obtidos
indicaram um aumento expressivo das perdas na transmisso, sendo que as perdas
aumentam tanto com um aumento do tamanho dos pacotes, bem como com aumento da
frequncia de envio das mensagens e do nmero de componentes na rede. Uma verso
grfica dos resultados obtidos nestes experimentos pode ser vista na Figura 1.

Figura 1 Perda de Pacotes em Diferentes Cenrios de Rede - Traduzido pelo autor de


figura em (Christ et al., 2011)
Este estudo mostra claramente a ineficincia do sistema, da maneira como ele
originalmente proposto, para redes com um nmero maior de componentes e maiores
taxas de transmisso. Portanto, mostra-se necessrio o uso de tcnicas mais avanadas
na construo da rede a ser proposta, bem como estratgias de contingncia para as
perdas de pacotes, de forma a tornar a rede mais robusta.

4 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
2.2 Rede de Sensores Dividida em Clusters
O projeto de uma rede de sensores, com o objetivo de localizar vagas em um
estacionamento descrito em (Urdiain et al., 2012), usando como base rdios nRF24L01+
acoplados a microcontroladores da plataforma Arduino. Neste estudo propem-se que
uma rede complexa seja dividida em clusters de estruturas mais simples, onde cada
cluster se comunica em uma frequncia distinta. Para isso, cada cluster possui um n
mestre que coordena a comunicao interna de demais ns e envia os dados coletados
para um n central. Um esboo da configurao proposta mostrado na Figura 2.

Figura 2 - Diviso em clusters - Fonte: (Urdiain et al., 2012)


O desenvolvimento da rede proposta em (Urdiain et al., 2012) baseado na
biblioteca RF24 (Coliz, 2012), a qual implementa a interface entre o microcontrolador e o
rdio transceptor por meio de funes definidas, sem a necessidade de acessar
individualmente os registradores de configurao do nRF24L01+. A partir dessa ideia,
foram desenvolvidas, atravs do microcontrolador Arduino, funes mais complexas para
implementao da estrutura em clusters. O artigo detalha ensaios para validao
experimental da proposta: (i) um teste de 90 minutos com 10 ns de comunicao em um
mesmo cluster. Neste caso uma taxa de perda de transmisso de 71 % foi obtida; ii) um
segundo ensaio de mesma durao, porm tendo os 10 ns divididos em dois clusters
com 5 componentes cada. A diviso em clusters melhorou significativamente o
desempenho da comunicao, fazendo a taxa de perdas cair para 41%. Apesar da
reduo obtida, uma taxa muito alta de perda de pacotes continua presente na
comunicao. Os autores relatam como uma possvel causa a dificuldade de sincronizao
entre os dispositivos.
2.3 Introduo ao Modelo de Referncia OSI
Praticamente todas as redes em uso atualmente so baseadas de alguma forma no
padro comumente conhecido como modelo OSI de Open Systems Interconnection .
O modelo de referncia OSI, como descrito em (Day e Zimmermann, 1983), foi
desenvolvido pela International Organization for Standardization (ISO), uma federao
mundial de organismos nacionais de normalizao que representa cerca de 130 pases. O
ncleo deste padro um conjunto de sete camadas que definem as diferentes etapas
que os dados devem percorrer para transitar a partir de um dispositivo para outro atravs
de uma rede. Esta diviso em camadas auxilia o entendimento do sistema e das tarefas

UFRGS Mateus Streit Giaretta

dentro de uma rede. Na Figura 3 encontra-se uma descrio breve sobre as sete camadas
do Modelo de Referncia OSI.

Figura 3 Camadas do modelo de Referncia OSI Fonte: (Redes da Organizao


Profibus, 2004)
Este trabalho est estruturado em captulo de forma a apresentar suas
funcionalidades separadas de acordo com a diviso em camadas do modelo OSI. A
estrutura de rede na qual o transceptor nRF24L01+ originalmente projetado para
operar inclui somente funes de camada fsica e de enlace. Neste trabalho ser feita
uma anlise das caractersticas do meio fsico em que este sistema opera, uma expanso
das funcionalidades de sua camada de enlace e a criao de funes de camada de rede e
aplicao.

6 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

3 Descrio da Camada Fsica do Sistema Proposto


Este captulo apresenta as caractersticas de camada fsica do sistema proposto. Este
o nvel de hardware real. Ele define as caractersticas dos dispositivos usados e do meio
em que eles atuam.
3.1 Descrio dos Componentes
3.1.1 Mdulo Integrado para o Componente nRF24L01+
Mdulo usado como base para o desenvolvimento deste trabalho, consiste em um
circuito integrado ativo nRF24L01+, produzido pela empresa Nordic Semiconductor
(Nordic, 2007). Neste mesmo mdulo tambm so encapsulados uma antena, conectores
e demais componentes passivos, tudo isso em uma placa com pouco mais de 3cm de
comprimento. A Figura 4 mostra esquerda o diagrama eltrico deste circuito, e direita
o esquemtico da placa englobando todos estes componentes.

Figura 4 Diagrama eltrico e placa do mdulo nRF24L01+ - Fonte: (Nordic, 2007)


A interface do transceptor com o microcontrolador externo se d por meio de
comandos pr-definidos enviados atravs de um barramento. Associada a uma
alimentao de at 3.3V, a interface do mdulo consiste dos seguintes pinos:

Pino CE (utilizado para ativar o chip)

Pinos CSN, SCK, MOSI e MISO (pinos padro da interface SPI)

Pino IRQ (sinal que indica a ocorrncia de trs diferentes interrupes


mascarveis)

3.1.2 Microcontrolador Arduino Pro-Mini


Este microcontrolador a verso mais minimalista entre todas as distribuies da
plataforma Arduino. O modelo usado neste projeto, opera com um processador
ATmega328, o mesmo usado pela verso mais conhecida da plataforma, o Arduino Uno. A
placa possui 14 pinos digitais de entrada e sada (dos quais 6 podem ser usados como

UFRGS Mateus Streit Giaretta

sadas PWM), 8 entradas analgicas e furos para montagem de pinos ou soldagem direta
de componentes. Em pesquisa de preo realizada (Aliexpress, 2014), o custo de uma
verso no oficial do microcontrolador Arduino Pro-Mini em um lote de 10 peas foi
comparada com um mesmo lote de Arduinos Uno. Nesta averiguao, uma mesma verso
no oficial da plataforma Uno encontrava-se por um custo 4 vezes mais elevado. Esta
diferena se deve ao fato de o modelo Uno ser otimizado para prototipagem, j o ProMini construdo em uma placa compacta, com enfoque em aplicaes diretas. Portanto,
atendendo aos requisitos de reduo de custo do projeto, neste trabalho sero usados
somente microcontroladores do modelo Arduino Pro-Mini, com processador Atmega 328.
Na Figura 5 exibida uma representao deste microcontrolador.

Figura 5 Placa Arduino Pro-Mini Fonte: (Arduino, 2014)


3.1.3 Fontes de Alimentao
O conjunto Microcontrolador mais transceptor necessita de uma fonte de
alimentao especial. O mdulo nRF24L01+ deve ser alimentado com uma tenso entre
2.7V a 3.3V (Nordic, 2007), contudo seus pinos de comunicao com o microprocessador
suportam at 5V, o tornando compatvel com a sada do microcontrolador usado. J a
entrada de energia do Arduino deve ser entre a faixa de 5V a 12V. Associado a isso, foi
observado em testes que o funcionamento do rdio est atrelado de maneira sensvel a
sua alimentao. Desnveis na tenso de alimentao, tanto do rdio, quanto do
microcontrolador, impediram frequentemente o seu correto funcionamento.
Para tanto, foram desenvolvidas duas verses de fontes de alimentao. Uma delas
usou uma fonte chaveada de 6V acoplada a um circuito regulador de tenso AMS1117
(Ams, 2014) de sada 3.3V. Para estabilizar a tenso foram usados um capacitor em
paralelo sada de 6V e outro de 3.3 V. Os valores dos capacitores usados seguem o
recomendado pelo fabricante. Este circuito no necessita de dispositivos extras de
proteo, pois j possui um diodo interno com essa funo. Na Figura 6 mostrado o
circuito regulador de tenso usado.

Figura 6 Circuito Regulador de Tenso - Fonte: Autor

8 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
Outro conjunto mais simples de fontes foi desenvolvido com o uso de quatro baterias
de 1.6V. Nesta configurao, duas baterias em srie fornecem uma tenso de 3.2 V,
enquanto as quatro ligadas em srie fornecem 6.4 V. Esta ligao fornece um consumo
desigual de energia das baterias e no a melhor soluo, porm devido ao baixo
consumo energtico dos componentes, aps muitas horas de uso nenhum dos conjuntos
de bateria montados chegou a perder a sua carga completamente.
3.2 Meio Fsico de Transmisso
Como descrito em (Nordic, 2007), a camada fsica utilizada pelo nRF24L01+ transmite
suas mensagens por meio de ondas de rdio com modulao em frequncia GFSK (sigla
do ingls Gaussian Frequency Shift Keying). Este tipo de modulao codifica os dados
como uma srie de alteraes de frequncia de uma onda moduladora. A forma dos
impulsos da onda de rdio gerados usa uma banda espectral relativamente estreita e ,
portanto, apropriado para pequenas redes sem fio que compartilham o mesmo meio com
outros dispositivos.
3.2.1 Taxa de Transmisso e Uso de Banda de Frequncia
Um parmetro importante da camada fsica a taxa de transmisso. No nRF24L01+,
ela pode ser configurada para 250 Kbps, 1Mbps ou 2 Mbps (Nordic, 2007). Esta uma
grande vantagem deste dispositivo quando comparado com similares, como o Zigbee
cuja taxa mxima de 250 Kbps (Nanhao et al., 2008). Em aplicaes comuns de redes de
automao residencial normalmente no se necessita de alta taxa de transmisso de
dados, entretanto uma taxa elevada tambm significa que a mensagem transmitida
levar menos tempo para atingir o seu destinatrio. Isso se traduz em uma menor
probabilidade de coliso entre mensagens. Como ponto negativo, temos que, com uma
mesma quantidade de energia empregada na transmisso, uma mensagem que trafega a
uma taxa mais baixa tem uma maior capacidade de alcance do que a mesma mensagem a
uma taxa mais alta.
O rdio nRF24L01+ projetado para operar na banda ISM de frequncia livre de 2,4
GHz, utilizando at 128 diferentes canais de 1 MHz de largura de banda cada. A Tabela 1
mostra as principais caractersticas de uso de banda de frequncia deste dispositivo.
Tabela 1 Uso de Banda de Frequncia nRF24L01+ - Traduzido pelo autor a partir de
tabela contida em (Nordic, 2007)

Neste contexto, desvio de frequncia a medida da quantidade pela qual a


frequncia do sinal se difere da frequncia de sua onda moduladora. Apesar de a onda se
desviar desta frequncia de maneira relativamente estreita, deve-se garantir um espao
mnimo muito maior, para evitar que efeitos de um sinal possam interferir na

UFRGS Mateus Streit Giaretta

comunicao de outros dispositivos na mesma rede. Para isso, foi definido pelo fabricante
um intervalo mnimo para cada canal, que garanta a no sobreposio com os sinais de
outros canais. Alm disto, de acordo com a Tabela 1, ao se aumentar a taxa de
transmisso, aumenta-se tambm a largura de banda necessria.
Neste projeto decidiu-se por fixar o uso de uma taxa de transmisso de 1Mbps em
todos os testes e experimentos realizados. Esta deciso foi tomada pelo fato desta taxa
combinar caratersticas favorveis de alcance, uso de banda de frequncia e velocidade
de transmisso. Ao contrrio da indicao do fabricante, constatou-se que um canal tem
sim a possibilidade de interferir na comunicao do canal vizinho. Isto foi constatado pelo
recebimento esprio de pacotes por rdios modulados em um canal imediatamente
depois do qual a comunicao estava sendo feita. Diante disso, decidiu-se por manter um
espao de 1 MHz entre os canais usados para comunicao, buscando-se eliminar esta
interferncia indesejada.
3.2.2 Compartilhamento da Banda de Frequncia
A banda ISM de frequncia livre de 2,4 GHz, por ser de fato livre, compartilhada com
diversos outros componentes presentes no ambiente domstico, como roteadores Wi-Fi,
dispositivos Bluetouth e telefones sem fio. Esta coexistncia de emissores dividindo o
mesmo meio uma fonte intrnseca de interferncia e possvel falha em transmisses. A
Figura 7 mostra a largura de banda ocupada pelos principais dispositivos presentes nesta
faixa de frequncia.

Figura 7 Utilizao de banda de sistemas sem fio operando na banda ISM de 2,4 GHz
Fonte: Traduo de figura contida em (Gerrior e Woodings, 2006)
possvel notar que as redes WI-FI ocupam um grande espectro de frequncia. Isto se
deve ao seu algoritmo usado para evitar colises, que est sempre alternando sua
frequncia de transmisso a procura de canais com menor interferncia. Essa abordagem
de fazer uma leitura do nvel de energia no ar, caso o componente possua essa
capacidade, citado por (Gerrior e Woodings, 2006) como uma alternativa para evitar
colises em um meio compartilhado como este. Cada protocolo e dispositivo ao seu
modo possui uma maneira diferente de lidar com esse problema. A estratgia
desenvolvida neste trabalho para uma rede usando o transmissor nRF24L01+ ser
abordada na seo 4.5.

10 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
3.2.3 Alcance de Transmisso
O nRF2401+ classificado como um rdio de curto alcance de transmisso. Em
(Nordic, 2007) especificado que ele possui alcance de at 100m em espao aberto,
quando transmitindo a uma taxa de 250Kbps. Em diversos testes realizados em espaos
fechados, a comunicao entre estes dispositivos ocorreu sem problemas de alcance
quando em uma rede dentro de um mesmo ambiente aberto. Todavia, muitas vezes pode
ser necessrio que esta comunicao necessite atingir um alcance maior e atravessar
obstculos, como paredes e lajes, por exemplo. Neste caso, o seu alcance se limitou a
uma mdia inferior a 10 metros, nos ensaios realizados. Este problema pode ser
abordado em duas frentes. Uma delas aumentando a capacidade de transmisso e
recepo do sinal fsico. Para isso existe um mdulo comercial deste mesmo dispositivo,
que alm de aumentar a potncia do sinal transmitido, acompanhado de uma antena
de tamanho maior e maior potncia de irradiao. A outra abordagem a de repassar a
mensagem por meio de um roteamento entre os ns da rede, de modo a expandir o
alcance de cada n atravs de seus dispositivos vizinhos da mesma rede. Esta ltima
abordagem ser apresentada no Captulo 5.

UFRGS Mateus Streit Giaretta

11

4 Camada de Enlace
Esta camada aborda as ligaes entre os ns e mecanismos usados para acessar o
meio fsico e mover dados sobre a rede. O transceptor nRF24L01+ possui encapsulado o
hardware que implementa o protocolo de enlace Enhanced Shockburst, principal
responsvel pelas funes de enlace do sistema. Neste capitulo tambm so
apresentadas estratgias de acesso ao meio e de mitigao de erros.
4.1 Protocolo Enhanced Shockburst
O Enhanced Shockburst um protocolo de camada de enlace de propriedade da
Nordic Semiconductor (Nordic, 2007). Ele realiza funes automticas de temporizao,
montagem, reconhecimento e retransmisso de pacotes de dados entre dois dispositivos
nRF24L01+. Todo este manuseio feito de maneira concorrente ao processamento do
microcontrolador externo, sendo que este somente controla a comunicao por meio de
comandos ao rdio, atravs da interface SPI. No Enhanced Shockburst a comunicao
feita pela troca de pacotes entre dois transceptores, um deles atuando como receptor
(RX) e o outro como transmissor (TX), de acordo com o que segue:

A troca de dados comea pela transmisso de um pacote de dados a partir da


TX para o RX. Aps a transmisso o TX ajustado automaticamente no modo
de recepo para esperar pelo reconhecimento da transmisso em forma de
um pacote ACK.

Se o pacote for recebido de maneira vlida pelo RX, transmitido um pacote


de confirmao (ACK) para o TX antes de se retornar ao modo de recepo.
possvel anexar dados ao pacote ACK, porm estes j devem estar
previamente armazenados antes do recebimento da comunicao.

Se o TX no recebe a mensagem de ACK, imediatamente ele retransmite o


pacote de dados original e espera novamente por uma confirmao do
receptor. possvel configurar parmetros tais como o nmero mximo de
retransmisses e o intervalo entre elas.

Em uma comunicao bilateral, quando se deseja uma resposta imediata a uma


requisio enviada, pode-se programar os rdios para inverterem seu papel aps o envio
da mensagem. Neste caso, o receptor passa a atuar como transmissor, sendo que os
mesmos mecanismos de transmisso continuam vlidos. A Figura 8 descreve esta
comunicao. Este caso mostra a ocorrncia de 2 retransmisses no primeiro envio de
mensagem, e outras 3 na transmisso da resposta.

Figura 8 Diagrama de tempo para transmisso de dados Fonte Autor

12 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
Apesar de acrescentarem uma maior confiabilidade para em uma comunicao entre
dois dispositivos, o uso do pacote de reconhecimento ACK e de retransmisses acarreta
em um aumento no nmero de mensagens transmitidas. Em um cenrio com mltiplos
dispositivos compartilhando o mesmo canal, foi possvel perceber, nos ensaios realizados,
que estas configuraes acabam por trazer um efeito negativo ao sistema, provocando
um aumento expressivo na taxa de perda de pacotes.
O protocolo Enhanced ShockBurst tambm responsvel por montar o pacote de
dados a ser enviado em cada transmisso. A Figura 9 mostra o formato do pacote de
dados definido por ele.

Figura 9 - Formato do Pacote Fonte: (Nordic, 2007)


O Preamble um byte previamente definido que serve para distinguir o incio da
mensagem de rudos no canal. O prximo campo composto pelo endereo do
destinatrio, que pode ter entre 3 e 5 bytes. O campo intitulado Packet Control Field
contm o tamanho dos pacotes de dados e configuraes de reconhecimento de pacotes
e retransmisso. Finalmente, no campo Payload, encontra-se a real mensagem a ser
transmitida, que pode possuir um tamanho entre 0 32 bytes. Por ltimo encontra-se um
campo para CRC (do ingls Cyclic Redundancy Checking ou Verificao de Redundncia
Cclica), um mecanismo de deteco de erros.
O protocolo Enhanced Shockburst concebido para uma topologia com at 7
dispositivos conectados em estrela. Esta configurao permite 2 cenrios, um deles com
um nico receptor de diversos transmissores, e a outra com um transmissor e diversos
receptores. Para o desenvolvimento de uma rede com uma topologia mais complexa e
funes adicionais necessrio desenvolver um protocolo que expanda as
funcionalidades do Enhanced ShockBurst. Isto ser feito por meio de funes
implementadas no microcontrolador Arduino. Neste caso, no entanto, estas funes
adicionais passaro a exigir mais processamento do microcontrolador, pois no sero
processadas dentro nRF24L01+, como feito com as funes do Enhanced Shockburst.
4.2 Biblioteca RF24
A biblioteca RF24 (Coliz, 2012) um driver para o transceptor nRF24L01+
desenvolvida especificamente para a plataforma Arduino. Conforme (Urdiain et al., 2012)
esta biblioteca responsvel por fornecer uma interface para as funes implementadas
pelo hardware deste dispositivo, de camada fsica e principalmente de camada de enlace,
incluindo o protocolo Enhanced Shockburst. Isso feito em um nvel de abstrao maior
sem a necessidade de acessar diretamente os registradores do transceptor. Este software
distribudo de maneira livre sob os termos da GNU Public License verso 2. As funes
desenvolvidas neste projeto usam como base esta biblioteca.
4.3 Recepo de Dados
De acordo com o protocolo Enhanced ShockBurst, as mensagens recebidas so
armazenadas de maneira automtica em um buffer de at 3 posies presente no

UFRGS Mateus Streit Giaretta

13

transceptor. Desta maneira, o microprocessador externo no necessita ter o seu


hardware 100 % disponvel para comunicao enquanto espera por uma mensagem.
Porm, necessrio destinar um tempo especfico do ciclo de processamento de cada
dispositivo para checar no rdio se alguma mensagem foi recebida. A desvantagem deste
tipo de alternativa exigir um maior tempo de resposta para atender s solicitaes de
outros componentes.
Uma alternativa o uso do pino IRQ do mdulo nRF24L01+, um pino especfico que
gera um pulso na ocorrncia de um evento relevante. A gerao deste pulso ocorre
quando o rdio recebeu um pacote, transmitiu com sucesso um pacote ou houve falha na
transmisso. Este pino do rdio foi ligado ento a um pino do processador com
capacidade de acionar interrupes, de acordo com mudanas na sua entrada. No
sistema proposto essa interrupo passou a ser usada somente para identificar a chegada
de uma mensagem, pois j haviam funes implementadas para checar o sucesso ou no
da transmisso de mensagens. Desta forma, o receptor est teoricamente sempre
disponvel para receber novos pacotes e atender prontamente suas solicitaes,
independente das instrues que o microprocessador esteja executando no momento.
A ressalva desta segunda alternativa o fato de que na configurao padro da
plataforma Arduino no permitida a ocorrncia de interrupes simultneas, ou seja,
no pode haver uma segunda interrupo enquanto a funo de tratamento
interrupo anterior esteja sendo executada. Esta configurao serve para limitar a
ocorrncia de erros, porm limita o uso desta funo para aplicaes que no dependam
de outras interrupes.
4.4 Controle de Acesso ao Meio
No protocolo Enhanced ShockBurst no h nenhuma funo que defina uma ordem
de acesso ao meio. Os dispositivos teoricamente tm permisso de transmitir a qualquer
momento uma mensagem, sem considerar o fato de que outros dispositivos podem estar
transmitindo ao mesmo momento. Este cenrio no desejado, visto que ao se adicionar
um nmero maior de ns na rede a tendncia de colises na transmisso pode aumentar
consideravelmente, como apontado na seo 2.1.
Para organizar a comunicao e prevenir que dois rdios transmitam ao mesmo
tempo, foi criada uma relao do tipo mestre e escravo entre os dispositivos da rede.
Neste cenrio, um n definindo como mestre, sendo responsvel por centralizar a troca
de informaes com os demais componentes, tidos como escravos. Isto feito de forma a
criar um escalonamento do tempo de ciclo de troca de dados, onde cada escravo se
comunica exclusivamente com o mestre central e somente quando requisitado. Esta
diviso hierrquica age de forma a evitar possveis colises de pacotes. Uma
representao desta topologia mostrada na Figura 10.

14 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

Figura 10 Topologia da organizao hierrquica de mestre e escravo Fonte: Autor


Define-se ciclo de comunicao, como um perodo constante destinado para que o
mestre troque dados com todos os seus escravos e execute demais tarefas de
processamento a ele destinadas. A cada ciclo de troca de dados, uma sequncia de passos
pr-definida executada. Inicialmente todos os escravos so definidos como receptores e
o mestre como transmissor. O mestre inicia a comunicao enviando uma mensagem
para um dos escravos. Ao receber o reconhecimento do escravo de que a mensagem foi
recebida com sucesso, o mestre passa para o estado de receptor e aguarda pela resposta
do escravo, que por sua vez passa a ser um transmissor. O mecanismo de transmisso da
resposta para o mestre idntico ao do sentido reverso, contendo confirmao de
recebimento por parte do receptor e possveis retransmisses.
Para se garantir um determinismo entre todas as trocas de dados preciso alocar
uma quantidade de tempo fixa para a comunicao com cada componente. Caso ele no
tenha recebido com sucesso a resposta do escravo neste perodo de tempo, uma nova
tentativa s poder ser feita no prximo ciclo. Esta sequncia de operao repetida
para todos os escravos de maneira sequencial at fechar o ciclo. Na Figura 11 vemos uma
representao de um ciclo de comunicao. Nela pode-se perceber que o escravo 2 no
responde a solicitao enviada pelo mestre, entretanto isto no interfere no
determinismo da comunicao com os demais dispositivos.

Figura 11 Diagrama de tempo para um ciclo de comunicao Fonte: Autor


O tempo de ciclo mnimo de troca de dados imposto pelo sistema uma funo da
quantidade de componentes da rede e de quanto tempo alocado para cada um deles, e
depender da aplicao desenvolvida. Diversos fatores influenciam no tempo necessrio
para a comunicao com cada escravo. preciso considerar o tempo mximo definido

UFRGS Mateus Streit Giaretta

15

para que ocorram retransmisses, nos dois sentidos de comunicao, e tambm o tempo
necessrio para que tanto o escravo como o mestre consigam processar as informaes
trocadas.
Do ponto de vista de comunicao, o controle feito inteiramente pelo n mestre.
Cada escravo tem controle e acesso somente s suas variveis, servindo como terminal
remoto de entrada de sensores e sada de atuadores. Entretanto, possvel
implementar-se funes dentro dos escravos para interpretao de comandos,
tratamentos e filtragem de dados de sensores, condicionamento de atuadores e inclusive
sistemas de controle discreto e contnuo. Desta forma, apesar de o controle das
informaes ser centralizado, o controle e a lgica do sistema de automao podem ser
distribudos entre todos os componentes da rede. Isto benfico do ponto de vista de
que os Arduinos usados possuem capacidade limitada de processamento, o que para
aplicaes mais complexas inviabilizaria o uso de um processamento central. Outro ponto
positivo desta abordagem a robustez e segurana do sistema, pois, caso haja uma falha
no n mestre, os demais ns podem ter autonomia para levar o sistema para um estado
de operao seguro.
4.5 Mecanismo para Evitar Colises em Acesso ao Meio
Mesmo que sejam desenvolvidas estratgias que evitem que dois ns da rede
transmitam ao mesmo tempo, no possvel prever quando outro dispositivo externo
esteja acessando o mesmo meio, como visto na seo 3.2. Diante disso o nRF24L01+
possui uma funcionalidade especfica, que retorna um bit informando se existe ou no
algum sinal naquela faixa de frequncia com potncia maior que -64dBm (Nordic, 2007).
Usando-se desta funcionalidade, foi desenvolvida uma funo que escuta o canal a ser
acessado por um tempo pseudoaleatrio antes de efetuar qualquer transmisso. Foi
definido experimentalmente, em diversos ensaios, um tempo de espera considerado
suficiente que varia entre 100s e 1000s, podendo se estender at um limite de 4ms,
caso encontre sinais sendo transmitidos no meio. Caso o tempo de espera ultrapasse os
4ms sem conseguir encontrar um espao no meio, a transmisso no efetuada e tentase novamente somente no prximo ciclo de troca de dados. Este tempo de espera
aleatrio interfere no determinismo do sistema, porm para tempos de ciclo da grandeza
de dcimos de segundo, o seu efeito de baixa relevncia.
O tempo de espera determinado pelo gerador de nmeros randmicos padro das
bibliotecas do Arduino. Porm os nmeros ditos como aleatrios, fornecidos por esta
funo, na verdade possuem uma sequncia pr-definida. O que foi feito para diferenciar
esta sequncia em cada dispositivo foi atrelar a inicializao desta gerao por meio da
leitura de uma das entradas analgicas no utilizadas do microcontrolador. Desta forma,
a sequncia de nmeros gerados est atrelada ao rudo presente na entrada. Este rudo
pode ser aproximado como um rudo branco e desta forma, de fato aleatrio.

16 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

5 Camada de Rede
A camada de rede define processos utilizados para encaminhar os dados atravs da
rede e a estrutura e da utilizao de endereamento lgico. Uma rede de automao
residencial demanda funes mais complexas de rede, como um maior nmero de
elementos, diferentes topologias e melhores estratgias de fluxo de dados. Porm
funes desta camada no se encontram originalmente definidas para o sistema
proposto. neste ponto que se faz necessrio o desenvolvimento de um protocolo
especfico para esta camada que atenda s necessidades mais complexas exigidas por
uma rede de automao.
5.1 Definio de Cluster
Um cluster pode ser definido como a juno de dois ou mais componentes da rede
em uma mesma estrutura de forma que, para os demais dispositivos da rede, ela se
comporte como se fosse uma entidade nica. Neste trabalho, esta estrutura composta
por um n mestre centralizado que comanda a comunicao entre seus diversos
escravos, implementando a proposta apresentada em sees anteriores. Este cluster
montado de forma que seus componentes compartilhem variveis e tarefas.
Dentro desta hierarquia, o mestre do cluster responsvel por toda a interface de
comunicao com os componentes externos da rede. Mesmo que algum dispositivo
externo necessite de alguma informao presente em um dos escravos, essa requisio
primeiramente direcionada para o mestre, que ento busca esta informao com o
respectivo escravo e aps responde para o solicitante.
5.2 Rede Dividida em Clusters
Seguindo a estratgia apresentada por (Urdiain et al., 2012), vide seo 2.2, foi
desenvolvida uma rede que divide uma rede mais complexa em clusters de tamanhos
menores. Na proposta apresentada pelo artigo, a estrutura de rede era voltada para uma
rede de sensores, onde h somente uma direo no fluxo de dados. Para comunicaes
mais complexas porm, a mesma falha, pois implica na necessidade de um n central e
em uma dificuldade para a transmisso de dados do n central para os mestres de cada
cluster, pois este era definido exclusivamente como receptor.
Neste trabalho foi desenvolvida uma abordagem diferente da proposta por (Urdiain et
al., 2012), mas que aproveitasse suas principais caractersticas. Manteve-se a diviso da
rede em clusters, com cada um destes operando internamente a uma frequncia distinta.
Esta diviso permite que a comunicao interna de cada cluster no interfira na troca de
dados dos demais. Entretanto, devido s caractersticas de curto alcance do rdio e
necessidade de expandir a cobertura da rede para o maior espao possvel, optou-se por
eliminar a existncia de um n central rede. Desta forma, a troca de informaes entre
os clusters passa a ser direta e bidirecional entre os ns mestres. Como requisito para
esta topologia, necessrio que cada mestre esteja ao alcance de todos os outros, ou
pelo menos ao alcance dos mestres dos clusters com quem ele se comunica. Na Figura 12
mostrado um esboo desta nova configurao.

UFRGS Mateus Streit Giaretta

17

Figura 12 Topologia de rede dividida em clusters Fonte: Autor


Neste novo cenrio, a rede passa a ter uma topologia semelhante de uma rvore,
aumentando o seu alcance e abrindo a possibilidade para o uso de um nmero muito
maior de componentes. Isto possvel em funo da responsabilidade do controle da
comunicao ser dividida entre diversos mestres, ao contrrio da topologia apresentada
na seo anterior, onde um nico componente gerenciava a comunicao de todos os
dispositivos. Esta nova configurao, contudo, necessita de ajustes no modo como os ns
trocam informaes. (Urdiain et al., 2012) citaram problemas de sincronizao entre os
clusters com o uso de microcontroladores Arduino de baixo custo. Portanto, a estratgia
a ser empregada deve levar em considerao uma possvel falta de sincronia entre os ns
mestres. Outro fator importante de que a comunicao entre os clusters no possui a
mesma hierarquia mestre/escravo como feito na estrutura interna de cada cluster.
Diante disso, necessrio prever que a troca de mensagens possa ser feita de maneira
aleatria entre os mestres dos clusters.
A soluo encontrada para atender as necessidades de troca de informaes entre
clusters foi a adio de um segundo transceptor nRF24L01+ a cada n mestre. De modo
que ambos os rdios compartilham o mesmo barramento SPI usado na comunicao com
o microcontrolador. O rdio adicional atua somente como receptor aguardando
exclusivamente as mensagens de outros mestres. Para evitar que as mensagens externas
ao cluster interfiram na comunicao interna, foi designada uma segunda frequncia,
diferente da usada internamente, para recepo de mensagens externas. Portanto, nesta
configurao, cada cluster associado a dois canais de frequncia distintas.
Em experimentos realizados, quando interrupes eram geradas para notificar o
microcontrolador da chegada de novas mensagens, a adio de um segundo rdio aos ns
mestres tornou o comportamento do sistema instvel, aumentando de maneira
considervel os erros de transmisso. Esta situao pode gerar a ocorrncia de
interrupes simultneas, que como explicado anteriormente, no permitida pela
configurao padro do Arduino. Para evitar que este problema acontea, definiu-se que
os ns mestre passariam a no usar mais deste recurso. Portanto, cada mestre deve
escalonar um tempo do seu ciclo para a checagem e processamento de mensagens
externas recebidas. No possvel prever, no entanto, quantas mensagens externas
podem chegar dentro do intervalo de um ciclo de comunicao. Este valor varia

18 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
dependendo da aplicao sendo executada. Em geral, a partir de consideraes feitas por
ensaios realizados, o perodo do ciclo de comunicao nesta estrutura de rede deve ser
de no mnimo trs vezes o tempo que inicialmente seria destinado para a comunicao
somente com os escravos em uma topologia do tipo estrela.
Com a troca aleatria de mensagens entre os clusters, o determinismo entre uma
mensagem e outra passa a ficar limitado para a comunicao entre componentes de
mesmo cluster. Este fator altera a maneira de estruturar a rede ao se desenvolver uma
aplicao. Para comunicaes com clusters externos, deve-se prever que o mestre do
cluster vizinho no esteja o sempre disponvel para responder solicitao enviada. Alm
disso, dependendo da solicitao, talvez o mestre tenha que buscar a informao
almejada dentro de um de seus escravos. A Figura 13 mostra um diagrama de tempo para
uma comunicao bidirecional entre dois clusters diferentes, onde este tipo de situao
acontece.

Figura 13 Diagrama de tempo para comunicao entre clusters Fonte: Autor


medida do possvel, deve-se dar preferncia para manter no mesmo cluster ns
com sensores e atuadores destinados a uma mesma funo. Esta diviso dos clusters por
funo facilita a implementao e aumenta o desempenho do sistema de automao,
uma vez que diminui a necessidade de troca de mensagens com componentes externos.
Como exemplo, pode-se citar um sistema de automao hipottico de uma sala com
piscina trmica. A rede deste sistema poderia ser dividida em trs diferentes clusters, um
para contar o nmero de pessoas que entram e saem do ambiente (com o uso de
sensores de passagem presentes em cada entrada), o outro para controlar a temperatura
da gua (com sensores de temperatura e atuadores para bombear e aquecer a gua) e
um ltimo para fornecer uma interface remota com o usurio (com o uso de um painel de
comandos e uma interface ethernet). Neste caso, dentro do cluster de controle de
temperatura poderia ser implementado um sistema de controle de lao fechado
determinstico. Enquanto isso o outro cluster operaria os sensores de passagem para
informar o nmero de pessoas presente no ambiente. O que poderia ser usado para
informar um usurio remoto ou para desativar o aquecimento quando ningum estivesse
presente no ambiente. Dentre todas as informaes de sensores e atuadores, as nicas
variveis trocadas entre os clusters se limitariam a temperatura da piscina, o nmero de
pessoas da sala e a alguns poucos comandos espordicos vindos da interface com o
usurio.

UFRGS Mateus Streit Giaretta

19

5.3 Retransmisso de Mensagens entre Clusters


A topologia apresentada na seo anterior prev como requisito que todos os mestres
dos clusters com que se deseja comunicar estejam ao alcance de transmisso. Em
ambientes prediais grandes, com diversos ambientes e obstculos fsicos entre o
transmissor e o receptor, nem sempre isto pode ser garantido. Para ampliar esta
capacidade de alcance, desenvolveu-se um mecanismo de retransmisso de mensagens
entre os ns mestres.
Existem diversas estratgias desenvolvidas para o roteamento de mensagens entre os
ns de uma rede. Porm muitas delas requerem um uso de processamento e memria
muito elevados para o padro limitado do microprocessador Arduino (que ainda precisa
processar todas as outras funes de transmisso e recepo de mensagens). Alm disso,
estratgias que forcem um pacote de mensagem a trafegar entre um nmero elevado de
ns, tendem a necessitar de um tempo maior de espera, o que no desejvel de uma
maneira geral para um bom desempenho da rede. Portanto, o roteamento de mensagens
foi limitado a somente um componente intermedirio. Esta pequena alterao,
aparentemente pouco significativa, incrementa consideravelmente o alcance total da
rede e abrange ainda mais possibilidades de implementao de aplicaes. A Figura 14
mostra a configurao desta nova topologia de rede. O mecanismo desenvolvido para
atender este objetivo baseia-se no mapeamento dos dispositivos alcanados por meio de
um mapa de rede, que ser explicado a seguir. Antes disso, porm, necessrio prever
qual ser a capacidade mxima do sistema.

Figura 14 Topologia de rede com mecanismo de retransmisso entre ns mestres


Fonte: Autor
5.3.1 Definio do Tamanho Mximo da Rede
Para determinar o espao necessrio pelo mapa de rede e o tamanho das mensagens
de atualizao deste mapa preciso prever qual o conjunto mximo de clusters que o
sistema ir comportar. Temos que cada cluster ocupa 2 canais de um total de 128, desta
forma possvel haver at 64 diferentes clusters em uma rede. Levando em conta a
possibilidade de interferncia de canais vizinhos, relatada na seo 3.2, optou-se por
limitar o nmero mximo de clusters para 32. Esta alterao tambm permite um
mapeamento de rede mais rpido e eficiente, com mensagens de atualizao menores e
que ocupem menos da j limitada memria do microprocessador.

20 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
5.3.2 Vetor de Alcance e Mapa de Rede
Para o entendimento do mecanismo usado para retransmitir as mensagens na rede,
primeiramente se faz necessrio definir estes dois conceitos usados.
Vetor de Alcance uma palavra de 32 bits, onde cada bit representa um dos 32
possveis clusters da rede. Cada n mestre da rede possui um vetor de alcance prprio,
onde as posies binrias de valor 1 representam os clusters que esto dentro do alcance
de transmisso deste dispositivo. Os bits de valor 0 significam clusters inativos ou fora de
alcance. A linguagem de programao do Arduino permitiria a declarao de um vetor de
variveis booleanas, contudo, como ele trabalha com um processador que somente
capaz de executar instrues de 8 bits, cada posio deste vetor estaria de fato ocupando
8 bits de memria ao invs de 1 bit. Para otimizar o espao de memria ocupado, este
vetor de fato armazenado como uma varivel inteira de 32 bits, onde estratgias de
manipulao binria so realizadas quando se deseja acessar ou modificar algum bit
especfico.
O Mapa de rede o espao destinado para armazenar os vetores de alcance de todos
os possveis 32 dispositivos da rede. Em termos lgicos, se trata de uma matriz binria de
32x32 bits. O mapa de rede de cada dispositivo mestre composto pelo vetor de alcance
do prprio dispositivo e pelos vetores de alcance dos dispositivos por ele alcanados. Na
representao da linguagem de programao do Arduino ele, definido como um vetor
de 32 posies, cada uma com uma varivel inteira de 32 bits, totalizando 128 bytes de
memria ocupados.
5.3.3 Mecanismo de Busca e Retransmisso
Quando surge a necessidade de se transmitir uma mensagem para um dispositivo de
um cluster externo, primeiramente procurado no mapa de rede, dentro do vetor de
alcance do prprio dispositivo, se aquele cluster est classificado como ativo e dentro do
alcance. Caso o destinatrio esteja nesta lista, a mensagem enviada diretamente para
ele. Para o caso contrrio, o n transmissor ir buscar pelo destinatrio da mensagem no
vetor de alcance de algum dos ns com quem ele consegue se comunicar. Para o caso de
algum dos bits da coluna especfica do destinatrio, na matriz do mapa de rede, possuir
valor diferente de 0, a mensagem ser enviada para o dono do vetor de alcance no qual
isto foi constatado, que dever retransmiti-la para o destinatrio final. Na mensagem
enviada para o n intermedirio, dever haver um campo informando que ela deve ser
retransmitida e outros contendo informaes sobre o canal e a identificao do
destinatrio final. Informaes mais especficas sobre o formato da mensagem sero
abordadas na seo 6.1. Se o cluster com o qual se deseja comunicar no estiver marcado
como ativo em nenhuma das posies do mapa de rede, a mensagem no ser enviada e
um erro de comunicao ser sinalizado.
Neste tipo de comunicao, a mensagem circula por um nmero maior de ns da
rede, sendo que nenhum deles necessariamente estar disponvel para responder
solicitao de maneira imediata. Isto leva a um aumento no intervalo necessrio entre a
transmisso da mensagem para o cluster intermedirio e a chegada da reposta quando
comparado com os casos anteriores. Alm disso, a chance de ocorrncia de erros na
transmisso mltipla da quantidade de ns por onde ela passa. A Figura 15 exemplifica
com um diagrama de tempo uma situao onde o mestre do cluster A necessita de uma

UFRGS Mateus Streit Giaretta

21

informao contida em um escravo do cluster C. Para isso o cluster B serve como


intermedirio, retransmitindo a mensagem enviada por A.

Figura 15 Diagrama de tempo de uma mensagem retransmitida por um cluster


intermedirio Fonte: Autor
5.3.4 Construo e Atualizao do Mapa de rede
Para se fazer uso desta estrutura de retransmisso de mensagens, necessrio que os
ns possuam um mapa de rede atualizado de todos os dispositivos que estejam aptos
comunicao. Neste contexto, foi desenvolvido um mecanismo que atualiza as
informaes inerentes da rede de maneira dinmica medida que dispositivos so
adicionados. Ao ser inicializado, cada dispositivo mestre manda uma mensagem para
todos os canais ondem possam existir clusters.
A mensagem enviada para cada canal segue os mesmos passos de toda mensagem
usual, porm com configuraes de nmero e intervalo entre retransmisses aumentadas
de modo a vasculhar de uma maneira mais persistente todos os possveis canais da rede.
Para os canais que responderem mensagem enviada, o seu bit correspondente no vetor
de alcance atribudo o valor 1.
Um canal tido como fora do alcance ou inativo se, ao final de todas as tentativas de
retransmisso, nenhuma resposta for recebida do canal de destino. Isto vale tambm
para o caso onde ao se executar o passo de escutar o canal de destino antes de
transmitir, o canal permanea ocupado por um tempo de espera maior que o definido.
Isto indica a presena de rudo elevado no canal, impedindo qualquer comunicao. Para
estes casos o canal tido como no-alcanvel e marcado um 0 na sua respectiva
posio do vetor de alcance.
Aps checar todos os possveis canais da rede, o dispositivo possui uma relao
completa de todos os clusters que ele pode alcanar, armazenada no seu vetor de
alcance. A partir disso, ele envia o seu vetor para cada dispositivo encontrado, para que
os demais dispositivos saibam quem est ao seu alcance. Em resposta a esta mensagem
os demais dispositivos tambm enviam o seu prprio vetor de alcance. A unio destes
vetores forma o mapa de rede.

22 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

6 Camada de Aplicao
A camada de aplicao a interface mais direta da rede com o usurio. Neste
trabalho, considera-se o usurio como sendo o projetista de um sistema de automao.
Neste captulo sero abordadas funes e estratgias voltadas para definir o modo como
o sistema de automao gerencia os dados trocados.
6.1 Estrutura da Mensagem
O protocolo da camada de Enhanced ShockBurst define o formato e a estrutura do
pacote de dados a ser enviado, como mostrado na seo 4.1. Dentre todos os campos
contidos dentro deste pacote, o mais importante refere-se mensagem de dados
propriamente dita, nomeada pelo protocolo como Payload e delimitada pelo intervalo de
tamanho de 1 a 32 bytes. O protocolo de enlace responsvel por fornecer o acesso
deste pacote de dados no meio fsico a ser transmitido, entretanto em nenhum momento
ele se preocupa com o tipo de dados contido nele. Neste trabalho, o formato destes
dados e a maneira como eles so usados definido pela camada de aplicao. Onde ele
moldado para atender s necessidades de um sistema genrico de automao predial e a
estrutura de rede proposta.
O espao de 32 bytes destinado ao pacote de dados foi dividido em diferentes
campos. Na linguagem de programao do microcontrolador Arduino, isto se fez com a
montagem de uma estrutura de dados composta por diferentes tipos de variveis,
conhecida como Struct. As informaes contidas nas mensagens so divididas em um
cabealho, variveis de 8 e 32 bits e comandos associados a cada varivel. Uma
representao desta estrutura mostrada na Figura 16.

Figura 16 Estrutura da mensagem de dados Fonte: Autor


6.1.1 Cabealho
Neste subespao esto contidas informaes sobre o destinatrio e o remetente da
mensagem, alm de uma srie de bits de configurao denominados FLAGS, totalizando
um tamanho fixo de 5 bytes. As informaes sobre o destinatrio e o remetente da
mensagem so divididas em dois campos para cada, um deles definindo o canal associado
ao cluster em que o dispositivo est presente, e o outro a identidade que ele possui
dentro deste cluster. Estes dois campos juntos definem a identidade nica deste
dispositivo dentro da rede. Apesar de o protocolo de enlace j apresentar estas
informaes no pacote que envolve estes dados, esta redundncia necessria para
identificar o destinatrio final da mensagem, quando ela passa por ns intermedirios.
Alm disso, ela serve para evitar que rdios receptores acabem por ler e processar

UFRGS Mateus Streit Giaretta

23

mensagens que no estavam destinadas para seu endereo, falha esta que foi constatada
de maneira recorrente nos testes realizados.
No espao FLAGS, mostrado na Figura 17, so definidas algumas informaes bsicas
sobre a o tipo de mensagem que est sendo enviada. Elas so usadas para identificar de
maneira rpida o motivo da mensagem e desta forma direcionar o tratamento dado a ela.
O campo RETR indica que o receptor da mensagem no o destinatrio final da
comunicao, devendo este repass-la ao destinatrio presente na prvia identificao. O
bit RESP ativo quando o dispositivo que mandou a mensagem no est espera de uma
resposta do destinatrio. Para o campo MAP, o valor 1 atribudo quando a mensagem
enviada de atualizao do mapa de rede, neste caso o receptor sabe que o nico dado a
ser trocado o do vetor de alcance. Por ltimo, o campo DATA indica troca de dados. Os
demais bits do campo FLAGS encontram-se vazios e so destinados a futuras aplicaes.

Figura 17 Campo FLAGS Fonte: Autor


6.1.2 Variveis
Em um sistema de automao residencial, diferentes tipos de informao so
trocados entre seus componentes. Em sua maior parte pode-se considerar que sejam
variveis de pequena dimenso, como status de atuadores/sensores, comandos de
liga/desliga ou pequenos contadores. Porm, necessrio muitas vezes o envio de
informaes maiores ou com uma maior preciso numrica, tal como algumas leituras de
sensores ou o vetor de alcance, descrito na seo 5.3.2. Para tanto, foram definidas duas
categorias diferentes de variveis a serem enviadas. Uma delas compreende variveis de
8-bits, sendo destinado um espao para que seis destas possam ser enviadas em uma
mesma mensagem. A outra categoria est associada s variveis de tamanho maior, cada
uma ocupando 32 bits, onde permitido o envio de trs variveis simultaneamente.
Em cada categoria de tamanho, as variveis podem assumir trs diferentes formas,
sendo que cada formato possui uma extenso numrica diferente. Esta flexibilidade de
representao tem o propsito de atingir as necessidades das mais variadas aplicaes a
serem desenvolvidas em um ambiente de automao. Esta implementao foi possvel
devido a uma estrutura da linguagem de programao do Arduino chamada Union. Com o
uso dela, possvel definir um tipo de varivel que possa assumir diferentes formas prdefinidas. A Tabela 2 mostra os diferentes tipos de variveis permitidos, bem como a
extenso que elas podem atingir.

24 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
Tabela 2 Tipos de Variveis a serem trocadas Fonte (Brooks, 1999)

6.1.3 Comandos
Os comandos so campos de 8-bits de extenso, que esto associados a cada uma das
variveis contidas na mensagem, totalizando 6 comandos para variveis de 8-bits e 3
comandos para as de 32 bits, como mostrado na Figura 16. A funo do comando
orientar o receptor da mensagem sobre o que fazer com as variveis enviadas ou qual
varivel est sendo requisitada. Na Figura 18 mostrado o formato base de cada uma
destas estruturas.

Figura 18 Varivel comando Fonte: Autor


O primeiro campo de cada comando indica se a varivel associada a este est sendo
enviada para o destinatrio (escrita), ou se est sendo feito uma requisio de leitura de
alguma varivel. Neste ltimo caso, na resposta solicitao, a leitura requerida
alocada no mesmo campo destinado varivel associada a este comando. Os prximos
dois bits definem o tipo da varivel que est sendo enviada ou requisitada. Apesar de
possurem a mesma estrutura de comando, os tipos associados s variveis de 8-bits se
diferem das de 32-bits. Os 5 bits restantes representam um valor inteiro, que varia de 0 a
35, associado identificao da varivel. Esta identificao est associada a um conjunto
de variveis compartilhadas pela rede. Para cada tipo, existe um vetor com 35
possibilidades distintas de variveis a serem compartilhadas por cada dispositivo. Estas
variveis so de acesso global na rede e cabe a cada dispositivo definir quais das suas
informaes so compartilhadas com os outros por meio delas. Na Figura 19
exemplificado a maneira com dois comandos distintos so interpretados.

Figura 19 Exemplos de interpretao de comandos Fonte: Autor

UFRGS Mateus Streit Giaretta

25

7 Resultados de Ensaios Realizados


7.1 Ensaio de Comunicao Bidirecional entre Dois Componentes
Neste experimento, dois componentes da rede foram dispostos de maneira a ficarem
distanciados por aproximadamente 8 metros. As configuraes da rede incluam o uso de
confirmao de recebimento de mensagens (ACK), e at trs possveis retransmisses em
caso de falha. Estes dispositivos constituam um par mestre/escravo, onde o primeiro
enviava uma mensagem e aguardava pelo recebimento da resposta vinda do escravo.
Este ciclo de troca de mensagens foi repetido a cada 30 ms, onde a cada vez era medido o
tempo que levava para a mensagem enviada ser respondida.
Para medir a latncia entre transmisso e recepo, foi enviada uma mensagem
contendo dois comandos. O primeiro era de escrita, de uma varivel de 32 bits contendo
o tempo medido pelo transmissor pouco antes de enviar o pacote. Por sua vez, o segundo
comando requisitava a leitura da mesma varvel de 32-bits que havia sido escrita pelo
comando anterior. Com a chegada da reposta, o valor recebido era subtrado do tempo
atual.
Nesta configurao, foram testados trs diferentes cenrios. No primeiro, os dois
componentes se comunicavam livremente sem interferncias. A funo que escuta por
rudos no canal antes de transmitir, descrita na seo4.5, estava ativa. No segundo teste
foi adicionado configurao prvia um terceiro elemento, cuja funo era gerar
interferncia na rede. Este dispositivo foi programado para transmitir mensagens no
mesmo canal, com um ciclo que variava randomicamente entre 10 e 30 ms. Em um ltimo
experimento a interferncia foi mantida, mas desta vez a funo que escuta o canal foi
desativada. Os resultados destes ensaios podem ser vistos na Tabela 3.
Tabela 3 Ensaio de Comunicao Bilateral Fonte Autor

Como pode ser visto, na primeira situao, a comunicao obteve uma taxa
inexpressiva de erros. Para os casos onde foi adicionada a interferncia na rede,
possvel analisar claramente o efeito da funo de escuta. Apesar de ter adicionado uma
latncia maior para a rede, ela foi capaz de reduzir consideravelmente os efeitos da
interferncia. A latncia do terceiro caso tambm aumentou, em comparao com o
primeiro, devido ao maior nmero de retransmisses provocado pela interferncia.
7.2 Ensaio de Comunicao Interna ao Cluster
O objetivo deste ensaio analisar a comunicao entre um n mestre e quatro
escravos dispostos em uma topologia do tipo estrela, distanciados em 4 metros do n
central. A cada ciclo de comunicao, era enviada uma mensagem para cada n escravo,
com um espaamento de 50 ms para cada uma. A configurao de confirmao de
recepo de mensagens foi desativada, pois em experimentos foi detectado que, para

26 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
comunicao com mltiplos dispositivos, esta configurao acabava por provocar um
aumento expressivo na taxa de perda de pacotes.
O mesmo mecanismo para medir a latncia da rede do ensaio anterior foi novamente
utilizado, porm desta vez os resultados so apresentados de maneira grfica, como
segue na Figura 20. Nestes grficos, os pontos de valor de latncia que cruzam a linha de
1,5 milissegundos (ms) significam perdas de pacote. A numerao dos escravos indica a
ordem na qual a comunicao feita dentro do ciclo de transmisso.

Figura 20 Medida de latncia para ensaio com mltiplos dispositivos Fonte: Autor
Ao se analisar os resultados possvel acompanhar o efeito indesejado de outra
configurao da rede, o uso de retransmisses. Nota-se uma perda de qualidade na
comunicao dos ltimos escravos em relao aos primeiros. Isto se explica pela possvel
ocorrncia de retransmisses esprias vindas das primeiras transmisses. O uso de
retransmisses tambm afeta o determinismo do sistema.
7.3 Ensaio de Comunicao Entre Clusters
Neste ensaio, testado o comportamento da rede ao se efetuar uma comunicao
com um cluster externo. Nele, um mestre de um cluster se comunica com seus trs
escravos, com 30 ms de espao para cada comunicao, em seguida envia uma
mensagem para um cluster externo e aguarda pela resposta. O tempo de ciclo total deste
mestre composto por 90 ms de comunicao interna e outros 90 ms destinados a troca
de mensagens externas, totalizando 180 ms. J o outro cluster, destina 80 ms para troca
de dados interna e tambm 80 para externa, num total de 160 ms de ciclo. Neste ensaio a
configurao que permite retransmisses em caso de falha foi desativada. Os grficos
com a latncia de cada mensagem so vistos na Figura 21.

UFRGS Mateus Streit Giaretta

27

Figura 21 Latncia em comunicao interna e externa ao cluster Fonte: Autor


Ao analisar os resultados, notvel o aumento expressivo na latncia da mensagem
trocada com o cluster externo. Isto se deve ao fato deste no estar sempre disponvel
para responder s mensagens recebidas, devido s suas tarefas de comunicao interna.
possvel notar tambm um leve padro de variao no tempo de espera das mensagens,
isto se deve ao fato de ambos os mestres se comunicarem em um ciclo fixo, porm com
tempos diferentes.
Nos grficos da comunicao com os escravos, nota-se o efeito da desativao do uso
de retransmisses. Esta nova configurao provocou uma leve piora da comunicao dos
primeiros escravos, porm no visto mais a mesma discrepncia entre diferentes
transmisses do mesmo ciclo, presente no ensaio anterior.
7.4 Ensaio com o uso de Retransmisso de Mensagens
Com este experimento, pretende-se analisar o modo como a rede se comporta com o
uso de uma retransmisso de mensagem. Para isso, um n mestre envia uma mensagem
para o mestre de um cluster intermedirio, requisitando que esta seja retransmitida para
um terceiro destinatrio final. Para a resposta, a mensagem atravessa o mesmo caminho.
Cada cluster possui um tempo destinado para comunicao interna e outro para externa,
sendo estes tempos diferentes para cada um. O resultado do ensaio mostrado na Figura
22. Apesar do grfico mostrar apenas os 5 primeiros minutos, a extenso real do ensaio
foi de 191 minutos. O objetivo deste tempo prolongado foi confirmar a robustez do
sistema para transmisses prolongadas, o que de fato pde ser observado. No grfico
mostrado nota-se uma variao ainda maior na latncia entre a mensagem enviada e a
recebida.

28 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

Figura 22 Latncia de uma mensagem retransmitida entre clusters Fonte: Autor


7.5 Ensaio com o uso de componentes reais
Para testar o comportamento da rede em uma situao real, bem como a
funcionalidade dos comandos de escrita e leitura de variveis, foi montada sobre a rede
uma pequena aplicao de automao residencial. Esta aplicao era composta por trs
diferentes ns escravos espalhados a uma distncia de aproximadamente 5 metros de um
n mestre central. As mensagens eram trocadas com um tempo de ciclo de 300 ms.
Um dos ns era responsvel pela leitura da temperatura e umidade do ambiente,
provindas de um sensor DHT11, salvas em duas variveis globais de 8 bits. Outro n
executava a leitura de um teclado numrico, armazenando a ltima tecla. O terceiro
escravo possua acoplado um display LCD de 16x2 linhas, que mostrava alternadamente o
valor da temperatura ou da umidade do ambiente, de acordo com uma varivel booleana
enviada pelo n mestre. Este ltimo era encarregado de enviar comandos de leitura e
escrita para todos os componentes e exportar os dados para um computador por meio de
uma comunicao serial. O mestre tambm decidia o que seria mostrado no display LCD,
de acordo com uma lgica baseada na ltima tecla lida pelo teclado numrico.
O sistema aparentemente funcionou corretamente, porm notou-se uma perda
significativa da taxa de sucesso de transmisso. Para o escravo com o sensor a taxa foi de
96,51%, para o n com teclado foi de 89,46% e para o display 80,03%. Este efeito explicase pela interferncia de funes das bibliotecas necessrias para acionar cada um destes
componentes. Como cada biblioteca desenvolvida separadamente e como todas elas
compartilham um nmero limitado de recursos do processador, ao juntar-se vrias dessas
bibliotecas em uma mesma aplicao quase impossvel prever os conflitos entre as
funes de cada uma delas. Para tanto, recomenda-se o uso de um segundo
microprocessador, acoplado por uma ligao serial ou de outro barramento, exclusivo
para o acionamento e leitura de sensores ou atuadores.

UFRGS Mateus Streit Giaretta

29

8 Concluses e Trabalhos Futuros

Em um cenrio onde a automao residencial ainda vista como um artigo de luxo


para muitos, devido ao seu alto custo, a proposta apresentada neste projeto mostra que
o estado tecnolgico atual j permite o desenvolvimento de sistemas que utilizem
dispositivos de baixo custo, mas que atendam aos requisitos das aplicaes. Neste
contexto, o sistema proposto, apesar de suas limitaes em termos de complexidade de
funes, mostrou-se capaz de atuar de forma a suprir diversas necessidades presentes no
ambiente de automao residencial de pequena escala.
A expanso das funcionalidades originais do transceptor nRF24L01+, permitiu o
desenvolvimento de uma estrutura de rede mais complexa e adaptada a aplicaes de
automao. O sistema mostrou-se flexvel de modo a acomodar troca de dados com
tempo determinstico, e tambm aceitar mensagens vindas de maneira aleatria. A
implementao de diferentes topologias permitiu a expanso da capacidade de alcance
de sinal para diversos ambientes. Enquanto isso, a separao hierrquica dos ns em
mestres e escravos e a criao de clusters, associada a estratgias de conteno de falhas,
foram capazes de proporcionar resultados satisfatrios em termos de sucesso nas
transmisses, quando comparados com estudos previamente realizados com o uso deste
mesmo dispositivo.
Apesar de ser baseado em um protocolo considerado no padro, o seu
desenvolvimento em uma plataforma de compartilhamento de software livre, como a
Arduino, permite uma interligao deste trabalho com demais projetos futuros. Os
resultados obtidos neste trabalho mostram um sistema promissor. Porm, como projeto,
ele ainda no se encontra totalmente pronto para um possvel uso comercial. O cdigo
desenvolvido ainda necessitaria de um maior amadurecimento, em termos de uma busca
por possveis erros e por uma maior eficincia de processamento e uso de memria.
Funcionalidades tambm poderiam ser adicionadas, como o reconhecimento dinmico
das mensagens recebidas, sem a necessidade de reservar um tempo para esperar pela
resposta das requisies enviadas. Adicionalmente, o projeto ainda carece de um nmero
maior de testes com o uso de componentes reais, de forma a otimizar suas funes para
uma gama maior de aplicaes. Estas tarefas ficam destinadas a um possvel trabalho
futuro.

30 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial

9 Referncias

ALIEXPRESS. aliexpress.com 2014. Disponvel em: < http://www.aliexpress.com >. Acesso


em: 27 de maio de 2014.
AMS. Adjustable/Fixed Low Dropout Linear Regulator. 2014. Disponvel em: <
http://www.ams-semitech.com/attachments/File/AMS1117_20120314.pdf >. Acesso em:
27 de maio de 2014.
ARDUINO. Arduino Pro Mini. 2014. Disponvel em: <
http://arduino.cc/en/Main/ArduinoBoardProMini >. Acesso em: 27 de maio de 2014.
BROOKS, D. R. C Programming: The Essentials for Engineering and Scientists. SpringerVerlag New York, Inc., 1999. 496 ISBN 0387986324.
CHRIST, P. et al. Performance analysis of the nRF24L01 ultra-low-power transceiver in a
multi-transmitter and multi-receiver scenario. Sensors, 2011 IEEE, 2011, 28-31 Oct. 2011.
p.1205-1208.
COLIZ, J. Driver for nRF24L01(+) 2.4GHz Wireless Transceiver. 2012. Disponvel em: <
http://maniacbug.github.io/RF24/ >. Acesso em: 21/05/2014.
DAY, J. D.; ZIMMERMANN, H. The OSI reference model. Proceedings of the IEEE, v. 71, n.
12, p. 1334-1340, 1983. ISSN 0018-9219.
DIAS, C. L. D. A.; PIZZOLATO, N. D. DOMTICA: Aplicabilidade e Sistemas de Automao
Residencial. Vrtices, v. V. 6, n. 3, n. set/dez 2004, 2004. ISSN 1809-2667.
GERRIOR, M.; WOODINGS, R. W. Avoiding Interference in the 2.4-GHz ISM Band. 2006.
Disponvel em: <
http://www.eetimes.com/document.asp?doc_id=1273359&page_number=1 >. Acesso
em: 22/05/2014.
NANHAO, Z. et al. High Data Rate Wireless Sensor Networks Research. 2008.
NORDIC. nRF24L01 Product Specification. SEMICONDUCTOR, N.: 74 p. 2007.
Redes da Organizao Profibus. Mecatrnica Atual 2004. Disponvel em: <
http://www.mecatronicaatual.com.br/educacao/1156-redes-da-organizao-profibus >.
Acesso em: em: 22/05/2014.
URDIAIN, L. O. et al. Wireless Sensor Network Protocol for Smart Parking Application
Experimental Study on the Arduino Platform. AMBIENT 2012: The Second International
Conference on Ambient Computing, Applications, Services and Technologies. THINKMIND.
Barcelona, Spain: 45 a 48 p. 2012.

UFRGS Mateus Streit Giaretta

31

10 Anexos
Nos seguintes anexos so apresentadas as principais funes de programao
implementadas no microcontrolador Arduino durante o desenvolvimento deste trabalho.
10.1 Definies da Estrutura da Mensagem
//DEFINIO DE VALORES USADOS PARA CONFIGURAES
#define TYPE1 32
#define TYPE2 64
#define TYPE3 96
#define READ false
#define WRITE true
//ENUMERAO DE FLAGS
enum flag_enum{
MAP, ANSWER, RET,DATA
};
typedef enum flag_enum flag_t;
//DEFINIO DO TIPO DA VARIVEL DE 8-BITS DA MENSAGEM
typedef union
{
bool BOOL;
uint8_t UINT8;
int8_t INT8;
} data0_t;
//DEFINIO DO TIPO DA VARIVEL DE 8-BITS DA MENSAGEM
typedef union
{
int32_t INT32;
uint32_t UINT32;
float FLOAT;
} data1_t; //4BYTES
//ESTRUTURA DA MENSAGEM
struct message_t {
uint8_t sourceID; //INDENTIFICAO DO REMETENTE
uint8_t destID; // IDENTIFICAO DO DESTINATRIO
uint8_t sourceCH; //CANAL DO REMETENTE
uint8_t destCH; //CANAL DO DESTINATRIO
uint8_t flags;//FLAGS
uint8_t dcmd[6]; //COMANDOS ASSOCIADOS S VARIVEIS DE 8-BITS
data0_t dvar[6]; //VARIVEIS DE 8-BITS
uint8_t acmd[3];//COMANDOS ASSOCIADOS S VARIVEIS DE 32-BITS
data1_t avar[3];//VARIVEIS DE 32-BITS
};
typedef struct message_t message_type; //DEFINIO DA VARIVEL DO TIPO MENSAGEM

10.2 Funo que Escuta por Rudos no Canal


bool listen(void)
{
radio.startListening(); //RADIO CONFIGURADO COMO RECEPTOR
unsigned long started_listen = micros();//TEMPO INICIAL
unsigned long time = started_listen;
bool ok = false;
bool air;

32 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
unsigned long rand = random(100,800); //GERA UM VALOR ALEATRIO ENTRE 100 E 800 ms
while (((micros () - time) < rand) | ((micros() - started_listen) < 4000))//EXECUTA CICLO
DURANTE TEMPO GERADO OU TIMEOUT
{
air=radio.testCarrier();//ESCUTA O CANAL
if (air)//CASO ENCONTRE ALGO
{
rand = random(100,800); //GERA OUTRO NMERO ALEATRIO
time = micros (); //REINICIA A CONTAGEM
ok = false; //
}
else
ok = true;
}
radio.stopListening();//RDIO DEFINIDO COMO TRANSMISSOR
return ok; //RETORNA ESTADO DO CANAL
}

10.3 Funo que Checa o Recebimento de Mensagens


void check_radio()
{
if (radio.available())//CASO O RDIO TENHA RECEBIDO ALGUMA MENSAGEM
{
message_type rx;//DECLARAO DE VARIVEL DO TIPO MENSAGEM
uint8_t siz = radio.getDynamicPayloadSize();//L O TAMANHO DA MENSAGEM RECEBIDA
radio.read(&rx, siz);//L A MENSAGEM
interpret_message (siz,rx);//INTERPRETA O CONTEDO DA MENSAGEM
}
}

10.4 Funo que Escreve a Mensagem e Aguarda pela Resposta


struct message_t write_and_ack (uint8_t siz , uint8_t time, struct message_t msg)
{
bool ok = write_ch(siz, msg); //ESCREVE MENSAGEM
if(ok)//CASO TRANSMISSO TENHA SUCESSO
{
radio.setChannel(MYCHANNEL);//DEFINE NOVAMENTE O RDIO NO SEU CANAL
radio.startListening();//RECEPTOR
unsigned long started_waiting_at = millis();
bool timeout = false;
while ( ! radio.available() && ! timeout )//ESPERA PELA RESPOSTA
if (millis() - started_waiting_at > time )
timeout = true;
if ( timeout )
Serial.print("FAIL");
else
{
uint8_t siz = radio.getDynamicPayloadSize();
radio.read( &msg, siz);//L MENSAGEM RECEBIDA
}
}
radio.stopListening();//TRANSMISOR
return msg;//RETORNA MENSAGEM RECEBIDA
}

UFRGS Mateus Streit Giaretta

33

10.5 Funo que Escreve a Mensagem


bool write_ch(uint8_t siz, struct message_t msge)
{
bitWrite(msge.flags,DATA,true); //ATIVA FLAG DE TROCA DE DADOS
radio.setChannel(msge.destCH); //DEFINE CANAL DE DESTINO
radio.openWritingPipe(BASEADDRESS+msge.destID); //DEFINE ID DE DESTINO
bool air = listen(); //ESCUTA CANAL ANTES DE TRANSMITIR
if (!air)//CANAL SE CONDIES DE TRANSMISSO
{
radio.setChannel(MYCHANNEL);
return false;//MENSAGEM NO ENVIADA
}
else
{
if (siz==0)//DEFINE TAMANHO DA MENSAGEM
siz=11;
else
{
if (siz==1) //MENSAGEM SOMENTE COM VAR DE 8-BITS
siz=17;
else
siz=32; //MENSAGEM COMPLETA
}
radio.writeFast(&msge,siz);//ESCREVE MENSAGEM
bool ok = radio.txStandBy();
return ok;
}
}

10.6 Funo que Escreve um Comando


uint8_t write_command(bool flow, uint8_t type, uint8_t tag)
{
uint8_t command=type; //TIPO DA VARIVEL - TYPE1-BOOL/FLOAT TYPE2-UINT8/UINT32
TYPE3-INT8/INT32
bitWrite(command,7,flow);//LEITURA OU ESCRITA
command = command + tag;//TAG DA VARIVEL GLOBAL DO RECEPTOR
return command;
}

10.7 Funo que inicializa e Rotula Mensagem a ser Enviada


void lable_message(uint8_t mCH, uint8_t mID, uint8_t dCH, uint8_t dID, struct message_t *msg)
{
msg->sourceID=mID;
msg->destID=dID;
msg->sourceCH=mCH;
msg->destCH=dCH;
msg->flags=0;
for (uint8_t i=0; i<6; i++)//ZERA VARAVEIS DE 8-BITS
{
msg->dcmd[i]=0;
msg->dvar[i].UINT8=0;
}

34 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
for (uint8_t i=0; i<3; i++)//ZERA VARIVEIS DE 32-BITS
{
msg->acmd[i]=0;
msg->avar[i].UINT32=0;
}
}

10.8 Funo que Interpreta Mensagem Recebida


void interpret_message (uint8_t siz, struct message_t msg)
{
if ((msg.destID == MYID) & (msg.destCH==MYCHANNEL))//MSG PARA MIM?
{
message_type tx;//PREPARA MSG DE RESPOSTA
lable_message(MYCHANNEL, MYID, msg.sourceCH, msg.sourceID, &tx);
if (bitRead(msg.flags,DATA))//CASO MSG FOR DE TROCA DE DADOS
{
for (int8_t i=0; i<6; i++)//L COMANDOS DE VAR DE 8-BITS
{
uint8_t type = msg.dcmd[i] & 112;
type = type >> 5;
if (type != 0) //CASO TIPO DA VAR FOR 0 O COMANDO CONSIDERADO VAZIO
{
uint8_t tag = msg.dcmd[i] & 15;//L TAG DA MSG
if (bitRead(msg.dcmd[i],7)) // RECEBE VAR ENVIADAS
{
switch (type){
case(1):
var_bool[tag]=msg.dvar[i].BOOL;//ACESSA VAR GLOBAL REQUERIDA
break;
case(2):
var_uint8[tag]=msg.dvar[i].UINT8;//ACESSA VAR GLOBAL REQUERIDA
break;
case(3):
var_int8[tag]=msg.dvar[i].INT8;//ACESSA VAR GLOBAL REQUERIDA
break;
default:
break;
}
}
else// RESPONDE VAR REQUERIDAS
{
switch (type){//ACESSA VAR GLOBAL REQUERIDA
case(1):
tx.dvar[i].BOOL=var_bool[tag];
break;
case(2):
tx.dvar[i].UINT8=var_uint8[tag];
break;
case(3):
tx.dvar[i].INT8=var_int8[tag];
break;
default:
break;
}
}
}
}

UFRGS Mateus Streit Giaretta


if(siz>17) //TESTA SE H VARIVEIS OU COMANDOS DE 32 BITS NA MENSAGEM
{
for (int8_t i=0; i<3; i++)//L COMANDOS DE VAR DE 32-BITS
{
uint8_t type = msg.acmd[i] & 112;
type = type >> 5;
if (type != 0)
{
uint8_t tag = msg.acmd[i] & 15;
if (bitRead(msg.acmd[i],7))// RESPONDE REQUISIO
{
switch (type){//RECEBE VAR ENVIADAS
case(1):
var_float[tag]=msg.avar[i].FLOAT;
break;
case(2):
var_uint32[tag]=msg.avar[i].UINT32;
break;
case(3):
var_int32[tag]=msg.avar[i].INT32;
break;
}
}
else
{
switch (type){//ENVIA VARIAVEIS REQUERIDAS
case(1):
tx.avar[i].FLOAT=var_float[tag];
break;
case(2):
tx.avar[i].UINT32=var_uint32[tag];
break;
case(3):
tx.avar[i].INT32=var_int32[tag];
break;
default:
Serial.print(" NOT TYPE ");
Serial.print(type);
break;
}
}
}
}
}
}
bitWrite(tx.flags,ANSWER,true);//FLAG DE RESPOSTA
bool ok = write_ch(3, tx); //ENVIA RESPOSTA
radio.startListening(); //RECEPTOR

if (bitRead(msg.flags,MAP))//CASO MSG SEJA DE ATUALIZAO DE MAPA DE ALCANVE


{
bool flag = bitRead(msg.flags,ANSWER);
if(!(bitRead(msg.flags,ANSWER)))
{
message_type tx;
lable_message(MYCHANNEL, MYID, msg.sourceCH, msg.sourceID, &tx);
bitWrite(channels[MYCHANNEL/2],(msg.sourceCH)/2, true); //registra canal na lista de
alcanaveis
bitWrite(tx.avar[0].INT32, (msg.sourceCH)/2, true); //atualiza campo de mensagem

35

36 Projeto de uma Rede de Comunicao sem Fio Baseada no Transceptor nRF24L01+ Voltada
para Sistemas de Automao Predial
tx.destCH = msg.sourceCH; //destination channel
tx.destID = 0x00; //destination ID
bitWrite(tx.flags,MAP,true);
bitWrite(tx.flags,ANSWER,true);
bool ok = write_ch(3, tx);
channels[(msg.sourceCH)/2] = msg.avar[0].INT32;//ATUALIZA MAPA DE ALCANCE
for (int i=0; i<64; i++)
{
if (bitRead(channels[MYCHANNEL/2],i) > bitRead(msg.sourceCH,i))
{
tx.destCH = i*2; //
bool ok = write_ch(3, tx);
}
}
//LIMPA FLAGS
bitWrite(tx.flags,MAP,false);
bitWrite(tx.flags,ANSWER,false);
}
}
}
else
{
if (bitRead(msg.flags,RET)) //CASO MENSAGEM SEJA PARA RETRANSMISSO
{
uint8_t dest_id = msg.sourceID;//SALVA DADOS DO REMETENTE
uint8_t dest_ch = msg.sourceCH;
message_t tx = msg;
lable_message(0,0,0,0,&msg); //LIMPA VARIAVL DE RECEBIMENTO
tx.sourceID = MYID;//SE COLOCA COMO REMETENDE DA MSG RETRANSMITIDA
tx.sourceCH = MYCHANNEL;
bitWrite(tx.flags,RET,false); //DESATIVA FLAG DE RETRANSMISSO
msg = write_and_ack (3, 60, tx); //RETRANSMITE MSG PARA DEST FINAL
if ((msg.destID == MYID) & (msg.destCH==MYCHANNEL))//CASO RESPOSTA TENHA
CHEGADO
{
tx = msg;
tx.destID = dest_id;//DEFINE DESTINATARIO
tx.destCH = dest_ch;
bitWrite(tx.flags,ANSWER,true); //DESATIVA FLAG DE RETRANSMISSA
bool ok = write_ch(3, tx);//ENVIA RESPOSTA
}
radio.startListening();//RECEPTOR
}
}
}

10.9 Funo que Envia Mapa de Rede


void send_map ()
{
//envia sua lista de dispositivos ao alcance para todos os dispositivos encontrados
bitWrite(tx.flags,MAP,true);
for (int i=0; i<64; i++)
{
if (bitRead(channels[MYCHANNEL/2],i))//envia somente para canais j mapeados
{
bool air = listen();
if (!air)
{ //canal no est em condies de comunicao

UFRGS Mateus Streit Giaretta

37

bitWrite(channels[MYCHANNEL/2], i, false); //elimina canal da lista


bitWrite(tx.var3.INT64, i, false);
}
else
{
//envia mensagem e aguarda por resposta
bool ok = radio.write( &tx, sizeof(message_t));
if (!ok) //se no obtiver resposta
bitWrite(channels[MYCHANNEL/2], i, false); //elimina canal da lista
bitWrite(tx.var3.INT64, i, false);
}
}
bitWrite(tx.flags,MAP,false); //desativa flag de envio de mapa de dispositivos
}
}

10.10 Funo que Mapeia Dispositivos ao Alcance


void channel_search ()
{
//aumenta o nmero de tentativas de retransmisso e o intervalo entre eleas
radio.setRetries(30,10);
//escreve somente para os dispositivos mestres
radio.openWritingPipe(BASEADDRESS);
// tenta comunicao com todos os canais possveis
for (int i=0; i<64; i++)
{
//desloca um bit para a esquerda
radio.setChannel(i*2);
//escuta o canal antes de transmitir para no atrapalhar uma possvel comunicao em curso
bool air = listen();
if (!air)
{
//canal no est em condies de comunicao
bitWrite(channels[MYCHANNEL/2], i, false);
}
else
{
//envia mensagem e aguarda por ACK
bool ok = radio.write( &tx, sizeof(message_t));
if (ok)
//dispositivo reconhecido
bitWrite(channels[MYCHANNEL/2], i, true);
else
//canal no sendo usado
bitWrite(channels[MYCHANNEL/2], i, false);
}
//imprime informaes para debug
Serial.print(i*2);
Serial.print("-");
bool a = bitRead(channels[MYCHANNEL/2],i);
Serial.print(a);
Serial.print(" ");
}
//salva o mapa de dispositivos ao alcance no seu respectivo campo da estrutura de mensagem
tx.var3.INT64 = channels[MYCHANNEL/2];
send_map(); //envia sua lista de dispositivos ao alcance para todos os dispositivos
}