Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Internet Das Coisas Cloadoaldo IDE ARDUINO

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 63

Internet das Coisas

Cloadoaldo Basaglia da Fonseca


Douglas Lohmann
Marco Aurélio Graciotto Silva
Paulo Cesar Gonçalves
ii

Este trabalho está licenciado sob uma Licença


Creative Commons Atribuição 4.0 Internacional.
Para ver uma cópia desta licença, visite
http://creativecommons.org/licenses/by/4.0/.

Os diagramas de projeto foram construı́dos com o


software Fritzing e estão licenciados sob uma Licença
Creative Commons Atribuição 4.0 Internacional

Este trabalho foi financiado pela Fundação Araucária


- Apoio ao Desenvolvimento Cientı́fico e Tecnológico
do Paraná, por meio do Edital Redes Digitais de
Cidadania do Estado do Paraná (Ministério das
Comunicações), aprovado em 2013. Foi desenvolvido
por alunos e professores da Universidade Tecnológica
Federal do Paraná (UTFPR), campus Campo
Mourão

Uma versão online desse material está disponı́vel em


https://github.com/lohmanndouglas/Iot-Compute-
Voce-Mesmo.git
Sumário

1 Uma Visão Geral 1

2 Materiais e Softwares Utilizados 3


2.1 Arduino . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 Arduino IDE . . . . . . . . . . . . . . . 5
2.1.2 Arduino Uno . . . . . . . . . . . . . . . 6
2.2 Radio RF - nRF24l01 . . . . . . . . . . . . . . . 6
2.3 Sensores e Atuadores . . . . . . . . . . . . . . . 8
2.3.1 DTH11 . . . . . . . . . . . . . . . . . . . 8
2.3.2 LDR . . . . . . . . . . . . . . . . . . . . 8
2.3.3 Relé . . . . . . . . . . . . . . . . . . . . 9
2.3.4 Sensor de Movimento (PIR) . . . . . . . 10
2.3.5 LED . . . . . . . . . . . . . . . . . . . . 10
2.4 Protoboard . . . . . . . . . . . . . . . . . . . . 11
2.5 Conectar todas as partes . . . . . . . . . . . . . 12
2.6 Conectando o Arduino ao Rádio . . . . . . . . . 13
2.7 Biblioteca Mysensors . . . . . . . . . . . . . . . 14
2.7.1 Aplicações da biblioteca MySensors . . . 14
2.7.2 Instalar Mysensors . . . . . . . . . . . . 15
iv SUMÁRIO

3 Infraestrutura da Internet das Coisas 17


3.1 Componentes envolvidos . . . . . . . . . . . . . 17
3.1.1 O cérebro . . . . . . . . . . . . . . . . . 17
3.1.2 O rádio . . . . . . . . . . . . . . . . . . 17
3.1.3 Software . . . . . . . . . . . . . . . . . . 18
3.2 Construção da Rede de Sensores e Atuadores . . 18
3.2.1 Nó sensor ou atuador . . . . . . . . . . . 20
3.2.2 Nó repetidor . . . . . . . . . . . . . . . . 20
3.2.3 Nó gateway . . . . . . . . . . . . . . . . 20
3.2.4 Controlador . . . . . . . . . . . . . . . . 20
3.3 Entendendo o protocolo serial MySensors
versão 1.5 . . . . . . . . . . . . . . . . . . . . . 21
3.4 Códigos Mysensors . . . . . . . . . . . . . . . . 22
3.5 Controlador Pimatic . . . . . . . . . . . . . . . 23

4 Projeto A 25
4.1 Materiais . . . . . . . . . . . . . . . . . . . . . 25
4.2 Implementação . . . . . . . . . . . . . . . . . . 26
4.2.1 Gateway . . . . . . . . . . . . . . . . . . 26
4.2.2 Nó com sensor DTH11 . . . . . . . . . . 29
4.2.3 Controlador . . . . . . . . . . . . . . . . 31

5 Projeto B 35
5.1 Materiais . . . . . . . . . . . . . . . . . . . . . 35
5.2 Implementação . . . . . . . . . . . . . . . . . . 36
5.2.1 Gateway . . . . . . . . . . . . . . . . . . 36
5.2.2 Nó com sensor DTH11 . . . . . . . . . . 39
5.2.3 Nó com sensor LDR . . . . . . . . . . . 41
5.2.4 Controlador . . . . . . . . . . . . . . . . 42
SUMÁRIO v

6 Projeto C 45
6.1 Materiais . . . . . . . . . . . . . . . . . . . . . 45
6.2 Implementação . . . . . . . . . . . . . . . . . . 46
6.2.1 Gateway . . . . . . . . . . . . . . . . . . 46
6.2.2 Nó com sensor DTH11 e LDR . . . . . . 49
6.2.3 Nó com atuador LED . . . . . . . . . . . 52
6.2.4 Controlador . . . . . . . . . . . . . . . . 54
vi SUMÁRIO
Capı́tulo 1

Uma Visão Geral

Computadores pessoais e smartphones formam uma rede


de dispositivos conectados a Internet. A questão agora é per-
mitir que outros dispositivos tais como relógios, máquinas de
lavar, geladeiras e demais objetos do nosso cotidiano possam
conectar-se a rede e trocar informações. Esta fase em formação
está introduzindo um novo paradigma chamado de Internet das
Coisas (do inglês, Internet of Things - IoT), no qual pessoas,
animais e coisas do nosso cotidiano estão conectados à rede e
interagirem entre si.
A Internet das Coisas mudará tudo, inclusive nós mes-
mos. Considerando o impacto que Internet já causou na comu-
nicação, nos negócios, na ciência, no governo e na educação,
percebemos claramente que a Internet é uma das mais im-
portantes e poderosas invenções de toda a história humana
[Evans 2011]. Devido ao desenvolvimento das tecnologias de
informação, principalmente da Internet, podemos nos comu-
nicar tranquilamente com qualquer parte do mundo, Desta
forma, possuı́mos a oportunidade de conhecer muitas coisas
- novas pessoas, culturas, sistemas polı́ticos, desenvolvimento
de cada paı́s e muitas coisas mais - por meio de alguns cliques.
Podemos dividir a Internet em três fases. A primeira fase
2 Uma Visão Geral

é a Internet como uma rede de computadores. Na segunda


fase, a Internet pode ser considerada uma rede de pessoas e
comunidades e atualmente estamos vivendo a evolução para
terceira fase, a Internet das Coisas (IoT). Nesta fase a rede
passa a interligar vários tipos de objetos e dispositivos inteli-
gentes do nosso cotidiano que vão interagir entre si e conosco
[NIC.br. 2015]. Segundo [Atzori et al. 2010], a ideia básica de
IoT consiste na presença de uma diversidade de objetos que
interagem e cooperam entre si a fim de atingir um objetivo co-
mum. Para tal compartilham informações utilizando métodos
de endereçamento único e protocolos de comunicação padro-
nizados.
Este material apresenta os principais conceitos relaciona-
dos a Internet das Coisas e também apresenta uma atividade
prática para implementação de IoT. Os próximos tópicos são
referencias básicas para a construção da rede de sensores e a
comunicação dos sensores com a Internet.
Capı́tulo 2

Materiais e Softwares
Utilizados

Este capı́tulo apresenta uma breve descrição dos principais


materiais e softwares necessários para implementação dos pro-
jetos propostos.

2.1 Arduino
Arduino 1 é uma plataforma de prototipagem de código
aberto baseada na fácil utilização do software e hardware. As
placas Arduino são capazes de efetuarem leitura de uma en-
trada (sensores) e transformar em uma de saı́da (Atuadores).
O projeto Arduino nasceu no Ivrea Interaction Design Ins-
titute como uma ferramenta fácil para prototipagem rápida,
destinado a estudantes sem conhecimento aprofundado em
eletrônica e programação.
A plataforma Arduino possui uma IDE para a programação
e para gravar códigos na placa, a IDE está possui suporte a
1
https://www.arduino.cc/en/Guide/Introduction
4 Materiais e Softwares Utilizados

Linux, Mac e Windows.


