Sei sulla pagina 1di 42

Universidade Estadual de

Campinas

Relatorio do projeto:

Central de comunicacoes
e controle
domotico.

IA351-D: Topicos
em Sistemas

Alunos

Juan Mejia Vallejo


Leonid Huancachoque Mamani

Campinas, novembro de 2016

Conteudo

Resumo

Introduca o

Motivaca o

Caractersticas basicas do Raspberry


4.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
3
4

Caractersticas basicas do Arduino


5.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4

Dispositivos de hardware usados neste projeto


6.1 Sensores . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Sensor de Umidade e Temperatura DHT11
6.1.2 Sensor de temperatura LM35 . . . . . . . .
6.2 Atuadores . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Servomotor SG90 . . . . . . . . . . . . . . .

.
.
.
.
.

5
5
5
6
7
7

.
.
.
.
.

8
8
8
9
9
9

Outras tecnologias usadas neste projeto


7.1 Tecnologias Web . . . . . . . . . . . .
7.1.1 JavaScript . . . . . . . . . . .
7.1.2 AJAX . . . . . . . . . . . . . .
7.1.3 PHP . . . . . . . . . . . . . .
7.2 Tecnologia VoIP . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

Implementaca o do projeto
8.1 Diagrama da arquitetura do projeto . . . . . . . . . . . . . . . . . .
8.2 Instalaca o do servidor web . . . . . . . . . . . . . . . . . . . . . . . .
8.2.1 Configuraca o de servidor Web Apache . . . . . . . . . . . .
8.2.2 Configuraca o de PHP- Hypertext Preprocessor . . . . . . . .
8.3 Instalaca o e implementaca o do servidor VoIP . . . . . . . . . . . . .
8.3.1 Instalaca o de Asterisk em Raspberry pi com Raspbian . . .
8.3.2 Configuraca o de Asterisk . . . . . . . . . . . . . . . . . . . .
8.3.3 Aplicativos VoIP para smartphone . . . . . . . . . . . . . . .
8.4 Interfaz web-Raspberry-Arduino . . . . . . . . . . . . . . . . . . . .
8.4.1 Diagrama de variaveis para interligaca o entre o entorno
web, Raspberry e Arduino . . . . . . . . . . . . . . . . . . . .
8.4.2 Comunicaca o via porta serial . . . . . . . . . . . . . . . . . .
8.4.3 Comunicaca o via interface Ethernet . . . . . . . . . . . . . .
8.4.4 Programaca o do cliente em Arduino UNO . . . . . . . . . .
8.5 Construca o do site web . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5.1 Entorno de controle domotico
. . . . . . . . . . . . . . . . . .

8.5.2 Entorno de monitoraca o de elementos. . . . . . . . . . . . .

9
9
11
11
11
11
11
12
12
13
13
15
15
15
16
16
17

8.6

8.7

8.8

Implementaca o de componentes no Arduino . . .


8.6.1 Sensor de temperatura analogico
LM35 . .

8.6.2 Sensor de luz - Fotoresitor . . . . . . . . . .


Implementaca o do sensor e atuador no Raspberry
8.7.1 Servo motor SG90 . . . . . . . . . . . . . . .
8.7.2 Sensor de temperatura e umidade DHT11 .
Ativaca o de elementos de potencia . . . . . . . . .
8.8.1 Ativaca o de lampada usando rele . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

17
17
19
20
20
21
21
21

Resumo

Este trabalho propoe


o desenvolvimento de um sistema de controle automatizado (domotica)
e de comunicacoes

para residencias. Tais controles englobam o


acionamento de luzes, monitoramento de estado portas e janelas, como tambem
controle e monitoramento de temperatura dos ambientes, alem disso, uma central de comunicacoes
sob VoIP . Alguns desses recursos podem ser observados
e controlados atraves de de um site desde a Internet ou em um ambiente wi-fi;
usando telefones SIP-VoIP ou aplicativos do celular pode-se ter uma comunicaca o
nessa a rea, mas o uso principal seria como intercomunicador.Foi desenvolvido
um sistema capaz de ser executado por qualquer navegador, inclusive por dispositivos moveis
como tablets e celulares (smartphone). O principal ganho com

a proposta deste projeto e a mobilidade, comodidade, seguranca, bem estar e a


utilizaca o de recursos eficazes de baixo custo e com mnimo consumo de energia
para gerenciamento de toda a aplicaca o.
Principais caractersticas do projeto:
Sera montada uma rede de a rea local com os servidores (web e VoIP) instalados no Raspi3, e telefones IP interconectados com protocolo IEEE 802.3
atraves de um Roteador.
O controle domotico:
acender lampadas, ligar aparelhos, abrir portas. Essa

ativaca o ou desativaca o dos dispositivos sera feita atraves de alguns pinos


do raspi e do arduino (tambem podem ser ativados ou desativados manualmente).
A placa Arduino usa uma conexao ethernet, e porto serial para se comunicar
com a central de comunicaca o e domotica.

A comunicaca o de voz vai funcionar sobre um servidor VoIP Asterisk.


Mediante um site web pode-se ver (do computador, smartphone ou tablet)
o estado atual, e, ativar/desativar aparelhos.

Introduca o

A Automaca o Residencial ou domotica


proporciona o conforto e a conveniencia

que qualquer ser humano deseja. E o que parece inacreditavel esta se tornando
uma necessidade vital a qualquer morador e um excelente fator de economia.
Transformar casas em confortaveis refugios
capazes de oferecer seguranca e eco
nomia de custos e uma das vantagens da automaca o residencial. O que antes
parecia ser um privilegio, comeca a se difundir nos empreendimentos residenciais
de alto nvel. Neste sentido, o assunto sera tratado como uma realidade inevitavel
e que representara uma mudanca incontestavel nos atuais projetos de construca o,
nos profissionais e na forma de utilizaca o do lar realmente como proporcionador
de comodidade e satisfaca o. Neste trabalho se mostra um caso de uso especifico de implementaca o de uma central de comunicaca o e controle domotico
de

baixo custo que permite tanto a comunicaca o de voz sobre IP para comunicaca o
dentro de um predio ou casa e o controle de dispositivos de domotica
desse

predio usando tecnologias de sistemas embarcados open source como Arduino e


Raspberry pi, descrevendo os protocolos, ferramentas e tecnologias usadas para
o desenvolvimento do projeto dentro do contexto da diciplina de Topicos
em

sistemas.

Motivaca o

A motivaca o principal para a realizaca o deste trabalho resulta da importancia


crescente que a automaca o de casas e edifcios vem adquirindo numa sociedade
moderna e evoluda. Coisas simples como a reduca o do tempo gasto nas rotinas
diarias, a reduca o dos consumos de energia. Contudo, os custos de uma instalaca o
de domotica
sao elevados e, normalmente, sao utilizados sistemas proprietarios,

