Plataforma modular
de rede sem fio para
monitoramento
remoto
Projeto de conclusão de curso de graduação de Engenharia Elétrica –
Pontifícia Universidade Católica do Paraná.
Fernando Fidelis Schauenburg
26/6/2008
1 Sumário
1
2
3
4
Sumário ............................................................................................................................... 2
Lista de figuras .................................................................................................................... 3
Introdução ........................................................................................................................... 4
Detalhamento do projeto ................................................................................................... 6
4.1
4.2
Arquitetura da plataforma .......................................................................................... 6
Hardware..................................................................................................................... 8
4.2.1
4.2.2
4.2.3
4.2.4
4.2.5
Transceiver de rádio ............................................................................................... 8
Microcontrolador ................................................................................................... 9
Comunicação USB ................................................................................................ 10
Fonte de alimentação .......................................................................................... 11
Interfaces para sensores e atuadores .................................................................. 12
4.2.5.1
4.2.5.2
4.2.5.3
4.2.5.4
4.2.5.5
4.3
I/O Digital ...................................................................................................... 13
Entradas Analógicas ...................................................................................... 14
I²C .................................................................................................................. 15
SPI.................................................................................................................. 17
PWM.............................................................................................................. 19
Software .................................................................................................................... 21
4.3.1 Microcontrolador ................................................................................................. 21
4.3.2 PC ......................................................................................................................... 23
4.4
Protocolos de comunicação ...................................................................................... 24
4.4.1 Rádio .................................................................................................................... 24
4.4.1.1
4.4.1.2
4.4.1.3
4.4.1.4
4.4.1.5
Preâmbulo ..................................................................................................... 25
SFD e Tamanho de Quadro ........................................................................... 25
FCS ................................................................................................................. 25
Controle e Endereços .................................................................................... 26
Payload .......................................................................................................... 26
4.4.2 USB ....................................................................................................................... 26
4.5
Utilização da plataforma ........................................................................................... 28
4.5.1 Painel de Controle ................................................................................................ 28
4.5.1.1
4.5.1.2
4.5.1.3
4.5.1.4
4.5.1.5
4.5.1.6
4.5.1.7
Configuração ................................................................................................. 28
LEDs ............................................................................................................... 29
I/O Digital ...................................................................................................... 30
ADC ................................................................................................................ 31
I²C .................................................................................................................. 31
SPI.................................................................................................................. 32
PWM.............................................................................................................. 32
4.5.2 API ........................................................................................................................ 32
5
Conclusão .......................................................................................................................... 34
2 Lista de figuras
FIGURA 1: TOPOLOGIA DA REDE. .................................................................................................................................... 6
FIGURA 2: CAMADAS DA PLATAFORMA. ........................................................................................................................... 7
FIGURA 3: PLACA DESENVOLVIDA PARA O SISTEMA. ............................................................................................................ 8
FIGURA 4: LEDS INDICADORES DE STATUS. ....................................................................................................................... 8
FIGURA 5: AT86RF230 E SEU DIAGRAMA DE BLOCOS. ....................................................................................................... 9
FIGURA 6: MICROCONTROLADOR AVR ATMEGA1281. ...................................................................................................... 9
FIGURA 7: DIAGRAMA DE TRANSMISSÃO DE DADOS VIA USART. ........................................................................................ 10
FIGURA 8: CONVERSOR USB-UART FT232R................................................................................................................. 11
FIGURA 9: CONECTOR DE ALIMENTAÇÃO DC E JUMPER DE SELEÇÃO..................................................................................... 11
FIGURA 10: CABO PARA ALIMENTAÇÃO POR BATERIA. ....................................................................................................... 12
FIGURA 11: ALIMENTAÇÃO DE 3,3V PARA CIRCUITOS EXTERNOS......................................................................................... 12
FIGURA 12: CONECTORES DE IO. .................................................................................................................................. 13
FIGURA 13: PINOS DE ENTRADA EM ALTA IMPEDÂNCIA. .................................................................................................... 13
FIGURA 14: PINOS DE ENTRADA COM PULL-UP INTERNO.................................................................................................... 14
FIGURA 15: DIAGRAM DE BLOCOS DO ADC. ................................................................................................................... 14
FIGURA 16: CONECTOR DE ENTRADA DE SINAIS ANALÓGICOS.............................................................................................. 15
FIGURA 17: BARRAMENTO I²C. .................................................................................................................................... 16
FIGURA 18: TRANSMISSÃO DE DADOS NO BARRAMENTO I²C. ............................................................................................. 16
FIGURA 19: CONECTOR I²C. ........................................................................................................................................ 17
FIGURA 20: BARRAMENTO SPI (UM MESTRE E TRÊS ESCRAVOS).......................................................................................... 17
FIGURA 21: DIAGRAMA DE TEMPO E POLARIDADE DO CLOCK DO BARRAMENTO SPI. ............................................................... 18
FIGURA 22: CONECTOR SPI. ........................................................................................................................................ 19
FIGURA 23: GERAÇÃO DE UMA SENÓIDE POR PWM. ....................................................................................................... 19
FIGURA 24: CONECTOR DE PWM. ............................................................................................................................... 20
FIGURA 25: DIAGRAMA DE BLOCOS DO FIRMWARE........................................................................................................... 21
FIGURA 26: FLUXOGRAMA DO FIRMWARE DO MICROCONTROLADOR. .................................................................................. 23
FIGURA 27: DIAGRAMA DE BLOCOS DA API. ................................................................................................................... 24
FIGURA 28: FORMATO DE QUADRO DE COMUNICAÇÃO POR RÁDIO. ..................................................................................... 25
FIGURA 29: FORMATO DE QUADRO DA COMUNICAÇÃO USB.............................................................................................. 26
FIGURA 30: SEQÜÊNCIA DE ESCAPE PARA TRANSMISSÃO DE CARACTERES RESERVADOS NA USB. ............................................... 27
FIGURA 31: VISÃO GERAL DO PAINEL DE CONTROLE. ......................................................................................................... 28
FIGURA 32: CONFIGURAÇÃO DO PAINEL DE CONTROLE. ..................................................................................................... 29
FIGURA 33: PAINEL DE CONTROLE - LEDS. ..................................................................................................................... 29
FIGURA 34: PAINEL DE CONTROLE - I/O DIGITAL. ............................................................................................................. 30
FIGURA 35: PAINEL DE CONTROLE – ADC ...................................................................................................................... 31
3 Introdução
Sistemas de controle sem fio encontram aplicação nas mais diversas áreas comerciais e
industriais, por proporcionarem grande felixibilidade e custo de implantação reduzido. A tecnologia
sem fio é ideal para qualquer tipo de planta, tanto nova quanto já existente, pois permite criar redes
de atuação e controle de forma rápida e eficiente. No caso de plantas novas, não é necessário
implantar uma infraestrutura de rede durante a construção, o que reduz os custos. Já no caso de
plantas existentes, os gastos com alteração no ambiente são mínimos, reduzindo-se a providenciar
alimentação para os dispositivos de rede. Este custo pode, no entanto, ser até mesmo nulo, caso
baterias sejam empregadas. Além da vantagem do custo, as redes sem fio apresentam uma enorme
flexibilidade, integrando-se facilmente a qualquer tipo de ambiente. Devido ao fato de seus
elementos serem essencialmente móveis, a rede sem fio pode ser adaptada de maneira muito
rápida a mudanças de requisitos nos serviços ou mudanças físicas na coniguração do ambiente,
como as geradas por reformas.
A comunicação sem fio, no entanto, é uma área relativamente complexa da engenharia. As
redes sem fio requerem um tempo maior de desenvolvimento do que as redes cabeadas, pois uma
série de fatores inlfui na propagação dos sinais de rádio-freqüência, tornando necessária a
implementação de protocolos de comunicação mais robustos e complexos. Esta implementação
consome, em geral, um tempo muito grande que poderia ser usado para o desenvolvimento de
novas funcionalidades para a aplciação em si. Muitas vezes, portanto, embora uma rede sem fio
agregue flexibilidade e valor ao produto, as redes cabeadas são escolhidas para o desenvolvimento
de aplicações de controle devido à facilidade de implementação por parte do desenvolvedor.
A proposta do projeto é construir uma plataforma de rede sem fio do tipo LR-WPAN (Low
Rate Personal Area Network) para simplificar a implementação de aplicações de monitoramento e
atuação. O desenvolvedor da aplicação utiliza a rede na forma de uma API desenvolvida para o
computador que torna a comunicação via rádio absolutamente transparente.
A plataforma desenvolvida compreende a API para o computador, que torna transparente o
acesso à rede, além de dispositivos de rede capazes de se comunicar via rádio-freqüência com o
computador na banda de freqüência de 2,4GHz. As placas que compõem a rede utilizam um
transmissor baseado no padrão 802.15.4, apesar de o protocolo em si não ter sido completamente
implementado devido à alta complexidade não requerida pelo projeto.
As placas contém uma interface de hardware, na qual é possível realizar a conexão de
sensores ou atuadores através de barramentos comuns na indústria, como SPI e I²C. Essa interface
de hardware é acessível a partir da API, que envia comandos para as placas. Estas, por sua vez,
recebem os comandos originados na API, os executam e, caso necessário, enviam uma resposta ao
computador. Este mecanismo cria ilusão de que os sensores ou atuadores estão ligados diretamente
ao computador, reduzindo drasticamente o tempo de desenvolvimento, uma vez que toda a parte
de comunicação já está resolvida. O tempo que seria usado para a implementação de depuração da
comunicação sem fio pode ser economizado ou utilizado de outra maneira pelo desenvolvedor.
A seção 4.1 apresenta a arquitetura da solução implementada, com detalhes sobre o
funcionamento da rede, como modos de endereçamento e fluxo de informações.
O hardware projetado é descrito na seção 4.2, que provê os detalhes de implementação dos
diversos blocos que compõem o sistema. É apresentada uma descrição de cada funcionalidade
provida pela plataforma, bem como instruções para utilização das interfaces para sensores e
atuadores. O princípio de funionamento dos barramentos e das tecnologias utiizadas também é
descrito nesta seção.
O software, decrito na seção 0, pode ser divido em duas partes: microcontrolador e PC. O
software do microcontrolador realiza comunicação sem fio e autação nas interfaces de hardware,
enquanto o software do computador compreende a implementação da API de acesso à rede.
Existem dois protocolos de comunicação utilizados no sistema, descritos na seção 4.4. O
primeiro diz respeito à comunicação de rádio entre elementos das rede. O segundo diz respeito à
comunicação via USB entre o computador e o elemento coordenador da rede.
A seção 4.5 apresenta instruções de utilização da plataforma, que pode ser utilizada de duas
maneiras: painel de controle ou API. O painel de controle é uma aplicação que permite controlar a
rede a partir de uma interface gráfica, enquanto a API permite o acesso à rede através de uma
biblioteca de programação.
4 Detalhamento do projeto
4.1 Arquitetura da plataforma
A plataforma foi implementada na forma de uma rede sem fio em estrela, com um
coordenador e diversos dispositivos remotos. O coordenador é conectado ao PC por meio de um
cabo USB e realiza a interface entre a aplicação e a rede, enquanto os dispositivos remotos
implementam a interface física com sensores e atuadores. Toda a comunicação é feita entre o
coordenador e um dispositivo remoto por vez. A transmissão de pacotes por parte do coordenador
destinados a todos os dispositivos na rede (broadcast) é permitida, mas é proibida a troca de
informações diretamente entre dois dispositivos remotos.
Figura 1: Topologia da rede.
Os endereços de rede utlizados são números inteiros não sinalizados de 16 bits,
possibilitando o endereçamento teórico de até 65535 dispositivos remotos. Cada dispositivo remoto
deve ser previamene configurado com um endereço de rede único maior ou igual a 1, sendo o
enredeço 0 reservado para o coordenador da rede. O endereço de rede de um dispositivo é gravado
na memória EEPROM iterna do microcontrolador e carregado para a memória RAM durante a
incialização. Desta maneira, as placas podem ser desligadas sem que percam suas configurações.
Para utilizar a plataforma, o usuário deve conectar os sensores ou atuadores desejados à
interface de hardware adequada de um dispositivo remoto. Dessa maneira, os sensores podem ser
lidos e os atuadores podem ser acionados através da rede de forma transparente com o uso da API
no PC que executa a aplicação final, como mostra a Figura 2.
Figura 2: Camadas da plataforma.
4.2 Hardware
O hardware envolvido no projeto compreende um conjunto de placas contendo um
microcontrolador, um transmissor de rádio, comunicação USB e interfaces comuns na indústria para
sensores e atuadores. O desenvolvimento das placas foi realizado inteiramente pelo aluno, desde a
criação do diagrama esquemático até o desenho do circuito impresso. Devido à sensibilidade das
regiões da placa com sinais de RF, no entanto, as placas foram produzidas em uma empresa
especializada em confecção de ciruitos impressos.
As placas, mostradas na Figura 3, foram desenvolvidas de modo a terem o tamanho mais
reduzido possível, uma vez que a intenção é utilizar o sistema de forma não invasiva em plantas já
existentes e facilitar a inclusão em plantas novas. Dessa maneira, não é necessária uma grande
preocupação com espaço para instalação dos dispositivos.
Figura 3: Placa desenvolvida para o sistema.
Foram previstos na placa três LEDs (acesos na Figura 3 e mostrados em detalhe na Figura 4),
que podem ser utilizados para indicação de status. Durante o desenvolvimento, no entanto, eles
foram de grande utilidade para depurar o software da plataforma.
Figura 4: LEDs indicadores de status.
Transceiver de rádio
O transceiver de rádio utilizado foi o AT86RF230, da Atmel. O AT86RF230 é um transmissor e
receptor de rádio na banda de freqüência de 2,4GHz, especialmente desenvolvido para aplicações
802.15.4/ZigBee. Todos os componentes críticos de RF, exceto o cristal oscilador, capacitores de
descoplamento e a antena, são integrados dentro do chip. A sua operação se dá através de uma
interface SPI, presente na maioria dos microcontroladores modernos.
4.2.1
Figura 5: AT86RF230 e seu diagrama de blocos.
A modulação
lação do sinal de RF é feita através de O-QPSK,
O QPSK, de acordo com as especificações do
padrão 802.15.4, que também especifica como 127 bytes o tamanho máximo dos pacotes
transmitidos. O AT86RF230 gerencia transmissão e recepção de preâmbulos, sincronização de
quadros e geração de CRC. Algumas das funções mais avançadas para gerenciamento de pacotes
802.15.4 não foram utilizadas, já que este padrão de comunicação não foi implementado. Pelo
contrário, um protocolo de comunicação simples foi desenvolvido utilizando
utilizando algumas das
caraterísticas do transmissor (veja 4.4.1 Rádio).
4.2.2
Microcontrolador
O microcontrolador utilizado nos
os dispositivos de rede foi o ATmega1281V, também
produzido pela Atmel. O Atmega1281V é um microcontrolador RISC de 8 bits baseado na arquitetura
AVR, da Atmel, capaz de executar até 1MIPS por MHz de clock.. Este microcontrolador é
extremamente flexível, aceitando tensões de alimentação entre 3,3V e 5V. Ele possui 128kB de
memória flash para armazenamento de código executável, 8kB de memória
memória RAM e 4kB de memória
EEPROM para armazenamento de dados não voláteis.
voláte Além disso, diversos perfiféricos são
implementados em hardware,, como controlador de barramento SPI e I²C, Conversor Analógico
AnalógicoDigital de 10 bits e USART.
Figura 6: Microcontrolador AVR Atmega1281.
A programação do chip pode ser feita na linguagem C ou assembly, uma vez que há uma
grande gama de compiladores e ferramentas de desenvolvimento para a família de processadores
AVR.
O cristal oscilador utilizado é de 8MHz, uma vez que esta freqüência de clock atende às
necessidades da aplicação. Além disso, o pino de referência externa de tensão não foi utilizado, pois
o próprio microcontrolador gera três referências distintas selecionáveis por software (veja seção
4.2.5.2 Entradas Analógicas). A tensão de alimentação escolhida é de 3,3V, pois o AT86RF230 (4.2.1
Transceiver de rádio) não aceita tensões mais altas e, desta maneira, não é necessári o emprego de
um conversor de tensão entre o rádio e o microcontrolador.
4.2.3
Comunicação USB
A interface serial RS232 é uma tecnologia simples e bastante comum para a transmissão de
dados de um periférico para o computador e foi, portanto, escolhida para implementar a
comunicação entre coordenador e PC. Além disso, é possível utilizá-la para configurar os endereços
de rede dos dispositivos remotos.
Este tipo de comunicação é realizado através de duas linhas de dados a uma taxa fixa, sem a
utilização de um sinal de clock. Taxas comuns são 9600bps, 19200bps e 57600bps, sendo outras
também possíveis. A taxa escolhida para esta aplicação é de 57600bps, devido à capacidade de
processamento do microcontrolador.
Os dados são transmitidos e recebidos de forma serial, através de dois pinos: Tx para transmissão, e
transmissão, e RX para recepção, tornando esta interface full duplex. Cada byte é transmitido de
forma independente, precedido de um start bit (sempre nível lógico 0) e seguido de um ou dois stop
bits (sempre nível lógico 1), de acordo com a
Figura 7. Além disso, um bit opcional de paridade par ou ímpar pode ser utilizado para
correção simples de erros. Este bit de paridade não foi utilizado devido à implementação do
protocolo de comunicação entre PC e microcontrolador (veja 4.4.2 USB).
Figura 7: Diagrama de transmissão de dados via USART.
No entanto, as portas de comunicação RS232 estão desaparecendo dos computadores mais
modernos, dando lugar à tecnologia mais nova USB (Universal
(
Serial Bus),
), que oferece taxas de
transmissão mais altas, além de conexão com vários dispositivos simultaneamente através de u
um
hub,, detecção e correção de erros através de CRC e detecção de conexão e remoção de dispositivos.
A implementação do protocolo USB é, porém, muito mais complexa do que o RS232 e requer uma
grande parte dos recursos de memória e processamento do microcontrolador.
microcontrolador. Portanto, foi utilizado
o circuito integrado FT232R, conversor USB-RS232,
USB RS232, da empresa FTDI. Esse circuito integrado
gerencia o protocolo de comunicação USB, simulando uma interface RS232 para o microcontrolador.
O driver do FT232, em contrapartida, simula para o sistema operacional do PC uma porta COM, de
modo que qualquer aplicação pode utilizar a comunicação via cabo USB utilizando as rotinas de
acesso às portas RS232.
Figura 8: Conversor USB-UART FT232R.
4.2.4
Fonte de alimentação
As placas funcionam inernamente com 3,3V e podem ser alimentadas de três maneiras:
1. No caso do coordenador, que é conectado à USB do PC, não é necessária uma fonte de
alimentação separada. O circuito é capaz de funcionar com alimentação vinda da própria
porta USB, bastando conectar o cabo ao PC para alimentar a placa (Figura 3). A tensão de 5V
da USB é convertida a própria placa para p nível adequado.
2. Já no caso dos dispositivos remotos, há um conector de alimentação
alimentação que aceita de 5 a 15 V
DC (Figura 9).. Um problema comum em placas alimentadas desta maneira é a danificação do
equipamento devido à inversão de polaridade da fonte, uma vez que existem dois tipos de
conector:
Pino interno positivo, carcaça negtaiva;
Pino interno negtaivo, carcaça positiva.
Os dispositivos de rede foram projetados de modo a funcionar com qualquer tipo de
fonte, absolutamente sem danos ao circuito, através da utilização de uma ponte de diodos
retificadora na entrada de alimentação. Apesar da ponte de diodos, no entanto, não é
recomendáve alimentar a placa com tensões alternadas (AC).
•
•
Figura 9: Conector de alimentação DC e jumper de seleção.
3. A alimentação no conector DC também pode ser feita a partir de uma bateria de 9 V, desde
que seja confeccionado um cabo conectar a bateria à alimentação da placa, como na Figura
10.
Figura 10: Cabo para alimentação por bateria.
A seleção da fonte de alimentação pode ser feita através do jumper Pwr Select, destacado
na Figura 9. O pino central é conectado ao regulador de tensão, que provê a alimentação de 3,3V da
placa. O regulador utilizado é o MIC29150-3.3WU, capaz de fornecer até 1,5A de corrente com uma
queda de tensão de apenas 350mV com sua carga máxima.
•
•
Quando o jumper encontra-se na posição USB, o pino de alimentação do conector USB é
ligado ao regulador de tensão, de modo que a corrente elétrica necessária para o
funcionamento do circuito é provida pelo computador através do cabo USB.
Já quando o jumper encontra-se na posição DC, a corrente é fornecida pela fonte ou bateria
conectada à placa através do conector mostrado na Figura 9.
A capacidade de fornecimento de corrente do regulador de tensão escolhido é muito mais
alta que a necessária para o funcionameno do circuito da placa, que consome em torno de 45mA,
sendo possível alimentar circuitos externos a partir do conector mostrado na Figura 11. Assim, o
desenvolvedor da aplicação final não precisa projetar uma fonte de alimentação dedicada para seu
circuito, a não ser que este utilize correntes muito altas ou necessite de tensões de alimentação
diferentes de 3,3V.
Figura 11: Alimentação de 3,3V para circuitos externos.
4.2.5
Interfaces para sensores e atuadores
Os dispositivos de rede possuem inerfaces digitais e analógicas comuns na indústria para
realizar a leitura de sensores e acionamento de atuadores. As itnerfaces disponibilizadas são:
•
•
•
•
•
Pinos de entrada e saída digitais;
Pinos de entrada analógicos;
Barramento I²C;
Barramento SPI;
Pinos de saída de PWM.
4.2.5.1 I/O Digital
Em cada dispositivo são disponibilizados 16 pinos digitais, que podem ser configurados como
pinos de entrada ou saída, dependendo dos periféricos que sejam conectados. Para utilizá-los, basta
ligar o circuito desejado aos conectores de IO da placa, mostrados na Figura 12.
Figura 12: Conectores de IO.
Quando configurados como saídas, estes pinos são tipicamente usados para o acionamento
de dispositivos através da rede, podendo, por exemplo, acionar relés e controlar lâmpadas ou
qualquer outro equipamento conectado à rede elétrica. Também é possível utilizar estes pinos para
acionar ou configurar parâmetros de funcionamento de um circuito digital acoplado à placa.
Já configurados como entradas, podem realizar a leitura de variáveis digitais, como a saída
de um conversor A/D externo ou um sensor de fim de curso, bem como chaves de seleção ou
configuração. Existem duas possíveis configurações para pinos de entrada:
•
Entrada em alta impedância: nesta configuração, os pinos são configurados como entradas
digitais comuns, havendo apenas um circuito schmidt-trigger na entrada. Assim, podem ser
usados como entradas para a maioria dos circuitos digitais.
Figura 13: Pinos de entrada em alta impedância.
•
Entrada com resistores internos de pull-up: nesta configuração, os pinos são configurados
como entradas digitais, mas o sinal DIRn na Figura 14 ativa um resistor de pull-up dentro do
próprio microcontrolador, mantendo o nível lógico da entrada em 1 caso não haja um
dispositivo puxando o sinal para 0. Desta maneira é possível realizar a leitura de chaves e
dispositivos com saída em coletor aberto sem a necessidade de utilizar componentes
externos ao microcontrolador, reduzindo a complexidade e o custo do hardware.
Figura 14: Pinos de entrada com pull-up interno.
A configuração e utilização dos pinos de IO pode ser feita através da API (ref para a API).
4.2.5.2 Entradas Analógicas
Os micrcontroladores AVR contém um conversor analógio/digital interno de aproximações
sucessivas, com resolução de até 10 bits e taxa de amostragem de até 76.9 kSPS. A Figura 15 mostra
o diagrama de blocos do conversor. O multiplexador analógico na entrada do conversor permite que
até oito canais de sinais analógicos sejam utilizados, porém não simultaneamente.
Figura 15: Diagram de blocos do ADC.
No entanto, quatro dos pinos dedicados ao conversor analógico/digital são também
utilizados pela interface JTAG de programação e debug do AVR. Como essa interface foi utilizada
para o desenvolvimento do projeto, foi possível implementar apenas quatro canais analógicos na
plataforma. Esta quantidade de sinais analógicos é, no entanto, suficiente para a maioria das
aplicações, uma vez que são utilizados tipicamente para realizar a leitura de sensores e muitos
destes já possuem interface digital, especialmente I²C e SPI.
Para utilizar o conversor analógico, basta ligar o sinal que deve ser lido ao conector Analog
(Figura 16), mas é necessário o cuidado com o condicionamento do sinal de entrada. O nível de
tensão nos pinos de entrada do microcontrolador não pode ultrapassar a tensão de alimentação de
placa (3,3V), o que pode ser garantido através de um diodo Zener na entrada ou da configuração
adequada de um circuito condicionador de sinal implementado com amplificadores operacionais.
Figura 16: Conector de entrada de sinais analógicos.
Três diferentes referências de tensão podem ser usadas para a conversão A/D:
•
•
•
Tensão de alimentação (no caso, 3,3V);
2,56V (ideal para conversão direta de tensão em valores de 8 bits);
1,1V.
A referência adequada pode ser selecionada através da API, utilizando as funções de
configuração do conversor A/D (ref para API). A resolução do conversor implementada na
plataforma é de 8 bits, de modo que se recomenda a utilização da referência de tensão de 2,56V,
pois ela permite uma visualização rápida dos valores de tensão dentro do software, uma vez que os
valores de 0 a 255 correspondem diretamente aos valores de tensão de 0V a 2,56V. Por parte da
geração de sinais analógico nesta faixa, duas abordagens podem ser utilizadas:
•
•
No caso de sensores ou circuitos que aceitem uma entrada de referência de tensão, utilizar
um circuito de referência de precisão para 2,56V, como o MAX6220.
Para sensores que têm amplitude de saída de sinal fixa, utilizar um circuito condicionador de
sinal (amplificador ou atenuador) com o ganho apropriado.
4.2.5.3 I²C
O I²C (Inter-Integrated Circuit) é um barramento de comunicação entre circuitos integrados
inventado pela Phillips e utilizado por um grande número de fabricantes de sensores e periféricos
para sistemas embarcados. A comunicação é realizada através de apenas dois pinos: SDA (pino
bidirecional de dados) e SCL (pino unidirecional de clock). Ambos são conectados ao barramento na
cofiguração de coletor aberto e é necessário um resistor de pull-up em cada para gerar nível lógico 1
(como mostra a ), com tensões típicas de 5 ou 3,3V.
A transmissão de dados no barramento pode ser feita a uma taxa de 100kbits/s ou
400kbits/s, embora novas revisões do protocolo permitam taxas mais altas. O número de
dispositivos em um mesmo barramento é limitado pelo número de endereços e pela capacitância
total do barramento, especificada em 400pF, sendo que cada dispositivo possui um endereço de 7
bits. Com 16 endereços são reservados, são possíveis até 112 dispositivos em um mesmo
barramento.
Existem dois tipos de dispositivos no barramento I²C: Mestre e Escravo. O Mestre sempre
gera o sinal de clock no pino SCL e endereça o Escravo com o qual deseja se comunicar, podendo
enviar ou receber dados. Os Escravos apenas agem no barramento apenas quando endereçados por
um Mestre e recebem o sinal de clock no pino SCL.
Figura 17: Barramento I²C.
A comunicação é iniciada por uma condição de START gerada por um Mestre no
barramento, que consiste em uma borda de descida do sinal SDA enquanto o sinal SCL está em nível
alto. Em seguida, o Mestre envia no barramento o endereço de 7 bits do Escravo, mais um bit
indicado o tipo da operação:
•
•
1: leitura – O Escravo deve enviar dados ao Mestre;
0: escrita – O Escravo deve receber dados do Mestre.
Durante o nono pulso do sinal SCL, o escravo que detém o endereço transmitido deve
segurar a linha SDA em nível baixo (ACK), indicando que reconheceu seu endereço e a operação.
Caso a linha permaneça em nível alto, o Escravo pode estar ocupado ou sem comunicação com o
barramento.
Figura 18: Transmissão de dados no barramento I²C.
Depois da transmissão do endereço, seqüências de 9 pulsos de clock são geradas pelo
Mestre, realizando a transferência de 8 bits de dados (com o bit mais significativo primeiro) e um bit
de ACK por parte do receptor da informação, inicando que recebeu corretamente aquela seqüência
de 8 bits. Ao fim da transmissão, o Mestre gera uma condição de STOP e a comunicação é encerrada.
Para utilizar o barramento I²C, basta conectar o dispositivo desejado ao conector I2C,
mostrado na Figura 19. Os resistores de pull-up para as linhas SDA e SCL encontram-se na placa do
dispositivo de rede, não sendo necessário montá-los às parte. Com o dispositivo conectado é
possível realizar a comunicação através da API (ref para a API) a uma taxa de transmissão de
100kbits/s. A taxa não é configurável devido à implementação da plataforma de rede, mas é
suficiente para aplicações típicas com sensores.
Figura 19: Conector I²C.
4.2.5.4 SPI
O SPI (Serial Peripheral Interface) é um barramento de comunicação full-duplex síncrono de
alta velocidade definido pela Motorola. O dispositivos neste barramento se comunicam através do
modelo mestre/escravo, sendo que o mestre sempre inicia a transmissão de pacotes de dados. São
permitidos um dispositivo mestre e múltiplos dispositivos escravos (sem limite teórico), cada um
com sua própria linha de slave select (como mostra a Figura 20).
O barramento SPI possui quatro linhas de sinal:
•
•
•
•
SCK – Serial clock (sempre gerado pelo mestre, tipicamente entre 1MHz e 70MHz);
MOSI – Master Out Slave In (pino de dados do mestre para o escravo);
MISO – Master In Slave Out (pino de dados do escravo para o mestre);
SS – Slave Select (ativo em nível baixo, gerado pelo mestre).
Figura 20: Barramento SPI (um mestre e três escravos).
A transmissão de dados é iniciada pelo mestre, ao selecionar um escravo
escravo acionando sua
linha de slave select (nível lógico 0). Em seguida o clock é gerado e, a cada pulso, um bit de dados é
transferido de forma full-duplex:
•
•
O mestre envia um bit na linha MOSI; o escravo lê um bit desta linha.
O escravo envia um bit na linha MISO; o mestre lê um bit desta linha.
Geralmente as transmissões envolvem um registrador de deslocamento de um
dteterminado tamanho em cada dispositivo, de modo que os dados são deslocados para fora do
registrador começando pelo bit mais significativo enquanto
e
anto os dados recebidos são deslocados para
dentro do registrados começando pelo bit menos significativo. Ao fim do deslocamento de todos os
bits dos registradores, a transferência de dados está completa. Caso haja mais dados a serem
transmitidos, cada dispositivos
positivos salva o valor do registrador e carrega um novo dado no mesmo,
reiniciando a seqüência.
As transmissões podem envolver qualquer número de pulsos de clock
clock, ocorrendo
tipicamente em palavras de 8 bits, embora palavras de 12 e 16 bits também sejam comuns, como
em conversores A/D e memórias externas. Ao fim da transmissão, o mestre retorna a linha de slave
select ao nível lógico 1 e o escravo fica inativo no barramento. Todos os escravos que não são
ativados durante uma transmissão devem ignorar os sinais
sinais SCK e MOSI, além de manter seu pino
MISO em alta impedância.
Figura 21:: Diagrama de tempo e polaridade do clock do barramento SPI.
Para possibilitar a máxima flexibilidade da interface, existem
e
quatro modos de operação da
SPI (Figura 21), mostrados na Tabela 1 e definidos por dois parâmetros:
•
•
CPOL – polaridade do clock quando inativo.
o 0 - clock inativo permanece em nível lógico baixo (0);
o 1 - clock inativo permanece em nível lógico alto (1).
CPHA – indica a borda do clock usada para amostrar/atualizar o dado.
o 0 – dado amostrado na primeira borda (subida para CPOL=0 e descida para CPOL=1);
o 1 – dado amostrado na segunda borda(descida para CPOL=0 e subida para CPOL=0).
M
odo
C
POL
0
1
2
3
C
PHA
0
0
1
1
0
1
0
1
Tabela 1: Modos de operação da SPI.
A implementação da SPI na plataforma é feita no modo 0, com palavras de 8 bits, uma vez
que estas são as confgurações mais comuns, espeialmente no que diz respeito a sensores. A
freqüência de clock no pino SCK é de 2MHz, de modo a suportar a grande maioria dos dispositivos
que se comunicam via SPI. Esta interface pode ser acessada através da API (ref para a API) e
necessita da conexão dos pinos MOSI, MISO e SCK no conector SPI (Figura 22).
Figura 22: Conector SPI.
Além dos três sinais do conector SPI, é necessário um sinal de slave select para cada
dispositivo que se deseje conectar ao barramento. Para tanto, podem ser utilizados sinais de saída
digital do conector IO (veja seção 4.2.5.1 I/O Digital). Caso se deseje minimizar a utilização de pinos
de IO para controle da SPI, pode-se utilizar um decodificador, como o 74HC237.
O pino SS do conector SPI não é usado, pois ele realiza a seleção do microcontrolador caso
seja usado como dispositivo escravo em um barramento SPI . Esta funcionalidade não foi
implementada, pois não existe a necessidade, no contexto desta plataforma, de o microcontrolador
se comportar como escravo.
4.2.5.5 PWM
A PWM (Pulse Width Modulation) é uma técnica de modulação de um sinal como objetivo de
gerar um sinal analógico, que pode ser usado para transmissão de informações ou controle de
potência em uma carga. O uso de PWM é muito comum para acionamento de motores elétricos de
corrente contínua a partir de circuitos digitais, pois estes são mais baratos e flexíveis do que circuitos
analógicos.
O sinal de PWM é gerado através da variação do duty cycle de uma onda quadrada para
codificar um determinado valor de tensão. O sinal de PWM continua sendo digital, uma vez que em
um dado momento do tempo, o valor do sinal é igual à tensão de alimentação do circuito digital ou
zero.
Figura 23: Geração de uma senóide por PWM.
No entanto, em cada período da onda quadrada o sinal permanece por um determinado
tempo em nível lógico alto, enquanto no restante do perído permanece em nível baixo (Figura 23).
Quanto maior o tempo que o sinal permanece alto, maior a tensão média DC do sinal, de modo que
a variação deste tempo produz tensões DC médias variadas. Qualquer nível de tensão analógica
pode ser gerado, desde que haja largura de banda suficiente. Freqüencias típicas usadas para a
modulação através de PWM estão na faixa de 1kHz a 20kHz.
É possível utilizar seis canais independentes de PWM através do conector PWM (Figura 24).
Através da API (ref para a API) é possível variar o duty cycle de cada canal, possibilitando a geração
de sinais analógicos ou controle de motores.
Figura 24: Conector de PWM.
4.3 Software
O software da plataforma é constituído de duas partes distintas. A primeira é o firmware do
microcontrolador, responsável por quatro funcionalidades:
•
•
•
•
Controle dos periféricos do microcontrolador (SPI, I²C, ADC, I/O, PWM, etc.);
Comunicação de rádio entre as placas;
Recepção de comandos do PC via USB;
Execução de comandos recebidos via USB ou rádio.
A segunda parte é a API implementada no PC, responsável por:
•
•
Fornecer uma interface simples para acesso aos periféricos das placas;
Comunicação via USB com o coordenador da rede.
4.3.1
Microcontrolador
Os microcontroladores AVR podem ser programados em linguagem assembly, C ou C++. A
linguagem assembly não é apropriada para desenvolvimento de grandes programas, pois é de difícil
leitura e pode levar a muitos erros de programação, além de aumentar consideravelmente o tempo
de desenvolvimento.
O firmware do microcontrolador (cuja estrutura é mostrada na Figura 25) foi desenvolvido
na liguagem C de programação, uma vez que a linguagem C++, apesar de agregar estrutura e
organização ao código, gera uma grande perda de desempenho para microcontroladores de 8 bits
devido à sua implementação. Além disso, há diversas ferramentas gratuitas para desenvolvimento
em C para microcontroladores AVR (ver Error! Reference source not found. Error! Reference source
t found.), como o compilador avr-gcc e o pacote de bibliotecas avr-libc. Além disso, uma biblioteca
desenvolvida pelo aluno especificamente para a arquitetura AVR foi utilizada para o controle dos
periféricos do microcontrolador, como a SPI e USART.
Figura 25: Diagrama de blocos do firmware.
O firmware desenvolvido pode ser divido em três grandes blocos:
1. HAL (Hardware Abstraction Layer);
2. Comunicação;
3. Controle.
A HAL é uma camada implementada em software cuja função é esconder os detalhes de
implementação em hardware para o acesso aos barramentos e periféricos do microcontrolador.
Para acessá-los, a aplicação acessa os drivers dos periféricos, que juntos compõem esta camada. O
driver da SPI, por exemplo, fornece uma interface simples para envio e recebimento de dados
através do barramento SPI. A interface, semelhante às interfaces dos outros drivers, é composta
pelas seguintes funções:
•
•
•
uint8_t spi_transfer_byte (uint8_t data );
void
spi_transmit_array(uint8_t *data, uint8_t length);
void
spi_receive_array (uint8_t *data, uint8_t length);
Desta maneira, é possível utilizar o barramento de forma transparente, sem haver a
preocupação de como o barramento é manipulado fisicamente ou quais registradores do
microcontrolador precisam ser acessados.
O bloco de comunicação é composto pelos protocolos de comunicação de rádio e serial. O
bloco de comunicação serial é ativo apenas no coordenador da rede, uma vez que somente ele
possui conexão com o computador, e realiza duas tarefas:
•
•
Recepção de comandos da API, iniciando sua execução;
Transmissão de pacotes de dados para a API, no caso de comandos que requerem respostas
dos dispositivos remotos (leitura de valor analógico, por exemplo).
A recepção de comandos é implementada na forma de interrupção, de forma que, ao
receber um novo comando válido pela porta serial, o microcontrolador o repassa para o módulo de
controle para que este possa realizar a interpretação e execução. Já a transmissão de respostas para
o computador é implementada como um comando, o único que pode ser enviado de um dispositivo
remoto para o coordenador da rede (veja 4.4.1 Rádio), que é executado pelo bloco de controle.
O bloco de comunicação de rádio implementa o protocolo de rádio e é responsável pelo
envio e recepção de pacotes, além da detecção e conseqüente descarte de pacotes inválidos. Ao
receber pacotes válidos, estes são repassados para o bloco de controle para interpretação e
execução. De forma análoga, quando o bloco de controle necessita enviar um comando através da
rede sem fio, ele envia o pacote para o bloco de comunicação de rádio.
O bloco de controle interpreta os comandos recebidos com base na função do dispositivo na
rede (coordenador ou remoto). No caso do coordenador, são executados apenas comandos de envio
para dispositivos remotos e de recebimento de respostas. Já no caso dos dispositivos remotos, são
executados apenas os comandos de acionamento de periféricos. A única exceção é o comando de
acionamento dos LEDs, que é executado tanto pelo coordenador quanto pelos dispositivos remotos.
Este comportamento se deve ao fato de que os LEDs serviram para depuração do código durante o
desenvolvimento do projeto.
A integração entre todos os blocos é feita no loop principal do programa, cujo código fonte é
mostrado abaixo:
#include <avr/io.h>
#include "board.h"
#include "radio.h"
#include "usart.h"
int main() {
board_init();
radio_listen();
while(1) {
usart_task();
radio_task();
}
return 0;
}
Como se pode observar, a primeira tarefa realizada pelo firmware é a inicialização da placa,
que compreende a configuração dos perféricos e do transmissor de rádio. Em seguida, o módulo de
rádio é colocado em modo de recepção, de modo a receber comandos. Não é necessário colocar a
porta serial em modo de escuta, pois ela é implementada e hardware no microcontrolador e o driver
do dispositivo notifica automaticamente o bloco do protocolo serial quando há novos pacotes.
Depois da inicialização do sistema, o programa entra em um loop infinito, de modo a
executar as tarefas de rádio e USART (porta serial). Estas duas tarefas são executadas muito
rapidamente e há a ilusão de que elas rodam de modo paralelo, de forma semelhante aos sistemas
operacionais de máquinas de maior porte. No entanto, não há um sistema operacional em
funcionamento no microcontrolador e, portanto, a função main() não pode atingir nunca a
instrução return 0. Isso é garantido com o loop infinto através da condição while(1), que
sempre é avaliada como verdadeira e assim mantém o fluxo de execução nas tarefas. A Figura 26
mostra um fluxograma detalhado do funcionamento do firmware do microcontrolador.
Figura 26: Fluxograma do firmware do microcontrolador.
4.3.2
PC
A linguagem de programação C++ foi escolhida para o desenvolvimento da API (Application
Programming Interface). Esta linguagem, além de ser uma das mais utilizadas para o
desenvolvimento de aplicações, é extremamente flexível e poderosa.
A API (diagrama de blocos apresentado na Figura 27) foi desenvolvida para apresentar uma
interface simples ao programador da aplicação, tornando possível o uso de qualquer interface dos
dispositivos de rede sem a necessidade de gerenciar a comunicação entre eles.
Figura 27: Diagrama de blocos da API.
Como pode ser observado na Figura 27, existem dois blocos principais na API: Interface e
Controle. O bloco de controle é responsável pela inicialização do sistema e pela comunicação USB
entre o computador e o coordenador da rede. Já o bloco de interface é o conjunto de funções
disponibilizadas ao usuário para acesso às placas.
4.4 Protocolos de comunicação
Existem dois protocolos de comunicação distintos na plataforma. O primeiro é o protocolo
que rege a comunicação entre dispositivos na rede sem fio, utilizando o AT86RF230. O segundo é o
protocolo utilizado na comunicação com o PC, que aplica-se apenas ao coordenador da rede
(utilizado, porém, na configuração de todos os dispositivos).
4.4.1
Rádio
A implementação do protocolo de rádio é baseada na especificação IEEE 802.15.4. No
entanto, as funcionalidades de rede providas por este padrão não são necessárias no projeto, de
modo que um protocolo simplificado foi implementado.
Figura 28: Formato de quadro de comunicação por rádio.
As seguinte partes do protocolo são implementadas diretamente dentro do transmissor de
rádio:
•
•
•
•
Preâmbulo,
SFD;
Tamanho do quadro;
FCS.
4.4.1.1 Preâmbulo
O preâmbulo serve para a detecção de quadros transmitidos via rádio, além da calibração de
filtros internos do receptor. Esta calibração é feita de forma automática toda vez que um pacote é
recebido para evitar erros de recepção, mas requer a transmissão de 4 bytes de preâmbulo para ser
bem-sucedida.
4.4.1.2 SFD e Tamanho de Quadro
O SFD (Start of Frame Delimiter) é um byte de sincronização que informa o receptor onde se
encontra o início das informações do pacote de dados. O tamanho de quadro indica ao receptor
quantos bytes serão transmitidos dentro do pacote. O tamanho máximo de pacote é definido pelo
802.15.4 como 127 bytes, sendo adotado para a implementação do protocolo para facilitar possíveis
extensões. Como a seqüência de FCS (4.4.1.3) faz parte do quadro e ocupa dois bytes, o número de
bytes que podem ser efetivamente transmitidos em cada pacote é de 125.
4.4.1.3 FCS
A seqüência de bytes FCS (Frame Check Sequence) é utilizada para detecção de erros de
transmissão. O cálculo deste valor é baseado no polinômio de CRC (Cyclic Redundancy Check) de 16
bites do ITU (International Communication Union). O transmissor realiza o cálculo deste polinômio
utilizando todos os bytes transmitidos depois do byte indicador de tamanho do quadro e insere o
valor no fim do quadro. Ao receber o pacote, o receptor realiza o mesmo cálculo e, caso os
resultados sejam iguais, aceita o pacote.
4.4.1.4 Controle e Endereços
O byte de controle é reservado para futuras extensões do protocolo, como implementação
de funções avançadas de gerência de rede. Desta maneira, deve ser transmitido sempre com o valor
0.
Os bytes de endereço são utlizizados para indicar aos dispositivos de rede o destino do
pacote. Cada endereço tem 16 bits e é transmitido com o byte menos significativo antes. Em
primeiro lugar, seguindo o byte de controle, é transmitido o endereço do dispositivo que envia o
pacote. Em seguida, o endereço do destinatário é transmitido, seguido dos dados em si. Quando um
dispositivo recebe um pacote de dados que contém um endereço diferente do seu, o pacote é
descartado.
4.4.1.5 Payload
O payload é o pacote de dados em si, carregando as informações que se deseja enviar de
um dispositivo a outro. Na implementação da palataforma, o payload é sempre preenchdio com um
comando que deve ser executado pelo dispositivo que o recebe.
4.4.2
USB
O protocolo de comunicação entre coordenador de rede e computador baseia-se em um
formato de quadro simples, mostrado na Figura 29:
Figura 29: Formato de quadro da comunicação USB.
O byte de SOH (Start Of Header) indica o início de uma transmissão. Este byte é seguido de n
bytes de dados, que contém o comando a ser executado pelo coordenador. O fim de uma
transmissão é marcado pelo byte EOT (End Of Transmission), seguido de dois bytes de checksum,
usados para detecção de erros.
O checksum é calculado durante a transmissão e seu valor é a soma de todos os bytes
transmitdos pela porta USB. Na recepção, os bytes são novamente somados e este resultado é
comparado com o valor enviado pelo computador. Caso exista diferença, o coordenador assume que
há algum erro no pacote e o descarta. O checksum é um número inteiro não sinalizado de 16 bits e é
transmitido com o byte menos significativo (LSB) antes.
Para evitar problemas de sincronização da máquina de estados do receptor, os bytes de SOH (0x01)
(0x01) e EOT (0x04) são reservados para estas funções específicas. Desta maneira, é necessário
utilizar uma seqüência de escape caso estes valores precisem ser transmitidos. Esta seqüência de
espace é iniciada pelo caracter ESC (0x1B) e seguida pela soma do valor que se deseja transmistir
com valor ESC. Esta seqüência é mostrada na
Figura 30 e deve ser usada para transmitir os bytes SOH, EOT e o próprio ESC.
Figura 30: Seqüência de escape para transmissão de caracteres reservados na USB.
4.5 Utilização da plataforma
A plataforma pode ser utilizada de duas maneiras: através do painel de controle ou da API
desenvolvida.
4.5.1
Painel de Controle
O painel de controle é um software para o Microsoft Windows desenvolvido em C++
utilizando a plataforma .NET da Microsoft que provê uma interface gráfica para acesso rápido aos
dispositivos remotos. Através do painel de controle é possível configurar os endereços dos
dispositivos, bem como utilizar todas as funções providas pela plataforma de rede sem fio. Na
verdade, esta aplicação é apenas uma interface gráfica para a API de acesso às funções da
plataforma de rede, uma vez que a utiliza para acessar os dispositivos remotos da mesma maneira
que uma aplicação qualquer.
O painel de controle é composto de uma lista de funções na lateral esquerda (azul), como
mostra a Figura 31, e um painel com as funções específicas de cada módulo no centro (vermelho).
Além disso, uma barra de status (amarelo) indica o estado da conexão com o coordenador e os
comandos enviados pela rede. Os controles destacados em verde permitem a seleção do dispositivo
de rede e o envio de comandos.
Figura 31: Visão geral do painel de controle.
4.5.1.1 Configuração
A módulo de configuração deve ser utilizado para realizar a conexão do computador ao
coordenador da rede, ou ao dispositivo que se deseja configurar. No bloco “COM Port” (Figura 32) é
possível selecionar a porta de comunicação utilizada pelo dispositivo conectado ao computador.
A porta COM é a porta à qual o dispositivo está conectado ao computador. A taxa de
transmissão padrão selecionada no painel de controle é de 57600 bps e não deve ser alterada, caso
contrário a comunicação não será estabelecida com sucesso. Para conectar basta clicar no botão
“Connect”. Caso a conexão seja efetuada com sucesso, o botão muda o texto para “Disconnect” e a
barra de status indica a porta e a taxa de transmissão
Figura 32: Configuração do painel de controle.
O número da porta pode ser encontrado no Gerenciador de Dispositivos do Windows. Para
abri-lo, clique com o botão direito do mouse sobre o ícone meu computador e escolha a opção
“Gerenciar”. No painel do lado esquerdo, escolha o Gerenciador de dispositivos. No painel que se
abre no lado direito, expanda a opção “Portas (COM&LPT)” e encontre o dispositivo “USB Serial
Port”. O nome da porta emulada pelo dispositivo de rede encontra-se entre parênteses ao lado do
nome “USB Serial Port”.
No bloco “Board Address” pode ser realizada a configuração dos dispositivos. O botão
“Read” provoca a leitura do endereço de rede associado ao dispositivo conectado ao computador,
enquanto o botão “Write” configura no dispositivo o endereço indicado na caixa de texto ao lado do
botão. O botão “Set as coordinator” é um atalho para a configuração do coordenador da rede e
seleciona o endereço 0 para o dispositivo conectado.
4.5.1.2 LEDs
O módulo de LEDs (Figura 33) permite controle dos três LEDs das placas. Neste módulo é
possível selecionar através das caixas de seleção à esquerda do painel em quais LEDs deseja-se agir,
sendo possível configurar mais de um simultaneamente.
Figura 33: Painel de controle - LEDs.
O bloco “Basic” provê as funções básicas para os LEDs, que são:
•
•
•
On – liga os LEDs selecionados;
Off – desliga os LEDs selecionados;
Toggle – iverte o estado dos LEDs selecionados.
O bloco “Advanced” provê funções avançadas, como animações como os LEDs, mas não está
implementado nesta versão nos dispositivos de rede.
Para enviar um comando de LED, o dispositivo remoto deve ser selecionado na caixa ”Peer”
(0 para acionar os LEDs do coordenador). O botão “Send” envia o comando.
4.5.1.3 I/O Digital
Neste módulo o usuário pode realizar a configuração e atuar sobre os pinos digitais de
entrada e saída dos dispositivos de rede. Há três tipos de ação possíveis sobre os pinos:
•
•
•
Configuração;
Ações básicas;
Ações avançadas.
Figura 34: Painel de controle - I/O digital.
No painel de configuração, é possível escolher a função dos pinos entre três opções:
•
•
•
Entrada em alta impedância;
Entrada com resistor de pull-up;
Saída.
No painel de ações básicas, pode-se colocar os pinos em nível lógico alto ou baixo, além da
opção para inverter o valor do pino (toggle). Estas opções assumem que os pinos desejados estejam
configurados como saídas. Caso estejam confiurados como entradas, o estado dos resitores de pullup será afetado, devido ao funcionamento interno do microcontrolador.
Já o painel de ações avançadas oferece a função de leitura, que retorna o estado de todos os
pinos, tanto entradas como saídas, além da função de pulso. Utilzando a função de pulso é possível
especificar um tempo de 1ms a 1000ms e realizar automaticamente um pulso no pino desejado com
a duração selecionada. Caso o pino esteja em nível lógico alto, o pulso será efetuado em nível baixo.
Já se o pino estiver em nível lógico baixo, o pulso será em alto.
Para enviar um comando, as opções desejadas devem ser selecionadas e o endereço do
dispositivo de rede deve ser escolhido na caixa “Peer”. Em seguida, o botão Send deve ser
pressionado. As ações escolhidas terão efeio apenas sobre os pinos (0 a 15) selecionados n parte
superior deste painel.
4.5.1.4 ADC
Neste painel é possível agir sobre o conversor analógico/digital dos dispositivos de rede. Dois
tipos de ação são suportados:
•
•
Seleção de tensão de referência;
Leitura dos canais do conversor.
Figura 35: Painel de controle – ADC
Para selecionar a tensão de referência, basta escolher o valor desejado e usar o botão Send
com o endereço do dispositvo de rede selecionaod. Existem três opções de tensão de referência:
•
•
•
1,1V;
2,56V;
3,3V.
A leitura dos canais do conversor AD pode ser feita de três maneiras. A primeira é a
conversão direta da tensão analógica no canal desejado (0 a 3). Para isso, basta selecionar o canal
desejado e valor de tensão é mostrado na caixa de texto ao lado. A segunda opção de conversão é a
varredura. Neste modo o painel de controle realiza uma conversão em cada canal e mostra os
valores de tensão nas respectivas caixas de texto. O terceiro modo de operação o conversor é o de
conversão contínua, que realiza a conversão da tensão analógica no canal selecionado de forma
automática, autalizando o valor mostrado na tela a cada conversão. Caso a opção de varredura
esteja selecionada, a conversão automática é feita em todos os canais em seqüência.
4.5.1.5 I²C
O módulo de I²C não implementado no painel de controle. Pelo contrário, o acesso das
funções da I²C se dá exclusivamente pela API.
4.5.1.6 SPI
Assim como no caso do módulo I²C, o módulo de SPI não é implementado, sendo o acesso às
respectivas funções dado apenas pela API.
4.5.1.7 PWM
As funções de PWM, assim como no caso da SPI e da I²C, são acessíveis apenas através da
API.
4.5.2
API
Através da API (Application Programming Interface) é possível utilizar todos os recursos da
plataforma de rede a partir de programas C++.
Inicialmente, o bloco de controle da plataforma (ver seção 4.3.2) deve ser inicializado. Este
primeiro passo é realizado através de uma chamada à função WSNP::Control::Create(), que cria o
objeto de controle da WSNP. Em seguida, a porta de comunicação serial com o coordenador deve
ser aberta através de uma chamada à função WSNP::Control::OpenPort(String^ port, int
baudrate). O primeiro arguento para esta função é o nome da porta usada (por exemplo “COM3”) e
o procedimento para identificar qual porta deve ser utilziada é descrito na seção 4.5.1.1.
Uma vez criado o objeto de controle e aberta a porta de comunicação, a API encontra-se
pronta para utilização. A partir deste ponto as seguintes funções do bloco de interface podem ser
utilizadas:
void SetLeds(unsigned char mask);
void ClearLeds(unsigned char mask);
void ToggleLeds(unsigned char mask);
void ConfigPins(unsigned short mask, enum class IO_Config config);
void SetPins(unsigned short mask);
void ClearPins(unsigned short mask);
void TogglePins(unsigned short mask);
void PulsePins(unsigned short mask, unsigned short time);
unsigned short ReadPins();
void ConfigAnalogReference(enum class ADC_Vref vref);
unsigned char GetAnalogValue(unsigned char channel);
void SendI2c(array<unsigned char,1>^ data);
array<unsigned char,1>^ ReceiveI2c();
void SendSpi(array<unsigned char,1>^ data);
array<unsigned char,1>^ ReceiveSpi();
As funções acima agem sobre um objeto do tipo WSNP::Board. Portanto, um objeto deste
tipo deve ser criado para cada placa que se deseja acessar. Para criar um objeto Board, deve ser
utilizado o construtor da classe Board, passando como parâmetro o endereço da placa a ser
acessada. A documentação detalhada das funções encontra-se no arquivo Board.h, que contém a
definição da classe Board.
Ao final da utilização é recomendável uma chamada à função WSNP::Control::ClosePort(),
para assegurar a liberação de recursos por parte do sistema operacional.
5 Conclusão
O projeto desenvolvido atendeu completamente às especificações apresentadas na proposta
inical, possibilitando a criação de redes extremamente flexíveis para as aplicações mais variadas na
área de monitoramento sem fio.
Além de possibiltar o desenvolvimento de redes de sensores e atuadores em fio de forma
transparente, o hardware desenvolvido possibilita o desenvolvimento de qualquer aplicação
embarcada, funcionando como um kit de desenvolvimento para o microcontrolador ATmega1281,
com a vantagem de ter comunicação USB e um transceiver de rádio já disponíveis na placa. Este uso
foi validado pelo prórpio aluno no projeto de um datalogger e por um aluno da Engenharia de
Computação, que utilizou a plataforma para implementar um projeto integrado.
As teorias e técnicas utilizadas durante o desenvolvimento do projeto compreendem:
•
•
•
•
•
•
Utilização de transceptores de rádio;
Programação de microcontroladores;
Pogramação de computadores;
Implementação de um protocolo de comunicação sem fio;
Definição de uma interface para utilização do sistema;
Implementação de interfaces comuns para sensores e atuadores.
A plataforma desenvolvida é bastante escalável e é inteiramente constiuída de módulos
independentes, de modo que ela pode ser incrementada através da implementação de criptografia,
outras topologias de rede, entre outros.
Download

Plataforma modular de rede sem fio para monitoramento remoto