Existem diversas placas de hardware Arduino, sendo a mais
comum a Arduino Uno. As placas diferem basicamente no
microcontrolador embutido, no número de entradas/saı́das,
na frequência de processamento e entre outras configurações.
Neste Material vamos utilizar o Arduino Uno por ser facil-
mente encontrado no mercado e apresentar baixo custo de
aquisição se comparado com outras plataformas de hardware.
A conexão de novos componentes no Arduino é possı́vel por
meio de placas de expansão (shields), essa placas aumentam
as funcionalidades do Arduino. Os shields mais conhecidos
são o shields para controle de motores 2 e o Ethernet para
comunicação do Arduino com a Internte como o da Figura 2.1.

Figura 2.1: Shield para controle de motores

A comunicação do Arduino com shields é realizada pelo


2
https://www.arduino.cc/en/Main/ArduinoMotorShieldR3
2.1 Arduino 5

protocolo Serial Peripheral Interface (SPI) 3 é um protocolo


de dados seriais sı́ncronos utilizado em microcontroladores
para comunicação entre o microcontrolador e um ou mais pe-
riféricos. Também pode ser utilizado entre dois microcontro-
ladores. A comunicação SPI sempre tem um master. Isto é,
sempre um será o master e o restante será slave. Por exemplo,
o Arduino é o master e os outros periféricos são slaves. Esta
comunicação contém 4 conexões:

• MISO (Master IN Slave OUT) - Dados do Slave para


Master;
• MOSI (Master OUT Slave IN) - Dados do Master para
Slave;
• SCK (Serial Clock) - Clock de sincronização para trans-
missão de dados entre o Master e Slave;
• SS (Slave Select) - Seleciona qual Slave receberá os da-
dos.

2.1.1 Arduino IDE


Para programação no arduino, utiliza-se a linguagem Wi-
ring. O ambiente de programação oferece recursos que facili-
tam a criação de aplicações e sua gravação no dispositivo.
Os projetos (Sketches) são escritos na linguagem Wiring e
salvos com a extensão .ino, possuem a estrutura:
Listing 2.1: Estrutura código Arduino
1 // I n c l u s a o de b i b l i o t e c a s
2 #i n c l u d e . . .
3 // D e c l a r a c a o de v a r i a v e i s
4 void setup ( ) { . . . }
5 void loop ( ) { . . . }
6 // Funcoes a u x i l i a r e s

3
https://www.arduino.cc/en/Reference/SPI
6 Materiais e Softwares Utilizados

A função setup() é o código de inicialização dos componen-


tes, enquanto a função loop é o laço principal do programa,
que contém o código que será executado repetidamente.

2.1.2 Arduino Uno


O Arduino Uno 4 opera com uma velocidade de clock de
16 MHz, possui 14 pinos de entrada e saı́da digitais e 6 pinos
de entrada e saı́da analógica, memória flash 32 KB (0.5 KB
usados pelo Bootloader), memória SRAM de 2 KB e 1 KB de
memória EEPROM.
A placa pode ser alimentada pela conexão USB ou por
uma fonte de alimentação externa. Para alimentação externa
é utilizado um conector Jack com positivo no centro, sendo
que a placa suporta alimentação de 6 à 20 volts. Porém, é
recomendado que a fonte de alimentação externa possua tensão
entre 7 e 12 volts.
A Figura 2.2 ilustra o Arduino Uno utilizado neste projeto,
ele tem 14 pinos de entradas/saı́das digitais. Alguns desses
pinos possuem funções especificas como PWM (pinos 3, 5, 6,
9, 10 e 11 ), comunicação serial (pinos 0 e 1) e interrupção
externa (pinos 2 e 3). Para interface com o mundo analógico,
a placa Arduino UNO possui 6 entradas, onde cada uma tem
a resolução de 10 bits.

2.2 Radio RF - nRF24l01


Nesta apostila vamos utilizar o módulo de rádio frequência
nRF24l01 5 fabricado pela Nordic, este módulo trabalha na
frequência de 2.4 GHz.
4
https://www.arduino.cc/en/Main/ArduinoBoardUno
5
http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01
2.2 Radio RF - nRF24l01 7

Figura 2.2: Arduino Uno

A conexão é realizada por um conector de 8 pinos muito


próximos uns dos outros, o que impossibilita a conexão direta
do módulo com a protoboard, sendo assim a conexão com o
módulo pode ser feita com jumpers macho-femea, outra pos-
sibilidade é construir um shield para adaptação, para que o
nRF24l01 encaixe na protoboard.
O alcance do módulo varia de 10 metros em ambiente fe-
chado à 50 metros em ambiente aberto. Uma outra vantagem
é que um mesmo módulo pode atuar como emissor ou recep-
tor, apenas realizando-se uma configuração por software. Sua
tensão de alimentação é de 1,9 à 3.6V, e os pinos de sinal
podem trabalhar normalmente com nı́vel de sinal de 5V.
Existe uma versão do módulo com antena externa, essa
versão possibilita distancia maior de comunicação entre os
módulos, porém tem preço mais maior e não é tão compacto
quanto o módulo com antena embutida.
8 Materiais e Softwares Utilizados

Figura 2.3: Rádio nRF24L01

2.3 Sensores e Atuadores


Esta seção é uma breve descrição dos principais sensores e
atuadores utilizados para realizar os projetos propostos nesse
material.

2.3.1 DTH11
O DTH11 6 é um sensor de baixo custo para a medição de
temperatura e umidade do ambiente. Sua faixa de medição de
temperatura vai de 0° a 50° Celsius, com 2% de margem de
erro. Já a medição de umidade pode variar de 20% até 90%
com precisão de 5%.
O sensor possui 4 pinos: um pino para o GND(ground), um
para a alimentação(5V), um pino para envio dos dados que é
conectado a uma entrada digital do Arduino e um pino que
não é utilizado.

2.3.2 LDR
O LDR (do inglês, Light Dependent Resistor), ou Resistor
dependente de Luz, é uma fotorresistência, ou seja, um resistor
cuja sua resistência varia de acordo com a intensidade da luz
que incidir sobre ele.
6
https://learn.adafruit.com/dht
2.3 Sensores e Atuadores 9

Figura 2.4: Sensor DTH11

Utilizando um multı́metro pode-se medir a resistência de


um LDR quando exposto a uma determinada intensidade de
luz. Basicamente um LDR vai ter sua resistência máxima
quando estiver em completa escuridão e mı́nima quando uma
luz muito brilhante estiver incindindo sobre ele.

Figura 2.5: Sensor LDR

2.3.3 Relé
O relé é um dispositivo eletromecânico capaz de desligar
ou ligar outros dispositivos. Basicamente, o relé é acionado
quando uma corrente elétrica passa a percorrer as espiras da
bobina do mesmo, criando assim a um campo magnético que
10 Materiais e Softwares Utilizados

atrai ou repele uma alavanca responsável por ativar ou desligar


o outro componente ligado ao relé.

Figura 2.6: Atuador relé

2.3.4 Sensor de Movimento (PIR)


O sensor de movimento (PIR) 7 é basicamente feito de uma
material piroelétrico, ou seja, seu potencial elétrico varia de
acordo com a temperatura, tornando-o capaz de detectar al-
guns nı́veis de radiação infravermelha. Ele é construı́do em
duas metades e as duas são conectadas de forma que a dife-
rença de potencial entre elas seja interpretada como um nı́vel
alto ou baixo, fazendo assim a detecção de movimento.

2.3.5 LED
Light Emitting Diode(LED), ou diodo emissor de luz, é
utilizado para emissão de luz em locais onde lampadas não
são viáveis, por exemplo em produtos da microeletrônica como
7
https://learn.adafruit.com/pir-passive-infrared-proximity-motion-
sensor/
2.4 Protoboard 11

Figura 2.7: Sensor de Movimento PIR

sinais de avisos. Existem também LEDs de tamanhos maiores,


como os utilizados em sinais de transito. Uma caracterı́stica
do LED é seu baixo consumo de energia, sendo uma alternativa
viável para iluminação de ambientes. Outra vantagem é que
sua durabilidade é maior que as outras formas de emissão de
luz presentes no mercado. Na maioria dos projetos vamos
utilizar o LED como atuador para emitir sinais de aviso. Mais
detalhes sobre o funcionamento do LED estão disponı́veis em
http:electronics.howstuffworks.comled.htm

Figura 2.8: LEDs

2.4 Protoboard
É uma placa com uma matriz de furos e conexões condu-
toras utilizadas para a prototipação de circuitos eletrônicos.
A Figura 2.9 ilustra uma protoboard. Essa placa tipica-
mente possui trilhas conectas na vertical que possibilitam a
ligação entre componentes e trilhas isoladas na horizontal.
12 Materiais e Softwares Utilizados

