Você está na página 1de 60

TREINAMENTO PLATAFORMA RADIUINO4APP

Ttulo: Guia de Projeto com Radiuino



Autoria e Revises
Nome Data Verso Obs
Branquinho 27/03/2012 1 Treinamento FEAGRI
Branquinho 08/05/2012 2 Atualizao figuras



Resumo: Este documento apresenta um guia de projeto para a plataforma
Radiuino, atravs de uma aplicao que mede temperatura e luminosidade alm
de controlar rel e led.


_________________________________________________________________


- 2 -
Sumrio
1 INTRODUO .................................................................................................................. - 3 -
2 PLATAFORMA ARDUINO ................................................................................................ - 5 -
3 DESCRIO SISTMICA ............................................................................................... - 14 -
4 DK101 ............................................................................................................................. - 18 -
4.1 PLACA DE APLICAO ................................................................................................. - 19 -
4.2 TRANSDUTOR DE TEMPERATURA .................................................................................. - 19 -
4.3 TRANSDUTOR DE LUMINOSIDADE .................................................................................. - 21 -
4.4 REL ......................................................................................................................... - 22 -
4.5 BE900 E PROGRAMADOR ............................................................................................ - 24 -
5 PROJETO DO HARDWARE ........................................................................................... - 25 -
6 FIRMWARE RADIUINO4APP ......................................................................................... - 27 -
6.1 AJUSTE DE PARMETROS ............................................................................................ - 28 -
6.2 ACIONAR LEDS E REL................................................................................................. - 30 -
6.3 LEITURA DE GRANDEZAS ............................................................................................. - 32 -
6.4 UPLOAD DO FIRMWARE ............................................................................................... - 34 -
7 SOFTWARE .................................................................................................................... - 36 -
7.1 PACOTE RADIUINO ...................................................................................................... - 36 -
7.2 DOCKLIGHT ................................................................................................................ - 38 -
7.3 PYTHON .................................................................................................................... - 43 -
8 OBSERVAES FINAIS ................................................................................................ - 50 -
REFERNCIAS ....................................................................................................................... - 51 -
ANEXO 1 MAPA DO PACOTE DE 52 BYTES ........................................................................ - 1 -
ANEXO 2 CDIGO PYTHON ................................................................................................. - 1 -




_________________________________________________________________


- 3 -
1 Introduo
Este documento apresenta passo a passo como desenvolver um projeto com a
plataforma Radiuino. O projeto separado em fases bem definidas, que permitem
tratar de cada necessidade, saindo da aplicao desejada at o software para
exibio no computador dos resultados medidos. Para ilustrar o desenvolvimento
ser utilizado um exemplo hipottico de uma aplicao que deve ter as seguintes
funes:

Medidas
o Temperatura
o Luminosidade
Controle
o Acionar um rel
o Ligar um led

O resultado deve ser um software que apresente na tela do computador um menu
que permita medir as grandezas mencionadas e controlar um dispositivo que
esteja ligado no rel.

Para seguir uma sequncia lgica este material est dividido nas seguintes partes:

Descrio sistmica
Aplicao
Hardware
Firmware
Software


_________________________________________________________________


