Aprendendo


Se você é um desenvolvedor ou até mesmo um hobbista que já conhece a plataforma Arduino, não encontrará nenhuma dificuldade para entender o funcionamento da plataforma Radiuino. Inicialmente, vou ensinar todos os procedimentos necessários para colocar os dispositivos para funcionar corretamente. Em seguida, falarei um pouco a respeito da teoria do que está acontecendo nos bastidores.
PASSO 1 – Baixe o Arduino IDE aqui.
PASSO 2 – Baixe o arquivo .zip da biblioteca Radiuino aqui.
PASSO 3 – Copie e cole a pasta Radiuino na pasta libraries do diretório do Arduino (ver Figuras 3 e 4).

Figura 3. Diretório do Arduino.

Figura 4. Pasta libraries, na qual deve ser inserida a biblioteca Radiuino.

PASSO 4 – Abra o Arduino IDE e acesse Arquivos/Exemplos/Radiuino. Você deve visualizar dois Firmwares: Base e Sensor (observe a Figura 5). O que acontece é o seguinte: Em uma rede de sensores sem fio deve haver a comunicação entre pelo menos duas entidades: Base e nó sensor ou nó de rede. A base deve estar conectada ao computador e o nó sensor pode estar em qualquer lugar. Isso será detalhado posteriormente, mas a essência da comunicação é o seguinte: o computador monta um pacote de 52 bytes de informação e envia para a base; esta, por sua vez, transmite o pacote; o nó sensor recebe o pacote, verifica se o pacote é para ele, processa e retransmite. A base recebe o pacote transmitido pelo nó sensor e disponibiliza as informações no computador. Agora você pode estar se perguntando: Por que o nó sensor deve verificar se o pacote é para ele? A resposta é muito simples. Se existirem mais nó sensores na rede e se todos transmitirem ao mesmo tempo, ocorrerá o que chamamos de colisão. Por isso, os sensores possuem endereços específicos para que a base se comunique com cada um dos elementos da rede individualmente.

Figura 5. Acesso à biblioteca Radiuino no Arduino IDE.

PASSO 5 – Abra os Firmwares Radiuino_Base e Radiuino_Sensor.

A Figura 6 mostra os Firmwares da base e do nó sensor.

Figura 6. Firmwares da base e do sensor.

Ao abrir os Firmwares, observamos a subdivisão em abas. Tanto a base como o nó sensor apresentam suas abas principais (com os nomes de base e sensor, respectivamente), Headers, phy, MAC e Net. O nó sensor apresenta duas camadas a mais: Transp e App. Essas subdivisões foram feitas com dois objetivos: criar um protocolo organizado e bem definido e; aprimorar a didática na hora de ensinar os usuários. Os nomes das camadas são iguais às camadas do tão conhecido protocolo TCP/IP. Embora os nomes sejam iguais, o Radiuino não possui nenhuma relação com o protocolo TCP/IP. A ideia por trás do Radiuino é mostrar que as camadas apresentam tarefas muito bem definidas. A baixo, são mostradas as camadas e suas funções:

  1. Sensor/Base – São as camadas principais dos Firmwares da base e do sensor, respectivamente. Nelas, podem ser encontradas funções bastante conhecidas do Arduino IDE, tais como Void Setup() e Void Loop() (Observe a Figura 7).
  2. Headers – Trata-se da definição das funções e dos cabeçalhos das camadas, mapeamento dos pinos, configuração dos registradores, entre outros.
  3. Phy – É a camada física, que é a base da comunicação. Na camada física, são chamadas as funções de envio/recepção do pacote de dados por radiofrequência, interface da Serial com o computador, configurações e ajustes da taxa da Serial, ajuste de canal (frequência de operação), intensidade do sinal, offset de frequência, etc.
  4. MAC – É a camada de controle de acesso ao meio. Basicamente, no Radiuino, é utilizada para configuração um modo do dispositivo conhecido como Sleep Mode. Esse modo consiste em ajustar o dispositivo para operar com baixo consumo de energia, com correntes da ordem de micro amperes. Dessa forma, o sensor consome quantidades insignificantes de energia, podendo durar meses (se alimentado com bateria).
  5. NET – É a camada de rede. Na camada de rede, são configurados os endereços dos dispositivos da rede. É dessa maneira que os sensores são identificados na rede rodando com o protocolo Radiuino. Outra tarefa realizada na camada de rede é a questão de roteamento. Resumidamente, nó sensores podem atuar como repetidores de sinal, permitindo aumentar a distância de cobertura da RSSF.
  6. Transp – É a camada de transporte. Trata-se da primeira camada fim a fim. No Radiuino, é implementado um contador, cujo objetivo é medir a perda de pacotes (Packet Error Rate, PER).
  7. App – É a camada de aplicação. Nela, podem ser lidos os Conversores AD’s e acionadas as portas digitais do Hardware. Em seguida, as variáveis devem ser inseridas nos bytes do pacote para serem transmitidas posteriormente. Também podem ser efetuados cálculos de conversão dependendo do tipo de sensor (ex: temperatura) inserido na rede. Uma outra maneira de realizar todas essas tarefas (ler os conversores AD, acionar dispositivos, etc) é utilizar a função Loop() do Arduino IDE, localizada na primeira aba do código. A função Loop() é executada de forma repetitiva, possibilitando que uma instrução seja executada de tempos em tempos.