Figura 2.9: Protoboard

2.5 Conectar todas as partes


Para conectar os sensores e atuadores a placa do Arduino,
é utilizado cabo jumper. Podem ser encontrado em 3 com-
binações: macho-macho, macho-femea e femea-femea.
A Figura 2.10 representa jumpers macho.

Figura 2.10: Jumper Macho

A Figura 2.11 representa jumpers fêmea.


2.6 Conectando o Arduino ao Rádio 13

Figura 2.11: Jumper Fêmea

2.6 Conectando o Arduino ao Rádio


O rádio nRF24l01+ se comunica com Arduino via interface
SPI. O rádio deve ser alimentado com uma tensão de 3.3 volts.
Como o radio possui conector de 8 pinos não é possı́vel
conecta-lo a protoboard. Então devemos utilizar conectores
macho-fêmea, como ilustra a Figura 2.12, para fazer ligação
ou construir um shield para adaptação do modulo.

Figura 2.12: Conexão rádio e Arduino Uno


14 Materiais e Softwares Utilizados

2.7 Biblioteca Mysensors


Mysensors 8 é uma API que fornece um conjunto de pro-
tocolos e rotinas para comunicação entre o Arduino, o Radio
transmissor e sensores. Com esta biblioteca é possı́vel criar
uma abstração de algumas camadas de hardware e software
evitando que o usuário tenha que implementar rotinas de baixo
nı́vel e protocolos para realizar a comunicação entre o Arduino
e Modulo de radio frequência. A biblioteca fornece códigos de
exemplos e uma estrutura de rede já implementada para In-
ternet das Coisas.

2.7.1 Aplicações da biblioteca MySensors


A biblioteca MySensors fornece uma infinidade de proje-
tos com exemplos de sensores e atuadores já implementados.
Algumas possibilidades de aplicação da biblioteca são:

• Pequenas automações residenciais tais como um portão


de garagem automático que abre quando carro se apro-
xima da entrada ou quando ativado pelo seu smartphone;

• Coletar a umidade do ambiente dentro da casa para con-


trolar a ventilação;

• Criar uma fechadura inteligente para um determinado


comodo ou armário;

• Criar um dispositivo que avisa através de uma mensa-


gem em seu smartphone quando a temperatura do frezzer
subir caso alguém tenha deixado a porta aberta;

• Criar uma identificação única para seu cachorro para que


somente ele possa entrar em sua casa.
8
http://www.mysensors.org/
2.7 Biblioteca Mysensors 15

2.7.2 Instalar Mysensors


MySensors é uma biblioteca que funciona integrada com
a API do Arduino, para instalação basta adiciona-lá a pasta
libraries do Arduino IDE.
16 Materiais e Softwares Utilizados
Capı́tulo 3

Infraestrutura da
Internet das Coisas

3.1 Componentes envolvidos


3.1.1 O cérebro
O Arduino foi a escolha para esse projeto, pois tem con-
sumo de energia baixo, é fácil de programar,muitas bibliotecas
já estão implementadas e são livres para uso, além disso, é um
hardware livre.
Apesar de não ter um poder computacional muito alto, é
ideal para uso nesse projeto. Além disso, ele tem pinos (22 no
total) que são ideais para conectar sensores e botões. Outra
caracterı́stica é que o Arduino não possui sistema operacional.

3.1.2 O rádio
Com a necessidade de comunicação e coleta de dados dos
sensores e devido a possı́vel distancia entre eles, é necessário
uma conexão sem fio. Para tais fins, é utilizado um pequeno
18 Infraestrutura da Internet das Coisas

rádio, nesse caso, o modelo nRF24l01, que tem baixo consumo


de bateria e baixo preço.

3.1.3 Software

Além dos componentes de hardware vamos utilizar alguns


softwares, na maior parte bibliotecas com alguns exemplos de
sensores já implementados.

3.2 Construção da Rede de Sensores


e Atuadores

Utilizando a biblioteca e as plataformas descritas no


Capı́tulo 2, é possı́vel configurar uma infraestrutura para a
rede IoT, como ilustra a 3.1. A rede implementada possui ba-
sicamente três componentes: controlador, gateway e nós finais,
que são nós sensores e atuadores. Os nós sensores e atuadores
são responsáveis pela interação com o ambiente, seja pela co-
leta de informações por meio de sensores, emissão de sinais de
alerta ou ativação de certos dispositivos por meio de atuadores,
por exemplo o ar condicionado ou uma lâmpada.
Os principais componentes de uma rede de sensores são
apresentados nas próximas subseções.
3.2 Construção da Rede de Sensores e Atuadores 19

Figura 3.1: Infraestrutura iot

A Figura 3.1 ilustra a infraestrutura de uma rede de sen-


sores e atuadores, pode-se perceber a presença do nó gateway
conectando os nós sensores e o controlador. Embora na ima-
gem a ligação entre os dispositivos é representada por linhas,
na prática a ligação entre os nós na maioria das vezes não é
feita por jumper e sim via rádio frequência.
20 Infraestrutura da Internet das Coisas

3.2.1 Nó sensor ou atuador


Esse nó realiza a leitura de sensores e pode também fun-
cionar como um nó atuador, enviando e recebendo dados do
gateway. Esse nó pode funcionar em modo Sleep para econo-
mizar bateria.

3.2.2 Nó repetidor


Esse nó só é necessário quando os nós sensores e gateway
não conseguem se comunicar, devido à distancia em que estão
localizados, por esse motivo não está representado na Fi-
gura 3.1. Esse nó tem como função repetir as dados para
outros nós a fim de aumentar a distancia de comunicação en-
tre os nós. Em muitas aplicações esse nó não esta presente.

3.2.3 Nó gateway


O gateway atua na ligação entre o controlador e rede de
rádios. Ele traduz as mensagens do rádio para um protocolo
que pode ser entendido por um controlador.
Na biblioteca MySensors exite tres implementações de Ga-
teway, o Ethernet Gateway, SerialGateway e MQTTGateway.
Nesse material vamos utilizar o SerialGateway pela facilidade
de implementação e também pela compatibilidade com o con-
trolador escolhido.

3.2.4 Controlador
O controlador pode realizar as seguintes funções:

• Enviar parâmetros de configuração para os sensores


na rede de rádio (tempo e identificadores de sensores
únicos);
3.3 Entendendo o protocolo serial MySensors versão
1.5 21

• Acompanhar os dados mais recentes enviados pelos sen-


sores e atuadores;

• Fornecer informações de status de volta para sensores e


atuadores; por exemplo o estado atual (on / off / loa-
dLevel) para uma luz;

• Fornecer controles de interface do usuário para atuado-


res;

• Executa horários predefinidos ou cenas; por exemplo. ao


pôr do sol acender as luzes do jardim.

Neste material vamos utilizar como controlador o Rasp-


berry e o framework Pimatic.

3.3 Entendendo o protocolo serial


MySensors versão 1.5
O protocolo utilizado para comunicação entre o serial ga-
teway e controlador consiste de mensagens textuais em que
cada dado é separado por ponto e virgula ( ;) e quebra de li-
nha no final da mensagem. Sendo assim a mensagem possui a
seguinte estrutura:
node-id; child-sensor-id; message-type; ack; sub-type; payload;

node-id identificação exclusiva do nó que envia ou deve rece-


ber a mensagem (endereço);

child-sensor-id Cada nó pode ter varios sensores ligados,


esse campo identifica qual é sensor “child” do nó;

message-type Tipo de mensagem enviada.


22 Infraestrutura da Internet das Coisas

ack Outgoing: 0 = mensagem não reconhecida, 1 = pedido


ack do nó de destino; Incoming: 0 = mensagem normal,
1 = esta é uma mensagem de ack;

sub-type Dependendo messageType este campo tem um sig-


nificado diferente.

payload Carga útil (max 25 bytes).

3.4 Códigos Mysensors


Nesta seção é apresentado um exemplo de código da bibli-
oteca MySensors. Esse código apresenta as principais métodos
utilizados na maioria dos exemplos.
Listing 3.1: Código Mysensors
1 #i n c l u d e <MySensor . h>
2 #i n c l u d e <SPI . h>
3 #d e f i n e ID 0
4 #d e f i n e OPEN 1
5 #d e f i n e CLOSE 0
6 MySensor gw ;
7 MyMessage msg ( ID , V TRIPPED) ;
8 void setup ( ) {
9 gw . b e g i n ( ) ;
10 gw . p r e s e n t ( ID , S DOOR) ;
11 }
12 void loop ( ) {
13 gw . send ( msg . s e t (OPEN) ) ;
14 delay (10000) ;
15 }

