55
Treinamento Plataforma Radiuino

Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

  • Upload
    lengoc

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Treinamento

Plataforma

Radiuino

Page 2: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Treinamento Plataforma Radiuino

Título: Guia de Projeto com Radiuino

Autoria e Revisões

Dr. Omar Branquinho

Resumo: Este documento apresenta um guia de projeto para a plataforma Radiuino,

através de uma aplicação que mede temperatura, luminosidade, controle de um relé e

LEDs.

www.radiuino.cc 1

Page 3: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Sumário 1 INTRODUÇÃO ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 3

2 PLATAFORMA ARDUINO ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 4

3 DESCRIÇÃO SISTÊMICA ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 14

4 DK101 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 20

4.1 PLACA DE APLICAÇÃO ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 21

4.2 TRANSDUTOR DE TEMPERATURA ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 24

4.3 TRANSDUTOR DE LUMINOSIDADE ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 25

4.4 RELÉ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 26

4.5 BE900 E PROGRAMADOR ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 28

5 PROJETO DO HARDWARE ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 29

6 FIRMWARE RADIUINO4APP ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 31

6.1 AJUSTE DE PARÂMETROS ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 32

6.2 ACIONAR LEDS E RELÉ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 35

6.3 LEITURA DE GRANDEZAS ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 36

6.4 UPLOAD DO FIRMWARE ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 37

7 SOFTWARE ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 38

7.1 RADIUINO TEST ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 38

7.2 PYTHON ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 40

8 OBSERVAÇÕES FINAIS ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 46

REFERÊNCIAS ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 47

ANEXO 1 – MAPA DO PACOTE DE 52 BYTES

ANEXO 2 – CÓDIGO PYTHON

www.radiuino.cc 2

Page 4: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

1 Introdução

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 aplicação desejada até o software para exibição no

computador dos resultados medidos. Para ilustrar o desenvolvimento será utilizado um

exemplo hipotético de uma aplicação que deve ter as seguintes funções como na Tabela

1.

Tabela 1

Neste será apresentado um software que mostra na tela do computador um menu

que permita medir as grandezas e controlar os dispositivos mencionados acima. Em

seguida é utilizado o ScadaBR para realizar o armazenamento dos dados e controle do

relé e do led amarelo.

O exemplo que aqui será apresentado utiliza o hardware DK101 ou DK103 (este

último possui um relé a mais). Deve­se lembrar que a plataforma Radiuino foi concebida

para facilitar a implementação de rede de sensores sem fio, esta surgiu da dificuldade

das plataformas existentes não permitirem de forma fácil formar este tipo de rede. Esta

plataforma Radiuino utiliza o ambiente de programação do Arduino que por sua vez

facilita em muito o desenvolvimento do firmware. Entretanto, a plataforma Radiuino

possui as suas peculiaridades e foram desenvolvidas bibliotecas específicas para sua

funcionalidade.

Para seguir uma sequência lógica este material está dividido nas seguintes partes:

Plataforma Arduino, Descrição sistêmica, Aplicação, Hardware, Firmware e Software.

www.radiuino.cc 3

Page 5: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

2 Plataforma Arduino

A Figura 1 mostra o local correto para download do IDE Arduino/Radiuino

(disponibilizado em www.radiuino.cc).

Figura 1 ­ download Radiuino

Clicar em downloads e baixar do source forge o IDE com o Radiuino. Importante

frisar novamente que deve ser este o IDE a ser utilizado com o Radiuino, uma vez que

todas as bibliotecas já estão preparadas. Após descompactar o IDE Arduino já está

pronto para usar. Para isto deve­se abrir o IDE do Arduino como mostra a Figura 2:

Figura 2 ­ IDE Arduino

www.radiuino.cc 4

Page 6: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Vamos usar o exemplo de radio_sensor para o nó sensor e o radio_base para o

nó base. Neste exemplo mais simples basta acertar os parâmetros do rádio para que seja

realizada a comunicação. Deve­se existir agora determinados subdiretórios como mostra a Figura 3:

Figura 3 ­ IDE Arduino – Exemplo Radiuino

A plataforma Arduino permite o desenvolvimento fácil de firmware, que pode ser

usado integralmente com o Radiuino. Vale a pena analisar este firmware para verificar a

facilidade na utilização da plataforma Arduino, totalmente herdado pelo Radiuino. Para

exemplificar a facilidade desta plataforma existe disponível um exemplo de acender e

apagar um led utilizando o Arduino. Este led está disponível no hardware do Arduino

como ilustrado na Figura 4.

Figura 4 ­ Hardware Arduino Duemilanove

Este hardware, no caso o Duemilanove, simplifica em muito a utilização do

microcontrolador Atmega328 (são as mesmas do Atmega 168).

www.radiuino.cc 5

Page 7: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A Figura 5 apresenta a abstração do microcontrolador e a identificação das

funções dos pinos pelo Arduino.

Figura 5 ­ Abstração do Atmega328

Em preto na figura estão as descrições das funções dos pinos do