Figura 7. Funções setup() e loop().

PASSO 6 – Configurando o Firmware da Base

No Firmware da base, abra a aba “Phy”, na qual iremos configurar as variáveis de camada física. A variável “power” está relacionada com a intensidade da potência de transmissão e deve ser ajustada de acordo com a distância entre base e nó sensor. Como ilustrado pela Figura 8, existem 8 valores possíveis. Por convenção, utilizou-se “power = 7”, já que se trata da maior potência (10dBm). A variável “channel” diz respeito ao canal de transmissão, ou seja, a frequência com o sinal transmitido. São 65 possibilidades no total, sendo que base e nó sensor devem estar necessariamente sintonizados no mesmo canal. Esses canais operam na faixa de 915MHz a 928MHz, com um espaçamento espectral de 200KHz entre eles, por padrão. Por exemplo, o canal 0 está sintonizado em 915 MHz, o canal 1 em 915,2 MHz, o canal 3 em 915,4 MHz, etc. No exemplo da figura 8, o canal 0 foi utilizado (channel = 0). A variável “freq_offset” representa o ajuste de OFFSET, em frequência, de cada rádio BE900 (base e nó sensor). Isso é necessário porque os dispositivos BE900/BE990 contam com a presença de um cristal oscilador e capacitores cerâmicos. Esses componentes provocam, de certa forma, um desvio em frequência que precisa ser corrigido para garantir o bom funcionamento do sistema. Os OFFSETS são medidos com equipamentos chamados de analisadores de espectro e já são identificados em cada dispositivo BE900. A Figura 9 ilustra um BE900 etiquetado com seu respectivo OFFSET em frequência, que deve ser igual ao valor da variável “freq_offset”. Então, nesse exemplo utilizou-se freq_offset = 0xFB. A taxa de velocidade da comunicação Serial é dada pela variável “serial_baudrate”. É importante ressaltar que as taxas da base e do nó sensor devem ser, essencialmente, iguais. No exemplo da Fig.8, utilizou-se “serial_baudrate = 9600”. E finalmente, selecione o tipo de rádio que você está utilizando por meio da variável set_radio. para os rádio RFBee e BE900, faça set_radio = 0 e; para o BE990, ajuste set_radio = 1.

Figura 8. Configurações na camada física.

Figura 9. Indicação do Offset de frequência de um BE900.

Na aba MAC, não é necessário fazer nenhuma configuração. Abra a aba da camada de rede (Net). Observe a variável “my_addr” (veja a Figura 10). Essa variável diz respeito ao endereço da base na RSSF. Por convenção, não costumamos modificar o endereço da base e o deixamos sempre com o valor zero (my_addr=0), significando que o endereço da base na RSSF será zero.

Figura 10. Firmware da base, camada de rede.

PASSO 7 – Configurando o Firmware do nó Sensor

