Treinamento Plataforma Radiuino4App v9

60
TREINAMENTO PLATAFORMA RADIUINO4APP Título: Guia de Projeto com Radiuino Autoria e Revisões Nome Data Versão Obs Branquinho 27/03/2012 1 Treinamento FEAGRI Branquinho 08/05/2012 2 Atualização figuras Resumo: Este documento apresenta um guia de projeto para a plataforma Radiuino, através de uma aplicação que mede temperatura e luminosidade além de controlar relé e led.

Transcript of Treinamento Plataforma Radiuino4App v9

  • 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_DLINK

    LQI_DLINK

    RSSI_ULINK

    LQI_UPLINK Sleep

    Tempo Sleep1**

    Tempo Sleep2* TBD

    DST_ID Quem

    Recebe DST_NID

    SRC_ID Quem manda

    SRC_NID 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