microcontrolador. Em vermelho estão as funções utilizadas no IDE do Arduino. Para

facilitar esta análise abrir o exemplo do firmware de acender e apagar o led, como

mostrado na Figura 6.

Figura 6 ­ Exemplo Blink

www.radiuino.cc 6

Page 8: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Abrindo este exemplo tem­se o código do firmware para acender e apagar o led

como mostrado na Figura 7.

Figura 7 ­ Firmware para Blink

A Figura 8 mostra a primeira parte do código faz o setup do hardware

determinando no caso a função do pino 13 do Arduino.

Figura 8 ­ Firmware

A função pinMode, que é uma função do Arduino, estabelece que o pino 13 será

uma saída, que no exemplo vai acender o led que está ligado neste pino.

www.radiuino.cc 7

Page 9: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

O loop para acender e apagar o led utiliza o seguinte código mostrado naFigura

9:

Figura 9 ­ Firmware

Analisando o código fica claro que primeiramente a função digitalWrite, que é do

Arduino, faz o pino 13 ir para nível alto. Esta ação faz o led ligar. A função delay dá um

atraso de 1 segundo (esta função do Arduino estabelece o valor em mili segundos). Após

um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível baixo.

Novamente existe o delay e entra em loop permanente fazendo com que o led acenda e

apague a intervalos de 1 segundo.

Falaremos agora do hardware BE900 conectado em um conversor serial USB.

Este hardware é totalmente equivalente ao Arduino. Ou seja, tendo o firmware para o

Arduino é possível gravá­lo no BE900 através do conversor serial USB. A única diferença

é que o Arduino possui 13 IO e o BE900 possui 6 IO. O número de conversores analógico

digital é o mesmo, ou seja, todos os dois possuem 6 ADC. A Figura 10 mostra um

Radiuino e um Conversor serial.

Figura 10 – Hardware Radiuino e Conversor serial

www.radiuino.cc 8

Page 10: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Para facilitar a compreensão e relação existente entre os hardwares Arduino e

Radiuino, a Figura 11 e a Figura 12 ilustram a as pinagens correspondentes.

Figura 11 – Hardware Arduino/Radiuino

Figura 12 – Hardware Arduino/Radiuino

www.radiuino.cc 9

Page 11: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A Correspondência entre o Arduino e o BE900 é mostrado Tabela 2 e na Tabela

3.

Entradas e Saídas.

Função Pino Arduino Pino BE900

IO0 4 4

IO1 5 17

IO2 6 18

IO3 7 8

IO4 8 7

IO5 9 6

Tabela 2 ­ Entradas e Saídas

Conversores Analógico Digital.

Função Pino Arduino Pino BE900

ADC0 0 15

ADC1 1 13

ADC2 2 12

ADC3 3 11

ADC4 4 20

ADC5 5 19

Tabela 3 – Conversores AD

www.radiuino.cc 10

Page 12: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Para gravar o firmware no Radiuino é necessário fazer upload do código utilizando

a USB. Primeiramente é necessário selecionar o tipo de placa a ser

utilizada, no caso o BE900, como mostra a Figura 13.

Figura 13 – Selecionando Board

Em seguida é necessário escolher a porta serial. Ao ser conectado o Radiuino no

computador é criada uma COM com um número XX (COMXX). Na Figura 14 é mostrado

um exemplo no qual o computador criou a COM19, que deve ser selecionada.

Figura 14 – Selecionando COM

www.radiuino.cc 11

Page 13: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

É possível rodar o código do blink no Radiuino, para isto deve­se trocar no código

do pino 13 para o pino 09 para gravar no Radiuino. No entanto continuaremos a terminar o exemplo no Arduino, com a board e a

COM selecionadas corretamente, é possível carregar o firmware no Arduino clicando no

botão de compilação e download como mostrado na Figura 15.

Figura 15 ­ Fazendo upload do firmware

Após o upload deve aparecer uma mensagem na área de baixo do IDE do Arduino

como na Figura 16.

Figura 16 ­ Mensagem de upload feito

Após fazer o upload do firmware para o Arduino o led vai acender e apagar a

intervalos de 1 segundo. Caso queira alterar o tempo é só mudar o delay, lembrando que

está em mili segundos.

www.radiuino.cc 12

Page 14: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Existem infinidades de outras aplicações para o Arduino, esta plataforma tem sido

utilizada intensamente no ambiente acadêmico. No caso do Radiuino, em sua versão

completa, está sendo usado para pesquisas na área de Engenharia Elétrica e da

Computação.

Estas considerações são necessárias para desmistificar esta plataforma que pode

ser utilizada em pesquisa. Como Exemplo disto, um interessante material foi publicado