As configurações na camada física são semelhantes ao que foi explicado para o Firmware do sensor. Porém, temos algumas observações. A respeito da potência de transmissão (variável “power”), é aconselhado que se coloque o mesmo valor do que foi configurado para a base. Em relação ao canal de comunicação (variável “channel”), os valores da base e do nó sensor devem ser necessariamente iguais, já que os rádios devem estar sintonizados na mesma frequência para que possam estabelecer uma comunicação. O Offset de frequência varia de dispositivo para dispositivo, ou seja, cada Hardware possui o seu, podendo ser distintos ou não. E por fim, com relação à taxa da comunicação Serial, por padrão, colocamos com o mesmo valor. As funções de comunicação Serial também estão presentes no nó sensor, porém não são utilizadas no Firmware padrão. Mas, com certeza, é possível utilizá-la, dependendo da sua aplicação.

Na camada de rede, tal como mostrado na Figura 10, devemos ficar atentos ao endereço do sensor. Se a rede tiver apenas um nó sensor, então deixe simplesmente como está, ou seja, my_addr=1. Se posteriormente o usuário desejar inserir mais nó sensores na rede, então os endereços devem ser necessariamente distintos. Podemos fazer uma analogia a uma rede TCP/IP. Todos os dispositivos da rede possuem IPs distintos, garantindo que não haja colisão de informação com o servidor. O mesmo conceito é aplicado a uma RSSF de dados, no qual cada dispositivo possui sua própria identificação. Por enquanto, não é necessário fazer mais nenhuma modificação. Posteriormente, farei tutoriais de como transmitir dados de sensores e acionar dispositivos, assunto que será tratado na camada de aplicação do nó sensor.

 

PASSO 8 – Programando os dispositivos Base e Sensor.

O procedimento é o mesmo para os dois casos, a diferença é o firmware que vai carregado em cada dispositivo. Observe a Figura 11. É necessário selecionar a placa Arduino Pro or Mini, com o processador de 3,3V, 8MHz, tal como foi destacado na figura 11.

Figura 11. Selecionando a placa e o processador.

Em seguida, selecione a porta “COM” que o computador criou para o conversor FTDI USB-Serial. Agora, encaixe o seu rádio (RFBee, BE900 ou BE990) no programador tal como mostrado na Figura 12 e faça o upload de Firmware (também destacado na Figura 11). Essa metodologia de encaixe é utilizada quando vamos programar o rádio base.  A Figura 13 mostra um nó sensor sendo programado dentro de uma placa de aplicação. Como exemplo, utilizamos a placa de aplicação do KIT com DK101, cuja documentação logo abaixo. Entretanto, também é possível fazer o upload de Firmware do sensor da mesma forma que a base. KIT DK101_atualizado         Plataforma Radiuino

Observação muito importante: Se você estiver utilizando a placa de aplicação DK105, clique aqui imediatamenteExistem alguns procedimentos que precisam ser seguidos quando utilizamos a placa DK105. Isso porque a DK105 funciona com níveis de tensão 5V, ao passo que o transceptor do módulos BE900/990 funciona em 3,3V. Assim, precisamos preparar apenas o microcontrolador do módulo para receber 5V e, ao mesmo tempo, fazer com que o transceptor rádio continue recebendo 3,3V.

Figura 12. Encaixe do rádio no programador Uartsbee.

Figura 13. Encaixe do programador Uartsbee na placa DK101.

PASSO 8 – Testando a comunicação – Software RadiuinoTest

 

Para testar a comunicação, utilizamos um software chamado RadiuinoTest, que pode ser baixado aqui. O papel do software é montar um pacote de 52 bytes (que o Radiuino está preparado para receber) e enviar por meio da comunicação Serial. O pacote chega na base e é imediatamente transmitido. O nó sensor recebe o pacote e verifica se a informação é para ele. Se sim, então a informação é processada e retransmitida para a base. Então, as informações são exibidas no RadiuinoTest. A Figura 14 mostra o RadiuinoTest. Nele, os 52 bytes do pacote podem ser visualizados e alterados conforme a vontade do usuário. Atente-se para as configurações destacadas na Figura 14. Selecione a porta Serial, a taxa e os endereços, tal como destacado. Observe os bytes 8 e 10. No pacote Radiuino, esses bytes representam os endereços da base e do nó sensor, respectivamente. Você se lembra de quando estávamos configurando a variável my_addr, presente na camada de rede dos dois Firmwares? Agora basta ajustar os bytes 8 e 10 com os mesmos valores da variável (base e nó sensor) e a comunicação será estabelecida.