Para iniciar precisamos criar uma instancia da biblioteca


MySensors e depois ativada-lá com a instrução gw.begin(). Na
primeira vez que o nó é ligado, o controlador atribui um id
único a ele. Esse id é salvo na memória EEPROM do Arduino.
Caso ele seja religado ou resetado, o id é automaticamente
resgatado. O sensor deve ser apresentado para o controla-
dor. Para isso é utilizado a função gw.present(child-sensor-id,
sensor-type).
3.5 Controlador Pimatic 23

Para enviar uma mensagem deve-se criar um container My-


Message usando a função msg(child-sensor-id, variable-type).
No escopo da função loop a mensagem é enviada com o método
send(msg.set(payload)).

3.5 Controlador Pimatic


Para as atividades desenvolvidas nesse material utilizamos
o controlador Pimatic.
Pimatic 1 é um framework de automação residencial que
é executado no Node.js. Ele fornece uma plataforma ex-
tensı́vel comum para controle de casa e tarefas de automação
[Pimatic 2015].
A configuração do Pimatic é realizada por meio de somente
um arquivo, denominado config.json. Esse arquivo está no
formato JSON e é dividido em quatro seções: Configurações
(settings), Plugins, Dispositivos (devices) e Regras (Rules). A
seguir, exemplos das quatro seções são apresentados.

1
http://www.mysensors.org/controller/pimatic
24 Infraestrutura da Internet das Coisas
Capı́tulo 4

Projeto A

Quando começamos aprender uma nova linguagem, geral-


mente iniciamos com o exemplo mais básico, o ”Hello Word”.
Nesse primeiro projeto também vamos começar com a cons-
trução do ”Hello Word” da biblioteca MySensors e Pimatic,
monitorando apenas a temperatura e umidade com um único
nó sensor. Neste projeto vamos construir um nó sensor simples
com o intuito de monitorar a temperatura e umidade de uma
sala.

4.1 Materiais
Para esse projeto vamos o utilizar os seguintes materiais:

• 2 Arduinos;

• Sensor de temperatura e umidade DTH11;

• 2 Rádios RF;

• Jumpers.
26 Projeto A

Para obter mais informações sobre os materiais consulte o


capitulo 2.

4.2 Implementação
Para a implementação desta atividade é necessário a cons-
trução dos seguintes nós.

4.2.1 Gateway

Esquemático

Figura 4.1: Gateway


4.2 Implementação 27

Código

Listing 4.1: Gateway


1 #d e f i n e NO PORTB PINCHANGES
2
3 #i n c l u d e <MySigningNone . h>
4 #i n c l u d e <MyTransportRFM69 . h>
5 #i n c l u d e <MyTransportNRF24 . h>
6 #i n c l u d e <MyHwATMega328 . h>
7 #i n c l u d e <M y S i g n i n g A t s h a 2 0 4 S o f t . h>
8 #i n c l u d e <MySigningAtsha204 . h>
9
10 #i n c l u d e <SPI . h>
11 #i n c l u d e <M y P a r s e r S e r i a l . h>
12 #i n c l u d e <MySensor . h>
13 #i n c l u d e <s t d a r g . h>
14 #i n c l u d e <PinChangeInt . h>
15 #i n c l u d e ” GatewayUtil . h”
16
17 #d e f i n e INCLUSION MODE TIME 1
18
19 #d e f i n e INCLUSION MODE PIN 3
20
21 #d e f i n e RADIO ERROR LED PIN 4
22 #d e f i n e RADIO RX LED PIN 6
23 #d e f i n e RADIO TX LED PIN 5
24
25
26 MyTransportNRF24 t r a n s p o r t ( RF24 CE PIN , RF24 CS PIN ,
RF24 PA LEVEL GW) ;
27
28
29 MyHwATMega328 hw ;
30
31
32 #i f d e f WITH LEDS BLINKING
33 MySensor gw ( t r a n s p o r t , hw /∗ , s i g n e r ∗/ , RADIO RX LED PIN ,
RADIO TX LED PIN , RADIO ERROR LED PIN) ;
34 #e l s e
35 MySensor gw ( t r a n s p o r t , hw /∗ , s i g n e r ∗/ ) ;
36 #e n d i f
37
38 c h a r i n p u t S t r i n g [ MAX RECEIVE LENGTH ] = ” ” ;
39 i n t inputPos = 0 ;
40 b o o l e a n commandComplete = f a l s e ;
41
42 v o i d parseAndSend ( c h a r ∗ commandBuffer ) ;
43
44 v o i d o ut pu t ( c o n s t c h a r ∗ fmt , ... ) {
28 Projeto A

45 v a l i s t args ;
46 v a s t a r t ( a r g s , fmt ) ;
47 v s n p r i n t f P ( s e r i a l B u f f e r , MAX SEND LENGTH, fmt , a r g s ) ;
48 v a e nd ( a r g s ) ;
49 Serial . print ( serialBuffer ) ;
50 }
51
52
53 void setup ( )
54 {
55 gw . b e g i n ( incomingMessage , 0 , t r u e , 0 ) ;
56
57 setupGateway (INCLUSION MODE PIN , INCLUSION MODE TIME,
ou tp ut ) ;
58
59 PCintPort : : a t t a c h I n t e r r u p t ( p i n I n c l u s i o n ,
s t a r t I n c l u s i o n I n t e r r u p t , RISING ) ;
60
61 s e r i a l (PSTR( ” 0 ; 0 ; % d ; 0 ; % d ; Gateway s t a r t u p c o m p l e t e . \ n” ) ,
C INTERNAL, I GATEWAY READY) ;
62 }
63
64 void loop ( )
65 {
66 gw . p r o c e s s ( ) ;
67
68 checkButtonTriggeredInclusion () ;
69 checkInclusionFinished () ;
70
71 i f ( commandComplete ) {
72 parseAndSend ( gw , i n p u t S t r i n g ) ;
73 commandComplete = f a l s e ;
74 inputPos = 0 ;
75 }
76 }
77
78 void s e r i a l E v e n t ( ) {
79 while ( S e r i a l . available () ) {
80 c h a r inChar = ( c h a r ) S e r i a l . r e a d ( ) ;
81 i f ( inputPos<MAX RECEIVE LENGTH−1 && ! commandComplete ) {
82 i f ( inChar == ’ \n ’ ) {
83 i n p u t S t r i n g [ inputPos ] = 0 ;
84 commandComplete = t r u e ;
85 } else {
86 i n p u t S t r i n g [ i n p u t P o s ] = inChar ;
87 i n p u t P o s++;
88 }
89 } else {
90 inputPos = 0 ;
91 }
92 }
93 }
4.2 Implementação 29

4.2.2 Nó com sensor DTH11

Esquemático

Figura 4.2: Sensor DTH11


30 Projeto A

Código

Listing 4.2: dth11