pela revista Spectrum do IEEE sobre o Arduino (Disponivel em:

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

www.radiuino.cc 13

Page 15: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

3 Descrição Sistêmica

Para o funcionamento da rede é necessário a presença de uma base Radiuino ligada

a computador via USB e um nó sensor Radiuino. No computador deve existir um software

para solicitação das grandezas medidas e também para o 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 17 que apresenta o sistema.

Figura 17 ­ Diagrama em blocos

A política de comunicação que será apresentada neste material é do computador

enviando um pacote de 52 bytes para o nó sensor através do nó base. Este pacote é

montado pelo computador em concordância com o firmware preparado para executar as

funções desejadas pelo nó sensor. O sensor recebe e processa este pacote executando

o que foi determinado e responde com outro pacote no qual se encontram as grandezas

medidas.

Para entender como funciona a plataforma Radiuino, o mais simples é saber que

todo o processo de comunicação acontece através da transmissão do pacote de 52

bytes. Para facilitar, foi construído um mapa do pacote que está no Anexo­1, as

informações presentes no pacote não necessariamente precisam respeitar esta estrutura

proposta, entretanto, é importante mencionar que deve ser respeitado o número de 52

bytes que não pode ser alterado. A plataforma foi preparada desta forma e somente

programadores experientes possuem os conhecimentos em software para alterar o

tamanho do pacote.

www.radiuino.cc 14

Page 16: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Uma rede de sensores sem fio necessita que sejam estabelecidos alguns

parâmetros fundamentais para seu funcionamento. Os seguintes parâmetros devem ser

ajustados tanto na base quando no nó sensor:

Na Camada Física (PHY), tanto no sensor quando na base devem ser colocados estes

parâmetros:

Potência de TX – é a potência utilizada pelo rádio para transmitir o pacote.

Este valor deve ser informado e sua unidade é dBm. Em geral a base e o nó

sensor utilizam a mesma potência. Para aplicações estes valores podem ser

diferentes, para economia de energia, por exemplo;

Canal – é um número que determina a frequência central que será utilizada.

Tanto a base quanto o nó sensor devem estar no mesmo canal para que seja

possível a comunicação. É o mesmo princípio do canal da TV, que determina

qual a frequência será utilizada na recepção;

Offset de Frequência – este é um parâmetro que deve ser informado para

que seja calibrado o rádio em função da precisão do cristal. Basta dizer que

em função de características construtivas existe uma precisão que deve ser

corrigida. Esta informação está escrita no rádio;

A Figura 18 mostra a camada física e os parâmetros citados acima.

Figura 18 – Camada Física

www.radiuino.cc 15

Page 17: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A Figura 19 mostra a alteração feita na freq._offset, comparando com a Figura 18,

muda­se apenas os dois últimos números, coloca­se o número que vem no BE900 como

mostrado na Figura 20.

Figura 19 ­ Camada de Física – Sensor e Base

Figura 20 – BE900 – Sensor e Base

www.radiuino.cc 16

Page 18: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Na camada de rede (Net) deve ser identificado o sensor e a base. Este é o endereço

que deve ser colocado para que o pacote chegue no destino correto.

ID da Base – é a identificação 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 são descartados;

ID do Nó Sensor – a exemplo do ID da base esta é a identificação do nó

sensor na rede. Certamente não podem existir dois nós com o mesmo ID.

A Figura 21 a posição para colocar a identificação. Por default esta identificação é 0

para base e 1 para o sensor. A base em geral fica sempre com o endereço 0. Conforme

forem sendo acrescentados sensores vai alterando o ID.

Figura 21 – Camada de Rede

A seguir é apresentado em mais detalhe, a política de comunicação entre o

computador e o nó sensor:

www.radiuino.cc 17

Page 19: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

No computador deve existir um software capaz de montar o pacote de 52

bytes. Este pacote terá as instruções para o nó sensor, como por exemplo:

ligar um relé, acionar um led, fazer medida de temperatura, fazer a medida

de luminosidade;

O computador envia o pacote para a base via USB;

A base recebe o pacote coloca o endereço da base e transmite em um

canal de rádio e com potência previamente programados na base;

O nó 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

solicitadas.

A Figura 22 apresenta um diagrama temporal das comunicações entre os

elementos da rede.

Figura 22 ­ Diagrama temporal

www.radiuino.cc 18

Page 20: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A plataforma Radiuino está preparada para implementar outras funções mais

sofisticadas, como por exemplo, o sensor transmitir quando existir alguma necessidade.

Também existe uma versão para pesquisa com a pilha de protocolo equivalente à

TCP/IP, para criação, por exemplo, de protocolos de roteamento e MAC.

Uma importante informação é a definição do significado de cada um dos 52 bytes,

que está no Anexo 1. Por exemplo, a identificação do sensor que vai receber o pacote

está no byte 8. Se tiver um só sensor o ID=1. No byte 10 está a identificação de quem

está enviando, no caso da base o ID=0. Lembrando que nunca se deve colocar um

sensor com mesmo ID de uma base.

4 DK101

O kit de desenvolvimento DK101 está apresentado na Figura 23.

www.radiuino.cc 19

Page 21: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Figura 23 – Kit DK101

O DK101 é composto das seguintes partes:

2 módulos BE900.

1 programador – UartSBee V4.

1 placa de aplicação – DK101.

1 fonte de alimentação – 12 V.

1 cabo USB.

Com estes itens é possível criar uma rede de sensor utilizando a plataforma Radiuino.

4.1 Placa de Aplicação

A placa de aplicação possui determinados componentes indicados na Figura 24.

www.radiuino.cc 20

Page 22: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Figura 24 ­ Placa aplicação

Para definir em que pinos onde está cada tipo de grandeza a ser monitorada e

cada controle a ser executado temos que montar uma tabela (Tabela 4). Neste caso,

para o DK101 estão os pinos do BE900 que são utilizados.

Função Função

Arduino Pino BE900 DK101

Conversores

Analógico para Digital

ADC0 A0 15 Temperatu

ra

ADC1 A1 13 Luminosid

ade

ADC2 A2 12 Tensão

Bateria

ADC3 A3 11 Tensão

Auxiliar

ADC4 A4 20 Não

Utilizado

ADC5 A5 19 Não

Utilizado

Entradas ou Saídas Digitais

IO0 4 4 Led

Vermelho IO1

(PWM) 5 17 Liga LDR

IO2 6 18 Led Verde

www.radiuino.cc 21

Page 23: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Indicação de Pacote

IO3 7 8 Relé

IO4 8 7

Não Utilizado no DK101

IO5 9 6 Led

Amarelo Tabela 4 – Pinagens de Grandezas

Observar que a identificação dos pinos que vão ser ligados os sensores deve ser

feito de forma prévia. No nosso exemplo, no pino 15 do BE900 está o conversor

analógico número 0. Observa­se que para realizar a medida através deste conversor AD

é utilizado na mesma forma do Arduino:

AD0 = analogRead(A0);

A variável AD0 é um número de 0 a 1023. Para encontrar a tensão basta fazer

uma regra de 3, sabendo­se que o valor 1023 é a tensão de 3,3 Volts. Este conversor é

de 10 bits, portanto, vamos precisar de dois bytes para levar a informação da

temperatura, que no caso do DK101 ou DK103, tem­se um sensor de temperatura

analógico no pino 15. A Tabela 5 foi criada para facilitar a compreensão.

Função Função

Arduino Pino BE900

variável Pacote

Bytes no Pacote

DK101

www.radiuino.cc 22

Page 24: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Conversores

Analógico para Digital

ADC0

A0 15 AD0[0] 16 Tipo de Sensor

Temperatura AD0[1] 17 Inteiro AD0[2] 18 Resto

ADC1

A1 13 AD1[0] AD1[1] AD1[2]

19 20 21

Luminosidade

ADC2

A2 12 AD2[0] AD2[1] AD2[2]

22 23 24

Tensão Bateria

ADC3

A3 11 AD3[0] AD3[1] AD3[2]

25 26 27

Tensão Auxiliar

ADC4

A4 20 AD4[0] AD4[1] AD4[2]

28 29 30

Não Utilizado

ADC5

A5 19 AD5[0] AD5[1] AD5[2]

31 32 33

Não Utilizado

Entradas ou Saídas Digitais

IO0 4 4

IO0[0] IO0[1] IO0[2]

34 35 36

Led Vermelho

IO1 5 17

IO1[0] IO1[1] IO1[2]

37 38 39

Liga LDR

IO2 6 18

IO2[0] IO2[1] IO2[2]

40 41 42

Led Verde Indicação de Pacote

IO3 7 8

IO3[0] IO3[1] IO3[2]

43 44 45

1 Aciona TBD TBD

Relé

IO4 8 7

IO4[0] IO4[1] IO4[2]

46 47 48

Não Utilizado no DK101

IO5 9 6

IO5[0] IO5[1] IO5[2]

49 50 51

1 Liga LED TBD TBD

Led Amarelo

Tabela 5 – Pinagens

www.radiuino.cc 23

Page 25: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

4.2 Transdutor de Temperatura

Como transdutor de temperatura utilizado foi o MCP9700 da empresa Microchip. A

Figura 25 e a Figura 26 à seguir apresentam a pinagem, a aparência deste transdutor e

algumas características.

Figura 25 Aparência física do transdutor MCP9700A TO­92

Figura 26 – Características do transdutor

A tensão de saída do transdutor de temperatura é uma tensão que pode variar de

0 a 3,3 Volts, que é a alimentação do BE900, que ao ser lida pelo ADC0, no caso, vai

www.radiuino.cc 24

Page 26: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

gerar um número de 0 a 1023, como já comentado. Para transformar esta tensão em

temperatura deve ser utilizada a seguinte expressão.

Temperatura = Valor decimal * (3,3/1023)*100­50

4.3 Transdutor de Luminosidade

Para medir a luminosidade é utilizado um LDR. A Figura 27 mostra a descrição e

aparência do LDR.

Figura 27 ­ Descrição e Aparência física do Resistor LDR

A Tabela 6 apresenta as características básicas deste componente.

Tabela 6 ­ Características do LDR

www.radiuino.cc 25

Page 27: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

No DK101 o LDR está ligado em um divisor resistivo que é alimentado pela

saída digital 5 como mostrado anteriormente. A razão para ser ligado por um pino digital é

para não consumir energia quando não estiver medindo a luminosidade.

Observar que podemos acionar o divisor resistivo tanto pelo firmware fazendo o

pino 17 do BE900 ser ligado pela instrução: digitalWrite (5, HIGH); Também será possível

ligar este pino 17 através do pacote de 52 bytes.

4.4 Relé

O relé utilizado possui contato normalmente aberto e outro normalmente fechado.

A Figura 28 ­ Disposição dos contatos e Disposição mecânica dos pinos

apresentam o esquema do relé e suas dimensões.

Figura 28 ­ Disposição dos contatos e Disposição mecânica dos pinos

www.radiuino.cc 26

Page 28: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A Tabela 7 e Tabela 8 apresentam as características do relé.

Tabela 7 ­ Características relé

Tabela 8 ­ Dados da bobina DC

Obs: Para o caso do DK103 o relé 1 está no pino 8 e o relé 2 no pino 7.

www.radiuino.cc 27

Page 29: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

4.5 BE900 e Programador

Este módulo é composto de um microcontrolador Atmega328 e um transceptor

CC1101 da Texas. A Figura 29 apresenta o módulo BE900.

Figura 29 ­ BE900

A programação do microcontrolador é feito pelo Usart apresentado na Figura 30.

Figura 30 ­ Programador Usart

www.radiuino.cc 28

Page 30: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

5 Projeto do Hardware

O projeto da placa de aplicação deve ser feito considerando os pinos do BE900. É

necessário fazer um mapeamento dos pinos físicos nos pinos lógicos do firmware. Os

transdutores devem ser ligados aos conversores analógico digital e os controles em

saídas digitais. Basicamente devem ser definidos os pinos que serão utilizados para cada

uma das tarefas, verificar sua correspondência nas funções do Arduino. Adicionalmente

cada uma das funções tem sua correspondência no pacote de 52 bytes. O projeto do

DK101 tem as seguintes funções:

A escolha de quais conversores analógicos digitais e saídas digitais serão utilizadas

depende única e exclusivamente do projeto da placa, para facilitar a implementação do

layout. Foram escolhidos os seguintes pinos do BE900 para cada uma das funções:

Um detalhe, a medida da luz pelo LDR é feita através de um divisor resistivo.

Entretanto, seria desperdício deixar este divisor resistivo permanentemente ativo. Para

evitar este desperdício foi utilizado um pino do BE900 como saída 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 nível alto neste

pino.

Deve ser projetado um circuito elétrico para ligar os transdutores no BE900, bem

como a parte de alimentação, onde deve ser previsto um regulador para 3,3 Volts. No

DK101 foram previstos três leds que podem ser ligados para indicar diferentes funções.

Estes leds podem ser úteis para verificar o funcionamento do sensor.

www.radiuino.cc 29

Page 31: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A Tabela 9 apresenta este mapeamento físico para lógico.

Função Função Pino BE900

Variável Leitura AD Radiuino

variável Pacote

Bytes no Pacote DK101

Conversores Analógico 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

Tensão Bateria

ADC3 11 AD3_PIN AD3[0] AD3[1] AD3[2]

25 26 27

Tensão Auxiliar

ADC4 20 AD4_PIN AD4[0] AD4[1] AD4[2]

28 29 30

Não Utilizado

ADC5 19 AD5_PIN AD5[0] AD5[1] AD5[2]

31 32 33

Não Utilizado

Entradas ou Saídas 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 Indicação 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

Não Utilizado no DK101

IO5 6 IO5_PIN IO5[0] IO5[1] IO5[2]

49 50 51

Led Amarelo

Tabela 9 ­ Mapeamento

www.radiuino.cc 30

Page 32: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

6 Firmware Radiuino4App

O firmware foi estruturado em camadas, a exemplo da pilha TCP/IP utilizada na

Internet, para facilitar o desenvolvimento de rede de sensores sem fio. A Figura 31

mostra as funcionalidades de cada camada.

Figura 31 – Camadas

No nó sensor é montada toda a pilha de camadas, já na base somente até a

camada de rede, como mostrado na Figura 32.

Figura 32 – Camadas da base e do sensor

www.radiuino.cc 31

Page 33: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Foi desenvolvido um firmware para atender as necessidades do projeto do DK101.

Este firmware pode ser acessado diretamente do IDE do Arduino, que deve ser baixado

do site: http://sourceforge.net/projects/radiuino/files/IDE%20Arduino%20­20Radiuino%20Ready/Windows/

Neste IDE já existe o Radiuino nos exemplos , existe um firmware para a base e

um firmware para o nó sensor como mostrado anteriormente na Figura 3 ­ IDE Arduino

– Exemplo Radiuino.

Estes firmwares devem ser carregados em dois rádios BE900, que serão a base e

o sensor.

6.1 Ajuste de Parâmetros

Os parâmetros de ajuste geral estão na aba Radiuino_Sensor e Radiuino_Base.

Estes parâmetros, como já comentados antes, são Potência, Canal, Offset de frequência,

ID do sensor, Taxa da serial. Na Descrição Sistêmica a Figura 18, Figura 19, Figura

20, Figura 21, é mostrado de forma mais detalha, repetiremos então as Figuras para

facilitar a compreensão destes parâmetros.

Figura 18 – Camada Física

www.radiuino.cc 32

Page 34: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Um dos parâmetros é a potência que está com o número 7, esta equivale à potência

de 10 dBm. A Tabela 10 apresenta as potências possíveis de serem ajustadas.

Número Potência em dBm 0 ­30

1 ­20

2 ­15

3 ­10

4 0

5 5

6 7

7 10

Tabela 10 – Parâmetro de potência

Outro parâmetro é o canal que vai de 0 a 65 canais que corresponde aos canais

espaçado de 200 kHz dentro da faixa de 915 MHz e 928 MHz. No caso foi escolhido o

canal 0 que equivale a transmitir na frequência central de 915 MHz.

Alteração feita na freq._offset, comparando com a Figura 18, muda­se apenas os

dois últimos números, coloca­se o número que vem no BE900 como mostrado na Figura

20.

Figura 19 – Camada de Física – Sensor e Base

www.radiuino.cc 33

Page 35: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Figura 20 – BE900 – Sensor e Base

Este offset de frequência é para corrigir a diferença da frequência do cristal. O

número está anotado no próprio rádio. Este valor está em hexadecimal, no caso está o

valor 13. Coloca­se o valor anotado no rádio que será usado como sensor. O próximo

parâmetro mostrado na Figura 18 é a taxa da serial de comunicação com a USB, que

sempre temos usado 9600 bps. No caso do sensor não será utilizada a serial, pois o rádio

do sensor não está conectado na base que permite conexão USB. Este recurso é útil no

caso de debug de código em aplicações avançadas.

Figura 21 – Camada de Rede

www.radiuino.cc 34

Page 36: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Como ilustrado acima na Figura 21, na variável my_addr coloca­se o número do

ID do sensor, que no exemplo está número 1. Na rede não pode existir outro sensor com

este mesmo número.

6.2 Acionar leds e relé

O DK101 possibilita os dois tipos de operações de um nó sensor: controle de

processos e medida de grandezas. No caso do controle de processos é possível acionar

um relé para ligar algum dispositivo e ligar três leds. Como já apresentado anteriormente

estes dispositivos devem estar ligados em pinos do radio BE900, como indicado na

Tabela 9 ­ Mapeamento na página 30.

Com esta tabela em mãos é possível verificar que para acionar o led vermelho,

que está ligado no pino 4 do BE900, é necessário alterar o status da variável 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 variável de estado do led vermelho está relacionada com a variável

de pacote IO0[#], que tem três bytes (34, 35, 36) e o valor que estará nestas variáveis é

aquela enviada pelo computador. Portanto, para alterar o estado do led é necessário que

o pacote montado no computador tenha esta instrução e a lógica do sensor entenda esta

instrução. Observa­se que existe uma flexibilidade para gerar esta instrução, uma vez

que temos 3 bytes para isto.

Na Figura 33 é mostrado o código disponível do Radiuino4App que foi

implementado a seguinte lógica para a variável IO0:

Figura 33

www.radiuino.cc 35

Page 37: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Esta instrução é 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

variável IO0[0], que está no sensor. Ou seja, esta variável vai ter o valor que está no byte

34 recebido pelo rádio. Portanto, no software que monta o pacote no computador deve

ser escrito o valor 1 no byte 34 se o desejo for acionar o led vermelho.

Observa­se que o usuário pode mudar esta lógica para atender as necessidades

da aplicação que está sendo desenvolvida. Por exemplo, é possível criar uma alógica de

dupla checagem utilizando dois bytes. Todos os outros pinos possuem a mesma lógica. Por exemplo, para ligar o relé é

necessário que o byte 43 tenha o valor 1. Caso isto seja verdade a variável IO3_PIN será

igual a 1, pela lógica 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. Ainda com a Tabela 9 temos a relação entre os pinos dos ADs e

as variáveis.

Pela tabela o sensor de temperatura está ligado no conversor analógico de

número 0. Portanto, o nó sensor deve fazer uma leitura da temperatura e escrever na

variável AD0. O conversor analógico digital do BE900 possui 10 bits e, portanto, são

necessários 2 bytes. Os bytes deste conversor analógico digital são 16, 17 e 18. Foi

convencionado que nestes bytes vão as seguintes informações como na Tabela 11.

Variável do Radiuino Byte do Pacote Informação

AD0[0] 16 Tipo de sensor

AD0[1] 17 Valor medido dividido por 256

AD0[2] 18 Reto da divisão por 256

Tabela 11

www.radiuino.cc 36

Page 38: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

O código para implementar estas funções é apresentado na Figura 34.

Figura 34

Primeiramente é feita a amostragem do valor fornecido pelo sensor através da

instrução do Arduino analogRead. O valor lido é atribuído à variável AD0. Como este

valor varia de 0 a 1023 serão necessários dois bytes. Para escrever este valor no pacote

que será transmitido é utilizada a instrução pkt – >AD0[#]. Esta é uma instrução que

escreve os valores das variáveis AD0[#] nos bytes correspondentes no pacote. No byte

17 vai o valor inteiro da variável AD0[1] e no byte 18 vai o valor do resto da divisão que

corresponde a variável AD0[2].

Ao chegar no computador os bytes 17 e 18 recebidos do nós sensor são

convertidos no valor da temperatura.

6.4 Upload do Firmware

Após o ajuste de todos os parâmetros é necessário fazer o upload dos firmwares

da base e sensor. Para tanto além de selecionar a COM correta, como no caso do

firmware do led, é necessário selecionar o tipo de Board, que para o Radiuino é o BE900

que está disponível na lista fornecida pelo IDE do Arduino, como já mostrado

anteriormente na Figura 13 e Figura 14 da página 11.

Recomenda­se fazer primeiro o upload do sensor e depois da base, uma vez que o

programador também faz a conexão USB da base com o computador.

www.radiuino.cc 37

Page 39: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

7 Software

Para acionar algum dispositivo e monitorar alguma grandeza através do computador é

necessário um software. Este software deve ser capaz de montar o pacote de 52 bytes

para transmitir as instruções 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.

Serão apresentadas três soluções: Pacote Radiuino, Docklight e Python. A primeira é

uma ferramenta desenvolvida exclusivamente para o Radiuino. A segunda é uma

ferramenta livre para avaliação da serial (no caso a USB) [DOCKLIGHT]. A terceira

ferramenta utiliza a linguagem Python para desenvolvimento de aplicações [PYTHON].

No site do Radiuino estão disponíveis os programas explicados nesta seção 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 opção de montar o pacote de

forma fácil. A Figura 35 apresenta a tela deste software.

www.radiuino.cc 38

Page 40: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Figura 35 ­ Pacote Radiuino

Para utilizar esta ferramenta deve ser definida a COM utilizada pela base e clicar

em conectar, a figura acima mostra um exemplo no qual foi criada a COM34.

No pacote devem ser colocados o ID do nó sensor e o ID da base, como indicado

na Figura 36. As funções de cada byte podem ser verificados colocando o cursor em

cima do byte. Na Figura 38 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 opção que este software permite é repetir a transmissão do pacote a intervalos

periódicos em segundos.

Figura 36 ­ Indicação da função dos bytes

www.radiuino.cc 39

Page 41: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Para acender o led vermelho o byte 34 deve ser igual a 1. Para isto basta que o

usuário vá neste byte e altere para 1, como indicado na Figura 37.

Figura 37 ­ Byte 34

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 Python

Para criar aplicações pode ser utilizado o Python, que é livre. Foi utilizada a

versão 2.6 do Python. No site do Radiuino é possível baixar o software. Esta é uma

linguagem de fácil assimilação e simples para desenvolver programas para controlar

processos e monitorar grandezas. O Python foi desenvolvido para facilitar o

desenvolvimento de programas. O código é bastante limpo sem a necessidade da

utilização de chaves, sendo que a endentação é utilizada para identificar os limites das

funções, como for e if. Comentários são feitos utilizado o sinal #. Também não é

necessária a declaração de variáveis. No Anexo 2 está o código completo da aplicação.

No resto desta seção é apresentado o código para o AN001.

www.radiuino.cc 40

Page 42: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A comunicação entre o sensor e o computador é feito via a base, que está

conectada ao computador via USB, como apresentado na Figura 38. A primeira parte do

código importa as bibliotecas necessárias:

Figura 38 – Importa Bibliotecas

A segunda parte abre a serial acerta os valores da comunicação como mostra a

Figura 39.

Figura 39 – Valores de comunicação

Em seguida na Figura 40 o código permite a entrada da identificação da base e do sensor:

Figura 40 – ID

Como já explicado no desenvolvimento do firmware a base do Radiuino é a utilização de um pacote de 52 bytes. A próxima parte como mostra a Figura 41 cria o vetor do pacote:

Figura 41 ­ cria pacote

Será criado um loop infinito, como na Figura 42.

Figura 42 ­ loop

O vetor é preenchido por zeros como mostra a Figura 43.

www.radiuino.cc 41

Page 43: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Figura 43 ­ preenche pacote com zero

Mais a frente, no código são colocados os valores no pacote para realizar as

aplicações do AN001.

O loop para execução do código é obtido pela sequência: while True:

try:

CÓDIGO QUE SERÁ REPETIDO

except KeyboardInterrupt: ser.close() break

Na Figura 44 são apresentadas as opções do programa e a entrada da opção na

variável Opção.

Figura 44 – Opções do programa

A Figura 45 é o pedaço do código que limpa o buffer da serial:

Figura 45 – Limpa buffer

www.radiuino.cc 42

Page 44: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Na Figura 46 tem­se a identificação da base e do sensor, estes são colocados na

posição 8 e 10 do pacote.

Figura 46 ­ ID base e sensor

No próximo pedaço do código existe uma sequência de if para checar qual a

opção selecionada. É possível observar na Figura 47 no código como se escreve os

valores no pacote de 52 bytes

Figura 47 ­ Sequência de if

www.radiuino.cc 43

Page 45: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A Figura 48 mostra a parte do código onde o pacote é enviado para a base

através de um for que envia cada byte para a USB. Existe uma espera de 0,5 segundos

para dar tempo de o 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.

Figura 48 ­ envio de pacotes

A parte final do código é mostrado na Figura 49, esta parte do código faz a

medida da temperatura, luminosidade e tensão da fonte e escreve na tela. É possível

também fazer log em arquivo .txt, muito útil para pós­processamento.

Figura 49 ­ Parte final do código

www.radiuino.cc 44

Page 46: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

A temperatura e luminosidade foram colocados nas posições 17 e 18, como

apresentado no Anexo 1. Observar as operações para cálculo da temperatura, que foi

obtido no datasheet do sensor de temperatura. No caso da luminosidade é apresentado

somente o número decimal recebido.

A Figura 50 mostra o menu e o resultado do programa em Python executado.

Figura 50 – Python

Para editar o código do Python é necessário abrir o código no editor. Para isto

basta ir no subdiretório onde está o código clicar com o botão direito no arquivo. Vai

surgir uma janela que tem a opção de editar com o IDE do Python, como mostrado na

Figura 51.

Figura 51 ­ editar código Python

www.radiuino.cc 45

Page 47: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

8 Observações 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 soluções disponíveis no mercado são proprietárias e dificultam muito o

desenvolvimento de experimentos e provas de conceito. Não se espera que o Radiuino

seja utilizado para chegar a um produto, embora seja possível. A proposta é de o

Radiuino servir para criar protótipos para teste. Para se tornar um produto é necessário

investir em plataformas para atingir este fim, com o intuito de reduzir custo e tratar de

questões como empacotamento mecânico.

www.radiuino.cc 46

Page 48: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Referências

[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/

www.radiuino.cc 47

Page 49: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Anexo 1 – Mapa do pacote de 52 bytes

* Tempo de sleep em segundos byte 1

**Tempo de sleep byte 2

www.radiuino.cc 48

Page 50: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Anexo 2 – Código Python

# PROGRAMA PARA APLICAÇÃO DO AP1

import serial

import math

import time

import struct

from time import localtime, strftime

# Configura a serial

# para COM# o número que se coloca é n­1 no primeiro parâmetrso. Ex COM9

valor 8

n_serial = raw_input("Digite o número 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

# Identificação da base e sensor

ID_base = raw_input('ID_base:')

ID_sensor = raw_input('ID_sensor:')

# Cria o vetor Pacote

Pacote =

while True:

www.radiuino.cc 49

Page 51: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

try:

# Cria Pacote de 52 bytes com valor zero em todas as posições

for i in range(1,53): # faz um array com 52 bytes

Pacote[i­1] = 0

# Imprime na tela o menu de opções

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:'

print '8 ­ Desliga LED Verde:'

print '9 ­ Mede temperatura e luminosidade:'

print 's ­ Para sair:'

# Leitura da opção do menu escolhida

Opcao = raw_input('Comando:')

if Opcao == "0": # troca id do sensor

# Identificação do sensor a ser acessado

ID_sensor = raw_input('ID_sensor:')

www.radiuino.cc 50

Page 52: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

else:

#opção de saída

if Opcao == "s" or Opcao == "S":# caso o caracter digitado for s

ser.close() # fecha a porta COM

print 'Fim da Execução' # escreve na tela

break

# Limpa o buffer da serial

ser.flushInput()

# Coloca no pacote o ID_sensor e ID_base

Pacote[8] = int(ID_sensor)

Pacote[10] = int(ID_base)

# Verifica a opção 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

www.radiuino.cc 51

Page 53: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

Pacote[35] = 1

if Opcao == "4": # Desliga led Vermelho

Pacote[34] = 1

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

ser.write(TXbyte)

www.radiuino.cc 52

Page 54: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

# 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

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

www.radiuino.cc 53

Page 55: Treinamento - Radiuinoradiuino.cc/wp-content/uploads/2015/04/TreinamentoPlataformaRadiui... · um segundo é executada a função digitalWrite, que faz o pino 13 ir para o nível

AD1 = ad1h * 256 + ad1l

# Leitura do AD2

ad2t = ord(line[22]) # tipo de sensor ­ tensão

ad2h = ord(line[23]) # alto

ad2l = ord(line[24]) # baixo

AD2 = ad2h * 256 + ad2l

Vten = (0.003223 * AD2) * 11

print'Tensão de alimentação = ',Vten, ' Temp = ', TEMP, ' Luminosidade

= ',AD1

# Caso não receba os 52 bytes acusa erro

else:

print 'erro'

ser.flushInput()

except KeyboardInterrupt:

ser.close()

break

www.radiuino.cc 54