muito pouco flexveis, e que tornam o aumento das suas capacidades inicialmente
projetadas muito difcil e dispendioso. Desde ha alguns anos para ca, com a
constante evoluca o da electronica
no campo dos sensores/atuadores e das redes

de comunicacoes
de dados, e -nos possvel, agora, dispor de uma grande variedade
de equipamentos com precos competitivos e com a capacidade de se integrarem
numa rede de comunicaca o.
Tudo isto, juntamente com a massificaca o dos servicos de Internet de banda
larga e a evoluca o das redes moveis
de alto debito 3G, UMTS e HSDPA respecti
vamente (que disponibilizam acesso a` Internet em qualquer lugar ), abre caminho
a` possibilidade de controlar um edifcio em qualquer lugar e a qualquer hora,
dispondo de um acesso a` Internet e de um Web browser. Deste modo, com um
sistema de controlo baseado na Web, e possibilitada aos utilizadores uma elevada
autonomia no que respeita ao controlar um edifcio a` distancia.

Caractersticas basicas do Raspberry

4.1

Hardware

A abordagem no nosso projeto foi usada a terceira geraca o de Raspberry Pi modelo


B (ver Figura 1), as caractersticas de hardware sao:
1.2GHz 64-bit quad-core ARMv8 CPU
802.11n Wireless LAN
Bluetooth 4.1
Bluetooth Low Energy (BLE)
1GB RAM
4 USB ports
40 GPIO pins
Full HDMI port
Ethernet port
3.5mm audio jack
Camera interface (CSI)
Display interface (DSI)
Micro SD card
VideoCore IV 3D graphics core

Figura 1: Raspberry pi 3 - model B

4.2

Software

A parte interessante do Raspberry Pi e a sua versatilidade, pois ja existe diversas


aplicacoes
utilizando este microcomputador, composto por um processador ARM.
Desse jeito para essa arquitetura existe vastos sistemas operativos disponveis
como:
Arch Linux ARM;
Bodhi Linux;
Fedora Remix;
Gentoo Linux;
Moebius;
PiBang Linux;
Raspbian;
OpenELEC;
RasPBX - Asterisk for Rasperry pi
Paro nosso caso foi instalada a versao RasPBX ja que ele tem o servidor de VoIP
pre-instalado e brinda muitas facilidades de configuraca o de usuarios.

5
5.1

Caractersticas basicas do Arduino


Hardware

Ha no mercado diversos modelos de Arduino, sendo cada um deles e ideal para


um determinado tipo de projeto. Dentre eles, foram utilizados dois modelos para
realizaca o deste projeto se usou: o Arduino UNO representado na figura 2.

Figura 2: Arduino Uno

O Arduino UNO e ideal para iniciar os aprendizados com Arduino por ser mais
barato e, ainda, possuir portas suficientes para a realizaca o de trabalhos com
pouca complexidade. As principais caractersticas do Arduino UNO as vemos na
seguente tabela:

No entanto para grandes projetos ha a necessidade de um maior numero


de portas.

Possui um clock de 16 MHz e sua memoria


flash (nao volatil) tem capacidade

de armazenar ate 32KB (ARDUINO.CC) para o armazenamento dos programas


desenvolvidos.

Dispositivos de hardware usados neste projeto

Diversos dispositivos podem ser usados como

6.1

Sensores

Sensores sao dispositivos que trabalham com medidas de grandezas fsicas, como:
temperatura, pressao, presenca, umidade, intensidade luminosa, entre outros. As
grandezas medidas pelos sensores sao combinadas a fim de obter informacoes

sobre o meio fsico, onde estao presentes. Em geral os sensores atuam transformando partes de uma grandeza fsica normalmente em um sinal eletrico, que por
sua vez pode ser interpretado por certos equipamentos eletronicos.
Em outras pa
lavras, sensores sao componentes eletronicos
que permitem que um equipamento

eletronico
possa interagir com o mundo.

6.1.1

Sensor de Umidade e Temperatura DHT11

O DHT11 e um sensor de temperatura e umidade que permite fazer leituras de


temperaturas entre 0 a 50 Celsius e umidade entre 20 a 90%, muito usado para
projetos com Arduino.
O elemento sensor de temperatura e um termistor do tipo NTC e o sensor
de Umidade e do tipo HR202, o circuito interno faz a leitura dos sensores e se

comunica a um microcontrolador atraves de um sinal serial de uma via. Confira


a pinagem nas imagens.
Muito baixo custo
Tensao de alimentaca o de 3V a 5V
2.5mA de corrente maxima durante a conversao
Bom para medir umidade entre 20% e 80%, com 5% de precisao
Bom para medir temperaturas entre 0 e 50 C, com 2 C de precisao
Taxa de amostragem de ate 1Hz (1 leitura por segundo)
Dimensoes:
15.5mm x 12mm x 5.5mm

4 pinos com 0.1 de espacamento entre eles

Figura 3: Sensor de temperatura e umidade DHT11

6.1.2

Sensor de temperatura LM35

LM35 e um sensor de precisao em centgrados e tem uma voltagem de sada


analogica,
sua faixa de medica o e de -55 C a +150 C com uma precisao de

0, 5C. A tensao de sada e de 10 mV / C. A sua sada pode ser conectado


diretamente a uma porta de qualquer microcontrolador.
O LM35 tem um funcionamento basico, para cada 10 mV na sada representa
um grau Celsius, entao se e medido em sua sada 222 mV, isso representa que a
temperatura e de 22,2 C, partindo deste principio, qualquer multmetro pode ser
usado como um termometro
de precisao.

Caractersticas:
Calibrada diretamente em graus Celsius (centgrados).
Lineal + 10,0 mV / C factor de escala.
0,5 C exactitud regulable (a +25 C).

Operaca o -55 C a +150 C Rango.


Para aplicacoes
remotas.
Bajo costo.
Opera de 4 a 30 volts.
Menos de 60 A de corrente de vazamento.
Baixo nvel de calefaca o, 0,08 C no ar.
Impedancia de sada baixa.

Figura 4: Sensor de temperatura LM35

6.2

Atuadores

Um atuador assim como um sensor e um transdutor que transforma uma forma


de energia em outra, porem este faz o caminho inverso, ao inves de transformar
partes de uma grandeza fsica em um sinal eletrico, ele transforma um sinal
eletrico em uma grandeza fsica, movimento, magnetismo, calor entre outros.
6.2.1

Servomotor SG90

O Micro Servo Motor SG90 e um motor muito utilizado em aplicacoes


para
robotica,
nos sistemas microcontroladores, como, por exemplo, Arduino, PIC

e AVR. Tambem se faz ideal para utilizaca o em aeromodelismo, fazendo preciso


controle dos movimentos. O Micro Servo Motor 9g e um modulo
que apre
senta movimentos proporcionais aos comandos indicados, controlando o giro e
a posica o, diferente da maioria dos motores. Servomotores sao dispositivos de
malha fechada, seu funcionamento da-se por meio do recebimento de um sinal de
controle, onde passam a verificar a posica o atual, e atuam no sistema indo para a
posica o desejada.
Caractersticas:
Micro Servo Motor.

Servo motor de posica o 180.


Engrenagens em nylon.
Proporciona giros precisos.
Ideal para bracos roboticos

Especificacoes:

Voltagem: 3,0 6,0 Volts


o C.
Temperatura de trabalho: -30o C +60
Torque: 1,2 Kg/cm (4,8V) e 1,6 Kg/cm (6V).
Tamanho do fio: 24cm.
Dimensoes
totais (CxLxA): 22,7x12,6x29,8mm.
Peso: 11g.

Figura 5: Servo motor SG90

7
7.1
7.1.1

Outras tecnologias usadas neste projeto


Tecnologias Web
JavaScript

O JavaScript e uma linguagem de programaca o interpretada, desenvolvida, inicialmente, pela Netscape em 1995, e e , na maioria das vezes, usada para o desenvolvimento de aplicacoes
Web que executam do lado do cliente.
O Javascript permite adicionar as paginas Web maior funcionalidade e interaca o
ao HTML. Face a` necessidade de uma nova abordagem para introduzir alguma
dinamica num conteudo
que era estatico ate a` data, surgiu JavaScript. no nosso

caso o Java Script foi usado como intermediario entre o HTML e o Python para
receber as peticoes
do site para ser processadas na Raspberry.

7.1.2

AJAX

O objecto XMLHttpRequest e o componente fundamental do Ajax, e o que o torna


tao util.
Ele proporciona um mecanismo que permite ao cliente, atraves do JavaS
cript, trocar informaca o diretamente com o servidor Web. A informaca o recebida
pode ser processada em background e usada para, dinamicamente, atualizar elementos numa pagina Web, sem a necessidade de recarregar toda a pagina. Desta
forma, a informaca o circula em background e as paginas sao atualizadas como
se se tratassem de aplicacoes
standalone tpicas, ao inves das aplicacoes
Web tradicionais, disponveis ate a` altura. No nosso caso foi implementado na parte do
script para passar o valor dos controles range de jeito assncrono.
7.1.3

PHP

PHP: Hypertext Preprocessor. Esta nova tecnologia e uma linguagem de


programaca o interpretada, orientada a objetos, livre e utilizada para gerar conteudo

dinamico em paginas Web de uma maneira relativamente rapida. O codigo


PHP

tem uma sintaxe semelhante a` do C/C++ e do JAVA, e pode fazer tudo o que uma
aplicaca o CGI era capaz de fazer ate agora, como recolher dados de formularios
e interagir com bases de dados. Os blocos de codigo
PHP sao embutidos di
retamente no codigo
HTML e sao executados no servidor quando este recebe o

pedido de um cliente para carregar a pagina, assim podemos adicionar librarias


para enviar os dados coletados no HTML pelo protocolo IP a traves de socket ou
usando envio de mensagens simples por HTML

7.2

Tecnologia VoIP

Os protocolos mais comuns utilizados para se efetuar a sinalizaca o em chamadas


VoIP (Voice over Internet Protocol) sao os protocolos SIP, H.323, IAX e o protocolo
RTP. Segundo Keller (2011), Para a implementaca o dos servicos com base em
VOIP, e necessario existir algumas normas para a inicializaca o, estabelecimento
e finalizaca o da comunicaca o. Essas normas sao chamadas de protocolos de
comunicaca o. Sendo os protocolos SIP, H323 e IAX protocolos de sinalizaca o
de uma chamada. SIP e um protocolo de controle para estabelecer, modificar e
encerrar sessoes
multimdia, tais como ligacoes
de telefone e vdeo pela internet,
o SIP tambem pode convidar participantes que ja possuem sessoes
estabelecidas
como conferencias e chamadas telefonicas
pela Internet.

8
8.1

Implementaca o do projeto
Diagrama da arquitetura do projeto

continuaca o se mostra um diagrama geral do projeto. Os pinos usados e circuitos


de alguns elementos sao detalhados mais adiante. Pode-se observar que o sistema
esta centralizado no raspberry, a comunicaca o de todos os elementos acontecem
mediante: os portos GPIO (sensor e servo-motor), porto USB-serial (arduino 1)

e ethernet (arduino 2, telefone IP smartphone). Ao mesmo tempo os outros


componentes estao ligados mediante os pinos do arduino (circuito dimmer, rele,
sensor LM35, LDRs) , este ultimo foi implementado para fines de testes com a
etapa de potencia do projeto.
LDR (fotoresitor)

Sensor LM35

ARDUINO

Serial - USB

Telefone IP

ETH

SMARTPHONE

ETH
RASPBERRY

ETH

INTERNET

SWITCH ROTEADOR
ETH

ARDUINO COM
MODULO ETH

ETH

Telefone IP
com cmera

Circuito dimmer
acender uma
lampada

Rele para
acender uma
lampada

Figura 6: Diagrama da arquitetura do projeto.

8.2
8.2.1

Instalaca o do servidor web


Configuraca o de servidor Web Apache

Apache e um popular Web Server que pode ser instalado na Raspberry Pi para
permitir Server paginas web. Apache pode server arquivos HTML sobre HTTP,
e usar modulos
adicionais que podem agregar funcionalidade dinamicas usando

linguagens de script como PHP.


Para instalar o pacote apache2 coloque el seguente comando no terminal:
sudo apt-get install apache2 -y
A pagina por defeito e um arquivo HTML dentro da pasta localizado em: /var/www/html/index.html. Veja o codigo Html desenvolvido fornecido do Servidor para os cliente
esta referenciado no Anexo 1.
8.2.2

Configuraca o de PHP- Hypertext Preprocessor

O que distingue o PHP de algo como o Javascript no lado do cliente e que


o codigo
e executado no servidor, gerando o HTML que e entao enviado para

o navegador. O navegador recebe os resultados da execuca o desse script, mas


nao sabe qual era o codigo
fonte. Para instalar o pacote PHP coloque el seguente

comando no terminal:
sudo apt-get install php5 libapache2-mod-php5 -y
Veja o codigo PHP desenvolvido fornecido do Servidor para os cliente esta
referenciado no Anexo 2.

8.3

Instalaca o e implementaca o do servidor VoIP

8.3.1

Instalaca o de Asterisk em Raspberry pi com Raspbian

Para instalar o asterisk vao se seguir os seguintes pontos:


Primeiro sera instaladoo FreePBX na Raspberry PI, o qual pode-se baixar
aqui: http://www.raspberry-asterisk.org/
Aceder ao Freepbx pela primeira vez temos que ver o ip que foi atribuido
pelo nosso router a RasPI (entao accedemos atraves do nosso web browser
neste endereco http://raspbx.local
Depois da instalaca o pode-se aceder ao servidor:
Dados por defeito do FreePBX:
Mysql root password: raspberry
SSH login: user: root password: raspberry
Default FreePBX login: user: admin password: admin

8.3.2

Configuraca o de Asterisk

Para configurar o asterisk vai se levar em conta os seguintes pontos:


Configuramos a Data e hora e local.
Entramos por ssh na raspberry ( putty ) dados(hostname: raspbx.local username: root password: raspberry)
Configurar definicoes
de locais dpkg-reconfigure locais (quando aparecer
a janela escolhemos PT pt UTF8 e na janela seguinte a mesma coisa PT pt
UTF8)

Mais detalhes pode-se encontrar em: (http://www.raspberry-asterisk.org/documentation/nex


Entrar no painel de controle do FreePBX (http://raspbx.local) os dados de
administrador sao: user: admin password: admin.

Pode se usar o manual do FreePBx para maiores detalhes: http://www.freepbx.org/support/do


steps-after-installation

Figura 7: Entorno de configuraca o do FreePBX.

8.3.3

Aplicativos VoIP para smartphone

Foram testados varios aplicativos em android e ios como clientes do protocolo


SIP, no entanto, so alguns funcionaram corretamente. A continuaca o, mostra-se o
ZoiPer
Valor: Gratuito. Pode-se instalar o Zoiper atraves da loja Google Play.
3CX
Valor: Gratuito. Link: http://www.3cx.com/VOIP/voip-phone.htm

Figura 8: Entorno de configuraca o do FreePBX.

Figura 9: Aplicativo 3CX para iOs como cliente SIP

8.4
8.4.1

Interfaz web-Raspberry-Arduino
Diagrama de variaveis para interligaca o entre o entorno web, Raspberry
e Arduino

O seguinte diagrama mostra as variaveis para a interligaca o entre todos os componentes do sistema, detalha-se nesses pontos se as variaveis sao de sada ou entrada

em cada caso. Alem disso, no grafico se mostra a via de comunicaca o entre o Raspberry (phyton) e diferentes componentes, onde ele e um intermediario entre os
entornos web e os componentes implementados nos sitema. Essas variaveis foram implementadas no programas desenvolvidos em python, Html e arduino, o
qual e anexado neste documento.

PLACA ARDUINO UNO 1

PLACA ARDUINO UNO 2

Sensor de temperatura LM35 (pin A0) IN


Sensor LDR banheiro
(pin A1) IN
Sensor LDR sala
(pin A2) IN
Sensor LDR dormitrio
(pin A3) IN
Sensor LDR esvazamento gas (pin A4) IN
Sensor LDR fumo
(pin A5) IN

Circuito rele
Circuito tiristor

(pin 2)
(pin 3)

1..*
LINK VIA ETH

Phyton
Sensor de temperatura DHT11 (GPIO 23)
Porta da garagem
(GPIO 24)
Luz sala
(GPIO 25)
Luz patio
(GPIO 26)
Luz cozinha
(GPIO 27)
Porta principal
(GPIO 22)

LINK VIA PORTA SERIAL


1..*

Java Script
luz banheiro
luz sala
luz ptio
luz cozinha
sensor temperatura
sensor temp umidade
servo motor
sensores LDR

HTML/ ajax/ css - Monitorao

HTML / ajax/ css- Controle


Boto Luz banheiro
Boto Luz dormitrio
Boto Luz sala

(IN)
(IN)
(IN)

Boto Luz ptio


Boto Luz
Boto porta garagem
Boto porta casa
Temperatura sala
Temperatura, umidade ptio

(IN)
(IN)
(IN)
(IN)
(OUT)
(OUT)

Monitor luz banheiro


Monitor luz sala

(OUT)
(OUT)

Monitor porta casa


Monitor sensor gas
Monitor sensor fumo

(OUT)
(OUT)
(OUT)

Figura 10: Diagrama de variaveis para interligaca o entre os componentes do


sistema.

8.4.2

Comunicaca o via porta serial

A Comunicaca o com o modulo Arduino com a Raspberry pode ser feita de diferentes jeitos a abordagem para captar as informacoes
dos sensores vindos da placa
de Arduino foi disponibilizada por via serial a pesar que tambem pode ser feita
a traves de Ethernet usando Socket, mas esta abordagem foi feita para a ativaca o
das portas, e focos a traves e vai ser explicada na proxima
seca o. Os dados dos

sensores captadas pelo Arduino sao enviados para o servidor (Raspberry Pi) e sao
processadas constantemente. Para isto se implementou um codigo
em Python

que vai ter um loop que esta recebendo os dados de forma serial e adicionando
as informacoes
Python que processa as
no Html a traves do JavaScript. O codigo

informacoes
esta no Anexo 3.
8.4.3

Comunicaca o via interface Ethernet

Um soquete de rede (em ingles: socket) e um ponto final de um fluxo de


comunicaca o entre processos atraves de uma rede de computadores. Hoje em
dia, a maioria da comunicaca o entre computadores e baseada no Protocolo de
Internet, portanto esta e uma boa abordagem para enviar as informacoes
entre a
Raspberry e o Arduino. Um endereco de soquete (socket address) e a combinaca o
de um endereco de IP e um numero
da porta, muito parecido com o final de

uma conexao telefonica


que e a combinaca o de um numero
de telefone e uma

determinada extensao. O codigo


PHP que processa as informacoes

no servidor
esta no Anexo 4.
8.4.4

Programaca o do cliente em Arduino UNO

A programaca o do Cliente IP dentro micro-controlador Arduino foi feita a traves


da placa Ethernet adicional denominada Arduino Ethernet representada na
Figura 11 a qual permite adicionar uma camada fsica para envio de dados a
traves de um medio cabeado. O codigo para programar o Cliente no Arduino
UNO esta no Anexo 5.

Figura 11: Placa Arduino Ethernet

8.5

Construca o do site web

Foram implementadas dois entornos web os quais sao: para o controle de


elementos e o outro para a monitoraca o deles.
8.5.1

Entorno de controle domotico

Neste entorno os botoes


para a ligaca o de lampadas, as quais sao descritas a
continuaca o:
Lampada do banheiro: no banheiro tem-se apenas um botao (laranja) para
a ligaca o dessa lampada.
Lampada do dormitorio:
Essa lampada sera controlada pelo botao variavel

(azul), nessa lampada pode-se controlar o brilho proporcionalmente ao deslocamento do botao azul.
Sala: tem-se dois botoes,
o do meio e para a ligaca o da lampada e o botao

do fundo azul e para a ligaca o do ventilador.


Patio: mostra-se dois botoes,
o de fundo preto e para a ativaca o da apertura
da porta e o botao do meio e para ligar a lampada do local.
Porta da garagem: a porta da garagem sera ativada usando o botao variavel
de cor azul. esta sera aberta proporcionalmente ao deslocamento do botao.

Figura 12: Entorno do site para o controle do sistema domotico

8.5.2

Entorno de monitoraca o de elementos.

No entorno de monitoramento mostra-se os componentes detalhados anteriormente, neste entorno pode-se observar o estado de cada elemento. Para o caso
das lampadas, tem-se os crculos vermelhos que mudaram de cor para amarelo
se estas estivessem acendidas. Para o caso da porta, esta mudara de cor para vermelho se fosse aberta. Na cozinha, tem-se dois sensores (fumo e gas) que serao
inicialmente substituidas com sensores de luz (LDR), quer dizer que, si tiver um
sinal de luz em qualquer dos pontos, a cor desses componentes serao mudados
para vermelho.

Figura 13: Entorno do site para a monitoraca o do sistema.

8.6

Implementaca o de componentes no Arduino

Foram implementados no arduino os seguintes componentes do sistema.


8.6.1

Sensor de temperatura analogico

LM35

Foi conveniente a instalaca o do sensor LM35 sob arduino posto que este tem
varias entradas analogicas
e ja nao precisaremos um conversor analogo-digital.

Mostra-se o seguinte diagrama (Fig. 14) de como foi montado o sensor de


temperatura e cujo codigo
se mostra na Fig. 15:

Figura 14: Circuito implementado para o sensor LM35

Figura 15: Codigo


implementado no arduino para o sensor LM35

8.6.2

Sensor de luz - Fotoresitor

Mostra-se o seguinte diagrama de como foi montado o fotoresistor (LDR)


na Fig. 16, o qual sera usado para monitorar se as lampadas estao ligadas ou
desligadas, alem disso, esse circuito sera para ligar automaticamente a lampada
do patio ( da maquete) quando chegar a noite, o codigo
e mostrado na Fig. 17.

Figura 16: Circuito implementado para o fotoresistor (LDR).

Figura 17: Codigo


implementado no arduino para o fotoresistor (LDR).

8.7

Implementaca o do sensor e atuador no Raspberry

8.7.1

Servo motor SG90

Figura 18: Circuito implementado para o servo motor SG90.

Figura 19: Codigo


implementado no raspberry para o servo motor SG90.

8.7.2

Sensor de temperatura e umidade DHT11

continuaca o mostra-se o diagrama da conexao entre o sensor DHT11 e o raspberry,


este sensor pode-se conectar diretamente ao GPIO posto que ele e digital.

Figura 20: Circuito implementado para o sensor de umidade e temperatura


DHT11.

Figura 21: Codigo


implementado para o sensor de umidade e temperatura DHT11

8.8
8.8.1

Ativaca o de elementos de potencia


Ativaca o de lampada usando rele

Mostra-se um esquema para ligaca o de uma lampada utilizando modulo


rele,

para proposito
sera usado o pin 7 do arduino.

Figura 22: Diagrama para a ligaca o de uma lampada usando um rele com 110 ou
220 V.

Figura 23: Codigo


para a ligaca o de uma lampada usando um rele com 110 ou

220 V.
Anexo 1 - Codigo

HTML
<! doctype html>
<head>
<meta c h a r s e t = u t f 8>
<meta http equiv=XUACompatible c o n t e n t =IE=edge , chrome=1>
<title
<meta
<meta
<meta

>Smart Home L i t e by PubNub</ t i t l e >


name= d e s c r i p t i o n c o n t e n t = P i House Demo>
name= author c o n t e n t =Tomomi Imura @ g i r l i e m a c >
name=viewport c o n t e n t =width=device width , i n i t i a l s c a l e

< s t y l e type= t e x t / c s s >


label
{
width : 1 0 0 px ;
h e i g h t : 4 0 px ;
l i n e h e i g h t : 4 0 px ;
d i s p l a y : i n l i n e b l o c k ;
v e r t i c a l a l i g n : middle ;
}
i np ut [ type=checkbox ]
{
backgroundc o l o r : #CCCCCC;
width : 4 0 px ;
h e i g h t : 4 0 px ;
}
. s w it c h {
position : absolute ;
margin l e f t : 9999px ;
v i s i b i l i t y : hidden ;
}
. s w it c h + l a b e l {
display : block ;
position : relative ;
cursor : pointer ;
o u t l i n e : none ;
user s e l e c t : none ;
}
. switch shadow + l a b e l {
padding : 2px ;
width : 60px ;
h e i g h t : 30px ;
backgroundc o l o r : #dddddd ;
border r a d i u s : 30px ;
}
. switch shadow + l a b e l : b e f o r e ,
. switch shadow + l a b e l : a f t e r {
display : block ;
position : absolute ;
top : 1px ;
l e f t : 1px ;
bottom : 1px ;
content : ;
}

. switch shadow + l a b e l : b e f o r e {
r i g h t : 1px ;
backgroundc o l o r : # f 1 f 1 f 1 ;
border r a d i u s : 30px ;
transition : a l l 0.4 s ;
}
. switch shadow + l a b e l : a f t e r {
width : 32px ;
backgroundc o l o r : #FE9A2E ;
border r a d i u s : 100%;
boxshadow : 0 2px 5px rgba ( 0 , 0 , 0 , 0 . 3 ) ;
transition : a l l 0.4 s ;
}
. switch shadow : checked + l a b e l : b e f o r e {
backgroundc o l o r : #8 ce196 ;
}
. switch shadow : checked + l a b e l : a f t e r {
t r a n s f o r m : t r a n s l a t e X ( 3 0 px ) ;
}
{
webkit box s i z i n g : border box ;
mozbox s i z i n g : border box ;
box s i z i n g : border box ;
}
body {
background : #2 b2e31 ;
}
. slider {
width : 200 px ;
margin : 100 px auto ;
f o n t s i z e : 18px ;
f o n t f a m i l y : A r i a l , H e l v e t i c a , sans s e r i f ;
color : #000099;
}
i np ut [ type=range ] {
webkit appearance : none ;
webkit tap h i g h l i g h t c o l o r : rgba ( 2 5 5 , 2 5 5 , 2 5 5 , 0 ) ;
width : 100%;
h e i g h t : 20px ;
margin : 0 ;
border : none ;

padding : 1px 2px ;


border r a d i u s : 14px ;
background : # 2 3 2 5 2 8 ;
boxshadow : i n s e t 0 1px 0 0 #0 d0e0f , i n s e t 0 1px 0 0 #3 a3d42 ;
webkit boxshadow : i n s e t 0 1px 0 0 #0 d0e0f , i n s e t 0 1px 0 0 #3 a3d42
o u t l i n e : none ; / no f o c u s o u t l i n e /
}
i np ut [ type=range ] : : mozrange t r a c k {
border : i n h e r i t ;
background : t r a n s p a r e n t ;
}
i np ut [ type=range ] : : mst r a c k {
border : i n h e r i t ;
c o l o r : t r a n s p a r e n t ; / don t drawn v e r t i c a l r e f e r e n c e l i n e /
background : t r a n s p a r e n t ;
}
i np ut [ type=range ] : : ms f i l l lower ,
i np ut [ type=range ] : : ms f i l l upper {
background : t r a n s p a r e n t ;
}
i np ut [ type=range ] : : ms t o o l t i p {
d i s p l a y : none ;
}
/ thumb /

i np ut [ type=range ] : : webkit s l i d e r thumb {


webkit appearance : none ;
width : 40px ;
h e i g h t : 18px ;
border : none ;
border r a d i u s : 12px ;
backgroundimage : webkit g r a d i e n t ( l i n e a r , l e f t top , l e f t bottom , c o l o
backgroundimage : webkit l i n e a r g r a d i e n t ( top , #529 de1 0 , #245 e 8 f 10
backgroundimage : l i n e a r g r a d i e n t ( t o bottom , #529 de1 0 , #245 e 8 f 100%)
}
i np ut [ type=range ] : : mozrange thumb {
width : 40px ;
h e i g h t : 18px ;
border : none ;
border r a d i u s : 12px ;
backgroundimage : l i n e a r g r a d i e n t ( t o bottom , #529 de1 0 , #245 e 8 f 100%)

i np ut [ type=range ] : : msthumb {
width : 40px ;
h e i g h t : 18px ;
border r a d i u s : 12px ;
border : 0 ;
backgroundimage : l i n e a r g r a d i e n t ( t o bottom , #529 de1 0 , #245 e 8 f 100%)
}
//

body , td , th {
c o l o r : #FFFFFF ;
f o n t s i z e : 24px ;
}
. componentes {
f o n t s i z e : 10px ;
f o n t f a m i l y : A r i a l , H e l v e t i c a , sans s e r i f ;
}
</ s t y l e >
</head>

<body>
<! Google Tag Manager >
<n o s c r i p t ><i f r a m e s r c = / /www. googletagmanager . com / ns . html ? id=GTMPZWSZ2
h e i g h t =0 width =0 s t y l e = d i s p l a y : none ; v i s i b i l i t y : hidden ></ iframe ></
< s c r i p t >( f u n c t i o n (w, d , s , l , i ) {w[ l ]=w[ l ] | | [ ] ; w[ l ] . push ( { gtm . s t a r t :
new Date ( ) . getTime ( ) , event : gtm . j s } ) ; var f=d . getElementsByTagName ( s ) [ 0
j =d . c r e a t e E l e m e n t ( s ) , dl= l ! = dataLayer ? & l =+ l : ; j . async=t r u e ; j . s r c =
/ /www. googletagmanager . com / gtm . j s ? id =+ i +dl ; f . parentNode . i n s e r t B e f o r e (
} ) ( window , document , s c r i p t , dataLayer , GTMPZWSZ2 ) ; < / s c r i p t >
<! End Google Tag Manager >
<header ><strong >Sistema de c o n t r o l e domotico </ strong >
<div c l a s s =pubnub></ div>
</ header >
< t a b l e width =895 h e i g h t =581 border =1 BACKGROUND= p i s o 1 . j p g >
<t r >
<td width =208 h e i g h t =130>< t a b l e border =0>
<t r >
<td width =197 c l a s s = s l i d e r >Banheiro </ td>
</ t r >

<t r >
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
<t r >
<td><c e n t e r ><div c l a s s = s w i t c h c o n t a i n e r >
<in put id = l u z b a n h e i r o c l a s s = switch switch shadow type=checkbox
< l a b e l f o r = l u z b a n h e i r o ></ l a b e l >
</ div><c e n t e r ></ td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
</ t a b l e ></ td>
<td width =301 rowspan=2>< t a b l e width =301 h e i g h t =190 border =
< t r h e i g h t=33%>
<td width=64>&nbsp ; < / td>
<td width =200 c l a s s = s l i d e r >Dormitorio </ td>
<td width=23>&nbsp ; < / td>
</ t r >
< t r h e i g h t=33%>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td><c e n t e r >< l a b e l f o r = l u z d o r m i t o r i o c l a s s = b r i g h t n e s s f a >
<input id = l u z d o r m i t o r
</ l a b e l ></ c e n t e r ></ td>
<td>&nbsp ; < / td>
</ t r >
< t r h e i g h t=34%>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>

</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
</ t a b l e ></ td>
<td c o l s p a n =2 rowspan=2>< t a b l e width =342 h e i g h t =199 border =
<t r >
<td width =200 c l a s s = s l i d e r > Sala </ td>
<td width=120>&nbsp ; < / td>
<td width =117 b g c o l o r =#0000FF>< c e n t e r ><div c l a s s = s w i t c h c o
<in put id = v e n t i l a d o r s a l a c l a s s = switch switch shadow type=checkb
< l a b e l f o r = v e n t i l a d o r s a l a ></ l a b e l >
</ div ></ c e n t e r ></ td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td c l a s s =componentes> V e n t i l a d o r </ td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td><c e n t e r ><div c l a s s = s w i t c h c o n t a i n e r >
<in put id = l u z s a l a c l a s s = switch switch shadow type=checkbox>
< l a b e l f o r = l u z s a l a ></ l a b e l >
</ div ></ c e n t e r ></ td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>

<td>&nbsp ; < / td>


<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
</ t a b l e ></ td>
</ t r >
<t r >
<td h e i g h t =23>&nbsp ; < / td>
</ t r >
<t r >
<td h e i g h t =303>
< t a b l e width =185 h e i g h t =299 border =0>
< t r h e i g h t=30%>
<td width =65 h e i g h t =55>&nbsp ; < / td>
<td width=57>&nbsp ; < / td>
<td width=49>&nbsp ; < / td>
</ t r >
< t r h e i g h t=30%>
<td h e i g h t =53>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td h e i g h t =51>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r h e i g h t=40%>
<t r >
<td h e i g h t =42></ td>
<td ></ td>
<td ></ td>
</ t r >
<t r >
<td h e i g h t =42 c l a s s =componentes></ td>
<td c l a s s =componentes> Abrir / f e c h a r garagem </ td>
<td c l a s s =componentes>< c e n t e r ></ c e n t e r ></ td>
</ t r >
<t r >
<td h e i g h t =42>&nbsp ; < / td>
<td><c e n t e r >< l a b e l f o r =porta garagem c l a s s = b r i g h t n e s s f a >
<input id =porta garagem
</ l a b e l ></ td>

<td>&nbsp ; < / td>


</ t r >
</ t a b l e >
</ td>
<td>< t a b l e width =292 h e i g h t =284 border =0>
< t r h e i g h t=33%>
<td width =200 c l a s s = s l i d e r >&nbsp ; < / td>
<td width=79><span c l a s s = s l i d e r > P a t i o </ span ></ td>
<td width=10>&nbsp ; < / td>
</ t r >
< t r h e i g h t=33%>
<td>&nbsp ; < / td>
<td><c e n t e r ><div c l a s s = s w i t c h c o n t a i n e r >
<input id = l u z p a t i o c l a s s = switch switch shadow type=chec
< l a b e l f o r = l u z p a t i o ></ l a b e l >
</ div ></ c e n t e r ></ td>
<td>&nbsp ; < / td>
</ t r >
< t r h e i g h t=33%>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
< t r h e i g h t=33%>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
< t r h e i g h t=33%>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
< t r h e i g h t=34%>
<td>&nbsp ; < / td>
<td c l a s s =componentes>< c e n t e r >Abrir / f e c h a r porta </ c e n t e r ></ td>
<td c l a s s =componentes>&nbsp ; < / td>
</ t r >
<t r >
<td h e i g h t = 4 9 > . . . . . . . . . . . . . . . . . . . < / td>
<td b g c o l o r =#000000>< c e n t e r ><div c l a s s = s w i t c h c o n t a i n e r >
<input id = p o r t a c a s a c l a s s = switch switch shadow type=che
< l a b e l f o r = p o r t a c a s a ></ l a b e l >
</ div ></ c e n t e r ></ td>
<td > . . . . . . . . . . . . . . . < / td>
</ t r >

</ t a b l e ></ td>


<td width=93>< t a b l e width =90 h e i g h t =265 border =0>
<t r >
<td width=84>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
</ t r >
</ t a b l e ></ td>
<td width=269>< t a b l e width =269 h e i g h t =276 border =0>
<t r >
<td width=56>&nbsp ; < / td>
<td width =200 c l a s s = s l i d e r >Cozinha </ td>
<td width =10></ td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td><div c l a s s = s w i t c h c o n t a i n e r >
<in put id =switch shadow c l a s s = switch switch shadow type=checkbox
< l a b e l f o r =switch shadow></ l a b e l >
</ div ></ td>

<td>&nbsp ; < / td>


</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
<t r >
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
<td>&nbsp ; < / td>
</ t r >
</ t a b l e ></ td>
</ t r >
<t r >
<td h e i g h t =25 c o l s p a n=4>&nbsp ; < / td>
</ t r >
</ t a b l e >
< s e c t i o n c l a s s = c o n t a i n e r >

< s e c t i o n c l a s s =temphumd i s p l a y >


< s e c t i o n c l a s s =tempc o n t a i n e r >
<div c l a s s =temp data temperature =24>
</ s e c t i o n >
< s e c t i o n c l a s s =humc o n t a i n e r >
<div c l a s s =hum data humidity=45><spa
</ s e c t i o n >
</ s e c t i o n >
< s e c t i o n c l a s s = pref c o n t a i n e r >
< s e c t i o n c l a s s = p r e f e r e n c e >
<div>

</ div>
<div>

<div c l a s s = c a p t i o n > L iv in g Room


< l a b e l f o r = l i g h t l i v i n g c l a s s =
<input id = l i g h t L i v i n g
</ l a b e l >

<div c l a s s = c a p t i o n >Porch Ligh


< l a b e l f o r = l i g h t porch c l a s s =
<input id = l i g h t P o r c h

</ div>

</ l a b e l >

<div>
<! f l i c k e r i n g l i g h t >
<div c l a s s = c a p t i o n > F i r e p l a c e <
< l a b e l f o r = l i g h t cave c l a s s =
<input id = f i r e p l a c e ty
</ l a b e l >
</ div>
</ s e c t i o n >
</ s e c t i o n >
</ s e c t i o n >
<f o o t e r >
</ f o o t e r >
< s c r i p t s r c = h t t p : / / cdn . pubnub . com / pubnub 3 . 7 . 1 1 . min . j s ></ s c r i p t >
< s c r i p t s r c = j s / app . j s ></ s c r i p t >
</body>
</ html>
Anexo 2 - Codigo

Java Script
( function ( ) {
var s e t t i n g s = {
channel : pi house ,
p u b l i s h k e y : demo ,
s u b s c r i b e k e y : demo
};
var pubnub = PUBNUB( s e t t i n g s ) ;
var
var
var
var

door = document . getElementById ( door ) ;


l i g h t L i v i n g = document . getElementById ( l i g h t L i v i n g ) ;
l i g h t P o r c h = document . getElementById ( l i g h t P o r c h ) ;
f i r e p l a c e = document . getElementById ( f i r e p l a c e ) ;

pubnub . s u b s c r i b e ( {
channel : s e t t i n g s . channel ,
c a l l b a c k : f u n c t i o n (m) {
i f (m. temperature ) {

document . q u e r y S e l e c t o r ( [ data temperatu


}
i f (m. humidity ) {
document . q u e r y S e l e c t o r ( [ data humidity ]
}
}
})
/
Data s e t t i n g s :
Servo
item : door
open : t r u e | f a l s e
LED
item : l i g h t
b r i g h t n e s s : 0 10
/
f u n c t i o n publishUpdate ( data ) {
pubnub . p u b l i s h ( {
channel : s e t t i n g s . channel ,
message : data
});
}
/ / UI EVENTS
door . a d d E v e n t L i s t e n e r ( change , f u n c t i o n ( e ) {
publishUpdate ( { item : door , open : t h i s . checked } ) ;
} , false );
l i g h t L i v i n g . a d d E v e n t L i s t e n e r ( change , f u n c t i o n ( e ) {
publishUpdate ( { item : l i g h t l i v i n g , b r i g h t n e s s : + t h i s .
} , false );
l i g h t P o r c h . a d d E v e n t L i s t e n e r ( change , f u n c t i o n ( e ) {
publishUpdate ( { item : l i g h t porch , b r i g h t n e s s : + t h i s . v
} , false );

f i r e p l a c e . a d d E v e n t L i s t e n e r ( change , f u n c t i o n ( e ) {
publishUpdate ( { item : f i r e p l a c e , b r i g h t n e s s : + t h i s . valu

} , false );
})();
Anexo 3 - Codigo

Python
# Using PWM with RPi . GPIO
import RPi . GPIO as GPIO
import time
import sys
from pubnub import Pubnub
import s e r i a l
GPIO . setmode ( GPIO .BCM)
PIN LIVING = 4
PIN PORCH = 17
PIN FIREPLACE = 27
PIN GARAGEM =18
GPIO . setup ( PIN LIVING , GPIO .OUT)
GPIO . setup ( PIN PORCH , GPIO .OUT)
GPIO . setup ( PIN FIREPLACE , GPIO .OUT)
GPIO . setup (PIN GARAGEM, GPIO .OUT)
#PIO . a d d e v e n t d e t e c t ( 2 1 , GPIO . RISING )

#GPIO . a d d e v e n t c a l l b a c k ( 2 1 , c a l l b a c k s e n d o u t )
FREQ = 100 # frequency i n Hz
FIRE FREQ = 30 # f l i c k e r i n g e f f e c t
pwm = GPIO .PWM( 1 8 , 1 0 0 )
pwm. s t a r t ( 5 )
# Duty Cycle ( 0 <= dc <=100)
l i v i n g = GPIO .PWM( PIN LIVING , FREQ)
living . start (0)
porch = GPIO .PWM( PIN PORCH , FREQ)
porch . s t a r t ( 0 )
f i r e = GPIO .PWM( PIN FIREPLACE , FIRE FREQ )
fire . start (0)

# PubNub
pubnub = Pubnub ( p u b l i s h k e y = demo , s u b s c r i b e k e y = demo )
channel = pi house

def c a l l b a c k ( message ) :
# p r i n t temp
#temp =0.05
#hum=0.07 # { 1 : 0 . 1 f } . format ( h )
# message = { temperature : temp , humidity : hum}
#pubnub . p u b l i s h ( channel=channel , message=message , c a l l b a c k =c a l l b
p r i n t ( message )

def c a l l b a c k s e n d o u t ( ) :
# p r i n t temp
l u z p a t i o o u t =0.1
#hum=0.07 # { 1 : 0 . 1 f } . format ( h )
message = { l u z p a t i o o u t : l u z p a t i o o u t }
pubnub . p u b l i s h ( channel=channel , message=message , c a l l b a c k =c a l l b a
p r i n t ( message )
def

c a l l b a c k (m, channel ) :
p r i n t (m)
i f m[ item ] == l i g h t l i v i n g :
dc = m[ b r i g h t n e s s ] 10
l i v i n g . ChangeDutyCycle ( dc )
e l i f m[ item ] == l i g h t porch :
dc = m[ b r i g h t n e s s ] 10
porch . ChangeDutyCycle ( dc )
e l i f m[ item ] == f i r e p l a c e :
dc = m[ b r i g h t n e s s ] 10
f i r e . ChangeDutyCycle ( dc )
e l i f m[ item ] == garageml i v i n g :
gr = m[ b r i g h t n e s s ]
duty = f l o a t ( gr ) / 1 0 . 0 + 2 . 5
p r i n t duty
pwm. ChangeDutyCycle ( duty )
e l i f m[ item ] == door :

p r i n t m[ open ]

def e r r o r (m) :
p r i n t (m)
pubnub . s u b s c r i b e ( c h a n n e l s=channel , c a l l b a c k = c a l l b a c k , e r r o r= e r r o r )
s e r = s e r i a l . S e r i a l ( / dev / ttyUSB0 , 9 6 0 0 )
s = [0 ,1]
try :
while 1 :
# callback send out ( )
# r e a d s e r i a l =s e r . r e a d l i n e ( )
s [0] = s t r ( int ( ser . readline ( ) , 1 6 ) )
print s [0]
temp1= f l o a t ( s [ 0 ] ) / 1 0
p r i n t temp1
# print read s

serial
message = { temperature : temp1 , humidity : 0 . 0 8 }
pubnub . p u b l i s h ( channel=channel , message=message , c a l l b a c k =c a l l b a
pass
e x c e p t KeyboardInterrupt :
GPIO . cleanup ( )
sys . e x i t ( 1 )
Anexo 4 - Codigo

PHP
<?php
$sock = s o c k e t c r e a t e ( AF INET , SOCK STREAM, SOL TCP ) ;

/ / s o c k e t c o n n e c t c o n e c t a r o web s o c k e t desenvolvido em PHP com o Ard


/ / Parametros do s o c k e t c o n n e c t (Nome do s o c k e t , IP do Arduino , P o r t a
s o c k e t c o n n e c t ( $sock , 1 9 2 . 1 6 8 . 0 . 1 0 1 , 9 9 ) ;
echo Thank you . . $ POST [ v l l e d 1 ] . , says t h e PHP f i l e ;
/ / r e c o j o e l v a l o r y l o saco por p a n t a l l a
i f ( i s s e t ( $ POST [ v l l e d 1 ] ) ) {
s o c k e t w r i t e ( $sock , . $ POST [ v l l e d 1 ] ) ;
} else {
Echo P l e a s e s l i d e t h e S l i d e r Bar and P r e s s Submit . ;
}
header ( L o c a t i o n : index . html ) ;
/ / s o c k e t c l o s e Funcao n a t i v a do PHP que e n c e r r a a conexao com o s o c k e

s o c k e t c l o s e ( $sock ) ;
?>
Anexo 5 - Codigo

do Arduino UNO
# i n c l u d e <SPI . h>
# i n c l u d e <E t h e r n e t . h>
byte mac [ ] = {
0xDE , 0xAD, 0xBE , 0xEF , 0xFE , 0xED } ;
IPAddress i p ( 1 9 2 , 1 6 8 , 0 , 1 0 1 ) ;
IPAddress gateway ( 1 9 2 , 1 6 8 , 0 , 1 ) ;
IPAddress subnet ( 2 5 5 , 2 5 5 , 2 5 5 , 0 ) ;
EthernetServer server ( 8 0 ) ;
void setup ( ) {
S e r i a l . begin ( 9 6 0 0 ) ;

E t h e r n e t . begin ( mac , ip , gateway , subnet ) ;


s e r v e r . begin ( ) ;
S e r i a l . print ( server i s at ) ;
S e r i a l . println ( Ethernet . l o c a l I P ( ) ) ;
}

void loop ( ) {
EthernetClient c l i e n t = server . available ( ) ;
if ( client ) {
S e r i a l . p r i n t l n ( new c l i e n t ) ;
boolean c u r r e n t L i n e I s B l a n k = t r u e ;
while ( c l i e n t . connected ( ) ) {
i f ( client . available ( ) ) {
char c = c l i e n t . read ( ) ;
S e r i a l . write ( c ) ;
i f ( c == \ n && c u r r e n t L i n e I s B l a n k ) {
c l i e n t . p r i n t l n ( HTTP / 1 . 1 200 OK ) ;
c l i e n t . p r i n t l n ( Content Type : t e x t / html ) ;
c l i e n t . p r i n t l n ( Connection : c l o s e ) ;
c l i e n t . p r i n t l n ( Refresh : 5 ) ;
client . println ( ) ;
c l i e n t . p r i n t l n ( < !DOCTYPE HTML> ) ;
c l i e n t . p r i n t l n ( < html > ) ;

f o r ( i n t analogChannel = 0 ; analogChannel < 6 ; analogChannel +


i n t sensorReading = analogRead ( analogChannel ) ;
c l i e n t . p r i n t ( analog input ) ;
c l i e n t . p r i n t ( analogChannel ) ;
c l i e n t . print ( i s ) ;
c l i e n t . p r i n t ( sensorReading ) ;
c l i e n t . p r i n t l n ( < br / > ) ;
}
c l i e n t . p r i n t l n ( < / html > ) ;
break ;
}
i f ( c == \ n ) {
currentLineIsBlank = true ;
}
e l s e i f ( c != \ r ) {
currentLineIsBlank = f a l s e ;
}
}
}
delay ( 1 ) ;
c l i e n t . s to p ( ) ;
S e r i a l . p r i n t l n ( c l i e n t disconnected ) ;
}
}

Potrebbero piacerti anche