- 4 -
O exemplo aqui apresentado utiliza o hardware DK101
(http://www.radioit.com.br/products/kit-de-desenvolvimento-radioit-dk101-be900).
O usurio deve entender que a plataforma Radiuino foi concebida para facilitar a
implementao de rede de sensores sem fio. Esta necessidade surgiu da
dificuldade das plataformas existentes no permitirem de forma fcil formar este
tipo de rede. A plataforma Radiuino (www.radiuino.cc) utiliza o ambiente de
programao do Arduino (www.arduino.cc), que facilita em muito o
desenvolvimento do firmware. Porm, a plataforma Radiuino possui as suas
peculiaridades e foram desenvolvidas bibliotecas especficas. Para utilizar o
Radiuino o ambiente de programao Arduino deve ser baixado do site do
Radiuino (http://www.radiuino.cc/node/34).


_________________________________________________________________


- 5 -

2 Plataforma Arduino
Para utilizar o Radiuino necessria a instalao da plataforma Arduino que est
disponvel no site do Radiuino na aba de Downloads
(http://www.radiuino.cc/node/34). A Figura 13mostra o local correto para download
do IDE Arduino.


Figura 1 - Download Radiuino

Importante frisar novamente que deve ser este o IDE a ser utilizado com o
Radiuino, uma vez que todas as bibliotecas j esto preparadas. Aps
descompactar o IDE Arduino j est pronto para usar. Deve existir agora os
seguintes subdiretrios:


_________________________________________________________________


- 6 -

Figura 2 - Subdiretrios IDE Arduino

Na raiz do sub diretrio est o executvel para abrir o IDE.


Figura 3 - Para abrir o IDE do Arduino

Ao abrir o IDE do Arduino a aparncia a seguinte:


_________________________________________________________________


- 7 -

Figura 4 - IDE Arduino

A plataforma Arduino permite o desenvolvimento fcil de firmware, que pode ser
usado integralmente com o Radiuino. Para exemplificar a facilidade desta
plataforma existe disponvel um exemplo de acender e apagar um led utilizando o
Arduino. Este led est disponvel no hardware do Arduino.


Figura 5 - Hardware Arduino Duemilanove
Led
Microcontrolador

_________________________________________________________________


- 8 -

Este hardware, no caso o Duemilanove simplifica em muito a utilizao do
microcontrolador Atmega328 (so as mesmas do Atmega168). A Figura 6
apresenta a abstrao do microcontrolador e a identificao das funes dos pinos
pelo Arduino.


Figura 6 - Abstrao do Atmega328

Em preto na figura esto as descries das funes dos pinos do
microcontrolador. Em vermelho esto as funes utilizadas no IDE do Arduino.
Para facilitar esta anlise abrir o exemplo do firmware de acender e apagar o led,
como mostrado na Figura 7.



_________________________________________________________________


- 9 -

Figura 7 - Exemplo Blink

Abrindo este exemplo teremos o cdigo do firmware para acender e apagar o led.
Vale a pena analisar este firmware para verificar a facilidade na utilizao da
plataforma Arduino, totalmente herdado pelo Radiuino.


Figura 8 - Firmware para Blink


_________________________________________________________________


- 10 -

A primeira parte do cdigo faz o setup do hardware determinando no caso a
funo do pino 13 do Arduino.



A funo pinMode, que uma funo do Arduino, estabelece que o pino 13 ser
uma sada, que no exemplo vai acender o led que est ligado neste pino.

O loop para acender e apagar o led utiliza o seguinte cdigo:



Analisando o cdigo fica claro que primeiramente a funo digitalWrite, que do
Arduino, faz o pino 13 ir para nvel alto. Esta ao faz o led ligar. A funo delay
d um atraso de 1 segundo (esta funo do Arduino estabelece o valor em mili
segundos). Aps um segundo executada a funo digitalWrite, que faz o pino 13
ir para o nvel baixo. Novamente existe o delay e entra em loop permanente
fazendo com que o led acenda e apague a intervalos de 1 segundo.

Agora troque a o pino para 9 e grave no Radiuino. Para gravar este firmware no
Radiuino necessrio fazer upload do cdigo utilizando a USB. Primeiramente
necessrio escolher o tipo de placa que est sendo utilizada, no caso o BE900. A
apresenta a tela de opo de board.



_________________________________________________________________


- 11 -


Figura 9 - Escolha da placa

Em seguida necessrio escolher a porta serial. Ao ser conectado o Arduino no
computador criada uma COM com um nmero. Na Figura 10 mostrado que o
computador criou a COM62, que deve ser selecionada.


_________________________________________________________________


- 12 -

Figura 10 - Escolha da COM

Em seguida possvel carregar o firwmare no Arduino clicando no boto de
compilao e download mostrado na Figura 11.


Figura 11 - Boto para fazer upload do firmware
Aps o upload deve aparecer a mensagem da Figura 12 na rea de baixo do IDE
do Arduino.


Figura 12 - Mensagem de upload feito


_________________________________________________________________


- 13 -
Aps fazer o upload do firmware para o Arduino o led vai acender e apagar a
intervalos de 1 segundo. Caso queira alterar os tempos s mudar o tempo do
delay, lembrando que est em mili segundos.

Existe uma infinidade de outras aplicaes para o Arduino. Esta plataforma tem
sido utilizada intensamente no ambiente acadmico. Um interessante material foi
publicado pela revista Spectrum do IEEE sobre o Arduino.

http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino

Estas consideraes so necessrias para desmistificar esta plataforma que pode
ser utilizada em pesquisa. No caso o Radiuino na sua verso completa est sendo
usada para pesquisas na rea de Engenharia Eltrica e da Computao.




_________________________________________________________________


- 14 -
3 Descrio Sistmica
Para o funcionamento da rede necessria a presena de uma base Radiuino
ligada ao computador via USB e um n sensor Radiuino. No computador deve
existir um software para solicitao das grandezas medidas e tambm para
controle de algum dispositivo ligado ao rel. Na base deve ser gravado o firmware
apropriado, que faz uma interface entre o computador e o n sensor. No sensor
gravado o firmware desenvolvido para atender as necessidades do projeto. A
Figura 13 - Diagrama em blocos Figura 13 apresenta o sistema.



Figura 13 - Diagrama em blocos

A poltica de comunicao que ser apresentada neste material do computador
enviando um pacote de 52 bytes para o n sensor, atravs da base. Este pacote
montado pelo computador em concordncia com o firmware preparado para
executar as funes desejadas pelo n sensor. O sensor recebe e processa este
pacote executando o que foi determinado e responde com outro pacote, onde
esto as grandezas medidas.

Para entender como funciona a plataforma Radiuino o mais simples saber que
todo o processo de comunicao acontece atravs da transmisso do pacote de
52 bytes. Para facilitar o entendimento foi construdo um mapa do pacote que est
no Anexo 1. As informaes presentes no pacote no necessariamente precisam
respeitar esta estrutura proposta. Entretanto importante mencionar que deve ser

_________________________________________________________________


- 15 -
respeitado o nmero de 52 bytes, que no pode ser alterado. A plataforma foi
preparada desta forma e somente programadores experientes possuem os
conhecimentos em software para alterar o tamanho do pacote.

Uma rede de sensores sem fio necessita que sejam estabelecidos alguns
parmetros fundamentais para seu funcionamento. Os seguintes parmetros
devem ser ajustados tanto na base quando no n sensor:

Potncia de TX a potncia utilizada pelo rdio para transmitir o pacote.
Este valor deve ser informado e sua unidade dBm. Em geral a base e o
n sensor utilizam a mesma potncia. Para aplicaes estes valores podem
ser diferentes, para economia de energia, por exemplo;
Canal um nmero que determina a frequncia central que ser
utilizada. Tanto a base quanto o n sensor devem estar no mesmo canal
para que seja possvel a comunicao. o mesmo princpio do canal da
TV, que determina qual a frequncia ser utilizada na recepo;
Offset de Frequncia este um parmetro que deve ser informado para
que seja calibrado o rdio em funo da preciso do cristal. Basta dizer que
em funo de caractersticas construtivas existe uma preciso que deve ser
corrigida. Esta informao est escrita no rdio;
ID da Base a identificao da base que deve ser fornecida para que a
base seja identificada na rede. A rigor a base s tratar pacotes que
chegam com seu ID. Pacotes com ID diferente so descartados;
ID do N Sensor a exemplo do ID da base esta a identificao do n
sensor na rede. Certamente no podem existir dois ns com o mesmo ID.

Estes so os parmetros que devem ser colocados nos firmwares da base e dos
ns sensores.


_________________________________________________________________


- 16 -
A seguir apresentada, em mais detalhe, a poltica de comunicao entre o
computador e o ns sensor:

No computador deve existir um software capaz de montar o pacote de 52
bytes. Este pacote ter as instrues para o n sensor, como por exemplo:
ligar rel, acionar um led, fazer a medida da temperatura, fazer a medida da
luminosidade;
O computador envia o pacote para a base via USB;
A base recebe o pacote coloca o endereo da base e transmite em um
canal de rdio e com potncia previamente programados na base;
O sensor recebe o pacote e mede a intensidade de sinal recebida,
chamada de RSSI (Radio Signal Strengh Indicator) de downlink (da base
para o sensor)
Sensor analisa pacote para verificar se deve ligar ou desligar o rel e leds;
Sensor realiza a medida de temperatura e luminosidade e coloca no pacote
Sensor transmite o pacote para a base
A base recebe o pacote e mede a intensidade de sinal recebida (RSSI de
upling) e envia pacote para o computador
O computador recebe e processa o pacote exibindo na tela as grandezas
solicitada.

A Figura 14 apresenta um diagrama temporal das comunicaes entre os
elementos da rede.


_________________________________________________________________


- 17 -

Figura 14 - Diagrama temporal


A plataforma Radiuino est preparada para implementar outras funes mais
sofisticadas, como por exemplo o sensor transmitir quando existe alguma
necessidade. Tambm existe uma verso para pesquisa com a pilha de protocolo
equivalente TCP/IP, para criao, por exemplo, de protocolos de roteamento e
MAC.

A seguir so apresentados os detalhes para instalar os softwares e detalhes do
firmware.







_________________________________________________________________


- 18 -

4 DK101
O kit de desenvolvimento DK101 est apresentado na Figura 15
(http://www.radioit.com.br/products/kit-de-desenvolvimento-radioit-dk101-be900).


Figura 15 - DK101

O DK101 composto das seguintes partes:
2 mdulos BE900
1 programador
1 placa de aplicao
1 fonte de alimentao

_________________________________________________________________


- 19 -
1 cabo USB

Com estes itens possvel criar uma rede de sensor utilizando a plataforma
Radiuino.

4.1 Placa de Aplicao
A placa de aplicao possui as funes indicadas na Figura 16.


Figura 16 - Placa aplicao

A seguir so analisados os componentes utilizados neste projeto.

4.2 Transdutor de Temperatura
Como transdutor de temperatura foi utilizado o MCP9700 da empresa Microchip.
As figuras a seguir apresentam a pinagem e aparncia deste transdutor.


_________________________________________________________________


- 20 -

Figura 17 Descrio do transdutor de temperatura. Figura 18 - Aparncia fsica do
transdutor MCP9700A TO-92.
Algumas caractersticas:






_________________________________________________________________


- 21 -
4.3 Transdutor de Luminosidade
Para medir a luminosidade utilizado um LDR. As Figuras 4 e 5 mostram a
descrio e aparncia do LDR.

Figura 19 Descrio do Resistor LDR. Figura 20 - Aparncia fsica do Resistor LDR.

As Tabela 1 e Tabela 2 apresentam as caractersticas bsicas deste componente.



Tabela 1 - Caractersticas LDR



_________________________________________________________________


- 22 -

Tabela 2 - Referncia de luminosidade


4.4 Rel
O rel utilizado possui contato normalmente aberto e outro normalmente fechado.
As Figuras 6 e 7 apresentam o esquema do rel e suas dimenses.



Figura 21 - Disposio dos contatos. Figura 22 - Disposio mecnica dos pinos.

As Tabela 3 e Tabela 4 apresentam as caractersticas do rel.


_________________________________________________________________


- 23 -
Tabela 3 - Caractersticas rel



Tabela 4 - Dados da bobina DC



_________________________________________________________________


- 24 -
4.5 BE900 e Programador
Este mdulo composto de um microcontrolador Atmega328 e um transceptor
CC1101 da Texas. A Figura 23 apresenta o mdulo BE900 e as funes dos
pinos.


Figura 23 - BE900

A programao do microcontrolador feito pelo Usart apresentado na Figura 24.


Figura 24 - Programador Usart

10
11
Pino 1 Pino 20

_________________________________________________________________


- 25 -
5 Projeto do Hardware
O projeto da placa de aplicao deve ser feito considerando os pinos do BE900.
necessrio fazer um mapeamento dos pinos fsicos nos pinos lgicos do firmware.
Os transdutores devem ser ligados aos conversores analgico digital e os
controles em sadas digitais. Basicamente devem ser definidos os pinos que sero
utilizados para cada uma das tarefas, verificar sua correspondncia nas funes
do Arduino. Adicionalmente cada uma das funes tem sua correspondncia no
pacote de 52 bytes. O projeto do DK101 tem as seguintes funes:

A escolha de quais conversores analgico digital e sadas digitais sero utilizadas
depende nica e exclusivamente do projeto da placa, para facilitar a
implementao do layout. Foram escolhidos os seguintes pinos do BE900 para
cada uma das funes:

Um detalhe, a medida da luz pelo LDR feita atravs de um divisor resistivo.
Entretanto, seria desperdcio deixar este divisor resistivo permanentemente ativo.
Para evitar este desperdcio foi utilizado um pino do BE900 como sada digital
para alimentar o divisor resistivo, quando for feita a medida e desligado em
seguida. Foi escolhido o IO1 Pino 17. Portanto, para medir a intensidade
luminosa deve ser colocado nvel alto neste pino.

Deve ser projetado um circuito eltrico para ligar os transdutores no BE900, bem
como a parte de alimentao, onde deve ser previsto um regulador para 3,3 Volts.
No DK101 foram previstos trs leds que podem ser ligados para indicar diferentes
funes. Estes leds podem ser teis para verificar o funcionamento do sensor.

A tabela a seguir apresenta este mapeamento fsico para lgico.

_________________________________________________________________


- 26 -
Funo Funo
Pino
BE900
Varivel
Leitura AD
Radiuino
varivel
Pacote
Bytes no
Pacote
DK101
Conversores
Analgico
para Digital
ADC0 15 AD0_PIN
AD0[0]
AD0[1]
AD0[2]
16
17
18
Temperatura
ADC1 13 AD1_PIN
AD1[0]
AD1[1]
AD1[2]
19
20
21
Luminosidade
ADC2 12 AD2_PIN
AD2[0]
AD2[1]
AD2[2]
22
23
24
Tenso
Bateria
ADC3 11 AD3_PIN
AD3[0]
AD3[1]
AD3[2]
25
26
27
Tenso
Auxiliar
ADC4 20 AD4_PIN
AD4[0]
AD4[1]
AD4[2]
28
29
30
No Utilizado
ADC5 19 AD5_PIN
AD5[0]
AD5[1]
AD5[2]
31
32
33
No Utilizado
Entradas ou
Sadas
Digitais
IO0 4 IO0_PIN
IO0[0]
IO0[1]
IO0[2]
34
35
36
Led Vermelho
IO1 17 IO1_PIN
IO1[0]
IO1[1]
IO1[2]
37
38
39
Liga LDR
IO2 18 IO2_PIN
IO2[0]
IO2[1]
IO2[2]
40
41
42
Led Verde
Indicao de
Pacote
IO3 8 IO3_PIN
IO3[0]
IO3[1]
IO3[2]
43
44
45
Rel
IO4 7 IO4_PIN
IO4[0]
IO4[1]
IO4[2]
46
47
48
No Utilizado
no DK101
IO5 6 IO5_PIN
IO5[0]
IO5[1]
IO5[2]
49
50
51
Led Amarelo



_________________________________________________________________


- 27 -
6 Firmware Radiuino4App
Foi desenvolvido um firmware para atender as necessidades do projeto do DK101.
No site do Radiuino (http://www.radiuino.cc/node/34) est disponvel o firmware do
Radiuino4App. Esta verso do Radiuino apropriada para os desenvolvedores
que vo trabalhar somente com aplicao. Ao descompactar vo existir duas
pastas como na Figura 25.


Figura 25 - Radiuino4App

Pela figura possvel identificar duas pastas para os firmwares da base e do
sensor. Estes firmware devem ser carregados em dois rdios BE900, que sero a
base e o sensor. Primeiramente vamos tratar do firmware do sensor que possui os
seguintes arquivos:


Figura 26 - Firmware sensor

Abrir o arquivo Radiuino_Sensor no IDE do Arduino 1.0, como foi feito para o
exemplo do led. Ao abrir teremos a seguinte tela:


_________________________________________________________________


- 28 -

Figura 27 - Tela firmware sensor
Observar que existem trs abas:
Radiuino_Sensor
App
Headers
A seguir so apresentados os ajustes de parmetros e o cdigo da aplicao.
6.1 Ajuste de Parmetros
Os parmetros de ajuste geral esto na aba Radiuio_Sensor. Estes parmetros,
como j comentado antes, so:
Potncia
Canal
Offset de frequncia
ID do sensor
Taxa da serial


_________________________________________________________________


- 29 -
Estes parmetros esto mais abaixo no cdigo como mostrado na Figura 28.

Figura 28 - Parmetros do sensor

Na varivel my_addr colocarmos o nmero do ID do sensor, que no exemplo est
nmero 1. Na rede no pode existir outro sensor com este mesmo nmero. O
segundo parmetro a potncia que est com o nmero 7 que equivale
potncia de 10 dBm. A prxima tabela apresenta as potncias possveis de serem
ajustadas.

Tabela 5 - Parmetro potncia
Nmero Potncia em dBm
0 -30
1 -20
2 -15
3 -10
4 0
5 5
6 7
7 10

_________________________________________________________________


- 30 -

O prximo parmetro o canal que vai de 0 a 65 canais que corresponde aos
canais espaado de 200 kHz dentro da faixa de 915 MHz e 928 MHz. No caso foi
escolhido o canal 0 que equivale a transmitir na frequncia central de 915 MHz. O
prximo parmetro o offset de frequncia para corrigir a diferena da frequncia
do cristal. O nmero est anotado no prprio rdio. Este valor est em
hexadecimal, no caso est o valor 13. Colocar o valor anotado no rdio que ser
usado como sensor. O prximo parmetro a taxa da serial de comunicao com
a USB, que sempre temos usado 9600 bps. No caso do sensor no ser utilizada
a serial, pois o rdio do sensor no est conectado na base que permite conexo
USB. Este recurso til no caso de debug de cdigo em aplicaes avanadas.

6.2 Acionar leds e rel
O DK101 possibilita os dois tipos de operaes de um n sensor: controle de
processos e medida de grandezas. No caso do controle de processos possvel
acionar um rel para ligar algum dispositivo e ligar trs leds. Como j apresentado
anteriormente estes dispositivos devem estar ligados em pinos do do BE900,
como indicado na prxima tabela.
Funo Funo
Pino
BE900
Varivel
Leitura AD
Radiuino
varivel
Pacote
Bytes no
Pacote
DK101
Entradas ou
Sadas
Digitais
IO0 4 IO0_PIN
IO0[0]
IO0[1]
IO0[2]
34
35
36
Led Vermelho
IO1 17 IO1_PIN
IO1[0]
IO1[1]
IO1[2]
37
38
39
Liga LDR
IO2 18 IO2_PIN
IO2[0]
IO2[1]
IO2[2]
40
41
42
Led Verde
Indicao de
Pacote
IO3 8 IO3_PIN
IO3[0]
IO3[1]
IO3[2]
43
44
45
Rel

_________________________________________________________________


- 31 -
IO4 7 IO4_PIN
IO4[0]
IO4[1]
IO4[2]
46
47
48
No Utilizado
no DK101
IO5 6 IO5_PIN
IO5[0]
IO5[1]
IO5[2]
49
50
51
Led Amarelo

Com esta tabela em mos possvel verificar que para acionar o led vermelho,
que est ligado no pino 4 do BE900, necessrio alterar o status da varivel
IO0_PIN do valor 0 para o valor 1. Ou seja, se IO0_PIN = 0 o led deve apagar e se
IO0_PIN = 1 o led deve acender. Esta varivel de estado do led vermelho est
relacionada com a varivel de pacote IO0[#], que tem trs bytes (34,35,36) e o
valor que estar nestas variveis aquela enviada pelo computador. Portanto,
para alterar o estado do led necessrio que o pacote montado no computador
tenha esta instruo e a lgica do sensor entenda esta instruo. Observar que
existe uma flexibilidade para gerar esta instruo, uma vez que temos 3 bytes para
isto.

No cdigo disponvel do Radiuino4App foi implementada a seguinte lgica para a
varivel IO0:



Esta instruo a que l o valor de um byte que veio do computador:
pkt > IO0[0]
Isto significa que o valor que veio da base no byte 34 do pacote mapeada na
varivel IO0[0], que est no sensor. Ou seja, esta varivel vai ter o valor que est
no byte 34 recebido pelo rdio. Portanto, no software que monta o pacote no

_________________________________________________________________


- 32 -
computador deve ser escrito o valor 1 no byte 34 se o desejo for acionar o led
vermelho.:

Observar que o usurio pode mudar esta lgica para atender as necessidades da
aplicao que est sendo desenvolvida. Por exemplo, possvel criar um algica
de dupla checagem utilizando dois bytes.

Todas os outros pinos possuem a mesma lgica. Por exemplo, para ligar o rel
necessrio que o byte 43 tenha o valor 1. Caso isto seja verdade a varivel
IO3_PIN ser igual a 1, pela lgica implementada e o rel vai atracar.
6.3 Leitura de Grandezas
Quando o n sensor recebe um pacote este ser processado e ser executada a
leitura das grandezas. A prxima tabela apresenta a relao entre os pinos dos
ADs e as variveis.


_________________________________________________________________


- 33 -
Funo Funo
Pino
BE900
Varivel
Leitura AD
Radiuino
varivel
Pacote
Bytes no
Pacote
DK101
Conversores
Analgico
para Digital
ADC0 15 AD0_PIN
AD0[0]
AD0[1]
AD0[2]
16
17
18
Temperatura
ADC1 13 AD1_PIN
AD1[0]
AD1[1]
AD1[2]
19
20
21
Luminosidade
ADC2 12 AD2_PIN
AD2[0]
AD2[1]
AD2[2]
22
23
24
Tenso
Bateria
ADC3 11 AD3_PIN
AD3[0]
AD3[1]
AD3[2]
25
26
27
Tenso
Auxiliar
ADC4 20 AD4_PIN
AD4[0]
AD4[1]
AD4[2]
28
29
30
No Utilizado
ADC5 19 AD5_PIN
AD5[0]
AD5[1]
AD5[2]
31
32
33
No Utilizado


Pela tabela o sensor de temperatura est ligado no conversor analgico de
nmero 0. Portanto, o n sensor deve fazer uma leitura da temperatura e escrever
na varivel AD0. O conversor analgico digital do BE900 possui 10 bits e,
portanto, so necessrios 2 bytes. Os bytes deste conversor analgico digital so
16, 17 e 18. Foi convencionado que nestes bytes vo as seguintes informaes:

Varivel do Radiuino Byte do Pacote Informao
AD0[0] 16 Tipo de sensor
AD0[1] 17 Valor medido dividido por 256
AD0[2] 18 Reto da diviso por 256

O cdigo para implementar estas funes o seguinte:


_________________________________________________________________


- 34 -

Primeiramente feita a amostragem do valor fornecido pelo sensor atravs da
instruo do Arduino analogRead. O valor lido atribudo varivel AD0. Como
este valor varia de 0 a 1023 sero necessrios dois bytes. Para escrever este
valor no pacote que ser transmitido utilizada a instruo pkt >AD0[#]. Esta
uma instruo que escreve os valores das variveis AD0[#] nos bytes
correspondentes no pacote. No byte 17 vai o valor inteiro da varivel AD0[1] e no
byte 18 vai o valor do resto da diviso que corresponde a varivel AD0[2].

Ao chegar no computador os bytes 17 e 18 recebidos do ns sensor so
convertidos no valor da temperatura.


6.4 Upload do Firmware
Aps o ajuste de todos os parmetros necessrio fazer o upload dos firmwares
da base e sensor. Para tanto alm de selecionar a COM correta, como no caso do
firmware do led, necessrio selecionar o tipo de Board, que para o Radiuino o
BE900 que est disponvel na lista fornecida pelo IDE do Arduino, como mostra a
Figura 29.


_________________________________________________________________


- 35 -

Figura 29 - Seleo do BE900

Recomenda-se fazer primeiro o upload do sensor e depois da base, uma vez que
o programador tambm faz a conexo USB da base com o computador.




_________________________________________________________________


- 36 -
7 Software
Para acionar algum dispositivo e monitorar alguma grandeza atravs do
computador necessrio um software. Este software deve ser capaz de montar o
pacote de 52 bytes para transmitir as instrues de controle e receber o pacote do
sensor com 52 bytes, identificando os valores medidos. Portanto, conceitualmente
bastante simples, vai um pacote e volta outro pacote.

Sero apresentadas trs solues: Pacote Radiuino, Docklight e Python. A
primeira uma ferramenta desenvolvida exclusivamente para o Radiuino. A
segunda uma ferramenta livre para avaliao da serial (no caso a USB)
[DOCKLIGHT]. A terceira ferramenta utiliza a linguagem Python para
desenvolvimento de aplicaes [PYTHON].

No site do Radiuino esto disponveis os programas explicados nesta seo e os
links para download dos softwares.

7.1 RadiuinoTest
Como j explicado a plataforma Radiuino trabalha com um pacote com tamanho
fixo de 52 bytes. Esta ferramenta software apresenta a opo de montar o pacote
de forma fcil. A Figura 30 apresenta a tela deste software.


_________________________________________________________________


- 37 -

Figura 30 - Pacote Radiuino

Para utilizar esta ferramenta deve ser definida a COM utilizada pela base e clicar
em conectar. No pacote devem ser colocados o ID do n sensor e o ID da base,
como indicado na Figura 30. As funes de cada byte podem ser verificados
colocando o cursor em cima do byte. Na Figura 31 o cursor foi colocado no byte 8
indicando que neste byte deve estar o ID do n sensor, que neste caso 1, pois o
pacote destinado ao n sensor 1. Outra opo que este software permite
repetir a transmisso do pacote a intervalos peridicos em segundos.

ID do n sensor
ID da base

_________________________________________________________________


- 38 -

Figura 31 - Indicao do funo dos bytes

Para acender o led vermelho os bytes 34 e 35 devem ser igual a 1. Para isto basta
que o usurio v nestes bytes e altere para 1 os dois bytes, como indicado:



Portanto, este pacote ao ser enviado para o sensor com ID = 1 pela base com ID =
0 faz com que o led vermelho acenda.
7.2 Docklight
Esta uma ferramenta que permite utilizar a comunicao serial atravs da USB.
Basicamente o pacote de 52 bytes, a ser enviado para o sensor, montado para
realizar alguma funo, como por exemplo, para ligar o rel ou o led. No pacote
enviado pelo sensor est o valor decimal das grandezas medidas, no caso
temperatura e luminosidade. A Figura 32 apresenta a interface do Docklight j com

_________________________________________________________________


- 39 -
as funes utilizadas para testar se est funcionando a comunicao entre a base
e o sensor.



Figura 32 - Tela do Docklight

Clicar duas vezes na funo Liga Rel e liga led para abrir o editor de pacote, como
apresentado na Figura 33.

Funes de teste

_________________________________________________________________


- 40 -

Figura 33 - Edio do pacote de 52 bytes

Na Figura 33 esto mostradas as seguintes informaes:

Posio 8 identificao do sensor, no caso o ID 6. Este o valor que
deve estar no firmware do sensor
Posio 43 se estiver 1 liga o rel
Posio 46 se estiver 1 liga o led

Muito importante analisar que o ID do sensor o nmero que identifica o sensor
na rede. O sensor 6 somente vai responder se na posio 8 estiver o nmero 6.
Para fazer o rel ligar na posio 43 deve estar 1 e para desligar tem que estar 0.
Lembrando o firmware do sensor j apresentado, e mostrado novamente abaixo,
possvel verificar no cdigo do firmware do sensor a condio para ligar e desligar
o rel:

// IO3 - Acionamento do rel referente ao pino 8 do RFBee
Posio 8 ID sensor
Posio 46 Liga led
Posio 43 Liga rel
Posio 10 ID base

_________________________________________________________________


- 41 -
if (pkt->IO3[0] == 1)
{
digitalWrite (IO3_PIN, HIGH);
}
else {
digitalWrite (IO3_PIN, LOW);
}


Como pode ser observado o rel est ligado no Pino 8 do RFBee, como
comentado, e verificada a posio IO3[0] do pacote se est em 1 ou zero. O
IO3[0] a posio 43 do pacote, como pode ser verificado no mapa do pacote
apresentado no Anexo 1, reproduzido na Tabela 6.


_________________________________________________________________


- 42 -

Tabela 6 - Posio IO3
IO3[#]
0 1 2
IO3_W IO3_H IO3_L
43 44 45

Observar que IO3 possui mais dois bytes nas posies 44 e 45, que podem ser
utilizados para outras funes. A plataforma Radiuino permite a customizao
para as necessidades da rede que est sendo projetada. Por exemplo, o IO3 pode
comandar 3 rels.

Para acender o led seguir o mesmo raciocnio utilizado para o rel, s que neste
caso a varivel ser IO4[0], que est na posio 46 do pacote.

A execuo do comando de repetio apresenta a tela da Figura 34.


Figura 34 - Pacote TX e pacote RX

Em azul est o pacote de 52 bytes enviado pela base, em que possvel verificar
o ID do sensor (neste caso 005) na posio 8 e o ID da base (001) na posio 10.

_________________________________________________________________


- 43 -
Na posio 43 est o nmero 1 que liga o rel. Na posio 46 est o nmero 1
para ligar o led.

7.3 Python
Para criar aplicaes pode ser utilizado o Python, que livre. Foi utilizada a
verso 2.6 do Python. No site do Radiuino possvel baixar o software. Esta
uma linguagem de fcil assimilao e simples para desenvolver programas para
controlar processos e monitorar grandezas. O Python foi desenvolvido para
facilitar o desenvolvimento de programas. O cdigo bastante limpo sem a
necessidade da utilizao de chaves, sendo que a endentao utilizada para
identificar os limites das funes, como for e if. Comentrios so feitos utilizado o
sinal #. Tambm no necessria a declarao de variveis. No Anexo 2 est o
cdigo completo da aplicao. No resto desta seo apresentado o cdigo para
o AN001.

A comunicao entre o sensor e o computador feito via a base, que est
conectada ao computador via USB, como apresentado na Figura 13. A primeira
parte do cdigo importa as bibliotecas necessrias:



A segunda parte abre a serial e acerta os valores da comunicao:


Em seguida o cdigo permite a entrada da identificao da base e do sensor:

_________________________________________________________________


- 44 -



Como j explicado no desenvolvimento do firmware a base do Radiuino a
utilizao de um pacote de 52 bytes. A prxima parte cria o vetor do pacote:


Vai ser criado um loop infinito pela instruo


O vetor preenchido por zeros



Observar no cdigo que o vetor foi preenchido com zero em todas as posies.
Mais a frente no cdigo so colocados os valores no pacote para realizar as
aplicaes do AN001.

O loop para execuo do cdigo obtido pela sequncia:

while True:
try:

CDIGO QUE SER REPETIDO

except KeyboardInterrupt:
ser.close()
break


_________________________________________________________________


- 45 -
Em seguida so apresentadas as opes do programa e a entrada da opo na
varivel Opcao:



O prximo pedao de cdigo limpa o buffer da serial:



Em seguida a identificao da base e do sensor so colocados na posio 8 e 10
do pacote, como mostrado no cdigo:



No prximo pedao do cdigo existe uma sequncia de if para checar qual a
opo selecionada. Observar no cdigo como se escreve os valores no pacote de
52 bytes


_________________________________________________________________


- 46 -


Na prxima parte do cdigo o pacote enviado para a base atravs de um for que
envia cada byte para a USB. Existe uma espera de 0,5 segundos para dar tempo
do sensor receber, processar e transmitir de volta para a base o pacote. O pacote
recebido e verificado se chegaram 52 bytes. Em caso positivo apresentado na
tela EXECUTADO.



_________________________________________________________________


- 47 -



A parte final do cdigo faz a medida da temperatura, luminosidade e tenso da
fonte e escreve na tela. possvel tambm fazer log em arquivo .txt, muito til
para ps-processamento.




A temperatura e luminosidade foram colocados nas posies 17 e 18, como
apresentado no Anexo 1. Observar as operaes para clculo da temperatura, que

_________________________________________________________________


- 48 -
foi obtido no datasheet do sensor de temperatura. No caso da luminosidade
apresentado somente o nmero decimal recebido.


A tela a seguir mostra o menu e o resultadodo programa em Python executado.




Para editar o cdigo do Python necessrio abrir o cdigo no editor. Para isto
basta ir no subdiretrio onde est o cdigo clicar com o boto direito no arquivo.
Vai surgir uma janela que tem a opo de editar com o IDE do Python, como
mostrado a seguir.


_________________________________________________________________


- 49 -


Editar o cdigo Python

_________________________________________________________________


- 50 -
8 Observaes Finais
A plataforma Radiuino tem por objetivo principal permitir que alunos e pessoas
interessadas em rede de sensores sem fio tenham como implementar este tipo de
rede. As solues disponveis no mercado so proprietrias e dificultam muito o
desenvolvimento de experimentos e provas de conceito. No se espera que o
Radiuino seja utilizado para chegar a um produto, embora seja possvel. A
proposta o Radiuino servir para criar no mximo prottipos para teste. Para se
tornar um produto necessrio investir em plataformas para atingir este fim, com
o intuito de reduzir custo e tratar de questes como empacotamento mecnico.






_________________________________________________________________


- 51 -
Referncias
[ARDUINO] www.arduino.cc
[DOCKLIGHT] http://www.docklight.de/download_en.htm
[PYTHON] http://www.python.org/getit/releases/2.6/
[RADIOIT] www.radioit.com.br
[RADIUINO] www.radiuino.cc
[SEEEDSTUDIO] www.seeedstudio.com
[TEXAS] http://www.ti.com/tool/smartrftm-studio
[WIRING] http://wiring.org.co/






Anexo 1 Mapa do pacote de 52 bytes

Cabealhos das camadas PhyHdr[#] MACHdr[#] NetHdr[#] TranspHdr[#}
Posio na varivel do cabealho 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
Funo de cada posio de cada
cabealho RSSI_D
LINK
LQI_D
LINK
RSSI_
ULINK
LQI_UPL
INK Sleep
Tempo
Sleep1**
Tempo
Sleep2* TBD
DST_ID
Quem
Recebe DST_NID
SRC_ID
Quem
manda
SRC_NI
D COUNT TBD TBD TBD
Posio dos bytes no pacote 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Conversores AD AD0[#] AD1[#] AD2[#] AD3[#] AD4[#] AD5[#]
Posio na varivel dos AD 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2
Funo de cada posio de cada
AD AD0[0] AD0[1] AD0[2] AD1[0] AD1[1] AD1[2] AD2[0] AD2[1] AD2[2] AD3[0] AD3[1] AD3[2] AD4[0] AD4[1] AD4[2] AD5[0] AD5[1] AD5[2]
Posio dos bytes no pacote 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Entradas e sadas digitais IO0[#] IO1[#] IO2[#] IO3[#] IO4[#] IO5[#]
Posio na varivel dos IO 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2
Funo de cada posio de cada
IO IO0[0] IO0[1] IO0[2] IO1[0] IO1[1] IO1[2] IO2[0] IO2[1] IO2[2] IO3[0] IO3[1] IO3[2] IO4[0] IO4[1] IO4[2] IO5[0] IO5[1] IO5[2]
Posio dos bytes no pacote 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
* Tempo de sleep em segundos byte 1

**Tempo de sleep byte 2


Anexo 2 Cdigo Python
# PROGRAMA PARA APLICAO DO AP1
import serial
import math
import time
import struct
from time import localtime, strftime

# Configura a serial
# para COM# o nmero que se coloca n-1 no primeiro parmetrso. Ex COM9 valor 8
n_serial = raw_input("Digite o nmero da serial:") #seta a serial
n_serial1 = int(n_serial) - 1
ser = serial.Serial(n_serial1, 9600, timeout=0.5,parity=serial.PARITY_NONE) # seta valores da serial

# Identificao da base e sensor

ID_base = raw_input('ID_base:')
ID_sensor = raw_input('ID_sensor:')


_________________________________________________________________


- 2 -
# Cria o vetor Pacote
Pacote = {}


while True:
try:

# Cria Pacote de 52 bytes com valor zero em todas as posies
for i in range(1,53): # faz um array com 52 bytes
Pacote[i-1] = 0

# Imprime na tela o menu de opes
print 'Escolha um dos comandos abaixo e depois aperte enter'
print '0 - Escolher outro sensor (',ID_sensor,')'
print '1 - Ligar rel:'
print '2 - Desligar rel:'
print '3 - Liga LED Vermelho:'
print '4 - Desliga LED Vermelho:'
print '5 - Liga LED Amarelo:'
print '6 - Desliga LED Amarelo:'
print '7 - Liga LED Verde:'

_________________________________________________________________


- 3 -
print '8 - Desliga LED Verde:'
print '9 - Mede temperatura e luminosidade:'
print 's - Para sair:'

# Leitura da opo do menu escolhida
Opcao = raw_input('Comando:')


if Opcao == "0": # troca id do sensor
# Identificao do sensor a ser acessado
ID_sensor = raw_input('ID_sensor:')

else:

#opo de sada
if Opcao == "s" or Opcao == "S":# caso o caracter digitado for s
ser.close() # fecha a porta COM
print 'Fim da Execuo' # escreve na tela
break

# Limpa o buffer da serial

_________________________________________________________________


- 4 -
ser.flushInput()

# Coloca no pacote o ID_sensor e ID_base
Pacote[8] = int(ID_sensor)
Pacote[10] = int(ID_base)

# Verifica a opo de menu escolhida
if Opcao == "1": # Liga rel
Pacote[43] = 1
Pacote[44] = 1

if Opcao == "2": # Desliga rel
Pacote[43] = 1
Pacote[44] = 0

if Opcao == "3": # Liga led Vermelho
Pacote[34] = 1
Pacote[35] = 1

if Opcao == "4": # Desliga led Vermelho
Pacote[34] = 1

_________________________________________________________________


- 5 -
Pacote[35] = 0

if Opcao == "5": # Liga led Amarelo
Pacote[49] = 1
Pacote[50] = 1

if Opcao == "6": # Desliga led Amarelo
Pacote[49] = 1
Pacote[50] = 0

if Opcao == "7": # Liga led Verde
Pacote[40] = 1
Pacote[41] = 1

if Opcao == "8": # Desliga led Verde
Pacote[40] = 1
Pacote[41] = 0

# TX pacote - envia pacote para a base transmitir
for i in range(1,53):
TXbyte = chr(Pacote[i-1]) # Deve converter para caracter em ASCII para escrever na serial

_________________________________________________________________


- 6 -
ser.write(TXbyte)

# Tempo de espera para que receba a resposta do sensor
time.sleep(0.1)

# RX pacote - recebe o pacote enviado pelo sensor
line = ser.read(52) # faz a leitura de 52 bytes do buffer que recebe da serial pela COM

# Checa se recebeu 52 bytes
if len(line) == 52:
print 'EXECUTADO'

# Leitura de temperatura e luminosidade
if Opcao == "9":

# Leitura do AD0
ad0t = ord(line[16]) # tipo de sensor - no caso est medindo temperatura
ad0h = ord(line[17]) # alto
ad0l = ord(line[18]) # baixo
AD0 = ad0h * 256 + ad0l
Vout = 0.003223 * AD0

_________________________________________________________________


- 7 -
TEMP = (Vout*100)-53

# Leitura do AD1
ad1t = ord(line[19]) # tipo de sensor - no caso est medindo LDR
ad1h = ord(line[20]) # alto
ad1l = ord(line[21]) # baixo
AD1 = ad1h * 256 + ad1l

# Leitura do AD2
ad2t = ord(line[22]) # tipo de sensor - tenso
ad2h = ord(line[23]) # alto
ad2l = ord(line[24]) # baixo
AD2 = ad2h * 256 + ad2l
Vten = (0.003223 * AD2) * 11


print'Tenso de alimentao = ',Vten, ' Temp = ', TEMP, ' Luminosidade = ',AD1

# Caso no receba os 52 bytes acusa erro
else:
print 'erro'

_________________________________________________________________


- 8 -

ser.flushInput()

except KeyboardInterrupt:
ser.close()
break