1 #i n c l u d e <SPI . h>
2 #i n c l u d e <MySensor . h>
3 #i n c l u d e <DHT. h>
4
5 #d e f i n e CHILD ID HUM 0
6 #d e f i n e CHILD ID TEMP 1
7 #d e f i n e HUMIDITY SENSOR DIGITAL PIN 3
8 u n s i g n e d l o n g SLEEP TIME = 3 0 0 0 0 ;
9
10 MySensor gw ;
11 DHT dht ;
12 f l o a t lastTemp ;
13 f l o a t lastHum ;
14 boolean metric = true ;
15 MyMessage msgHum(CHILD ID HUM , V HUM) ;
16 MyMessage msgTemp (CHILD ID TEMP , V TEMP) ;
17 int node id = 2;
18
19 void setup ( )
20 {
21 gw . b e g i n (NULL, n o d e i d ) ;
22 dht . s e t u p (HUMIDITY SENSOR DIGITAL PIN) ;
23
24
25 gw . s e n d S k e t c h I n f o ( ” Humidity ” , ” 1 . 0 ” ) ;
26
27
28 gw . p r e s e n t (CHILD ID HUM , S HUM) ;
29 gw . p r e s e n t (CHILD ID TEMP , S TEMP) ;
30
31 m e t r i c = gw . g e t C o n f i g ( ) . i s M e t r i c ;
32 }
33
34 void loop ( )
35 {
36 d e l a y ( dht . getMinimumSamplingPeriod ( ) ) ;
37
38 f l o a t t e m p e r a t u r e = dht . getTemperat ure ( ) ;
39 i f ( isnan ( temperature ) ) {
40 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g t e m p e r a t u r e from DHT” ) ;
41 } e l s e i f ( t e m p e r a t u r e != lastTemp ) {
42 lastTemp = t e m p e r a t u r e ;
43 i f ( ! metric ) {
44 t e m p e r a t u r e = dht . t o F a h r e n h e i t ( t e m p e r a t u r e ) ;
45 }
46 gw . send ( msgTemp . s e t ( t e m p e r a t u r e , 1 ) ) ;
4.2 Implementação 31

47 S e r i a l . p r i n t ( ”T : ” ) ;
48 S e r i a l . p r i n t l n ( temperature ) ;
49 }
50
51 f l o a t humidity = dht . getHumidity ( ) ;
52 i f ( i s n a n ( humidity ) ) {
53 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g humidity from DHT” ) ;
54 } e l s e i f ( humidity != lastHum ) {
55 lastHum = humidity ;
56 gw . send (msgHum . s e t ( humidity , 1 ) ) ;
57 S e r i a l . p r i n t ( ”H: ” ) ;
58 S e r i a l . p r i n t l n ( humidity ) ;
59 }
60
61 gw . s l e e p (SLEEP TIME) ;
62 }

4.2.3 Controlador
Arquivo de configuração do Pimatic

Listing 4.3: json.conf


1 {
2 ” // ” : ” P l e a s e o n l y change t h i s f i l e when p i m a t i c i s NOT
running , o t h e r w i s e p i m a t i c w i l l o v e r w r i t e your c h a n g e s . ”
,
3 ” settings ” : {
4 ” httpServer ” : {
5 ” enabled ” : true ,
6 ” p o r t ” : 8080
7 },
8 ” database ” : {
9 }
10 },
11 ” plugins ” : [
12 {
13 ” plugin ” : ” cron ”
14 },
15 {
16 ” p l u g i n ” : ” mysensors ” ,
17 ” driver ” : ” serialport ” ,
18 ” protocols ” : ” 1.4.1 ” ,
19 ” driverOptions ” : {
20 ” s e r i a l D e v i c e ” : ” / dev /ttyACM0” ,
21 ” b a u d r a t e ” : 115200
22 }
23 },
24 {
32 Projeto A

25 ” p l u g i n ” : ” mobile−f r o n t e n d ”
26 }
27 ],
28 ” devices ” : [
29 {
30 ” i d ” : ”DHT11 1” ,
31 ”name” : ” S e n s o r Temperatura ” ,
32 ” c l a s s ” : ”MySensorsDHT” ,
33 ” nodeid ” : 2 ,
34 ” sensorid ” : [
35 0,
36 1
37 ]
38 }
39
40 ],
41 ” rules ” : [
42
43 ],
44 ” pages ” : [
45 {
46 ” id ” : ” favourite ” ,
47 ”name” : ” F a v o u r i t e s ” ,
48 ” devices ” : [ ]
49 }
50 ],
51 ” groups ” : [
52
53 ],
54 ” users ” : [
55 {
56 ” username ” : ” admin ” ,
57 ” password ” : ” admin ” ,
58 ” r o l e ” : ” admin ”
59 }
60 ],
61 ” roles ”: [
62 {
63 ”name” : ” admin ” ,
64 ” permissions ” : {
65 ” pages ” : ” write ” ,
66 ” rules ” : ” write ” ,
67 ” variables ” : ” write ” ,
68 ” messages ” : ” w r i t e ” ,
69 ” events ” : ” write ” ,
70 ” devices ” : ” write ” ,
71 ” groups ” : ” write ” ,
72 ” plugins ” : ” write ” ,
73 ” updates ” : ” write ” ,
74 ” database ” : ” write ” ,
75 ” config ” : ” write ” ,
76 ” c o n t r o l D e v i c e s ” : true ,
4.2 Implementação 33

77 ” r e s t a r t ” : true
78 }
79 }
80 ]
81 }
34 Projeto A
Capı́tulo 5

Projeto B

Neste projeto construı́mos uma rede com dois nós senso-


res para monitorar a temperatura, umidade e luminosidade de
um ambiente. Vamos construir um nó sensor para coletar in-
formações de temperatura e umidade e outro nó para coletar
informações de luminosidade do ambiente, os dois nós devem
se comunicar com o controlador, o intuito desse projeto a apre-
sentar como incluir mais nós em uma rede e como atualizar as
informações do controlador para suportar os novos nós.

5.1 Materiais
Para esse projeto vamos o utilizar os seguintes materiais:

• 3 Arduinos;

• Sensor de temperatura e umidade DTH11;

• Sensor de luminosidade LDR;

• 3 Rádios RF;

• Jumpers.
36 Projeto B

Para obter mais informações sobre os materiais consulte o


capitulo 2.

5.2 Implementação

5.2.1 Gateway

Esquemático

Figura 5.1: Gateway


5.2 Implementação 37

Código

Listing 5.1: Gateway


1 #d e f i n e NO PORTB PINCHANGES
2
3 #i n c l u d e <MySigningNone . h>
4 #i n c l u d e <MyTransportRFM69 . h>
5 #i n c l u d e <MyTransportNRF24 . h>
6 #i n c l u d e <MyHwATMega328 . h>
7 #i n c l u d e <M y S i g n i n g A t s h a 2 0 4 S o f t . h>
8 #i n c l u d e <MySigningAtsha204 . h>
9
10 #i n c l u d e <SPI . h>
11 #i n c l u d e <M y P a r s e r S e r i a l . h>
12 #i n c l u d e <MySensor . h>
13 #i n c l u d e <s t d a r g . h>
14 #i n c l u d e <PinChangeInt . h>
15 #i n c l u d e ” GatewayUtil . h”
16
17 #d e f i n e INCLUSION MODE TIME 1
18
19 #d e f i n e INCLUSION MODE PIN 3
20
21 #d e f i n e RADIO ERROR LED PIN 4
22 #d e f i n e RADIO RX LED PIN 6
23 #d e f i n e RADIO TX LED PIN 5
24
25
26 MyTransportNRF24 t r a n s p o r t ( RF24 CE PIN , RF24 CS PIN ,
RF24 PA LEVEL GW) ;
27
28
29 MyHwATMega328 hw ;
30
31
32 #i f d e f WITH LEDS BLINKING
33 MySensor gw ( t r a n s p o r t , hw /∗ , s i g n e r ∗/ , RADIO RX LED PIN ,
RADIO TX LED PIN , RADIO ERROR LED PIN) ;
34 #e l s e
35 MySensor gw ( t r a n s p o r t , hw /∗ , s i g n e r ∗/ ) ;
36 #e n d i f
37
38 c h a r i n p u t S t r i n g [ MAX RECEIVE LENGTH ] = ” ” ;
39 i n t inputPos = 0 ;
40 b o o l e a n commandComplete = f a l s e ;
41
42 v o i d parseAndSend ( c h a r ∗ commandBuffer ) ;
43
44 v o i d o ut pu t ( c o n s t c h a r ∗ fmt , ... ) {
38 Projeto B

45 v a l i s t args ;
46 v a s t a r t ( a r g s , fmt ) ;
47 v s n p r i n t f P ( s e r i a l B u f f e r , MAX SEND LENGTH, fmt , a r g s ) ;
48 v a e nd ( a r g s ) ;
49 Serial . print ( serialBuffer ) ;
50 }
51
52
53 void setup ( )
54 {
55 gw . b e g i n ( incomingMessage , 0 , t r u e , 0 ) ;
56
57 setupGateway (INCLUSION MODE PIN , INCLUSION MODE TIME,
ou tp ut ) ;
58
59 PCintPort : : a t t a c h I n t e r r u p t ( p i n I n c l u s i o n ,
s t a r t I n c l u s i o n I n t e r r u p t , RISING ) ;
60
61 s e r i a l (PSTR( ” 0 ; 0 ; % d ; 0 ; % d ; Gateway s t a r t u p c o m p l e t e . \ n” ) ,
C INTERNAL, I GATEWAY READY) ;
62 }
63
64 void loop ( )
65 {
66 gw . p r o c e s s ( ) ;
67
68 checkButtonTriggeredInclusion () ;
69 checkInclusionFinished () ;
70
71 i f ( commandComplete ) {
72 parseAndSend ( gw , i n p u t S t r i n g ) ;
73 commandComplete = f a l s e ;
74 inputPos = 0 ;
75 }
76 }
77
78 void s e r i a l E v e n t ( ) {
79 while ( S e r i a l . available () ) {
80 c h a r inChar = ( c h a r ) S e r i a l . r e a d ( ) ;
81 i f ( inputPos<MAX RECEIVE LENGTH−1 && ! commandComplete ) {
82 i f ( inChar == ’ \n ’ ) {
83 i n p u t S t r i n g [ inputPos ] = 0 ;
84 commandComplete = t r u e ;
85 } else {
86 i n p u t S t r i n g [ i n p u t P o s ] = inChar ;
87 i n p u t P o s++;
88 }
89 } else {
90 inputPos = 0 ;
91 }
92 }
93 }
5.2 Implementação 39

