KIT didático com a placa DK101 -...
Transcript of KIT didático com a placa DK101 -...
1
KIT didático com a placa DK101
Sumário
1. Introdução ..................................................................................... 2
2. Plataforma Arduino ....................................................................... 3
3. Plataforma Radiuino ...................................................................... 5
4. Princípio de funcionamento do Kit didático ................................... 7
4.1. Sensor de Temperatura........................................................................8
4.2. Sensor de Luminosidade LDR...............................................................8
4.3. Relé eletromecânico............................................................................9
4.4. Componentes do Kit DK101..................................................................9
4.5. Possíveis aplicações ............................................................................9
5. Tutorial do Kit ..............................................................................11
5.1. Configuração da placa do Radiuino no IDE........................................ 11
5.2. Ajuste na Comunicação Serial............................................................12
5.3. Ajustes no Firmeware da base............................................................13
5.4. Ajustes do Firmeware no nó sensor....................................................17
6. Softwares de aplicação ................................................................ 20
6.1. Software RadiuinoTest.......................................................................20
6.2. Software de controle em PYTHON.................................................... 21
7. Exemplo de aplicação..................................................................24
8. Considerações finais e Conclusão.................................................26
2
1. Introdução
O Kit didático apresentado neste documento, baseado na placa de aplicação
DK101, foi desenvolvido para aprimorar o conhecimento técnico de maneira fácil e
didática. Com ele, é possível realizar medições de algumas grandezas físicas, tais
como temperatura e umidade. Além disso, é possível fazer o acionamento de
dispositivos como lâmpadas, ventiladores, etc. Entretanto, é necessário que haja um
conhecimento básico de redes de sensores sem fio e de algumas plataformas de
desenvolvimento tais como Arduino e Radiuino. Tal conhecimento é essencial para
a utilização do Kit. Por isso, esse documento objetiva fornecer suporte técnico aos
que se interessam pela área de redes de sensores sem fio e pretendem utilizar o Kit
com a placa DK101 para aplicações variadas. Este documento foi organizado da
seguinte maneira: a Seção 2 apresenta a plataforma Arduino; A Seção 3 se trata da
plataforma Radiuino; a Seção 4 mostra o princípio de funcionamento do Kit DK101.
A seção 5 apresenta um tutorial a respeito do Kit DK101; a Seção 6 diz respeito aos
softwares utilizados para rodar as aplicações do Kit; a Seção 7 mostra um exemplo
de aplicação e; a Seção 8 aborda a conclusão.
3
2. Plataforma Arduino
A plataforma Arduino é voltada para projetos de automação residencial. Existe
uma grande variedade de sensores que podem ser utilizados no Arduino tais como
de temperatura, umidade, distância, luminosidade, som, etc. Tal plataforma é
considerada a chave para o entendimento da plataforma Radiuino que, por sua vez,
é a base do Kit didátoico. O Arduino pode ser entendido, basicamente, por um
ambiente de desenvolvimento integrado de software (Integrated Development
Environment, IDE) e um Hardware. A conexão entre Hardware/Software é feita por
um cabo Serial de barramento universal (Universal Serial Bus, USB). O que permite
tal conexão é um pequeno programa denominado Bootloader. A Figura 1 apresenta
o esquema de funcionamento da plataforma Arduino. As rotinas e programas,
desenvolvidos na IDE, são chamados de Firmwares. Estes são instalados no
microcontrolador presente no Hardware (que pode ser o circuito integrado
Atmega328) através do cabo USB. Dessa forma, pode-se controlar dispositivos e
fazer a utilização dos sensores. Esse é o princípio básico de automação e controle de
processos. O microcontrolador é o “cérebro” de qualquer projeto automatizado, já
que é responsável pela tomada das decisões na automação dos processos. O
esquema de ligação do microcontrolador Atmega 328 pode ser encontrado na seção
Anexo 1 desse documento. A Figura 2 ilustra o ambiente de desenvolvimento do
Arduino, no qual são desenvolvidos os Firmewares. Algumas informações relevantes
como compilação, Upload e desenvolvimento do Firmeware foram destacadas na
fig.2.
Fig.1. Plataforma Arduino.
5
3. Plataforma Radiuino
A plataforma Radiuino, representada pela Figura 3, é a base do Kit Didático. Pode
ser entendida da mesma forma que a plataforma Arduino (fig 1), já que se trata da
integração de um IDE e um Hardware. O Hardware da plataforma Radiuino consiste
na associação de um microcontrolador (que pode ser o ATmega328 ou ATmega168,
por exemplo) e um transceptor capaz de realizar transmissões e recepções via
radiofrequência. O transceptor utilizado nessa plataforma é o CC1101. De certa
forma, pode-se dizer que a plataforma Radiuino é uma união do Arduino com a
comunicação por rádiofrequência. Essa união permite que dispositivos sejam
controlados e supervisionados à distância. O meio de transmissão utilizado por
ondas de rádio é o ar. A Figura 4 ilustra o dispositivo BE900, composto por um
microcontrolador ATmega328 e um transceptor de rádio CC1101.
A equivalência de pinagem entre o BE900 e o Arduino foi disponibilizada na
Seção Anexos 1. O BE900 apresenta conversores analógico-digitais (AD), entradas e
saídas (I/O) e capacidade de transmissão e recepção de sinais de rádio. Todas as
informações são processadas no microcontrolador, recebidas ou transmitidas pelo
transceptor rádio e entregues ao computador por meio de um cabo USB. Existe,
ainda, a necessidade da inserção de um conversor USB-Serial entre o BE900 e o
computador, tal como ilustrado na fig.4. De maneira resumida, o BE900 é o
Hardware principal do Kit DK101.
Fig.3. Plataforma Radiuino.
7
4. Princípio de funcionamento do Kit didático
O princípio de funcionamento do Kit é bastante simples: dois rádios BE900 foram
implementados, um funcionando como base de dados e o outro como nó sensor. A
comunicação entre eles é feita por radiofrequência. A base conta com um BE900 e
um conversor USB Serial. Tal conversor é necessário porque o BE900 em si não é
capaz de se comunicar com o computador. Já o nó sensor apresenta componentes
como sensores de temperatura e umidade, Leds, um relé eletromecânico e, por fim,
outro BE900.
Os Datasheets e outras informações a respeito dos sensores serão apresentadas
posteriormente. A respeito do funcionamento do Kit, a base requisita os controles.
Essas requisições são transmitidas via radiofrequência ao BE900 do nó sensor que,
por sua vez, toma as devidas decisões e retransmite os novos estados para a base.
Por exemplo, a base “deseja” coletar informações a respeito da temperatura de
algum ambiente. As requisições são enviadas ao nó sensor. Este recebe a
informação, calcula a temperatura do ambiente, retransmite à base e, então, a
temperatura é disponibilizada no computador. A mesma ideia pode ser aplicada ao
relé eletromecânico e ao sensor de luminosidade. A Figura 5 ilustra o Kit com o
DK101 (Placa de aplicação situada no nó sensor).
Fig.5. Kit DK101.
Placa de aplicação
Programador BE900
Antenas
Cabo USB
Fonte de
alimentação 12V
8
4.1. Sensor de Temperatura
O sensor de temperatura presente no Kit é o MCP9700 e foi fabricado
pela empresa Microchip. A leitura da temperatura, no caso da placa DK101,
se resume à utilização da entrada ADC0 do dispositivo BE900. Deve-se fazer
uma leitura analógica, cuja tensão varia de 0 a 3,3V (faixa de alimentação do
BE900). Como o conversor AD do ATmega 328 é de 10 bits, os valores de
tensão serão representados na faixa de 0 a 1023 ( 1024210 ). Essas
informações já estão no Firmeware, que será apresentado posteriormente.
Entretanto, deve-se utilizar a equação (1) para que o valor lido na entrada AD
seja convertido para temperatura:
50100)1023
3,3( ADVaTemperatur (1)
em que ADV representa o valor de 0 a 1023. Outras informações a respeito
desse sensor foram disponibilizadas na Seção Anexo 2.
4.2. Sensor de Luminosidade LDR
O sensor de luminosidade utilizado no Kit, conhecido como Resistor
Dependente de Luz (Light Dependent Resistor, LDR), é simplesmente um
resistor, cuja resistência varia de acordo com a iluminação do ambiente. Se
a luminosidade estiver baixa, sua resistência pode chegar até alguns MΩ.
Caso contrário, a resistência é bastante pequena. Desse modo, pode-se
realizar uma leitura analógica da tensão no LDR. Tal leitura é feita no ADC1
do BE900 e o resultado será um valor de 0 a 1023. Outras informações a
respeito do LDR podem ser encontradas na Seção Anexo 2.
Além disso, é importante ressaltar que o LDR foi ligado na placa de
aplicação através de um divisor resistivo. Este, por sua vez, é alimentado pela
saída digital 5, tal como ilustrado na tabela de mapeamento dos pacotes da
placa DK101 (Tabela 1, Anexo 3). Esse tipo de ligação foi feita com o objetivo
de economizar energia nos momentos em que o sensor não estiver medindo
a luminosidade do ambiente. A saída digital 5 pode ser energizada via
software de acordo com o seguinte comando: DigitalWrite(5,HIGH). Outra
possível ativação do LDR é feita pelo Software RadiuinoTest, que será
apresentado posteriormente.
9
4.3. Relé eletromecânico
O relé utilizado na placa de aplicação DK101 do Kit possui os dois contatos da
bobina e outros três contatos: comum, normalmente fechado (NF) e
normalmente aberto (NA). A passagem de corrente pela bobina do relé faz
com que o terminal comum feche o contato com o NA. Logo, é possível
realizar o acionamento de dispositivos como lâmpadas, ventiladores, entre
outros. No Software RadiuinoTest, o acionamento do relé é feito no byte 43,
alterando seu valor de 0 para 1. Maiores informações a respeito do relé estão
disponíveis na Seção Anexo 2. Posteriormente, foi apresentado um exemplo
de projeto que envolve o relé e o sensor de luminosidade.
4.4. Componentes do Kit com o DK101
Componentes da base
Um dispositivo BE900 (controlador ATMEGA 328P e transceptor rádio CC1101);
Um conversor USB-Serial programador UartSbee;
Um cabo USB;
Uma antena;
Componentes do nó sensor
Um dispositivo BE900 (controlador ATMEGA 328P e transceptor rádio CC1101);
Placa de aplicação DK101 (sensores de temperatura e de luminosidade, Leds e
relé eletromecânico);
Uma antena;
Uma fonte de alimentação 12V;
Um suporte para pilhas;
4.5. Possíveis aplicações
A primeira delas conta com a seguinte situação: imagine que você precise manter
uma alta luminosidade num determinado ambiente e sua localização é distante.
Então, basta instalar o nó sensor nesse ambiente e coletar as medições a respeito
da luminosidade. Se a luminosidade estiver muito baixa, é feito o acionamento
automático da iluminação. Isso pode executado facilmente acoplando a
iluminação ao relé eletromecânico (presente na placa de aplicação do Kit). A
comunicação entre base/nó sensor é estabelecida via radiofrequência e, então,
por ser aplicada para longas distâncias (aproximadamente 1 Km).
Outra aplicação seria com a utilização do sensor de temperatura. A temperatura
de algum ambiente poderia ser monitorada e, dependendo do valor, poderiam
10
ser acionados aquecedores ou ventiladores. Da mesma forma que a aplicação
citada acima, isto também poderia ser implementado para longas distâncias
(aproximadamente 1 Km).
Monitoramento de luminosidade e temperatura numa estufa localizada à
distância da base de dados. Recentemente, esse trabalho foi realizado na Feagri
(Faculdade de engenharia Agrícola) da Unicamp.
11
5. Tutorial do Kit
Este tópico tem por objetivo ensinar o conteúdo básico necessário para a
utilização do Kit didático. Foram apresentados os ajustes básicos na programação
das unidades da base e do nó sensor, uma vez que cada BE900 possui características
específicas. Nesse documento será utilizada a IDE do Arduino, encontrada no site do
Radiuino (www.radiuino.cc). O link para download da IDE é o seguinte:
https://sourceforge.net/projects/radiuino/files/IDE%20Arduino%20-
%20Radiuino%20Ready/. O arquivo deve ser salvo em C:\Program Files (x86).
Algumas especificações aqui apresentadas devem ser feitas tanto para a base
quanto para o nó sensor. Isso será mostrado em detalhes nos tópicos 5.1, 5.2, 5.3 e
5,4.
5.1. Configuração da placa do Radiuino no IDE
Existem vários dispositivos de Hardware disponíveis no IDE do Arduino. O
dispositivo (ou placa) utilizado pela plataforma Radiuino é o BE900. Este pode
ser selecionado no IDE, em Tools/Board/BE900 (3,3V, 8 MHz) w/ATmega328. A
Figura 6 ilustra essa configuração.
Fig.6. Configuração da placa Radiuino no IDE.
12
5.2. Ajuste da Comunicação Serial
O conversor programador USB-Serial UartSbee é utilizado para programar
tanto a base quanto o nó sensor. Para isso, é necessário acessar Tools/Serial
Port/ COM#, em que # representa o número da porta Serial. Quando o conversor
USB-Serial é conectado pela primeira ao computador, é criada, imediatamente,
uma porta Serial exclusiva para o conversor em questão. No exemplo ilustrado
pela Figura 7, a porta Serial criada foi a COM4.
Fig.7. Ajuste da porta Serial.
13
5.3. Ajustes no Firmeware da base
Os Firmewares da base e do nó sensor podem ser encontrados segundo as
informações destacadas na Figura 8. A Figura 9 ilustra o Firmeware da base e é
possível observar as abas Radiuino_base, Headers.h, 1_Phy,_2_MAC e _3_NET. Na
camada física (_1_Phy) é necessária a realização de alguns ajustes nas variáveis
ilustradas pela Figura 10.
Fig.8. Localização dos Firmewares da base e do nó sensor.
15
Fig.10. Ajuste de variáveis da física.
A variável “power” está relacionada com a intensidade da potência de
transmissão e deve ser ajustada de acordo com a distância entre base e nó sensor. Como
ilustrado pela fig.10, existem 8 valores possíveis. Por convenção, utilizou-se “power = 7”,
já que se trata da maior potência (10dBm). A variável “channel” diz respeito ao canal de
transmissão. São 65 possibilidades no total, sendo que base e nó sensor devem estar
sintonizados no mesmo canal. Esses canais operam na faixa de 915MHz a 928MHz, com
um espaçamento espectral de 200KHz entre eles. No exemplo da figura 10, o canal 0 foi
utilizado (channel = 0). A variável “freq_offset” representa o ajuste de OFFSET, em
frequência, de cada rádio BE900 (base e nó sensor). Isso é necessário porque os
dispositivos BE900 contam com a presença de um cristal oscilador e capacitores
cerâmicos. Esses componentes provocam, de certa forma, um desvio em frequência que
precisa ser corrigido para garantir o bom funcionamento do sistema. Os OFFSETS são
medidos com equipamentos chamados de analisadores de espectro e já são
Potência de transmissão
Canal de comunicação
Offset de frequência
Velocidade da comunicação Serial
16
identificados em cada dispositivo BE900. A Figura 11 ilustra um BE900 etiquetado com
seu respectivo OFFSET em frequência, que deve ser igual ao valor da variável
“freq_offset”. Então, nesse exemplo utilizou-se freq_offset = 0xFB. E por fim, a taxa de
velocidade da comunicação Serial é dada pela variável “serial_baudrate”. É importante
ressaltar que as taxas da base e do nó sensor devem ser, essencialmente, iguais. No
exemplo da Fig.10, utilizou-se “serial_baudrate = 9600”.
Fig.11. OFFSET em frequência do BE900.
Na camada de rede (_3_Net), o único ajuste a ser feito é na variável “my_addr”,
cuja função é de representar o endereço de rede da base. Tal variável deve ser igual a 0,
ou seja, “my_addr = 0”.
Depois realizar todos esses ajustes, deve ser feito o encaixe do BE900 no
conversor programador USB-Serial e o Upload do código. A partir desse momento, um
dos rádios irá funcionar como base e ficará conectado ao computador por meio do
conversor USB-Serial. A Figura 12 ilustra a maneira como o rádio BE900 deverá ser ligado
ao conversor programador USB-Serial. É essencial deixar a saída da antena (destacada
na fig.12) logo acima da conexão do cabo USB.
OFFSET
17
Fig.12. Encaixe do BE900 no conversor programador USB-Serial.
5.4. Ajustes no Firmware do nó sensor
Os ajustes na programação do Firmeware do nó sensor são semelhantes aos
da base. O Firmeware pode ser acessado de acordo com as informações
destacadas na fig.8. A Figura 13 ilustra o código do nó sensor, que possui todas
as camadas da base acrescidas das camadas de transporte (_4_Transp) e de
aplicação (_5_App). A camada física deve ser ajustada da seguinte maneira: as
variáveis “power”, “channel” e “serial_baudrate” devem carregar os mesmos
valores inseridos na programação da base. Já a variável “freq_offset” varia de
acordo com as características físicas do BE900. Logo, deve-se seguir o valor de
referência tais como ilustram as fig.10 e fig.11. É importante lembrar que as
fig.10 e fig.11 ilustram apenas um exemplo de OFFSET e o valor correto a ser
inserido estará identificado em cada dispositivo BE900.
Já na camada de rede (_3_Net), a variável “my_addr” deve ser igual a um.
Então, a programação deve constar “my_addr = 1”. Na verdade, esses valores da
camada de rede definiram o endereço dessa forma: o endereço da base é zero e
o do sensor, um. Para criar uma rede com a base e vários nó sensores, cada
sensor deve possuir um “my_addr” diferente, referente a sua identificação na
rede. Pode-se fazer uma analogia às redes de computadores, nas quais cada
computador apresenta um IP diferente.
Feito isso, o conversor USB-Serial deve ser encaixado no nó sensor para que
seja feito o Upload do código. A Figura 14 mostra como deve ser feito o encaixe
Conexão da antena
Conector USB
18
do conversor USB-Serial na placa de aplicação. A seguir, serão apresentados os
softwares necessários para rodar as aplicações da plataforma Radiuino.
Fig.13. Código fonte de programação da base.
20
6. Softwares de Aplicação
Nessa seção foram apresentados os Softwares de aplicação da plataforma
Radiuino: RadiuinoTest e PYTHON.
6.1. Software RadiuinoTest
A Figura 15 ilustra o RadiuinoTest. Este pode ser baixado no site do Radiuino
(www.radiuino.cc), através do link abaixo:
http://radiuino.cc/?page_id=28
A utilização do software RadiuinoTest é muito simples. É necessário inserir a
porta Serial, velocidade de transmissão, alterar o estado do Byte 8 de 0 para 1 e,
então, clicar no botão “Conectar”. O Byte 8 é o ID do nó sensor e o Byte 10, da base.
Esses valores foram ajustados na camada rede dos Firmewares da base e do sensor,
na variável “my_addr”. A plataforma Radiuino trabalha com o envio e recepção de
pacotes de 52 Bytes (de 0 a 51). Cada pacote contém uma informação e o
mapeamento dos pacotes, isto é, as informações que estão contidas em cada
pacote, pode ser encontrado no site do Radiuino (www.radiuino.cc) e em Anexo 3
dessa documentação. Por exemplo, para acionar o relé, é necessário alterar o estado
do Byte 43 de 0 para 1 e clicar em “Enviar”. Então, se uma lâmpada estiver ligada
nos terminais do relé, esta irá acender no nó sensor segundo a requisição feita pela
base. Para mais detalhes a respeito das informações carregadas nos Bytes, foi
anexado o mapeamento dos pacotes no final deste documento. As informações
podem ser visualizadas no Anexos 3.
21
Fig.15. Software RadiuinoTest.
6.2. Software de controle em PYTHON
O software PYTHON pode ser adquirido no site do Radiuino e é uma
alternativa ao software RadiuinoTest. A Figura 16 ilustra a simples interface do
software PYTHON. O código foi disponibilizado na Seção Anexos 4. Para iniciar a
aplicação é necessário pressionar a tecla F5, pressionar ‘1’ para realizar as medidas
e inserir o número de medidas. O número de medidas diz respeito à quantidade de
vezes que a base irá coletar as informações do nó sensor. No exemplo da fig.16,
foram requisitadas 100 medições e, então, a base se comunicou com o nó sensor
100 vezes (foram transmitidos 100 pacotes e recebidos 100 pacotes). O resultado foi
ilustrado pela Figura 17. As siglas RSSIu (Received Signal Strength Indication Up) e
RSSId (Received Signal Strength Indication Down) representam as potências de
transmissão e de recepção, respectivamente. A terminação em Down é relativa ao
sinal enviado da base para o nó sensor (base - nó sensor). Já a terminação Up diz
respeito ao sinal enviado do nó sensor para a base (nó sensor – base). Existe,
também, a probabilidade do pacote enviado pelo transmissor não ser recebido pelo
Endereço do sensor
Iniciar a comunicação
22
receptor ou vice-versa. Nesse caso, a mensagem “Perda de pacote” ou “Erro” é
mostrada na interface do PYTHON.
Fig.16. Interface da aplicação em PYTHON.
24
7. Exemplo de aplicação
Nessa Seção foi apresentado um exemplo de aplicação envolvendo o relé
e o sensor de luminosidade LDR. Uma lâmpada foi ligada nos terminais “comum”
e normalmente aberto (NA) do relé. A baixa luminosidade do ambiente,
detectada pelo LDR, acarretou na ativação do relé que, por sua vez, promoveu o
acendimento da lâmpada. A Figura 18 mostra o esquemático do circuito. No
Firmeware do nó sensor, apresentado na Seção 5.4, deve ser habilitado
(retirando o comando de //) o seguinte trecho de código: if(pkt->IO3[0] == 1)
//não acontece nada
else if(pkt->IO3[0] == 0)
if(AD1< 100) //verifica se a luminosidade é menor do que 100
digitalWrite(IO3_PIN,HIGH); // liga a lâmpada
if(AD1>=100) // verifica se a luminosidade é maior do que 100
digitalWrite(IO3_PIN,LOW); // Desliga a lâmpada
Fig.18. Esquema de ligação do relé.
A Figura 19 ilustra a alteração feita no Firmeware do nó sensor. Tanto no
RadiuinoTest quanto no Phyton, a lâmpada acendeu para luminosidades abaixo
de 100. Já para luminosidades acima de 100, a lâmpada permaneceu apagada.
Além do controle da luminosidade através do LDR, foi possível ligar ou desligar a
lâmpada via RadiuinoTest ajustando o byte 43 para 1 ou 0, respectivamente.
26
8. Considerações finais e conclusão
O Kit com a placa DK101 foi desenvolvido de forma didática a todos os
que se interessam pela área de redes de sensores sem fio. As aplicações variam
de acordo com as especificações do projeto que, por sua vez, depende da
criatividade do projetista. A leitura desse documento é essencial para a utilização
do Kit. Foram apresentadas as plataformas nas quais o Kit foi baseado, um
tutorial razoavelmente detalhado e os softwares necessário para rodar as
aplicações.
Além da placa DK101, existem outras mais atualizadas como a DK102 e
DK105. Estas são contam com maiores variedades de sensores. Entretanto, a
leitura do que foi apresentado neste documento pode ser de grande ajuda para
os que se interessam pelas placas mais atuais.
33
Anexo 4
Código Python RSSId, RSSIu, Temperatura e
Luminosidade
# PROGRAMA PARA APLICAÇÃO DO DK101
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
ID_base = raw_input('ID_base = ')
34
#tempo_amostra = raw_input('Tempo entre
amostras = ')
# Cria o vetor Pacote
Pacote =
# Cria Pacote de 52 bytes com valor zero em todas as
posições
for i in range(0,52): # faz um array com 52 bytes
Pacote[i] = 0
while True:
try:
contador_tot = 0
contador_pot = 0
potmediad = 0.0
potacumulad = 0.0
potmeddbd = 0.0
contador_err = 0
potmediau = 0.0
potacumulau = 0.0
potmeddbu = 0.0
PER = 0
35
# Imprime na tela o menu de opções
print 'Escolha um comandos abaixos e depois
enter'
print '1 - Realiza medidas:'
print 's - Para sair:'
Opcao = raw_input('Entre com a Opção = ')
# Limpa o buffer da serial
ser.flushInput()
# Coloca no pacote o ID_base
Pacote[10] = int(ID_base)
Pacote[37] = 1 #Liga o LDR
# Leitura de temperatura e luminosidade
if Opcao == "1":
ID_sensor = raw_input('ID_sensor = ') #
Identificação do sensor a ser acessado
Pacote[8] = int(ID_sensor) # Coloca no pacote o
ID_sensor
num_medidas = raw_input('Entre com o
número de medidas = ')
w = int(num_medidas)
filename1 =
strftime("Sensor_%Y_%m_%d_%H-%M-%S.txt")
36
print "Arquivo de log: %s" % filename1
S = open(filename1, 'w')
for j in range(0,w):
for k in range(0,52): # transmite pacote
TXbyte = chr(Pacote[k])
ser.write(TXbyte)
# Aguarda a resposta do sensor
time.sleep(0.3)
line = ser.read(52) # faz a leitura de 52 bytes
do buffer que recebe da serial pela COM
if len(line) == 52:
rssid = ord(line[0]) # RSSI_DownLink
rssiu = ord(line[2]) # RSSI_UpLink
#RSSI Downlink
if rssid > 128:
RSSId=((rssid-256)/2.0)-74
else:
RSSId=(rssid/2.0)-74
#RSSI Uplink
if rssiu > 128:
RSSIu=((rssiu-256)/2.0)-74
else:
37
RSSIu=(rssiu/2.0)-74
count = ord(line[12]) # contador de
pacotes enviados pelo sensor
# 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)-50
# 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 - no
caso está medindo LDR
#ad2h = ord(line[23]) # alto
#ad2l = ord(line[24]) # baixo
#AD2 = ad2h * 256 + ad2l
#Vten = 0.003223 * AD2 * 11
38
#Leitura do AD5
ad5t = ord(line[22])
ad5h = ord(line[23])
ad5l = ord(line[24])
AD5 = ad5h * 256 + ad5l
contador_pot=contador_pot+1
potmwd = pow(10,(RSSId/10))
potacumulad = potacumulad + potmwd
potmwu = pow(10,(RSSIu/10))
potacumulau= potacumulau + potmwu
print'Número do pacote = ',count, 'RSSI
DownLink = ', RSSId, ' RSSI UpLink ', RSSIu, ' Temp =
', TEMP, ' Luminosidade = ',AD1
print >>S,time.asctime(),' Número do
pacote = ',count, 'RSSI DownLink = ', RSSId, ' RSSI
UpLink ', RSSIu, ' Temp = ', TEMP, ' Luminosidade =
',AD1
else:
contador_err = contador_err + 1
print ' erro'
print >>S,time.asctime(),' erro'
ser.flushInput()
time.sleep(0.5)
39
contador_tot = contador_tot + 1
#time.sleep(1)
potmediad = potacumulad /contador_pot
potmeddbd = 10*math.log10(potmediad)
#print ' A Potência média de downlink foi:',
potmediad , ' mW'
print 'A Potência média de Downlink em dBm
foi:', potmeddbd,' dBm'
print >>S,time.asctime(),' A Potência média de
Downlink em dBm foi:', potmeddbd,' dBm'
potmediau = potacumulau /contador_pot
potmeddbu = 10*math.log10(potmediau)
#print ' A Potência média de Uplink foi:',
potmediau , ' mW'
print 'A Potência média de Uplink em dBm foi:',
potmeddbu,' dBm'
print >>S,time.asctime(),' A Potência média de
Uplink em dBm foi:', potmeddbu,' dBm'
PER = float(contador_err)/float(contador_tot)
print 'A PER foi de:', float(PER),'%'
print >>S,time.asctime(),'A PER foi de:',
float(PER),'%'
S.close()