Beruflich Dokumente
Kultur Dokumente
(3.1)
onde
: lmbida, ou seja, comprimento de onda, em metros;
31
c: a velocidade da onda eletromagntica no meio 300x10 elevado a 8 m/s;
f: a freqncia.
Para freqncia igual a 433Mhz obtemos:
=
30010
8
43310
8
(3.2)
= 0,69284 (3.3)
Com isso, o comprimento da antena igual ao comprimento de onda dividido
por 4:
=
4
(3.4)
=
0,69284
4
(3.5)
= 17,3 (3.6)
3.6.2.2 Rdio frequncia 2,4Ghz
Outra possibilidade de implementao de comunicao por rdio frequncia
a utilizao de mdulos NRF24L01, esse nico mdulo possui a capacidade de
transmisso e recepo de ondas eletromagnticas na faixa de frequncia de 2,4GHz.
As caractersticas do mdulo NRF24L01 podem ser vistas no Anexo C.
FIGURA 15 - NRF24L01
FONTE: O AUTOR (2014).
32
Este dispositivo de transmisso e recepo de sinais utilizado em aplicaes
industriais permitindo comunicao de vrios pontos de modo a formar uma rede
completa.
A capacidade de alcance de recepo e envio de sinal de 100 metros, com
um consumo pequeno de energia. No h necessidade de acoplar uma antena. Este
mdulo possui protocolo de comunicao ShockBurst para transmisso de dados.
3.6.3 Bluetooth
Para o usurio comandar a residncia inteligente, um dos mtodos utilizados
para comunicao entre os dispositivos mveis e o mdulo o uso de bluetooth. Para
isso so utilizados receptores que usam a tecnologia bluetooth. No sistema escolhido
os dispositivos mveis (celulares ou tablets) sero os responsveis pela transmisso
de dados.
A tecnologia Bluetooth um dispositivo de curto alcance, cujo
objetivo eliminar os cabos nas conexes entre dispositivos eletrnicos, tanto
portteis como fixo. As principais caractersticas desta tecnologia so suas
confiabilidades, baixo consumo e mnimo custo. Vrias das funes das
especificaes opcional, o que permite a diversificao dos produtos.
Dispositivos Bluetooth operam na faixa ISM (Industrial, Scientific, Medical)
centrada em 2,45 GHz em sua camada fsica de Rdio (RF) que era
formalmente reservada para alguns grupos de usurios profissionais. Nos
Estados Unidos, a faixa ISM varia de 2400 a 2483,5 MHz. Na maioria da
Europa a mesma banda tambm est disponvel. No Japo a faixa varia de
2400 a 2500 MHz. Os dispositivos so classificados de acordo com a potncia
e alcance, em trs nveis: classe 1 (100 mW, com alcance de at 100 m),
classe 2 (2,5 mW e alcance at 10 m) e classe 3, (1 mW e alcance de 1 m,
uma variante muito rara). Cada dispositivo dotado de um nmero nico de
48 bits que serve de identificao. Os dispositivos Bluetooth se comunicam
entre si e formam uma rede denominada piconet, na qual podem existir at
oito dispositivos interligados, sendo um deles o mestre (master) e os outros
dispositivos escravos (slave); uma rede formada por diversos "masters" (com
um numero mximo de 10) pode ser obtida para maximizar o nmero de
conexes. A banda dividida em 79 portadoras espaadas de 1 Megahertz,
portanto cada dispositivo pode transmitir em 79 diferentes frequncias; para
33
minimizar as interferncias, o dispositivo "master", depois de sincronizado,
pode mudar as frequncias de transmisso dos seus slaves" por at 1600
vezes por segundo. Em relao sua velocidade pode chegar a 3 Mbps em
modo de transferncia de dados melhorada (EDR) e possui trs canais de
voz. Toda transferncia de dados se d no canal fsico que se subdivide em
unidades de tempo, denominadas ranhuras. E os dados intercambiados entre
os dispositivos transitam em forma de pacotes, estes por sua vez devero
chegar a estas ranhuras para que a transmisso de dados ocorra com
sucesso. Uma das caractersticas da tecnologia Bluetooth a capacidade de
transmisso de dados bidirecional, e isso se deve a tcnica por ela utilizada
de mltiplo acesso ou Duplex por diviso de tempo (TDD). Sobre o canal
fsico podemos dizer que composto por uma camada de enlace fsico e
canais com seus devidos protocolos de controle. A hierarquia abaixo e acima
dos nveis de enlaces a seguinte: Canal fsico, enlace fsico, comunicao
lgica, enlace lgico e canal L2CAP. (BONATTO e OLIVEIRA, 2013)
Neste sistema ser criado uma aplicao para dispositivos mveis com
sistema operacional Android. Este aplicativo ser o responsvel por utilizar a
tecnologia de transmisso bluetooth para enviar dados, por exemplo do celular para o
mdulo acoplado ao microcontrolador. O microcontrolador ir fazer o tratamento dos
comandos recebidos pelo celular. O dispositivo bluetooth receptor recebe os dados e
envia via serial ao microcontrolador. O Apndice H mostra como foi feito o aplicativo.
3.6.4 Ethernet
O acesso ao supervisrio, que ser explicado no prximo captulo, se dar por
uma pgina na web conectada internet. Esta pgina se conectar ao
microcontrolador central para coletar comandos feitos pelo usurio e mostrar como o
sistema est se comportando, ou seja, quais equipamentos esto operando, como
esto comportando os sensores.
Para isso, o Arduino Uno deve ter a capacidade de se comunicar via protocolo
ethernet com o roteador. Inserindo um mdulo ethernet no atmega328, este se
conectar a internet.
O mdulo escolhido possui um chip Wiznet W5100 com uma biblioteca de
network (IP) com suporte aos protocolos TCP e UDP, (WIZNET, 2011).
34
A conexo entre o ATmega328 e o mdulo ethernet feita por ICSP, mtodo
de gravao de dispositivos programveis. Este mtodo faz com que aps a
montagem do circuito seja possvel fazer a gravao de um programa no chip atravs
da porta serial.
O mdulo ethernet se conecta a central e para ter conexo com a internet
necessrio utilizar um cabo de rede com conector RJ45, fazendo assim a ligao do
Wiznet W5100 com o roteador da residncia. Na figura 16 pode-se visualizar o mdulo
ethernet a ser utilizado no sistema.
FIGURA 16 - MDULO ETHERNET
FONTE: O AUTOR (2014).
Com o uso deste mdulo dever ser programado na central as configuraes
de rede utilizando a biblioteca Ethernet.h.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,99};
byte gateway[] = { 192,168,0,1};
byte subnet[] = { 255,255,255,0};
Server server(8080);
A varivel declarada como byte mac o endereamento fsico do mdulo
ethernet a ser utilizado. Byte IP representa o endereo de IP que o microcontrolador
assumir e byte gateway o endereo de IP do roteador. Byte subnet representa a
mscara de rede. Por fim, a porta do servidor a ser utilizado escolhida e setada, no
caso acima a escolhida foi 8080.
35
3.6.5 INFRAVERMELHO
O uso de sensores infravermelho muito empregado nas residncias. O
controle remoto, por exemplo, funciona atravs do envio de sinais infravermelho para
televises, ar-condicionado, equipamentos de som a fim de regular a intensidade de
volume, regular o brilho, ligar e desligar, acionar portes de garagem.
Para o sistema, o meio de comunicao por infravermelho possibilitar o uso
de um controle remoto para acionamento dos equipamentos de cada ambiente.
Dever ser acoplado aos mdulos de cada ambiente um sensor de
infravermelho, usualmente chamados de sensores IR e o modelo a ser utilizado no
projeto ser o TSOP4838.
FIGURA 17 - SENSOR IR
FONTE: O AUTOR (2014).
Primeiro necessrio escolher um controle remoto para envio dos sinais, a
partir deste dever ser analisado e colocado em uma tabela os cdigos que so
enviados ao apertar de um boto. Com esta tabela de cdigos possvel programar
qual ao ser feita ao ser pressionado os diferentes botes do controle remoto.
Para o uso deste sensor utilizou-se a biblioteca IRremote.h (SHIRRIFF, 2009).
Utilizando a biblioteca ao executar o comando a seguir foi possvel obter os
valores de forma decimal recebidos pelo sensor.
if (irrecv.decode(&results))
{
Serial.println(results.value, DEC);
}
36
Nos mdulos de cada ambiente ser programado no ATmega328 o que cada
cdigo executar de funo. Pode-se ver a seguir o que cada cdigo de cada boto
apertado do controle executa no ambiente.
TABELA 1 CDIGOS ENVIADOS PELO CONTROLE
Boto do
controle
Cdigo
recebido
1 1
2 2
3 3
4
5
6
7
8
9
0
4
5
6
7
8
9
0
FONTE: O AUTOR, 2014.
Os cdigos que o controle remoto enviou so exatamente o nmero do teclado
alfanumrico do controle. Com esta tabela pode-se definir o que cada boto ir
executar no ambiente em que estivar instalado o sensor infravermelho.
TABELA 2 CDIGO DO CONTROLE E SUA FUNO NO SISTEMA
Boto do
controle
Cdigo
Recebido
Ligar/
Desligar
Equip. 1
Ligar/
Desligar
Equip. 2
Ligar/
Desligar
Equip. 3
1 1 X
2 2 X
3 3 X
FONTE: O AUTOR, 2014.
37
3.6.6 SUPERVISRIO
Todo o sistema ser monitorado e controlado por um supervisrio, ou seja,
ser implementada uma interface grfica no qual o usurio poder visualizar como
est se comportando sua residncia assim como control-la.
Para realizao do supervisrio, optou-se por desenvolver uma pgina na web
(World Wide Web), que est conectada internet e pode ser acessada por
computadores, ou por quaisquer outros dispositivos com acesso internet, em
qualquer lugar do mundo.
A base de linguagem de programao PHP ser usada para comunicao
entre a pgina da web e o microcontrolador. Esta linguagem possui cdigo fonte livre.
O cdigo para criao da pgina pode ser visto no apndice A.
Ao realizar a programao da mensagem foi utilizado no computador o
servidor apache XAMPP. Esse servidor possibilita a comunicao atravs de portas
entre o roteador que o computador est conectado e o microcontrolador que possui a
placa ethernet.
Para ter acesso a pgina onde poder monitorar e controlar sua residncia, o
usurio dever entrar dados como login (autenticao) e senha, forma pela qual o
usurio poder restringir o acesso somente s pessoas autorizadas que desejam
utilizar o controle de sua moradia, conforme prxima figura.
FIGURA 18 - CONTROLE DE ACESSO
FONTE: O AUTOR (2014).
38
Para realizao desta autenticao foi utilizado uma biblioteca pronta em php
chamada Page Password Protect 2.13.
Aps feito este processo, uma pgina ser aberta conforme Figura 19.
FIGURA 19 - PGINA DA CASA INTELIGENTE
FONTE: O AUTOR (2014).
Nesta pgina o usurio poder visualizar a planta da sua residncia e partir
dela escolher qual o ambiente que deseja fazer o controle e monitoramento.
Quando o usurio acessa algum ambiente uma nova pgina se abre, esta
nova pgina (figura 20) mostrar informaes como:
Equipamentos que esto sendo monitorados que podem ser controlados;
Sensores de temperatura, umidade;
Lmpadas.
Para a pgina web se conectar com o mdulo ethernet acoplado no
microcontrolador foi necessrio definir o mesmo ip e mesma porta na pgina web.
39
FIGURA 20 - PGINA REFERENTE AO AMBIENTE 1
FONTE: O AUTOR (2014).
3.7 PROGRAMAO
3.7.1 Introduo
A comunicao serial usada para programao dos chips ATmega328, j
que estes j possuem bootloader de fbrica, ou seja, o sistema operacional j vem
carregado e pronto para uso.
A programao foi feita utilizando o software(programa) Arduino IDE, de
cdigo aberto. O ambiente Arduino escrito em java e baseado no programa
Processing, onde uma das possveis linguagens de programao utilizadas o C, esta
foi escolhida para o projeto.
A programao realizada se divide em trs tipos:
a) Programao do supervisrio web;
b) Programao para a central;
c) Programao para os mdulos.
40
Para o uso dos dispositivos de comunicao foram utilizados diversos tipos
de bibliotecas prontas a fim de garantir o correto envio e recebimento das mensagens,
porm as mensagens que sero enviadas de um mdulo para outro ou de um mdulo
para a central e vice-versa foi criada pelo autor deste trabalho seguindo regras que
sero melhor explicadas a seguir.
O principal componente da programao a declarao de variveis de cada
ambiente:
char Luz1[7] = "0001L#";
Esta varivel uma string, ou seja, uma cadeia de caracteres que definir o
estado de cada equipamento: ligado (1) ou desligado (0). Os trs primeiros dgitos
representam trs equipamentos e seus estados: 1 ou 0. O quarto dgito representa o
ambiente que est sendo controlado, no caso mostrado seria o primeiro ambiente. O
quinto dgito representa que se deseja controlar os equipamentos ou que se deseja
saber o estado desses equipamentos, que ser melhor explicado nos prximos
tpicos. E o ltimo dgito a interpretao que um comando foi recebido e sempre e
ter o smbolo #.
A seguir ser exemplificado uma situao do que ocorre no sistema no envio
das mensagens. Para o exemplo ser enviado via internet o comando para acender
duas lmpadas do primeiro ambiente e uma lmpada do segundo ambiente.
Primeiramente os mdulos enviam o estado de cada ambiente para a central
de forma automtica em intervalos constantes de tempo.
FIGURA 21 ESQUEMTICO 1
FONTE: O AUTOR (2014).
41
Aps a central receber o estado de cada ambiente e armazenar em sua
memria o computador ou dispositivo mvel que est conectado internet solicita
esses estados dos ambientes para a central e ela retorna estes.
FIGURA 22 ESQUEMTICO 2
FONTE: O AUTOR (2014).
Quando o usurio deseja acender as lmpadas de diferentes ambientes, ele
envia atravs de seu dispositivo, via internet, o comando de acendimento para a
central.
FIGURA 23 ESQUEMTICO 3
FONTE: O AUTOR (2014).
42
A central analisa a mensagem que foi recebida e envia para o mdulo, este
tambm analisa a mensagem e acende as lmpadas. Aps o acendimento o mdulo
retorna a central o novo estado do sistema, assim a central sempre saber o estado
de cada mdulo que representa cada ambiente.
FIGURA 24 ESQUEMTICO 4
FONTE: O AUTOR (2014).
Este processo ir acontecer enquanto o sistema estiver ligado. Caso o usurio
realiza um comando via bluetooth ou infravermelho o comando ser sempre enviado
a central para ela estar sempre atualizada em relao ao sistema todo.
Com a definio do endereamento de cada mensagem, para a comunicao
ocorrer corretamente foram utilizadas bibliotecas prontas, ou seja, foi usado um
conjunto de fun es pr-escritas por outros programadores. A Tabela 3 exemplifica
as bibliotecas utilizadas.
TABELA 3 BIBLIOTECAS
Dispositivo HARDWARE BIBLIOTECA
RF433 RF 433MHz VirtualWire
RS485 MAX485 VirtualWire
RF2,4Ghz nRF24L01 NRF24
SUPERVISRIO/Ethernet
BLUETOOTH
INFRAVERMELHO
W5100
BLUETOOTH
TSOP4838
SPI, servidor
XAMPP(apache)
O autor
IRremote
FONTE: O AUTOR, 2014.
43
3.7.2 Programao do supervisrio web
As pginas dos ambientes variam suas caractersticas conforme os
equipamentos nelas instalados. Cada projeto de casa inteligente possuir pginas que
variam conforme os equipamentos de cada usurio.
Para a pgina de cada ambiente do supervisrio foi definido caracteres
diferentes para declarao da varivel Luz anteriormente citada. Pode-se notar a
seguir que a varivel Luz agora tratada como msg, pois representa uma mensagem
que est sendo enviada para o arduino central.
$msg = "0001L#";
O quarto dgito representa o ambiente em que se deseja controlar, podendo
ser de 1 a 7 respectivamente. A pgina da web necessita saber o estado em que cada
equipamento se encontra e para isso ela solicita o estado de cada equipamento para
a central atravs da mudana do quinto dgito (A,B,C,D,E,F,G):
$msg = "0001A#"; //receber estado dos equipamentos do ambiente 1
Quando o usurio deseja controlar sua residncia pelo supervisrio, ao
acionar algum equipamento atravs dos botes encontrados no site o quinto dgito
muda para L, enviando assim o novo estado dos equipamentos escolhidos:
$msg = "0101L#";
No exemplo("0101L#") nota-se que est sendo enviado para o
microcontrolador("0101L#") o acionamento do segundo equipamento("0101L#") do
primeiro ambiente("0101L#").
Finalmente, para requisitar os valores dos sensores de temperatura e
umidade a pgina da web modifica o quinto caractere para U ou T, representando a
umidade e temperatura respectivamente.
$msg = "U#"; // requisio de temperatura
$msg = "T#"; //requisio de umidade
3.7.3 Programao da central
A seguir, ser mostrada as principais linhas de programao para a central.
Para acesso a programao completa visualizar o apndice.
44
O primeiro passo para programao do microcontrolador a definio de
variveis e tambm de bibliotecas para os mdulos de comunicao:
#include <SPI.h> //biblioteca spi
#include <Ethernet.h> //biblioteca para mdulo ethernet
#include <VirtualWire.h> //biblioteca virtualwire
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //ethernet shield
byte ip[] = { 192,168,0, 99 }; //ip escolhido para o microcontrolador
byte gateway[] = { 192,168,0, 1 }; //ip do roteador
byte subnet[] = { 255, 255, 255, 0 }; //mscara de rede
EthernetServer server(8081); //porta escolhida para o servidor
char Luz1[7] = "0001L#"; //string do estado do primeiro ambiente
char Luz2[7] = "0002L#"; //string do estado do segundo ambiente
char Luz3[7] = "0003L#"; //string do estado do terceiro ambiente
char Luz4[7] = "0004L#"; //string do estado do quarto ambiente
char Luz5[7] = "0005L#"; //string do estado do quinto ambiente
char Luz6[7] = "0006L#"; //string do estado do sexto ambiente
char Luz7[7] = "0007L#"; //string do estado do stimo ambiente
char msg[7] = "0000L#"; // String onde guardada as msgs recebidas da web
O microcontrolador ficar em constante processo de recebimento de
comandos vindos do supervisrio e tambm dos mdulos. Primeiramente o programa
analisar o estado de cada ambiente vindo dos mdulos e em seguida a conexo com
a internet.
Caso haja conexo com a internet o microcontrolador far a leitura do que
est recebendo do supervisrio atravs do comando:
msg[1]=msg[2];msg[2]=msg[3];msg[3]=msg[4];msg[4]=msg[5];
msg[5]=msg[6];
msg[6] = client.read();
A funo cliente.read() faz a leitura pelo mdulo ethernet do que for enviado
pelo supervisrio e assim armazenado em uma string chamada msg.
Aps o armazenamento o microcontrolador passa a analisar cada caracteree
desta mensagem em sequncia.
45
Por exemplo:
if (msg[6]=='#') // analisa se o ltimo caractere o #
{
if (msg[5]=='A') client.write(Luz1);
if (msg[5]=='L')
{
if (msg[4]=='1')
{
// Caso L#, ele copia os bytes anteriores p/ a
// string 'Luz' e cada byte representa um
// dispositivo, onde '1'=ON e '0'=OFF
Luz1[0]=msg[1];
Luz1[1]=msg[2];
Luz1[2]=msg[3];
if (Luz1[0]=='1') comando1(); else comando2();
if (Luz1[1]=='1') comando3(); else comando4();
if (Luz1[2]=='1') comando5(); else comando6();
}
}
Sempre ser analisado os dois ltimos caracteres da mensagem. Caso o
ltimo for # quer dizer que foi recebido um comando. Ao analisar o penltimo
caractere ocorrer duas opes, ou ser um caractere requisitando o estado dos
equipamentos em relao a um determinado ambiente (A,B,C,D,E,F,G), ou ser um
caractere(L) que manda executar o acionamento dos equipamentos.
Quando receber uma mensagem de acionamento (liga, desliga) o ATmega328
executa a funo comando(). Esta funo representa o que deve ser enviado via rdio
frequncia ou RS485 para os demais mdulos conforme tabela3.
46
TABELA 4 CDIGO ENVIADO PARA OS MDULOS
Ambiente Liga
Equip. 1
Desliga
Equip. 1
Liga
Equip. 2
Desliga
Equip. 2
Liga
Equip. 3
Desliga
Equip. 3
1 010 011 012 013 014 015
2 020 021 022 023 024 025
3 030 031 032 033 034 035
4
5
6
7
040
050
060
070
041
051
061
071
042
052
062
072
043
053
063
073
044
054
064
074
045
055
065
075
FONTE: O AUTOR, 2014.
O primeiro dgito (0) representa a central, o segundo representa o ambiente
de 1 a 7 e o terceiro representa o que deve ser feito com o equipamento, ligar ou
desligar.
O envio desses cdigos feito pela sequinte programao:
void comando1()
{
char *msg = "010";
vw_send((uint8_t *)msg, strlen(msg));
}
3.7.4 Programao dos mdulos
Os mdulos possuem o papel de leitura dos sensores e acionamento dos
equipamentos nos ambientes que esto acoplados.
Para realizar o acionamento dos equipamentos os mdulos analisam se esto
recebendo alguma mensagem atravs do cdigo:
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
Aps recebida uma mensagem, esta mensagem analisada seguindo a
tabela 1 anteriormente mostrada.
if((buf[0] == '0') && (buf[1] == '1')&&(buf[2] == '0'))
47
{
digitalWrite(saida1,1);
}
Se a leitura da mensagem for igual a um valor existente na tabela, ento o
microcontrolador mudar o estado de um pino de sada digital pr-configurada. Este
pino de sada digital acionar o rel que for configurado.
O mdulo tambm receber comandos feitos por bluetooth e infravermelho.
Esses comandos sero interpretados e conforme os cdigos recebidos ser
executada uma ao nos equipamentos do ambiente.
No final da execuo desses comandos o controlador envia central o novo
estado do ambiente. Com esse envio de estado, caso a central perca a sua fonte de
energia, ela receber novamente o comportamento de cada ambiente, no perdendo
assim o controle do sistema.
.
4 PROTTIPO
4.1 PRIMEIRA ETAPA
A partir do esquemtico mostrado na figura 2 foi desenvolvido um prottipo
inicial a fim de observar o comportamento do sistema utilizando os microcontroladores
e os dispositivos que realizam as comunicaes.
Primeiramente a central composta pelo Arduino, ethernet shield, rdio
transmissor e receptor 433Mhz, mdulo MAX485 e rdio nRF24L01 foi conectada da
maneira apresentada na figura 25.
48
FIGURA 25 CENTRAL
FONTE: O AUTOR (2014).
TABELA 5 SIMBOLOGIA CENTRAL
Nmero Componente
1 Cabo ethernet com conexo RJ45
2 Ethernet shild acoplado a um Arduino
3 Mdulo RF433Mhz
4
5
nRF24L01
MAX485 para comunicao RS485
FONTE: O AUTOR, 2014.
Aps feita a montagem da central, montou-se os mdulos conforme a figura 26.
FIGURA 26 MDULO
FONTE: O AUTOR (2014).
49
TABELA 6 SIMBOLOGIA MDULO
Nmero Componente
1 ATmega328
2 nRF24L01
3 Mdulo RF433Mhz
4 MAX485 para comunicao RS485
FONTE: O AUTOR, 2014.
Esta montagem serviu de base para teste de comportamento das mensagens
enviadas entre cada microcontrolador no sistema assim como as conexes
necessrias para o correto funcionamento de cada dispositivo.
4.2 SEGUNDA ETAPA
A segunda etapa a ser realizada foi de criao de esquemtico com todas as
ligaes necessrias da central e dos mdulos. Estes foram divididos em dois tipos:
com o microcontrolador atmega328 e o outro com o microcontrolador attiny85.
Para realizao do esquemtico foi utilizado o programa Eagle. Este programa
tem a funo de conectar os componentes utilizados e apartir do esquemtico criar
uma placa de circuito impresso.
Para o mdulo microcontrolador por atmega328 foi criado o esquemtico
conforme Apndice F.
Com o esquemtico pronto, foi possvel criar uma placa de circuito impresso
conforme Figura 27.
50
FIGURA 27 PCB MDULO ATMEGA328
FONTE: O AUTOR (2014).
FIGURA 28 PLACA MDULO ATMEGA328
FONTE: O AUTOR (2014).
51
O mdulo da figura 28 possui trs sadas a rel com contato normalmente
aberto para acionamento de lmpadas, ventiladores, entre outros, podendo operar em
uma faixa de at 15A e 125Vac ou 24Vcc. Este mdulo encontra-se pronto para ser
controlado por infra-vermelho via controle remoto, bluetooth via dispositivo mvel,
assim como pelo supervisrio conectado internet Este supervisrio envia sinais para
acionamento via rdio frequncia e RS485. Pode-se conectar uma fonte de 5Vcc at
30Vcc para alimentao do mdulo. Tambm foi projetado pinos para conexo de
sensor de presena. Estes se encontram ao lado direito do Crystal de 16Mhz.
J o mdulo com o microcontrolador attiny85 possui o esquemtico e placa
de circuito impresso conforme as ilustraes seguintes.
FIGURA 29 ESQUEMTICO MDULO ATTINY85
FONTE: O AUTOR (2014).
52
FIGURA 30 PCB MDULO ATTINY85
FONTE: O AUTOR (2014).
FIGURA 31 PLACA MDULO ATTINY85
FONTE: O AUTOR (2014).
53
Este mdulo capaz de se comunicar via bluetooth com um dispositivo mvel
com sistema operacional Android. Foram acoplados pinos ao lado do microcontrolador
para expanses futuras de uso das portas digitais, podendo assim ser programadas e
usadas com sensores. A placa criada possui uma sada a rel conforme
especificaes dadas no mdulo anterior.
Caso o usurio no possua o aplicativo que foi criado para demonstrao no
laboratrio de Engenharia Eltrica, este poder controlar utilizando um aplicativo que
envie dados para o mdulo bluetooth. Para conexo com o mdulo bluetooth basta o
usurio parear seu dispositivo mvel com o dispositivo linvor, nome dado ao mdulo
bluetooth. Ao fazer o pareamento ser solicitado uma senha para conexo, cuja senha
a ser digitada : 1234.
Para o mdulo com ATmega328 as sadas fecharo o contato ao receberem
caracteres D, E, F e abriro os contatos ao receberem os caracteres a, b, c. No
caso do mdulo com ATtiny85 a sada fechar o contato ao receber o caractere A e
abrir o contato ao receber o caractere a.
4.3 TERCEIRA ETAPA
A terceira etapa compreende a montagem do sistema de forma completa, ou
seja, com a central, os mdulos e equipamentos a serem acionados.
Para esta etapa os mdulos e a central foram colocados em caixas de madeira
MDF.
O prottipo final foi montado em uma base de madeira para, de forma didtica,
testar todos os equipamentos e comunicaes disponveis no acionamento de
lmpadas.
A seguir ser mostrado na Tabela 7 todos os itens utilizados no projeto para
implementao da central, mdulos e do supervisrio para em trabalhos futuros ser
feito o desenvolvimento a partir destes itens. Para realizao da programao dos
supervisrios e o uso do bluetooth, o autor deste projeto foi responsvel por criar as
lgicas e portanto podem ser vistas na Tabela 7 onde se encontram essas lgicas no
trabalho.
54
TABELA 7 LISTA DE ITENS UTILIZADOS
ITEM HARDWARE SOFTWARE ONDE OBTER
1 ATmega328 - http://www.labdegaragem.org/loja/garagi
no-4/garagino-rev1.html
2 Shield ethernet - http://www.labdegaragem.org/loja/ethern
et-shield.html
3 RF433 - http://imall.iteadstudio.com/im12062801
4.html
4
5
6
7
8
9
10
11
12
13
MAX485
nRF24L01
-
-
-
-
-
-
Attiny85
Rel, resistores,
diodos,
transistores
-
-
Supervisrio/
Programao
Pgina web
Arduino IDE
VirtualWire
IRremote
RF24
-
-
http://imall.iteadstudio.com/max485-
module.html
http://imall.iteadstudio.com/im12060600
2.html
Captulo 3.7
Apndice A e B
www.arduino.cc
http://www.airspayce.com/mikem/arduin
o/VirtualWire/
http://arcfn.com
http://maniacbug.github.io/RF24/
http://imall.iteadstudio.com/im13061500
3.html
Loja de matrias eletrnicos
14
15
Bluetooth
-
-
Bluetooth
http://imall.iteadstudio.com/im12072300
9.html
Apndice D
FONTE: O AUTOR, 2014.
55
5 CONCLUSO
5.1 CONSIDERAES FINAIS
Desenvolver um sistema que possa alm de ser funcional, mas tambm
economicamente acessvel, pode trazer a sociedade a maior difuso da automao
residencial no Brasil. Os brasileiros j possuem em suas residncias equipamentos
que podem ser automatizados e esto apenas a um pequeno passo de aumentar
ainda mais o conforto, segurana e qualidade de vida.
A automao residencial j est deixando de fazer parte somente do cotidiano
de pessoas de maior poder aquisitivo no Brasil. Com o avano da tecnologia e com a
implementao de sistemas cada vez mais baratos mostra que populaes de classe
mdia e tambm de baixa renda tm a oportunidade de automatizar seus domiclios.
Com esse trabalho pde-se mostrar detalhadamente como pode ser projetado
e implementado um sistema de monitoramento e controle de uma residncia com
diversos tipos de comunicao. O prottipo desenvolvido mostrou sua performance
de forma robusta e satisfatria nos ensaios realizados no laboratrio do departamento
de Engenharia Eltrica da Universidade Federal do Paran.
5.2 TRABALHOS FUTUROS
Como melhoria futura para criar um sistema com melhores caractersticas de
processamento, mais funcionalidade, pode-se estudar:
O uso de uma central mais elaborada (raspberry pi, mini pc)
Inserir uma central com LCD sensvel ao toque
Inserir sistema de circuito fechado de tv (CFTV)
Rede mais inteligente com Zigbee
Inserir criptografia entre as comunicaes.
Adequao do sistema em protocolos j existentes atravs de um circuito
adaptador.
56
Extenso para edificaes como shoppings e condomnios.
Interoperabilidade independente de fabricantes
Flexibilidade e expanso (com adicionamento de pontos de
entradas/sadas-I/O.
57
REFERNCIAS
ABNT (s.d.). Associao Brasileira de Normas Tcnicas. Disponvel em:
<http://www.abnt.org.br/>. Acesso em 10 de agosto de 2013.
ACCARDI, A.; DODONOV, E. (2012). Tecnologias, Infraestrutura e Software,
Automao residencial: Elementos bsicos, arquiteturas, setores, aplicaes e
protocolos, So Carlos, v. 1, n. 2, p.156-166, nov. 2012.
ADAFRUIT (2011). Biblioteca DHT22. Disponvel em:
<https://github.com/adafruit/DHT-sensor-library>. Acesso em 25 de maio de 2014.
ARDUINO. Kit de desenvolvimento Arduino. Disponvel em:
<http://www.arduino.cc>. Acesso em 8 de agosto de 2013.
ATMEL (2013). Especificaes Tcnicas ATtiny85. Disponvel
em:<http://www.atmel.com/images/atmel-2586-avr-8-bit-microcontroller-attiny25-
attiny45-attiny85_datasheet.pdf>. Acesso em 05 de novembro de 2014.
ATMEL (s.d.). Especificaes Tcnicas ATmega328. Disponvel
em:<http://www.atmel.com/Images/doc8161.pdf>. Acesso em 05 de novembro de
2014.
AURESIDE (s.d.). Associao Brasileira de Automao residencial. Disponvel
em: <http://www.aureside.org.br/default.asp>. Acesso em: 20 de Novembro de 2013.
AURESIDE (2014). Mercado brasileiro de Automao destaque em publicao
alem. Disponvel em:
<http://www.aureside.org.br/noticias_recentes/default.asp?file=01.asp&id=354>.
Acesso em: 17 de maro de 2014.
BOLZANI, C. A. M. (2011). Smart Homes And Support to those with Alzheimer`s.
Disponvel em: <http://www.bolzani.com.br/2011/03/smart-homes-support-
alzheimer/>. Acesso em: 15 de Novembro de 2013.
BOLZANI, C. A. M. (2004). Residncias Inteligentes, Ed. Livraria da Fsica, So
Paulo, Brasil.
58
BOLZANI, C. A. M. (2011). Residncias inteligentes e o novo contexto do sculo
XXI. Disponvel em: <http://www.bolzani.com.br/2011/12/residencias-inteligentes-e-
o-novo-contexto-do-seculo-xxi/>. Acesso em: 15 de novembro de 2013.
BONATTO, A.; Canto, D. O. (2007). BLUETOOTH TECHNOLOGY (IEEE 802.15).
Artigo Faculdade de Administrao, Contbeis e Economia, PUCRS.
CEDOM (2013). Associao Espanhola de Domtica. Disponvel em:
<http://www.cedom.es/sobre-domotica/que-es-domotica>. Acesso em: 20 de
novembro de 2013.
CISCO (2013). Internert das coisas. Disponvel em:
<http://internetofeverything.cisco.com/pt-br>. Acesso em: 20 de novembro de 2013.
DIAS, C. L. A; PIZZOLATO (2004). DOMTICA, Aplicabilidade e Sistemas de
Automao Residencial (2004). Ed. Essentia Editora, v.6, n.3 (2004) Rio de
Janeiro, Brasil.
FERREIRA, E. H. C (2009). Automao Residencial Utilizando Protocolo Can.
Trabalho de Concluso de Curso de Engenharia Eltrica da Universidade Federal do
Paran. Disponvel em:<http://www.eletrica.ufpr.br/p/arquivostccs/28.pdf>. Acesso
em: 24 de maro de 2014.
HAYKIN S.; MOHER M (2011). Sistemas de Comunicaes (5 ed.). Editora
Bookman.
HERNASKI, S. R. (2010). Domtica Automao Residencial. Trabalho de
Concluso de Curso de Engenharia Eltrica da Universidade Federal do Paran.
Disponvel em:<http://www.eletrica.ufpr.br/p/arquivostccs/145.pdf>. Acesso em: 25
de maro de 2014.
IBGE (2010). Resultados do Universo do Censo Demogrfico 2010. Disponvel
em:<http://www.ibge.gov.br/home/estatistica/populacao/trabalhoerendimento/pnad20
11/default.shtm>. Acesso em: 10 de maro de 2014.
MCCAULEY, M. Biblioteca VirtualWire. Disponvel em:
<http://www.airspayce.com/mikem/arduino/VirtualWire/>. Acesso em: 07 de agosto
de 2013.
59
MENDES, M. B.; MARCENGO, T. M. (2011). Domtica voltada para plataformas
mveis com sistema operacional android. Trabalho de Concluso de Curso de
Engenharia Eltrica da Universidade Federal do Paran. Disponvel em:
<http://www.eletrica.ufpr.br/p/arquivostccs/194.pdf>. Acesso em: 17 de janeiro de
2014.
MURATORI, J. R.; DAL B, P. H (s.d.). Automao residencial: histrico,
definies e conceitos. Disponvel em:
<http://www.osetoreletrico.com.br/web/component/content/article/70-automacao-
residencial/590-capitulo-i-automacao-residencial-historico-definicoes-e-
conceitos.html>. Acesso em: 18 de maro de 2014.
NICKEL, E. D.; BESSA W. K. S. M. (2010). Sistema embarcado com acesso sem-
fio. Trabalho de Concluso de Curso de Engenharia Eltrica da Universidade
Federal do Paran. Disponvel em:
<http://www.eletrica.ufpr.br/p/arquivostccs/157.pdf>. Acesso em: 18 de janeiro de
2014.
NORDIC (2007). Datasheet nRF24L01. Disponvel em:
<ftp://imall.iteadstudio.com/Modules/IM120606002_nRF24L01_module/DS_nRF24L0
1.pdf>. Acesso em: 20 de novembro de 2013.
OLHAR DIGITAL (2014). Internet das Coisas. Disponvel em:
<http://olhardigital.uol.com.br/pro/noticia/40638/40638>. Acesso em: 17 de Maro de
2014.
SHIRRIFF, K. (2009). Biblioteca IRremote. Disponvel em: <http://arcfn.com>.
Acesso em: 11 de janeiro de 2014.
SILVA, D. S. (2009), Desenvolvimento e Implementao de um Sistema de
Superviso e Controle Residencial. Disponvel em:
<ftp://ftp.ufrn.br/pub/biblioteca/ext/bdtd/DaniseSS.pdf>. Acesso em 22 de novembro
de 2013.
SIPEX (2002). Datasheet MAX485. Disponvel em:
<https://www.sparkfun.com/datasheets/Components/General/sp3485CN-LTR.pdf>.
Acesso em 25 de maio de 2014.
60
TEIXEIRA, W. (2011). O que DALI? Disponvel em:
<http://www.lumearquitetura.com.br/pdf/ed21/ed_21_Aula.pdf>. Acesso em 20 de
maio de 2014.
TEXAS INSTRUMENTS (1999). Datasheet LM35. Disponvel em:
<http://www.ti.com/lit/ds/symlink/lm35.pdf>. Acesso em 23 de fevereiro de 2014.
THOMAZINI, D. e ALBUQUERQUE, P., Sensores Industriais Fundamentos e
aplicaes, 4. Edio, Editora rica, 2005.
WIZNET (2011). Datasheet W5100. Disponvel em:
<http://www.wiznet.co.kr/UpLoad_Files/ReferenceFiles/W5100_Datasheet_v1.2.4.pdf
>. Acesso em 18 de agosto de 2013.
61
APNDICE A PGINA HOME
<html>
<php>
<?php include("password_protect.php"); ?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.ccs" />
<title>
Início - Automação Residencial
</title>
<style type="text/css">
<!--
#logoApDiv {
position:absolute;
width:900px;
height:175px;
z-index:1;
top: 20px;
left: 50%; /*posio em relao parte esquerda*/
margin-left: -450px;
border:1px;
background-color: #FFFFFF;
//background:url(gradial.png);
}
#menuApDiv {
position:absolute;
width:250px;
height:100%;
z-index:2;
top: 195px;
left: 50%; /*posio em relao parte esquerda */
margin-left: -450px;
border:1px;
background-color: #FFFFFF;
}
#ContApDiv {
position:absolute;
width:650px;
z-index:3;
left: 50%; /*posio em relao parte esquerda */
margin-left: -200px;
top: 195px;
background-color: #FFFFFF;
}
#SiteApDiv {
position:absolute;
width:900px;
62
/* height -> none */
top:195px;
z-index:2;
left: 50%; /*posio em relao parte esquerda */
margin-left: -450px;
}
}
-->
</style>
</head>
<body SCROLL="YES" background="back.jpg" >
<font face="Arial, Helvetica, sans-serif">
<div id="logoApDiv"><a href="/teste/home.php"><img src="logo.jpg" alt="Andre Osti"
/></a>
</div>
<div id="SiteApDiv">
<table border="0px" width="900px" bgcolor="#FFFFFF"><!-- Tabela de layout -->
<tr>
<!-- Menu -->
<td width="200px" valign="top">
<table width="200" class="bordasimples">
<tr>
<td align="left" bgcolor="#FFFFFF" class="navlink"><a href="/teste/home.php">
Residência</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente1.php">Ambiente
1</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente2.php">Ambiente
2</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente3.php">Ambiente
3</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente4.php">Ambiente
4</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class\="navlink"><a href="ambiente5.php">Ambiente
5</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente6.php">Ambiente
6</a></td>
</tr>
63
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente7.php">Ambiente
7</a></td>
</tr>
</table>
</td>
<!-- conteudo -->
<td width="700px">
<table>
<tr>
<td>
</td>
</tr>
</table><h1>Residência</h1>
<font size='2'><h2>Escolha o Ambiente em que deseja supervisionar:</h2></font>
<center>
<table>
<img src='planta.png' width='600' >
</table>
</center>
</td>
</tr>
</table>
<hr />
<center><font face="Arial, Helvetica, sans-serif">2014 - 2014 © <b>André
Osti</b></font></center>
</div>
</font>
</body>
</html>
64
APNDICE B PGINA AMBIENTE 1
<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<php>
<?php include("password_protect.php"); ?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.ccs" />
<title>
Início - Automação Residencial
</title>
<style type="text/css">
<!--
#logoApDiv {
position:absolute;
width:900px;
height:175px;
z-index:1;
top: 20px;
left: 50%; /*posio em relao parte esquerda*/
margin-left: -450px;
border:1px;
background-color: #FFFFFF;
//background:url(gradial.png);
}
#menuApDiv {
position:absolute;
width:250px;
height:100%;
z-index:2;
top: 195px;
left: 50%; /*posio em relao parte esquerda */
margin-left: -450px;
border:1px;
background-color: #FFFFFF;
}
#ContApDiv {
position:absolute;
width:650px;
z-index:3;
left: 50%; /*posio em relao parte esquerda */
margin-left: -200px;
top: 195px;
background-color: #FFFFFF;
}
#SiteApDiv {
position:absolute;
65
width:900px;
/* height -> none */
top:195px;
z-index:2;
left: 50%; /*posio em relao parte esquerda */
margin-left: -450px;
}
}
-->
</style>
</head>
<body SCROLL="YES" background="back.jpg" >
<font face="Arial, Helvetica, sans-serif">
<div id="logoApDiv"><a href="/teste/home.php"><img src="logo.jpg" alt="Andre Osti"
/></a>
</div>
<div id="SiteApDiv">
<table border="0px" width="900px" bgcolor="#FFFFFF"><!-- Tabela de layout -->
<tr>
<!-- Menu -->
<td width="200px" valign="top">
<table width="200" class="bordasimples">
<tr>
<td align="left" bgcolor="#FFFFFF" class="navlink"><a href="/teste/home.php">
Residência</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente1.php">Ambiente
1</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente2.php">Ambiente
2</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente3.php">Ambiente
3</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente4.php">Ambiente
4</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente5.php">Ambiente
5</a></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente6.php">Ambiente
6</a></td>
66
</tr>
<tr>
<td bgcolor="#FFFFFF" class="navlink"><a href="ambiente7.php">Ambiente
7</a></td>
</tr>
</table>
</td>
<!-- conteudo -->
<td width="700px">
<table>
<tr>
<td>
</td>
</tr>
</table><h2>Ambiente 1 - HALL</h2>
<center>
<img src='ambiente1.png'>
<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Se conecta ao IP e Porta:
socket_connect($sock,"192.168.0.99", 8080);
// Executa a ao correspondente ao boto apertado.
if(isset($_POST['bits'])) {
$msg = $_POST['bits'];
if(isset($_POST['Lampada1'])){ if($msg[0]=='1') { $msg[0]='0'; } else { $msg[0]='1'; }}
if(isset($_POST['Lampada2'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}
if(isset($_POST['Lampada3'])){ if($msg[2]=='1') { $msg[2]='0'; } else { $msg[2]='1'; }}
socket_write($sock,$msg,strlen($msg));
}
socket_write($sock,'A#',2); //Requisita o status do sistema.
// Espera e l o status e define a cor dos botes de acordo.
$status = socket_read($sock,6);
if (($status[4]=='L')&&($status[5]=='#')&&($status[3]=='1')) {
if ($status[0]=='0') $img1 = 'lamp_off.png';
else $img1 = 'lamp_on.png';
if ($status[1]=='0') $img2 = 'lamp_off.png';
else $img2 = 'lamp_on.png';
if ($status[2]=='0') $img3 = 'lamp_off.png';
else $img3 = 'lamp_on.png';
echo "<form method =\"post\" action=\"ambiente1.php\">";
echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
echo "<img src='$img1'>";
echo "<img src='$img2'>";
echo "<img src='$img3'></br>";
echo "<button style=\"margin-right:1px;width:90;font: bold 12px Arial\" type =
\"Submit\" Name = \"Lampada1\">Lâmpada 1</button>";
echo "<button style=\"margin-right:1px;width:90;font: bold 12px Arial\" type =
\"Submit\" Name = \"Lampada2\">Lâmpada 2</button>";
echo "<button style=\"margin-right:1px;width:90;font: bold 12px Arial\" type =
\"Submit\" Name = \"Lampada3\">Lâmpada 3</button>";
67
//Requisita o status de temperatura.
socket_write($sock,'T#',2);
$temp = socket_read($sock,2);
echo "</br>Temperatura: ";
echo $temp;
echo "C";
}
// Caso ele no receba o status corretamente, avisa erro.
else { echo "Falha ao receber status da casa."; }
socket_close($sock);
?>
</td>
</tr>
</table>
<hr />
<center><font face="Arial, Helvetica, sans-serif">2014 - 2014 © <b>André
Osti</b></font></center>
</div>
</font>
</body>
</html>
68
APNDICE C PROGRAMAO CENTRAL
//portas 4,10,11,12,13 nao podem ser usadas por causa da ethernet
#include <DHT.h> //biblioteca sensor de umidade
#define DHTPIN 2 // pino data na entrada digital 2
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
#include <SPI.h>
#include <Ethernet.h>
#include <VirtualWire.h>
//Configuraes do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,99 }; // ip que o arduino assumir
byte gateway[] = { 192,168,0,1}; // ip do roteador
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(8080); // Cria o servidor na porta 8080
// String que representa o estado dos dispositivos de cada ambiente
char Luz1[7] = "0001L#";
char Luz2[7] = "0002L#";
char Luz3[7] = "0003L#";
char Luz4[7] = "0004L#";
char Luz5[7] = "0005L#";
char Luz6[7] = "0006L#";
char Luz7[7] = "0007L#";
// String onde guardada as msgs recebidas
char msg[7] = "0000L#";
void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
dht.begin();
vw_set_tx_pin(9); // Define o pino do transmissor,o 9
vw_set_rx_pin(8); // Define o pino receptor,o 8
vw_set_ptt_pin(7);
vw_setup(2000); // Bits per sec
}
69
void comando1() //comando de envio para os mdulos
{
char *msg = "010"; //mensagem que ser enviada
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando2()
{
char *msg = "011";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando3()
{
char *msg = "012";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando4()
{
char *msg = "013";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando5()
{
char *msg = "014";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando6()
{
char *msg = "015";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando7()
{
char *msg = "020";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando8()
70
{
char *msg = "021";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando9()
{
char *msg = "022";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando10()
{
char *msg = "023";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando11()
{
char *msg = "024";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando12()
{
char *msg = "025";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando13()
{
char *msg = "030";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando14()
{
char *msg = "031";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando15()
{
71
char *msg = "032";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando16()
{
char *msg = "033";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando17()
{
char *msg = "034";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando18()
{
char *msg = "035";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando19()
{
char *msg = "040";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando20()
{
char *msg = "041";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando21()
{
char *msg = "042";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando22()
{
char *msg = "043";
72
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando23()
{
char *msg = "044";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando24()
{
char *msg = "045";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando25()
{
char *msg = "050";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando26()
{
char *msg = "051";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando27()
{
char *msg = "052";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando28()
{
char *msg = "053";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando29()
{
char *msg = "054";
vw_send((uint8_t *)msg, strlen(msg));
73
vw_wait_tx(); // Wait until the whole message is gone
}
void comando30()
{
char *msg = "055";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando31()
{
char *msg = "060";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando32()
{
char *msg = "061";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando33()
{
char *msg = "062";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando34()
{
char *msg = "063";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando35()
{
char *msg = "064";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando36()
{
char *msg = "065";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
74
}
void comando37()
{
char *msg = "070";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando38()
{
char *msg = "071";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando39()
{
char *msg = "072";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando40()
{
char *msg = "073";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando41()
{
char *msg = "074";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void comando42()
{
char *msg = "075";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
}
void loop()
{
EthernetClient client = server.available(); //se houver conexo ethernet
if (client)
75
{
// guarda o caracter na string 'msg'
msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5];
msg[5]=msg[6];
msg[6] = client.read();
if (msg[6]=='#')
{
if (msg[5]=='A') client.write(Luz1); //se for solicitado envia estado do
ambiente
if (msg[5]=='B') client.write(Luz2);
if (msg[5]=='C') client.write(Luz3);
if (msg[5]=='D') client.write(Luz4);
if (msg[5]=='E') client.write(Luz5);
if (msg[5]=='F') client.write(Luz6);
if (msg[5]=='G') client.write(Luz7);
if (msg[5]=='U') //se for solicitado a umidade envia ela
{
float u = dht.readHumidity();
client.print(u,2);
}
if (msg[5]=='T') //se for solicitado a temperatura envia ela
{
float t = dht.readTemperature();
client.print(t,2);
}
if (msg[5]=='L') //se for solicitado o acendimento
{
if (msg[4]=='1')
{
// Caso L#, ele copia os bytes anteriores p/ a
// string 'Luz' e cada byte representa um
// dispositivo, onde '1'=ON e '0'=OFF
Luz1[0]=msg[1];
Luz1[1]=msg[2];
Luz1[2]=msg[3];
if (Luz1[0]=='1') comando1(); else comando2();
if (Luz1[1]=='1') comando3(); else comando4();
if (Luz1[2]=='1') comando5(); else comando6();
}
76
if (msg[4]=='2')
{
Luz2[0]=msg[1];
Luz2[1]=msg[2];
Luz2[2]=msg[3];
if (Luz2[0]=='1') comando7(); else comando8();
if (Luz2[1]=='1') comando9(); else comando10();
if (Luz2[2]=='1') comando11(); else comando12();
}
if (msg[4]=='3')
{
Luz3[0]=msg[1];
Luz3[1]=msg[2];
Luz3[2]=msg[3];
if (Luz3[0]=='1') comando13(); else comando14();
if (Luz3[1]=='1') comando15(); else comando16();
if (Luz3[2]=='1') comando17(); else comando18();
}
if (msg[4]=='4')
{
Luz4[0]=msg[1];
Luz4[1]=msg[2];
Luz4[2]=msg[3];
if (Luz4[0]=='1') comando19(); else comando20();
if (Luz4[1]=='1') comando21(); else comando22();
if (Luz4[2]=='1') comando23(); else comando24();
}
if (msg[4]=='5')
{
Luz5[0]=msg[1];
Luz5[1]=msg[2];
Luz5[2]=msg[3];
if (Luz5[0]=='1') comando25(); else comando26();
if (Luz5[1]=='1') comando27(); else comando28();
if (Luz5[2]=='1') comando29(); else comando30();
}
if (msg[4]=='6')
{
77
Luz6[0]=msg[1];
Luz6[1]=msg[2];
Luz6[2]=msg[3];
if (Luz6[0]=='1') comando31(); else comando32();
if (Luz6[1]=='1') comando33(); else comando34();
if (Luz6[2]=='1') comando35(); else comando36();
}
if (msg[4]=='7')
{
Luz7[0]=msg[1];
Luz7[1]=msg[2];
Luz7[2]=msg[3];
if (Luz7[0]=='1') comando37(); else comando38();
if (Luz7[1]=='1') comando39(); else comando40();
if (Luz7[2]=='1') comando41(); else comando42();
}
}
}
}
}
78
APNDICE D PROGRAMAO MDULO 1
#include <VirtualWire.h>
int estado1 = 0; //estado da sada
int estado2 = 0;
int estado3 = 0;
void setup()
{
Serial.begin(9600);
Serial.println("setup");
pinMode (A0, OUTPUT);
pinMode (A1, OUTPUT);
pinMode (A2, OUTPUT);
pinMode (3, OUTPUT);
vw_set_rx_pin (8); // Define o pino do receptor
vw_set_tx_pin(9); // Define o pino do transmissor
vw_setup(2000); // Bits per sec
vw_rx_start();
}
void loop()
{
digitalWrite(3,HIGH);
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Se receber a mensagem analisa ela
{
if((buf[0] == '0') && (buf[1] == '1')&&(buf[2] == '0'))
{
digitalWrite(A0,1); //conforme a mensagem muda o estado da sada
char *msg = "1001L#"; //envia mensagem para a central
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if((buf[0] == '0')&&(buf[1] == '1')&&(buf[2] == '1'))
{
digitalWrite(A0,0);
char *msg = "0001L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if((buf[0] == '0') && (buf[1] == '1')&&(buf[2] == '2'))
{
digitalWrite(A1,1);
char *msg = "0101L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
79
}
if((buf[0] == '0')&&(buf[1] == '1')&&(buf[2] == '3'))
{
digitalWrite(A1,0);
char *msg = "0001L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if((buf[0] == '0') && (buf[1] == '1')&&(buf[2] == '4'))
{
digitalWrite(A2,1);
char *msg = "0011L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if((buf[0] == '0')&&(buf[1] == '1')&&(buf[2] == '5'))
{
digitalWrite(A2,0);
char *msg = "0001L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
delay(50);
}
char c = Serial.read(); //leitura do bluetooth
Serial.println(c);
if(c == 'A') //se receber via bluetooth o caractere
{
digitalWrite(A0,1); //muda a sada
char *msg = "1001L#"; //envia para a central essa mudana
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'a')
{
digitalWrite(A0,0);
char *msg = "0001L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'B')
{
digitalWrite(A1,1);
char *msg = "0101L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
80
if(c == 'b')
{
digitalWrite(A1,0);
char *msg = "0001L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'C')
{
digitalWrite(A2,1);
char *msg = "0011L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'c')
{
digitalWrite(A2,0);
char *msg = "0001L#";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'D')
{
char *msg = "020";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'd')
{
char *msg = "021";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'E')
{
char *msg = "022";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'e')
{
char *msg = "023";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'F')
{
char *msg = "024";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
81
}
if(c == 'f')
{
char *msg = "025";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'G')
{
char *msg = "030";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'g')
{
char *msg = "031";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'H')
{
char *msg = "032";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'h')
{
char *msg = "033";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'I')
{
char *msg = "034";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
if(c == 'i')
{
char *msg = "035";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
}
delay(50);
}
82
APNDICE E PROGRAMAO MDULO 2
#include <VirtualWire.h>
#include <IRremote.h> //biblioteca do IR
int RECV_PIN = 7; // Declarando o pino do controle remoto
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // iniciando o receptor de infravermelho
Serial.println("setup");
pinMode (A0, OUTPUT); //define os pinos de sada
pinMode (A1, OUTPUT);
pinMode (A2, OUTPUT);
vw_setup(2000); // Bits per sec
vw_set_rx_pin (8); // define o pino receptor para RF433 e RS485
vw_set_tx_pin (9); //define o pino transmissor para RF433 e RS485
vw_rx_start();
}
void loop()
{
if (irrecv.decode(&results)) // se receber dados pelo IR
{
Serial.println(results.value, DEC);
if (results.value == 1 || results.value == 2049) //executa acionamento conforme
dado recebido
{
digitalWrite(A0,HIGH);
}
if (results.value == 2 || results.value == 2050)
{
digitalWrite(A0,LOW);
}
if (results.value == 3 || results.value == 2051)
{
digitalWrite(A1,HIGH);
}
83
if (results.value == 4 || results.value == 2052)
{
digitalWrite(A1,LOW);
}
if (results.value == 5 || results.value == 2053)
{
digitalWrite(A2,HIGH);
}
if (results.value == 6 || results.value == 2054)
{
digitalWrite(A2,LOW);
}
irrecv.resume();
}
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) //se receber mensagem da central ou dos
mdulos via RF433 ou RS485
{
int i;
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
Serial.print(char(buf[i]));
}
Serial.println("");
if((buf[0] == '0') && (buf[1] == '2')&&(buf[2] == '0'))
{
digitalWrite(A0,1);
}
if((buf[0] == '0')&&(buf[1] == '2')&&(buf[2] == '1'))
{
digitalWrite(A0,0);
}
if((buf[0] == '0') && (buf[1] == '2')&&(buf[2] == '2'))
{
digitalWrite(A1,1);
}
if((buf[0] == '0')&&(buf[1] == '2')&&(buf[2] == '3'))
{
digitalWrite(A1,0);
84
}
if((buf[0] == '0') && (buf[1] == '2')&&(buf[2] == '4'))
{
digitalWrite(A2,1);
}
if((buf[0] == '0')&&(buf[1] == '2')&&(buf[2] == '5'))
{
digitalWrite(A2,0);
}
delay(50);
}
}
85
APNDICE F ESQUEMTICO MDULO 1
FIGURA 32 ESQUEMTICO MDULO ATMEGA328
FONTE: O AUTOR (2014).
86
APNDICE G PCB MDULOS
87
APNDICE H APLICATIVO ANDROID
Para realizao do aplicativo a ser usado em um dispositivo com sistema
operacional android foi utilizado o software MIT App Inventor 2. Este software
encontrado no site: http://appinventor.mit.edu/explore/. No necessrio baixa-lo para
o computador, ele feito inteiramente no site. Ao iniciar um projeto necessrio
colocar todos os elementos que se deseja utilizar na tela, por exemplo os botes que
iro acionar as lmpadas, as imagens, e os labels, que seriam campos de texto.
Na Figura 33 possvel visualizar o ambiente de trabalho e a tela com os
elementos citados anteriormente.
FIGURA 33 AMBIENTE DE TRABALHO PARA O APLICATIVO
FONTE: O AUTOR (2014).
A partir do momento que se monta os elementos que se deseja ter na tela
necessrio programar o que cada elemento ir realizar. Apertando no boto superior
direito Blocks possvel mudar para a pgina de programao. A programao
feita por linguagem de blocos com as funes da linguagem de programao em C.
88
FIGURA 34 PROGRAMAO PARA O APLICATIVO
FONTE: O AUTOR (2014).
Para realizar a conexo com o dispositivo bluetooth do mdulo do ambiente
necessrio saber qual o endereo deste dispositivo, este endereo obtido ao parear
o dispositivo com o celular, no caso a seguir 00:12:11:27:31:07, com isso se
programa para realizar a conexo conforme Figura 35.
FIGURA 35 PROGRAMAO CONEXO BLUETOOTH
FONTE: O AUTOR (2014).
89
O objetivo deste aplicativo enviar comandos de acendimento e desligamento
das lmpadas do sistema. Ao pressionar um boto enviado via bluetooth o comando
para acender A e ao pressionar novamente enviado o comando para desligar a.
O microcontrolador j est programado para receber esses comandos.
necessrio criar uma varivel de estado do boto (global estado = true),
essa varivel responsvel por mudar alternadamente os comandos de acionamento
ao pressionar o boto.
FIGURA 36 PROGRAMAO ACIONAMENTO POR BOTES
FONTE: O AUTOR (2014).
Ao final da programao do aplicativo necessrio criar o pacote para
instalao no celular ou tablet. Para isso necessrio acessar o menu Build e depois
apertar em App (save .apk to my computer).
90
ANEXO A DHT22
Power supply: 3.3-5.5V DC;
Output signal digital signal via 1-wire bus;
Sensing element Polymer humidity capacitor;
Operating range humidity 0-100%RH; temperature -40~80Celsius;
Accuracy humidity +-2%RH(Max +-5%RH); temperature +-0.5Celsius;
Resolution or sensitivity humidity 0.1%RH; temperature 0.1Celsius;
Repeatability humidity +-1%RH; temperature +-0.2Celsius;
Humidity hysteresis +-0.3%RH;
Long-term Stability +-0.5%RH/year;
Interchangeability fully interchangeable;
91
ANEXO B MAX485
O chip MAX485 um transceptor de baixa potncia e taxa de variao limitada
usado para comunicao RS-485. Ele trabalha em uma nica fonte de alimentao de
+5 V e a corrente nominal de 300 mA. Adotando comunicao half-duplex para
implementar a funo de converso de nvel TTL em nvel RS-485, pode atingir uma
taxa de transmisso mxima de 2.5Mbps. O MAX485 transceptor se desempenha
entre 120A e 500A o fornecimento nas condies descarregados ou totalmente
carregado quando o driver est desativado. O condutor limitado para a corrente de
curto-circuito e as sadas de driver pode ser colocado em um estado de alta
impedncia atravs do circuito de desligamento trmico. A entrada do receptor tem
um recurso prova de falhas que garante a lgica de sada alta, se a entrada for de
circuito aberto. Alm disso, ele tem um bom desempenho anti-interferncias
(ITEADSTUDIO,2010).
92
ANEXO C nrf24l01
Caracteresticas do nRF24L01
a) Radio
Worldwide 2.4GHz ISM band operation
126 RF channels
Common RX and TX pins
GFSK modulation
1 and 2Mbps air data rate
1MHz non-overlapping channel spacing at 1Mbps
2MHz non-overlapping channel spacing at 2Mbps
b) Transmiter
Programmable output power: 0, -6, -12 or -18dBm
11.3mA at 0dBm output power
c) Receiver
Integrated channel filters
12.3mA at 2Mbps
-82dBm sensitivity at 2Mbps
-85dBm sensitivity at 1Mbps
Programmable LNA gain
d) RF Synthesizer
Fully integrated synthesizer
No external loop filer, VCO varactor diode or resonator
Accepts low cost 60ppm 16MHz crystal
e) Enhanced ShockBurst
1 to 32 bytes dynamic payload length
Automatic packet handling
Auto packet transaction handling
6 data pipe MultiCeiver for 1:6 star networks
f) Power Managment
Integrated voltage regulator
1.9 to 3.6V supply range
Idle modes with fast start-up times for advanced power management
22uA Standby-I mode, 900nA power down mode
Max 1.5ms start-up from power down mode
Max 130us start-up from standby-I mod