5.2.2 Nó com sensor DTH11

Esquemático

Figura 5.2: Sensor DTH11


40 Projeto B

Código

Listing 5.2: DTH11


1 #i n c l u d e <SPI . h>
2 #i n c l u d e <MySensor . h>
3 #i n c l u d e <DHT. h>
4
5 #d e f i n e CHILD ID HUM 0
6 #d e f i n e CHILD ID TEMP 1
7 #d e f i n e HUMIDITY SENSOR DIGITAL PIN 3
8 u n s i g n e d l o n g SLEEP TIME = 3 0 0 0 0 ;
9
10 MySensor gw ;
11 DHT dht ;
12 f l o a t lastTemp ;
13 f l o a t lastHum ;
14 boolean metric = true ;
15 MyMessage msgHum(CHILD ID HUM , V HUM) ;
16 MyMessage msgTemp (CHILD ID TEMP , V TEMP) ;
17 int node id = 2;
18
19 void setup ( )
20 {
21 gw . b e g i n (NULL, n o d e i d ) ;
22 dht . s e t u p (HUMIDITY SENSOR DIGITAL PIN) ;
23
24
25 gw . s e n d S k e t c h I n f o ( ” Humidity ” , ” 1 . 0 ” ) ;
26
27
28 gw . p r e s e n t (CHILD ID HUM , S HUM) ;
29 gw . p r e s e n t (CHILD ID TEMP , S TEMP) ;
30
31 m e t r i c = gw . g e t C o n f i g ( ) . i s M e t r i c ;
32 }
33
34 void loop ( )
35 {
36 d e l a y ( dht . getMinimumSamplingPeriod ( ) ) ;
37
38 f l o a t t e m p e r a t u r e = dht . getTemperat ure ( ) ;
39 i f ( isnan ( temperature ) ) {
40 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g t e m p e r a t u r e from DHT” ) ;
41 } e l s e i f ( t e m p e r a t u r e != lastTemp ) {
42 lastTemp = t e m p e r a t u r e ;
43 i f ( ! metric ) {
44 t e m p e r a t u r e = dht . t o F a h r e n h e i t ( t e m p e r a t u r e ) ;
45 }
46 gw . send ( msgTemp . s e t ( t e m p e r a t u r e , 1 ) ) ;
5.2 Implementação 41

47 S e r i a l . p r i n t ( ”T : ” ) ;
48 S e r i a l . p r i n t l n ( temperature ) ;
49 }
50
51 f l o a t humidity = dht . getHumidity ( ) ;
52 i f ( i s n a n ( humidity ) ) {
53 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g humidity from DHT” ) ;
54 } e l s e i f ( humidity != lastHum ) {
55 lastHum = humidity ;
56 gw . send (msgHum . s e t ( humidity , 1 ) ) ;
57 S e r i a l . p r i n t ( ”H: ” ) ;
58 S e r i a l . p r i n t l n ( humidity ) ;
59 }
60
61 gw . s l e e p (SLEEP TIME) ;
62 }

5.2.3 Nó com sensor LDR


Esquemático

Figura 5.3: Sensor LDR


42 Projeto B

Código

Listing 5.3: LDR


1 #i n c l u d e <SPI . h>
2 #i n c l u d e <MySensor . h>
3
4 #d e f i n e CHILD ID LIGHT 0
5 #d e f i n e LIGHT SENSOR ANALOG PIN 0
6
7 u n s i g n e d l o n g SLEEP TIME = 3 0 0 0 0 ;
8
9 MySensor gw ;
10 MyMessage msg ( CHILD ID LIGHT , V LIGHT LEVEL) ;
11 int lastLightLevel ;
12 int node id = 3;
13
14 void setup ( )
15 {
16 gw . b e g i n (NULL, n o d e i d ) ;
17
18
19 gw . s e n d S k e t c h I n f o ( ” L i g h t S e n s o r ” , ” 1 . 0 ” ) ;
20
21
22 gw . p r e s e n t ( CHILD ID LIGHT , S LIGHT LEVEL ) ;
23 }
24
25 void loop ( )
26 {
27 i n t l i g h t L e v e l = (1023 − analogRead (LIGHT SENSOR ANALOG PIN) )
/10.23;
28 Serial . println ( lightLevel ) ;
29 i f ( l i g h t L e v e l != l a s t L i g h t L e v e l ) {
30 gw . send ( msg . s e t ( l i g h t L e v e l ) ) ;
31 lastLightLevel = lightLevel ;
32 }
33 gw . s l e e p (SLEEP TIME) ;
34 }

5.2.4 Controlador
Arquivo de configuração do Pimatic
Listing 5.4: json.conf
5.2 Implementação 43

1 {
2 ” // ” : ” P l e a s e o n l y change t h i s f i l e when p i m a t i c i s NOT
running , o t h e r w i s e p i m a t i c w i l l o v e r w r i t e your c h a n g e s . ”
,
3 ” settings ” : {
4 ” httpServer ” : {
5 ” enabled ” : true ,
6 ” p o r t ” : 8080
7 },
8 ” database ” : {
9 }
10 },
11 ” plugins ” : [
12 {
13 ” plugin ” : ” cron ”
14 },
15 {
16 ” p l u g i n ” : ” mysensors ” ,
17 ” driver ” : ” serialport ” ,
18 ” protocols ” : ” 1.4.1 ” ,
19 ” driverOptions ” : {
20 ” s e r i a l D e v i c e ” : ” / dev /ttyACM0” ,
21 ” b a u d r a t e ” : 115200
22 }
23 },
24 {
25 ” p l u g i n ” : ” mobile−f r o n t e n d ”
26 }
27 ],
28 ” devices ” : [
29 {
30 ” id ” : ” Light 1 ” ,
31 ”name” : ” S e n s o r LDR” ,
32 ” c l a s s ” : ” MySensorsLight ” ,
33 ” nodeid ” : 3 ,
34 ” sensorid ” : 1
35 },
36 {
37 ” i d ” : ”DHT11 1” ,
38 ”name” : ” S e n s o r Temperatura ” ,
39 ” c l a s s ” : ”MySensorsDHT” ,
40 ” nodeid ” : 2 ,
41 ” sensorid ” : [
42 0,
43 1
44 ]
45 }
46
47 ],
48 ” rules ” : [
49
50 ],
44 Projeto B

51 ” pages ” : [
52 {
53 ” id ” : ” favourite ” ,
54 ”name” : ” F a v o u r i t e s ” ,
55 ” devices ” : [ ]
56 }
57 ],
58 ” groups ” : [
59
60 ],
61 ” users ” : [
62 {
63 ” username ” : ” admin ” ,
64 ” password ” : ” admin ” ,
65 ” r o l e ” : ” admin ”
66 }
67 ],
68 ” roles ”: [
69 {
70 ”name” : ” admin ” ,
71 ” permissions ” : {
72 ” pages ” : ” write ” ,
73 ” rules ” : ” write ” ,
74 ” variables ” : ” write ” ,
75 ” messages ” : ” w r i t e ” ,
76 ” events ” : ” write ” ,
77 ” devices ” : ” write ” ,
78 ” groups ” : ” write ” ,
79 ” plugins ” : ” write ” ,
80 ” updates ” : ” write ” ,
81 ” database ” : ” write ” ,
82 ” config ” : ” write ” ,
83 ” c o n t r o l D e v i c e s ” : true ,
84 ” r e s t a r t ” : true
85 }
86 }
87 ]
88 }
Capı́tulo 6