Ajuste a opção “Repetir pacote a cada (s)” para 1, o que significa que a base irá enviar um pacote pro nó sensor a cada segundo. Então, clique em enviar. Se começar a aparecer muitos números no campo “Pacote recebido”, então os dispositivos estão se comunicando.

Figura 14. Software RadiuinoTest.

Assim como no Arduino, é possível monitorar dados de sensores e acionar dispositivos. O Kit com a placa de aplicação DK101 é equipado com um sensores de temperatura e luminosidade e um relé de 12V.

Por exemplo, para acionar o relé, é necessário alterar o estado do Byte 43 de 0 para 1 e clicar em “Enviar”. Então, se uma lâmpada estiver ligada nos terminais do relé, esta irá acender no nó sensor segundo a requisição feita pela base. Para mais detalhes a respeito das informações carregadas nos Bytes, observe a camada de aplicação do Firmware do sensor, mostrado pela Figura 15. A porta digital IO3_PIN é referente ao pino 8 do rádio, no qual está ligado fisicamente um relé de 12V. A estrutura condicional destacada é referente ao seguinte: se o byte 43 do pacote for 1 (pkt->IO3[0] == 1), então ative a porta; caso contrário, desative a porta IO3_PIN. Se você tiver conhecimento a respeito de elétrica e eletrônica, experimente ligar uma carga AC na saída do relé. A Figura 16 mostra como seria o esquema de ligação de uma lâmpada na saída do relé.

Figura 15. Acionamento do relé ligado na porta lógica IO3_PIN (pino 8).

 Figura 16. Esquema de ligação de uma lâmpada no relé.

PASSO 8 – Instalando e rodando uma aplicação em Python

O instalador do Python e tutoriais estão disponível aqui. Siga os procedimentos de instalação e baixe o código fonte com o nome de “Python.py” (este arquivo está na pasta .zip juntamente com o arquivo instalador do Python 2.7.13). Abra o arquivo Python.py no modo IDLE, tal como mostrado na Figura 17; pressione F5 para executar e entre com os valores de acordo com a Figura 18. Selecione o rádio que você está utilizando e pressione ENTER. Nesse momento o computador irá enviar pacotes de 52 bytes, como já foi explicado posteriormente. O resultado igual ao que foi ilustrado na Figura 19.

Figura 17. Editar o python no modo IDLE.

Figura 18. Configurações da RSSF via python.

Figura 19. Monitoramento de grandezas da RSSF.

A Sigla RSSI significa Received Signal Strength Indicator. Trata-se de um indicador de intensidade de sinal na comunicação. A sigla RSSId diz respeito à RSSIdownlink, que é a intensidade de sinal medida no sentido Base – nó sensor. Já RSSIu significa RSSIuplink, que é a intensidade de sinal medida no sentido Nó sensor – base. Os outros valores medidos foram temperatura e luminosidade. A temperatura, dada em Celsius, é fácil de ser interpretada. Entretanto, a luminosidade é resultado da leitura de um conversor analógico digital (ADC). Os conversores AD do atmega328P possuem 10 bits de resolução, gerando valores de 0 a 1023 (1024 valores). Sendo assim, o valor lido em si não possui unidade definida, uma vez que é um simples resultado da leitura de ADC.

Esses são os passos básicos para entender o funcionamento de uma rede de sensores sem fio! Você poderá complementar todo o conhecimento obtido aqui conhecendo um pouco mais a respeito da teoria por trás do Radiuino, oferecido na aba Teoria do Radiuino.

É isso pessoal! Espero que esse tutorial seja de grande ajuda a vocês! Para mais informações a respeito da aquisição dos módulos rádio e placas de aplicação, acesse o site da empresa Radioit ou clique aqui.

Abraços!