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.