Projeto C

Neste projeto construı́mos uma rede com dois nós. O pri-


meiro nó contem dois sensores e o segundo nó contem um
LED atuador. O nó contendo os sensores apresenta dois sen-
sores um DTH11 para coletar informações de temperatura e
umidade e um sensor LDR para monitor a luminosidade do
ambiente. Este projeto possui o intuito de apresentar ao leitor
o funcionamento de um nó com mais de um sensor e apresentar
também um nó atuador. Vamos construir um nó sensor para
coletar informações de temperatura, umidade e luminosidade
e outro nó para emitir um sinal de alerta dependendo das in-
formações dos sensores, os dois nós devem se comunicar com
o controlador.

6.1 Materiais
Para esse projeto vamos o utilizar os seguintes materiais:

• 3 Arduinos;

• Sensor de temperatura e umidade DTH11;


46 Projeto C

• Sensor de luminosidade LDR;

• LED;

• Resistor 220 ohms;

• 3 Rádios nRF24L01;

• Jumpers;

• Protoboard.

Para obter mais informações sobre os materiais consulte o


capitulo 2.

6.2 Implementação

6.2.1 Gateway

Esquemático
6.2 Implementação 47

Figura 6.1: Gateway

Código

Listing 6.1: Gateway


1 #d e f i n e NO PORTB PINCHANGES
2
3 #i n c l u d e <MySigningNone . h>
4 #i n c l u d e <MyTransportRFM69 . h>
5 #i n c l u d e <MyTransportNRF24 . h>
6 #i n c l u d e <MyHwATMega328 . h>
7 #i n c l u d e <M y S i g n i n g A t s h a 2 0 4 S o f t . h>
8 #i n c l u d e <MySigningAtsha204 . h>
9
10 #i n c l u d e <SPI . h>
11 #i n c l u d e <M y P a r s e r S e r i a l . h>
12 #i n c l u d e <MySensor . h>
13 #i n c l u d e <s t d a r g . h>
14 #i n c l u d e <PinChangeInt . h>
15 #i n c l u d e ” GatewayUtil . h”
16
17 #d e f i n e INCLUSION MODE TIME 1
18
19 #d e f i n e INCLUSION MODE PIN 3
20
21 #d e f i n e RADIO ERROR LED PIN 4
48 Projeto C

22 #d e f i n e RADIO RX LED PIN 6


23 #d e f i n e RADIO TX LED PIN 5
24
25
26 MyTransportNRF24 t r a n s p o r t ( RF24 CE PIN , RF24 CS PIN ,
RF24 PA LEVEL GW) ;
27
28
29 MyHwATMega328 hw ;
30
31
32 #i f d e f WITH LEDS BLINKING
33 MySensor gw ( t r a n s p o r t , hw /∗ , s i g n e r ∗/ , RADIO RX LED PIN ,
RADIO TX LED PIN , RADIO ERROR LED PIN) ;
34 #e l s e
35 MySensor gw ( t r a n s p o r t , hw /∗ , s i g n e r ∗/ ) ;
36 #e n d i f
37
38 c h a r i n p u t S t r i n g [ MAX RECEIVE LENGTH ] = ” ” ;
39 i n t inputPos = 0 ;
40 b o o l e a n commandComplete = f a l s e ;
41
42 v o i d parseAndSend ( c h a r ∗ commandBuffer ) ;
43
44 v o i d o ut pu t ( c o n s t c h a r ∗ fmt , . . . ) {
45 v a l i s t args ;
46 v a s t a r t ( a r g s , fmt ) ;
47 v s n p r i n t f P ( s e r i a l B u f f e r , MAX SEND LENGTH, fmt , a r g s ) ;
48 v a e nd ( a r g s ) ;
49 Serial . print ( serialBuffer ) ;
50 }
51
52
53 void setup ( )
54 {
55 gw . b e g i n ( incomingMessage , 0 , t r u e , 0 ) ;
56
57 setupGateway (INCLUSION MODE PIN , INCLUSION MODE TIME,
ou tp ut ) ;
58
59 PCintPort : : a t t a c h I n t e r r u p t ( p i n I n c l u s i o n ,
s t a r t I n c l u s i o n I n t e r r u p t , RISING ) ;
60
61 s e r i a l (PSTR( ” 0 ; 0 ; % d ; 0 ; % d ; Gateway s t a r t u p c o m p l e t e . \ n” ) ,
C INTERNAL, I GATEWAY READY) ;
62 }
63
64 void loop ( )
65 {
66 gw . p r o c e s s ( ) ;
67
68 checkButtonTriggeredInclusion () ;
6.2 Implementação 49

69 checkInclusionFinished () ;
70
71 i f ( commandComplete ) {
72 parseAndSend ( gw , i n p u t S t r i n g ) ;
73 commandComplete = f a l s e ;
74 inputPos = 0 ;
75 }
76 }
77
78 void s e r i a l E v e n t ( ) {
79 while ( S e r i a l . available () ) {
80 c h a r inChar = ( c h a r ) S e r i a l . r e a d ( ) ;
81 i f ( inputPos<MAX RECEIVE LENGTH−1 && ! commandComplete ) {
82 i f ( inChar == ’ \n ’ ) {
83 i n p u t S t r i n g [ inputPos ] = 0 ;
84 commandComplete = t r u e ;
85 } else {
86 i n p u t S t r i n g [ i n p u t P o s ] = inChar ;
87 i n p u t P o s++;
88 }
89 } else {
90 inputPos = 0 ;
91 }
92 }
93 }

6.2.2 Nó com sensor DTH11 e LDR

Esquemático
50 Projeto C

Figura 6.2: Nó Sensor DTH11 e LDR

Código

Listing 6.2: LDR e DTH11


1 #i n c l u d e <SPI . h>
2 #i n c l u d e <MySensor . h>
3 #i n c l u d e <DHT. h>
4
5 #d e f i n e CHILD ID HUM 0
6 #d e f i n e CHILD ID TEMP 1
7 #d e f i n e HUMIDITY SENSOR DIGITAL PIN 3
8
9 #d e f i n e CHILD ID LIGHT 3
10 #d e f i n e LIGHT SENSOR ANALOG PIN 0
11
12 u n s i g n e d l o n g SLEEP TIME = 3 0 0 0 0 ; // S l e e p time between r e a d s
( in milliseconds )
13
14 MySensor gw ;
15
16 MyMessage msg ( CHILD ID LIGHT , V LIGHT LEVEL) ;
17 int lastLightLevel ;
18
19 DHT dht ;
6.2 Implementação 51

20 f l o a t lastTemp ;
21 f l o a t lastHum ;
22 boolean metric = true ;
23 MyMessage msgHum(CHILD ID HUM , V HUM) ;
24 MyMessage msgTemp (CHILD ID TEMP , V TEMP) ;
25 int node id = 2;
26
27 void setup ( )
28 {
29 gw . b e g i n (NULL, n o d e i d ) ;
30
31 gw . s e n d S k e t c h I n f o ( ” L i g h t S e n s o r ” , ” 1 . 0 ” ) ;
32 gw . p r e s e n t ( CHILD ID LIGHT , S LIGHT LEVEL ) ;
33
34 dht . s e t u p (HUMIDITY SENSOR DIGITAL PIN) ;
35
36 // Send t h e S k e t c h V e r s i o n I n f o r m a t i o n t o t h e Gateway
37 gw . s e n d S k e t c h I n f o ( ” Humidity ” , ” 1 . 0 ” ) ;
38
39 // R e g i s t e r a l l s e n s o r s t o gw ( t h e y w i l l be c r e a t e d a s
child devices )
40 gw . p r e s e n t (CHILD ID HUM , S HUM) ;
41 gw . p r e s e n t (CHILD ID TEMP , S TEMP) ;
42
43 m e t r i c = gw . g e t C o n f i g ( ) . i s M e t r i c ;
44
45
46 }
47
48 void loop ( )
49 {
50
51 i n t l i g h t L e v e l = (1023 − analogRead (LIGHT SENSOR ANALOG PIN) )
/10.23;
52 Serial . println ( lightLevel ) ;
53 i f ( l i g h t L e v e l != l a s t L i g h t L e v e l ) {
54 gw . send ( msg . s e t ( l i g h t L e v e l ) ) ;
55 lastLightLevel = lightLevel ;
56 }
57
58 d e l a y ( dht . getMinimumSamplingPeriod ( ) ) ;
59
60 f l o a t t e m p e r a t u r e = dht . getTemperat ure ( ) ;
61 i f ( isnan ( temperature ) ) {
62 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g t e m p e r a t u r e from DHT” ) ;
63 } e l s e i f ( t e m p e r a t u r e != lastTemp ) {
64 lastTemp = t e m p e r a t u r e ;
65 i f ( ! metric ) {
66 t e m p e r a t u r e = dht . t o F a h r e n h e i t ( t e m p e r a t u r e ) ;
67 }
68 gw . send ( msgTemp . s e t ( t e m p e r a t u r e , 1 ) ) ;
69 S e r i a l . p r i n t ( ”T : ” ) ;
52 Projeto C

70 S e r i a l . p r i n t l n ( temperature ) ;
71 }
72
73 f l o a t humidity = dht . getHumidity ( ) ;
74 i f ( i s n a n ( humidity ) ) {
75 S e r i a l . p r i n t l n ( ” F a i l e d r e a d i n g humidity from DHT” ) ;
76 } e l s e i f ( humidity != lastHum ) {
77 lastHum = humidity ;
78 gw . send (msgHum . s e t ( humidity , 1 ) ) ;
79 S e r i a l . p r i n t ( ”H: ” ) ;
80 S e r i a l . p r i n t l n ( humidity ) ;
81 }
82
83 gw . s l e e p (SLEEP TIME) ; // s l e e p a b i t
84 }

6.2.3 Nó com atuador LED


Esquemático

Figura 6.3: Nó LED


6.2 Implementação 53

Código

Listing 6.3: LED


1 #i n c l u d e <MySigningNone . h>
2 #i n c l u d e <MyTransportNRF24 . h>
3 #i n c l u d e <MyTransportRFM69 . h>
4 #i n c l u d e <MyHwATMega328 . h>
5 #i n c l u d e <MySensor . h>
6 #i n c l u d e <SPI . h>
7
8 #d e f i n e RELAY 1 3
9 #d e f i n e NUMBER OF RELAYS 1
10 #d e f i n e RELAY ON 1
11 #d e f i n e RELAY OFF 0
12
13
14 MyTransportNRF24 r a d i o ( RF24 CE PIN , RF24 CS PIN ,
RF24 PA LEVEL GW) ;
15
16 MyHwATMega328 hw ;
17
18 MySensor gw ( r a d i o , hw) ;
19 int node id = 3;
20
21 void setup ( )
22 {
23
24 gw . b e g i n ( incomingMessage , n o d e i d , t r u e ) ;
25
26 gw . s e n d S k e t c h I n f o ( ” Relay ” , ” 1 . 0 ” ) ;
27
28
29 f o r ( i n t s e n s o r =1 , p i n=RELAY 1 ; s e n s o r <=NUMBER OF RELAYS;
s e n s o r ++, p i n++) {
30
31 gw . p r e s e n t ( s e n s o r , S LIGHT ) ;
32
33 pinMode ( pin , OUTPUT) ;
34
35 d i g i t a l W r i t e ( pin , gw . l o a d S t a t e ( s e n s o r ) ?RELAY ON: RELAY OFF
);
36 }
37 }
38
39
40 void loop ( )
41 {
42 // Alway p r o c e s s i n c o m i n g m e s s a g e s whenever p o s s i b l e
43 gw . p r o c e s s ( ) ;
54 Projeto C

44 }
45
46 v o i d incomingMessage ( c o n s t MyMessage &message ) {
47 // We o n l y e x p e c t one t y p e o f message from c o n t r o l l e r . But
we b e t t e r c h e c k anyway .
48 i f ( message . t y p e==V LIGHT) {
49 // Change r e l a y s t a t e
50 d i g i t a l W r i t e ( message . s e n s o r −1+RELAY 1 , message . g e t B o o l ( )
?RELAY ON: RELAY OFF) ;
51 // S t o r e s t a t e i n eeprom
52 gw . s a v e S t a t e ( message . s e n s o r , message . g e t B o o l ( ) ) ;
53 // Write some debug i n f o
54 S e r i a l . p r i n t ( ” Incoming change f o r s e n s o r : ” ) ;
55 S e r i a l . p r i n t ( message . s e n s o r ) ;
56 S e r i a l . p r i n t ( ” , New s t a t u s : ” ) ;
57 S e r i a l . p r i n t l n ( message . g e t B o o l ( ) ) ;
58 }
59 }

6.2.4 Controlador
Arquivo de configuração do Pimatic

Listing 6.4: json.conf


1 {
2 ” // ” : ” P l e a s e o n l y change t h i s f i l e when p i m a t i c i s NOT
running , o t h e r w i s e p i m a t i c w i l l o v e r w r i t e your c h a n g e s . ”
,
3 ” settings ” : {
4 ” httpServer ” : {
5 ” enabled ” : true ,
6 ” p o r t ” : 8080
7 },
8 ” database ” : {
9 }
10 },
11 ” plugins ” : [
12 {
13 ” plugin ” : ” cron ”
14 },
15 {
16 ” p l u g i n ” : ” mysensors ” ,
17 ” driver ” : ” serialport ” ,
18 ” protocols ” : ” 1.4.1 ” ,
19 ” driverOptions ” : {
20 ” s e r i a l D e v i c e ” : ” / dev /ttyACM0” ,
21 ” b a u d r a t e ” : 115200
22 }
6.2 Implementação 55

23 },
24 {
25 ” p l u g i n ” : ” mobile−f r o n t e n d ”
26 }
27 ],
28 ” devices ” : [
29 {
30 ” id ” : ” Light 1 ” ,
31 ”name” : ” S e n s o r LDR” ,
32 ” c l a s s ” : ” MySensorsLight ” ,
33 ” nodeid ” : 2 ,
34 ” sensorid ” : 3
35 },
36 {
37 ” i d ” : ” Switch LED ” ,
38 ”name” : ”LED” ,
39 ” c l a s s ” : ” MySensorsSwitch ” ,
40 ” nodeid ” : 3 ,
41 ” sensorid ” : 1
42 },
43 {
44 ” i d ” : ”DHT11 1” ,
45 ”name” : ” S e n s o r Temperatura 01 ” ,
46 ” c l a s s ” : ”MySensorsDHT” ,
47 ” nodeid ” : 2 ,
48 ” sensorid ” : [
49 0,
50 1
51 ]
52 }
53
54 ],
55 ” rules ” : [
56
57 ],
58 ” pages ” : [
59 {
60 ” id ” : ” favourite ” ,
61 ”name” : ” F a v o u r i t e s ” ,
62 ” devices ” : [ ]
63 }
64 ],
65 ” groups ” : [
66
67 ],
68 ” users ” : [
69 {
70 ” username ” : ” admin ” ,
71 ” password ” : ” admin ” ,
72 ” r o l e ” : ” admin ”
73 }
74 ],
56 Projeto C

75 ” roles ”: [
76 {
77 ”name” : ” admin ” ,
78 ” permissions ” : {
79 ” pages ” : ” write ” ,
80 ” rules ” : ” write ” ,
81 ” variables ” : ” write ” ,
82 ” messages ” : ” w r i t e ” ,
83 ” events ” : ” write ” ,
84 ” devices ” : ” write ” ,
85 ” groups ” : ” write ” ,
86 ” plugins ” : ” write ” ,
87 ” updates ” : ” write ” ,
88 ” database ” : ” write ” ,
89 ” config ” : ” write ” ,
90 ” c o n t r o l D e v i c e s ” : true ,
91 ” r e s t a r t ” : true
92 }
93 }
94 ]
95 }
Referências Bibliográficas

[Atzori et al. 2010] Atzori, L., Iera, A., and Morabito, G.


(2010). The internet of things: A survey. Computer
networks, 54(15):2787–2805.

[Evans 2011] Evans, D. (2011). A internet das coisas como


a próxima evolução da internet está mudando tudo. Cisco
IBSG © 2011 Cisco e/ou suas afiliadas. Todos os direitos
reservados.

[Faludi 2010] Faludi, R. (2010). Building Wireless Sensor


Networks: with ZigBee, XBee, Arduino, and Processing.
O’Reilly Media.

[NIC.br. 2015] NIC.br. (2015). A internet das coisas, expli-


cada pelo nic.br.

[Pimatic 2015] Pimatic (2015). Controlador pimatic.

Você também pode gostar