38
TRABALHO DE CONCLUSÃO DO CURSO TÉCNICO EM ELETRÔNICA Casa Automatizada Bruna Souza dos Santos Gabriel de Souza Rodrigo Vitor Limas Professor (es) Orientador(es): Larry Aparecido Aniceto São Caetano do Sul / SP 2013 Centro Estadual de Educação Tecnológica Paula Souza GOVERNO DO ESTADO DE SÃO PAULO Etec “JORGE STREET”

Etec “JORGE STREET” TRABALHO DE CONCLUSÃO DO … 38ª EXCUTE/Eletrônica... · garagem, acionar o ar condicionado e qualquer equipamento elétrico existente em uma residência,

Embed Size (px)

Citation preview

TRABALHO DE CONCLUSÃO DO CURSO TÉCNICO EM ELETRÔNIC A

Casa Automatizada

Bruna Souza dos Santos

Gabriel de Souza

Rodrigo Vitor Limas

Professor (es) Orientador(es):

Larry Aparecido Aniceto

São Caetano do Sul / SP

2013

Centro Estadual de Educação Tecnológica Paula Souza

GOVERNO DO ESTADO DE SÃO PAULO

Etec “JORGE STREET”

Casa Automatizada

Trabalho de Conclusão de

Curso apresentado como pré-requisito

para obtenção do Diploma de Técnico

em Eletrônica.

São Caetano do Sul / SP

2013

Dedicamos este projeto a todas as

pessoas que estiveram conosco desde o inicio

do curso. Dedicamos a Etec Jorge Street por

todo apoio e recursos que disponibilizaram para

nosso aprendizado, aos nossos familiares que

sempre incentivaram nossa busca por novos

conhecimentos.

AGRADECIMENTOS

Agradecemos primeiramente a Deus pela a oportunidade de fazer esse curso

técnico, também aos nossos país pelo suporte na realização do trabalho, em

qualquer grau de envolvimento, agradecemos aos nossos professores pelo

conhecimento passado a nós, aos colegas de sala e ao Centro Paula Souza por

essa oportunidade de expressar nossos conhecimentos adquiridos durante o curso.

RESUMO

O projeto tem como função objetivo principal, automatizar uma residência, de

tal forma que seja possível ligar ou desligar uma lâmpada, abrir o portão da

garagem, acionar o ar condicionado e qualquer equipamento elétrico existente em

uma residência, através de um comando enviado por qualquer dispositivo móvel com

acesso a internet. Automação residencial tende a dispor mais segurança e conforto

para seus usuários, além de prover acessibilidade para portadores de necessidades

especiais que, muitas vezes, dependem de ajuda para executar algumas tarefas.

Este projeto apresenta um protótipo de automação residencial de baixo custo,

composto por hardware de controle, software para gerenciar todo o processo, com

acesso à internet e suporte a dispositivos móveis, além de uma maquete para

demonstração.

Palavras-chave: Automação residencial, Acessibilidade, Internet.

ABSTRACT

The project has as primary objective, automate a house, in the way of making

possible turn a lamp on or off, open the garage gate, turn on the air conditioner and

any other electric equipment that can be in a house, through a command send by

any mobile dispositive with internet access. Residential automation tends to offer

make theirs users more secure and comfortable, furthermore provides accessibility to

those that have special needs that, often, depends of help to execute some tasks.

This project presents a low cost prototype of residential automation, software to

manage all the process, with internet access and support to mobile dispositive,

further a model to demonstration.

Keywords: Home automation, accessibility, internet.

LISTA DE FIGURAS

Figura 1 - Arduino Mega .................................................................................. 15

Figura 2 - Modulo Ethernet Shield ................................................................... 16

Figura 3 - Motor de Passo 28BYJ-48 .............................................................. 16

Figura 4 - Placa Interface de potência com relé .............................................. 17

Figura 5 - Placa de relé sendo confeccionado por CNC ................................. 18

Figura 6 - Esquema elétrico da interface de potência de relé ......................... 18

Figura 7 - Página de login ............................................................................... 19

Figura 8 - Site de controle ............................................................................... 20

Figura 9 – Maquete ......................................................................................... 21

APÊNDICES

APÊNDICE 1: CÓDIGO FONTE DA PÁGINA DE LOGIN .................................................................... 25

APÊNDICE 2: CÓDIGO DE CONEXÃO COM O BANCO DE DADOS ................................................ 26

APÊNDICE 3: CÓDIGO DE INTERFACE COM O USUÁRIO .............................................................. 29

APÊNDICE 4: CÓDIGO DE CONTROLE (ARDUINO) ......................................................................... 34

Sumário

1 INTRODUÇÃO ......................................................................................................................................8

2 OBJETIVOS ....................................... ...................................................................................................8

2.1 Objetivos Gerais .......................................................................................... 9

2.2 Objetivos Específicos .................................................................................. 9

3 JUSTIFICATIVA ................................... .................................................................................................9

4 METODOLOGIA ..................................... ........................................................................................... 10

4 FUNDAMENTAÇÃO TEÓRICA ........................... .............................................................................. 10

4.1 Automação Residencial ............................................................................. 10

4.2 Linguagens de Programação Utilizadas .................................................... 11

4.2.1 HTML ....................................................................................................................... 11

4.2.2 PHP ......................................................................................................................... 11

4.2.3 C/C++ ...................................................................................................................... 12

4.3 Servidores e Banco de Dados ................................................................... 12

4.3.1 WampServer ........................................................................................................... 12

4.3.2 Apache .................................................................................................................... 12

4.3.3 MySQL ..................................................................................................................... 12

5 PLANEJAMENTO DO PROJETO ........................ ............................................................................ 13

5.1 Previsão de Custo ..................................................................................... 13

6 DESENVOLVIMENTO DO PROJETO ...................... ........................................................................ 14

6.1 Hardware ................................................................................................... 14

6.1.1 Arduino Mega .......................................................................................................... 14

6.1.2 Arduino Ethernet Shield .......................................................................................... 15

6.1.3 Motor de Passo ....................................................................................................... 16

6.1.4 Interface de Potência com Relés ............................................................................ 16

6.2 Software .................................................................................................... 19

6.2.1 Ferramentas Utilizadas .......................................................................... 19

6.2.2 Código Fonte ........................................................................................................... 19

6.2.2.1 Site (PHP + HTML) ........................................................................................................ 19

6.2.2.2 Código de controle (C/C++) ........................................................................................... 20

7 RESULTADOS OBTIDOS ....................................................................................................... 21

8 CONCLUSÃO ....................................... ............................................................................................. 22

9 REFERÊNCIAS BIBLIOGRÁFICAS....................... ........................................................................... 23

8

1 INTRODUÇÃO

Automação é a aplicação de técnicas através da computação, eletrônica ou

mecânica, para diminuir o uso de mão-de-obra em qualquer processo. Uma tarefa

realizada por máquinas tende a serem mais precisas, rápidas, confiáveis do que

fossem realizadas por um humano. Nos últimos anos as pessoas estão cada vez

mais dependentes da tecnologia, e a cada dia buscam um maior conforto em suas

vidas com a utilização da tecnologia.

Automação já é realidade há muitos anos no mundo todo, principalmente nas

indústrias, aonde sua inclusão veio principalmente para diminuir os custos, além de

diminuir as tarefas de alto risco dos funcionários, de forma geral a automação surgiu

da necessidade de maximizar a produção com menor consumo de energia, menor

emissão de resíduos e melhores condições de segurança, sendo ela humana ou

material. Podemos definir a automação como um conjunto de técnicas

computadorizadas ou mecânicas que podem ser aplicadas em um processo

objetivando torna-lo mais eficiente.

Automação pode ser dividida em dois pontos principais: Automação industrial

e Automação Comercial. O ponto que abordaremos nesse projeto é a automação

residencial, que é uma vertente da automação comercial.

Automação residencial vem ganhando um espaço maior no mercado

tecnológico, pois tentar garantir um conforto, segurança e economia maior para seus

adeptos. Hoje a automação residencial tem uma gama extensa de alternativa,

possibilitando interagir vários ambientes em uma única central, incluindo o controle

de temperatura, segurança, luminosidade, som, jardinagem, entre outros.

2 OBJETIVOS

Neste capitulo, vamos explanar todos os objetivos do projeto.

9

2.1 Objetivos Gerais

Este projeto tem como objetivo principal desenvolver um sistema de

automação residencial de baixo custo, utilizando a internet para realizar a interação

do usuário com sua residência, podendo controlar a iluminação, abertura de portão e

controle de equipamentos motorizados.

Este projeto tende a mostra que é possível automatizar residências, com

baixos investimentos, permitindo um número maior de beneficiários com essa

tecnologia, além de facilitar a vida de pessoas portadoras de necessidades

especiais.

2.2 Objetivos Específicos

• Projetar e implementar software de gerenciamento;

• Desenvolver o esquema elétrico do hardware de acionamento;

• Construir circuito impresso para o controle de acionamento dos dispositivos e

• Construir uma maquete para demonstração.

3 Justificativa

Automação residencial, por ser uma tecnologia relativamente nova no Brasil, e

com isso seu custo de implantação torna-se elevada, restringindo o sua abrangência

para a população de maior poder aquisitivo.

Entretanto, buscamos montar um protótipo de baixo custo, visando atingir

todas as camadas da sociedade, além disso, nosso projeto busca facilitar a vida de

portadores de necessidades especiais, dando um maior conforto, segurança e

agilidade em suas tarefas domesticas.

Analisando o mercado de automação e a condição socioeconômica brasileira,

este trabalho busca apresentar uma solução simples, barata e de fácil acesso para a

população, tendo demostrar que a automação já é uma realidade e que é plausível e

viável automatizar uma residência.

10

4 Metodologia

Este projeto foi desenvolvido por pesquisas bibliográficas baseadas em

consultas a sites da internet e artigos. Com base nessas pesquisas, o projeto foi

desenvolvendo a parte teórica, além de sua aplicação prática.

Na primeira etapa do projeto, foi discutido entre os membros do grupo, como

seria realizado todo o processo de automação de uma residência. A partir desse

momento foi decidido que a residência seria controlada por qualquer dispositivo

ethernet.

Na segundo etapa foi desenvolvido um software de controle, utilizando à

plataforma de desenvolvimento Arduino, que pode alterar o comportamento de todos

os periféricos da residência, através de um aparelho com acesso a internet.

Na terceira etapa foi desenvolvido um software de interação com usuário, no

qual pode enviar comandos para o software controlador.

Na terceira e ultima etapa foi desenvolvido placas de circuito impresso,

utilizadas para interligar o circuito elétrico da residência com o circuito controlador.

4 FUNDAMENTAÇÃO TEÓRICA

Nesse capitulo serão abordados os conceitos que foram fundamentais para o

desenvolvimento do projeto “Casa Automatizada”.

4.1 Automação Residencial

Automação residencial é uma tecnologia relativamente nova, podemos

caracteriza-la como a junção de uma casa com a robótica, com isso cria-se uma

tecnologia capaz de controlar uma residência de forma geral através de um único

equipamento.

Com a diminuição dos custos de equipamentos eletrônicos, como

computadores, componentes eletrônicos e a difusão da internet, tornou-se cada vez

mais viável a utilização da automação no ambiente industrial e com isso foi apenas

questão de tempo para a automação invadir as vidas das pessoas. Hoje é possível

11

ver a utilização da automação em equipamentos essenciais para uma residência,

como: máquina de lavar, geladeira, fogão, entre outros.

A automação residencial deu um grande passo para sua evolução, a partir do

momento em que o desenvolvimento de software tornou-se comum, a evolução de

microprocessadores, sensores, relés, abriram novas possibilidades de utilização dos

mesmos, além de diminuir seu custo de manutenção.

A automação é um recurso utilizado para controle de um ou mais aparelhos

eletrônicos por meio de uma central computadorizada, automação em uma

residência não é diferente, ela utiliza do mesmo conceito da automação industrial,

mais com uma diferença, prioriza o bem-estar, conforto, segurança, economia de

agua, luz, telefone e controle do sistema se segurança para as residências.

4.2 Linguagens de Programação Utilizadas

Linguagem de programação é um método para passar instruções ao

computador. Permite ao programador especificar precisamente quais dados o

computador vai atuar, armazenar ou transmitir.

4.2.1 HTML

HTML (Hyper Text Markup Language) ou Linguagem de Marcação de

Hipertexto é uma linguagem de programação utilizada para produzir páginas para a

internet, juntamento com o HTTP (Protocolo de Transferência de Hipertexto) e URL (

Localizador Uniforme de Recursos ), são os principais protocolos da WEB.

4.2.2 PHP

O PHP (Hypertext Prepocessor) é uma linguagem, de script Open Source,

para desenvolvimento de aplicações WEB, mais utilizada hoje em dia. O PHP é uma

ferramenta muito forte para desenvolvimento Web, ele pode gerar imagens, suporte

12

para aplicações em flash, suporta vários padrões de texto, como XML e XHTML, e

suporta uma ampla variedade de banco de dados.

4.2.3 C/C++

A linguagem de programação C/C++ é uma linguagem amplamente utilizada

para criar programas de computador, ela oferece para seus usuários o máximo de

controle e eficácia no programa.

Com a linguagem C é possível escrever programas para diversas plataformas,

desde microcontroladores até sistemas mais avançados como o sistema

operacional. A linguagem C++ foi uma evolução da C, onde tornou-se uma linguem

orientada para objetos.

4.3 Servidores e Banco de Dados

4.3.1 WampServer

Wampserver é uma plataforma para o sistema operacional Windows, voltada

para aplicações web que necessitam de um banco de dados Mysql e linguagem

PHP.

4.3.2 Apache

Apache é um servidor WEB com código fonte aberto é o servidor mais

utilizado ultimamente, tem um excelente desempenho, segurança e compatibilidade

com diversas plataformas.

O apache é o servidor que processa as solicitações do usuário, para acessar

uma determinada pagina na internet.

4.3.3 MySQL

13

É um sistema de gerenciamento de banco de dados, que utiliza a linguagem

SQL(Structured Query Language – Linguagem de consulta Estruturada). Ele tornou-

se o mais utilizado bando de dados open source do mundo. O MySQL funciona em

diversas plataformas como, Linux, Windows, Netware e tem acesso a diversas

linguagens, C, C++, Java, PHP, Python, entre outros.

5 PLANEJAMENTO DO PROJETO

Para o desenvolvimento do projeto foram escolhidos a plataforma de

programação Arduino, por ser uma ferramenta de desempenho surpreendente e de

fácil utilização, a linguagem PHP por ter uma sintaxe simples e possibilitar tarefas

complexas de implementação de objetos.

Para a criação da interface de interação com o usuário foi utilizado o HTML

em conjunto com PHP, que forneceram uma grande gama de possibilidades de

criação da interface. O software desenvolvido para interagir com o usuário tem uma

função fundamental, alterar o estado dos periféricos da residência.

O MySQL foi escolhido como servidor de banco de dados por ser uma

linguagem nativa do PHP.

Os periféricos citados são basicamente, lâmpadas internas e motores

encontrados na piscina e portão da garagem.

Na figura abaixo, podemos analisar o fluxograma de funcionamento do

projeto.

Fluxograma.

5.1 Previsão de Custo

Um dos objetivos no projeto, Casa automatizada, é construir um protótipo

para controlar uma residência, com baixo custo para os consumidores, com isso

utilizamos ferramentas open-sourcer, que é possível comercializar e baratear um

projeto.

Na tabela abaixo, pode-se verificar o custo aproximado do projeto.

14

Tabela de custo.

6 DESENVOLVIMENTO DO PROJETO

Durante toda a fase de implementação, foram realizados inúmeras analises e

testes do circuito, visando identificar inconformidades no projeto. À medida que era

encontrado inconformidades, eram corrigidas e testadas novamente até realizarmos

uma analise de forma geral em todo software e circuito.

6.1 Hardware

O hardware foi desenvolvido para interagir com o circuito, ligando-desligando

equipamentos eletroeletrônico.

6.1.1 Arduino Mega

O Arduino mega é uma placa de microcontrolador baseado no processador

ATmega1280, possui 54 (cinquenta e quatro) entradas/saídas digitais, 16

(dezesseis) entradas analógicas .

O ATmega1280 possui 128KB de memória flash para o armazenamento do

código, 8KB de SRAM e 4KB de EEPROM.

Microcontrolador ATmega1280

Tensão de Funcionamento 5v

Tensão de Entrada 7-12V

Tensão de Entrada (limites) 6-20V

Pinos Digitais de I / O 54(15 oferecem saídas PWM)

Entrada Analógica de Pinos 16

DC Currente per I / O Pin 40mA

Corrente DC para Pin 3,3V 50mA

15

Memória Flash 128KB

SRAM 8 KB

EEPROM 4 KB

Velocidade de Clock 16Mhz

Figura 1 - Arduino Mega

6.1.2 Arduino Ethernet Shield

A placa Ethernet Shield do arduino é uma plataforma que interliga a placa

Arduino Mega com a internet, através de uma porta RJ45 e um cabo de rede. Essa

placa é baseada na W5100 Wiznet (chip ethernet), esse chips possibilita a

comunicação TCP e UDP do arduino com redes de internet.

O Ethetnet Shield funciona com tensão de 5V, fornecida pela placa arduino,

possui uma velocidade de conexão de 10/100Mbps.

16

Figura 2 - Modulo Ethernet Shield

6.1.3 Motor de Passo

Motor de passo é um dispositivo que converte os pulsos eletrônicos em

movimentos mecânicos. O controle do eixo desse tipo de motor é feito por pulsos

elétricos aplicados na entrada do motor, esses pulsos pode controlar a direção do

eixo, mudando a frequência dos pulsos, pode-se controlar a velocidade. Uma das

grandes vantagens do motor de passo é a sua precisão.

Para a confecção do projeto, utilizamos um motor de passo, modelo 28BYJ-

48, para simular um portão automático de uma residência. Com um comando

executado pelo usuário, o motor de passo vai abrir ou fechar o portão de entrada de

carros.

Figura 3 - Motor de Passo 28BYJ-48

6.1.4 Interface de Potência com Relés

17

A interface de potência com relés é a responsável por ligar e desligar

equipamentos eletroeletrônicos.Para o funcionamento dessa placa foram utilizados

os seguintes componentes:

• Resistores, para limitar a passagem de corrente;

• Relés, que tem sua função semelhante a um interruptor;

• Diodo, para retificar o circuito;

• Leds para sinalizar o funcionamento do relé.

Na imagem abaixo, podemos visualizar a placa relé montada:

Figura 4 - Placa Interface de potência com relé

A placa de relé foi produzida, primeiramente fazendo um desenho do circuito

impresso e analisando o circuito, observando se estava de acordo com o projeto,

posteriormente o desenho foi enviado para um programa de cad, onde foi gerado o

18

código G, que foi direcionado para uma impressora CNC realizar a confecção das

placas.

Figura 5 - Placa de relé sendo confeccionado por CN C

Na imagem abaixo, pode-se observar o esquema elétrico da interface de

potência com relé. A placa foi confeccionada com tensão de alimentação do relé em

12V e a tensão de controle com no mínimo 2V e máximo 5V.

Figura 6 - Esquema elétrico da interface de potênci a de relé

19

6.2 Software

Software é toda a parte lógica no nosso projeto, contendo conjuntos de

instruções para realizar alguma tarefa pré-definida.

6.2.1 Ferramentas Utilizadas

A ferramenta escolhida para o desenvolvimento desse projeto foi o ambiente

de desenvolvimento integrado (IDE – Integrated Developtment Environment) Arduino

1.5 Beta, e o Notepad++++. Os principais motivos para escolha desses ambientes

de desenvolvimento foram à facilidade e agilidade com que eles compilam os

códigos digitados.

6.2.2 Código Fonte

6.2.2.1 Site (PHP + HTML)

A interface que integra o usuário ao sistema controlador da casa, foi criador

por códigos PHP em conjunto com o HTML. Para uma maior segurança do site de

cada usuário, foi criado um sistema de login, onde o usuário tem uma conta pré-

definida para acessar seu sistema.

Figura 7 - Página de login

O código da página de login pode-se ser observada no apêndice 1.

20

A comunicação com o banco de dados foi feito em PHP, onde recebe os

dados digitados pelo usuário na tela de login e confere com o banco se as

informações digitadas estão corretas. No apêndice 2 pode-se ser observado o

código de conexão com o banco de dados e a verificação da existência do usuário.

O site que realiza a comunicação entre o usuário e o sistema foi configurado

com botões que correspondem o ligar ou desligar de um determinado equipamento

que deseja ser controlado, na imagem abaixo, pode-se observar o site de controle,

sendo acessado por um dispositivo móvel.

Figura 8 - Site de controle

No apêndice 3 consta o código da página de interface com o usuário.

A estrutura de comunicação com o banco de dados e a verificação de login

dos usuários foram utilizados os códigos do site, PHP-login.net, que disponibiliza os

scripts de login por páginas criadas em PHP.

6.2.2.2 Código de controle (C/C++)

21

O script que controla todos os equipamentos eletroeletrônicos foi desenvolvido

na linguagem C++, esse script pode ser considerado o núcleo do projeto, pois ele

que recebe o comando enviado pelo usuário, através do site e decodifica qual

equipamento o usuário pretende controlar, assim ele envia um sinal para a interface

de potência para acionar ou não os equipamentos.

O código de controle está descrito no apêndice 4.

7 RESULTADOS OBTIDOS

Após a criação dos códigos fonte e a montagem das placas de potencia,

montamos uma maquete, representando uma casa para demostrar todo o

funcionamento do circuito.

Figura 9 – Maquete

22

O resultado de obtido com a montagem do projeto foram os esperados,

primeiramente montamos um servidor web localmente, simulando o acesso a

internet, com isso para acessarmos a página de controle, tivemos apenas que digitar

o endereço do servidor local que hospedava toda a estrutura do site.

Conseguimos simular com sucesso o funcionamento de uma casa

automatizada dentro da maquete montada para o projeto, todas as lâmpadas foram

acionadas pelo celular, o motor de passo foi controlado para abrir e fechar o portão

da garagem, além de controlar a fonte da cascata instalada na piscina.

8 CONCLUSÃO

Esse projeto teve como objetivo, construir uma solução de casa automatizada

de baixo custo, visando à população com baixo poder aquisitivo, além de ajudar

pessoas portadoras de necessidades especiais, com automação planejamos

aumentar o conforto dos usuários e segurança das suas residências.

Analisando o mercado de automação residencial, concluímos que nosso

projeto conseguiu atingir o objetivo estipulado, automação de baixo custo, com o uso

de softwares livres e hardware de arquitetura aberta, conseguimos reduzir

bruscamente o valor de uma automação residencial. O custo do projeto, contando

com o hardware e o software ficou em torno de R$ 400,00 sem contar com possíveis

modificações na casa do usuário na hora de instalar todo o sistema.

O projeto proposto nesse trabalho obteve êxito em apresentar uma solução

prática e barata na área de automação residencial, isso foi alcançado através de

pesquisas de mercado e de novas tecnologias que poderiam baratear o custo de

uma automação, a utilização de software e hardware livres foram de suma

importância para alcançar esse resultado.

23

9 Referências Bibliográficas

Arduino.cc. (s.d.). Arduino Mega. Acesso em Agosto de 2013, disponível em

Arduino: http://arduino.cc/en/Main/arduinoBoardMega

Brain, M. (01 de Abriel de 2000). Coomo funciona a programação em C. Acesso em

Setembro de 2013, disponível em HowStuffWorks:

http://informatica.hsw.uol.com.br/programacao-em-c.htm

Engenharia é. (s.d.). Microcontrolador Arduino. Acesso em Agosto de 2013,

disponível em Engenharia é:

http://www.engenhariae.com.br/colunas/microcontrolador-arduino/

FLIPFLOP. (18 de Fevereiro de 2013). Controlando um motor de passo 5V com

Arduino. Acesso em Outubro de 2013, disponível em FlipFlop projetos com arduino:

http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-

arduino/

Flisolpa. (s.d.). O que é Open Source. Acesso em Outubro de 2013, disponível em

Flisol:

http://www.flisolpa.com.br/index.php?option=com_content&view=article&id=33:o-

que-%C3%A9-open-source&catid=18&Itemid=324&lang=pt-br

PHP-Login. (s.d.). PHP & MySQL Login Script. Acesso em Outubro de 2013,

disponível em PHP-Login.net: http://www.php-login.net/

Projeto 39. (s.d.). O que è Arduino? Acesso em Agosto de 2013, disponível em

Projeto 39: http://projeto39.wordpress.com/o-arduino/

Software Livre Brasil. (s.d.). Open Source - Código Aberto. Acesso em Outubro de

2013, disponível em Software Livre Brasil: http://softwarelivre.org/open-source-

codigo-aberto

24

Apêndice A

25

Apêndice 1: Código fonte da página de login

<!-- errors & messages ---> <?php // show negative messages if ($login->errors) { foreach ($login->errors as $error) { echo $error; } } // show positive messages if ($login->messages) { foreach ($login->messages as $message) { echo $message; } } ?> <!-- errors & messages ---> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Página de Login</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <!-- login form box --> <form method="post" action="index.php" name="loginform"> <label for="login_input_username">Usuário:</label> <input id="login_input_username" class="login_input" type="text" name="user_name" required /> <label for="login_input_password">Senha:</label> <input id="login_input_password" class="login_input" type="password" name="user_password" autocomplete="off" required /> <input type="submit" name="login" value="Log in" /> </form> <!-- login form box --> <!-- <a href="register.php">Registre-se</a> --> </body> </html>

26

Apêndice 2: Código de conexão com o banco de dados

<?php //lida com o usuário login/logout/sessão class Login { // Variável do Objeto "$db_connection" Conexão com o banco de dados private $db_connection = null; // String "$user_name" Com o Nome de usuário private $user_name = ""; // String "$user_email" email do usuário private $user_email = ""; // String "$user_password_hash" do hash da senha private $user_password_hash = ""; // Variavel "$registration_successful" Se o usuário foi registrado com sucesso private $user_is_logged_in = false; // Matriz "$errors" Mensagens de erro public $errors = array(); // Matriz "$messages" Coleta as mensagens public $messages = array(); /** Essa função é iniciada automaticamente, quando um objeto dessa classe é criada, você sabe, quando vc faz "$login = new Login();" */ public function __construct() { // cria/lê a sessão session_start(); // verifica as possiveis ações de login: // 1. logout (acontece quando o usuário clica no botão de logout) // 2. login via senha (acontece quando o usuário acessa um página, depois de ter logado, através da página de login) // Verifica se o usuário fez logout if (isset($_GET["logout"])) { $this->doLogout(); } // verifica se o usuário tem uma sessão ativa

elseif (!empty($_SESSION['user_name']) && ($_SESSION['user_logged_in'] == 1)) {

$this->loginWithSessionData(); }

27

// Verifica se o usuário fez login elseif (isset($_POST["login"])) { $this->loginWithPostData(); } } //Faz login private function loginWithSessionData() { $this->user_is_logged_in = true; } //Entra com os dados de login private function loginWithPostData() { // verifica se o campo "nome de usuário" e "senha" está vazio if (!empty($_POST['user_name']) && !empty($_POST['user_password'])) { // cria uma conexão com o banco de dados, usando as configurações do arquivo "config/db.php "(carregadas na página index.php) $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); // verifica se existe erros de conexão com o banco de dados. if (!$this->db_connection->connect_errno) { $this->user_name = $this->db_connection->real_escape_string($_POST['user_name']); //Consulta o banco e obtem todas as informações do usuário $checklogin = $this->db_connection->query("SELECT user_name, user_email, user_password_hash FROM users WHERE user_name = '" . $this->user_name . "';"); // se esse usuário existir if ($checklogin->num_rows == 1) { // Obtêm os resultados, como um objeto $result_row = $checklogin->fetch_object(); //Verifica se a senha fornecida é igual ao hash armazenado no banco if (password_verify($_POST['user_password'], $result_row->user_password_hash)) { // escreve os dados do usuário em uma sessão do PHP $_SESSION['user_name'] = $result_row->user_name; $_SESSION['user_email'] = $result_row->user_email; $_SESSION['user_logged_in'] = 1; // Muda o status de login para true $this->user_is_logged_in = true; } else { $this->errors[] = "Senha errada, tente novamente."; } } else { $this->errors[] = "Esse usuário não existe."; } } else { $this->errors[] = "Problemas na conexão com o banco de dados."; } } elseif (empty($_POST['user_name'])) { $this->errors[] = "Nome de usuário não foi preenchido"; } elseif (empty($_POST['user_password'])) {

28

$this->errors[] = "Senha não foi preenchido"; } } // realiza o logout public function doLogout() { $_SESSION = array(); session_destroy(); $this->user_is_logged_in = false; $this->messages[] = "Você foi desconectado."; } /** * simply return the current state of the user's login * @return boolean user's login status */ public function isUserLoggedIn() { return $this->user_is_logged_in; } } ?>

29

Apêndice 3: Código de Interface com o usuário

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Página</title>

<style type="text/css">

body{background-color: #eeeeee}

label{ color: #606060;

font-weight:bold;

}

.bt{ background-color:#c00000;

color: #ffffff;

width: 100px;

height: 25px;

border: 0px;

cursoe: pointer;

}

input:hover{border:2px solid #0000ff}

</style>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

<div>

<b><i><center><label>Trabalho de Conclusão de

Curso</label></center></b></i></br>

<b><i><center><label>Casa Automatizada</label></center></b></i></br>

<form method ="post" action="?php echo $PHP_SELF; ?">

<input type="hidden" name="bits" value="0000000">

<label>Sala</label></br>

<button style="width:70; background-color: $cor4 ;font: bold 14px

Arial" type = "Submit" Name = "Salaon" class="bt">Liga</button>

<button style="width:70; background-color: $cor4 ;font: bold 14px

Arial" type = "Submit" Name = "Salaof" class="bt">Desliga</button>

</br></br>

<label>Cozinha</label></br>

30

<button style="width:70; background-color: $cor2 ;font: bold 14px

Arial" type = "Submit" Name = "Cozinhaon" class="bt">Liga</button>

<button style="width:70; background-color: $cor1 ;font: bold 14px

Arial" type = "Submit" Name = "Cozinhaof" class="bt">Desliga</button>

</br></br></br>

<label>Banheiro</label></br>

<button style="width:70; background-color: $cor2 ;font: bold 14px

Arial" type = "Submit" Name = "Banheiroon" class="bt">Liga</button>

<button style="width:70; background-color: $cor1 ;font: bold 14px

Arial" type = "Submit" Name = "Banheiroof" class="bt">Desliga</button>

</br></br></br>

<label>Quarto 1</label></br>

<button style="width:70; background-color: $cor2 ;font: bold 14px

Arial" type = "Submit" Name = "Quarto1on" class="bt">Liga</button>

<button style="width:70; background-color: $cor1 ;font: bold 14px

Arial" type = "Submit" Name = "Quarto1of" class="bt">Desliga</button>

</br></br></br>

<label>Quarto 2</label></br>

<button style="width:70; background-color: $cor3 ;font: bold 14px

Arial" type = "Submit" Name = "Quarto2on" class="bt">Liga</button>

<button style="width:70; background-color: $cor1 ;font: bold 14px

Arial" type = "Submit" Name = "Quarto2of" class="bt">Desliga</button>

</br></br>

<label>Suite</label></br>

<button style="width:70; background-color: $cor3 ;font: bold 14px

Arial" type = "Submit" Name = "Quarto3on" class="bt">Liga</button>

<button style="width:70; background-color: $cor1 ;font: bold 14px

Arial" type = "Submit" Name = "Quarto3of" class="bt">Desliga</button>

</br></br>

<label>Suite</label></br>

<button style="width:70; background-color: $cor3 ;font: bold 14px

Arial" type = "Submit" Name = "Suiteon" class="bt">Liga</button>

<button style="width:70; background-color: $cor1 ;font: bold 14px

Arial" type = "Submit" Name = "Suiteof" class="bt">Desliga</button>

31

</br></br>

<label>Fora</label></br>

<button style="width:70; background-color: $cor1 ;font: bold 14px

Arial" type = "Submit" Name = "Foraon" class="bt">Liga</button>

<button style="width:70; background-color: $cor1 ;font: bold 14px

Arial" type = "Submit" Name = "Foraof" class="bt">Desliga</button>

</br></br>

<label>Portão Carro</label></br>

<button style="width:90;font: bold 14px Arial" type = "Submit" Name =

"Grandeon" class="bt">Abre</button>

<button style="width:90;font: bold 14px Arial" type = "Submit" Name =

"Grandeof" class="bt">Fecha</button>

</br></br>

<label>Piscina</label></br>

<button style="width:90;font: bold 14px Arial" type = "Submit" Name =

"Piscinaon" class="bt">Liga</button>

<button style="width:90;font: bold 14px Arial" type = "Submit" Name =

"Piscinaof" class="bt">Desliga</button>

</br></br>

</form>

<?php

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// Se conecta ao IP e Porta:

socket_connect($sock,"192.168.1.22", 8081);

// Executa a ação correspondente ao botão apertado.

if(isset($_POST['bits'])){

$msg = $_POST['bits'];

// if(isset($_POST['Quarto2'])){ if($msg[2]=='1') { $msg[2]='0'; }

else { $msg[2]='1'; }}

32

//liga e desliga luz da sala

if(isset($_POST['Salaon' ])){ $msg = '1SL#';}

if(isset($_POST['Salaof' ])){ $msg = '0SL#';}

//Liga e desliga luz da cozinha

if(isset($_POST['Cozinhaon'])) { $msg = '1CL#';}

if(isset($_POST['Cozinhaof'])) { $msg = '0CL#';}

//Liga e desliga luz do banheiro

if(isset($_POST['Banheiroon'])) { $msg = '1BL#';}

if(isset($_POST['Banheiroof'])) { $msg = '0BL#';}

//Liga e desliga luz do primeiro quarto

if(isset($_POST['Quarto1on'])) { $msg = '1QL#';}

if(isset($_POST['Quarto1of'])) { $msg = '0QL#';}

//Liga e desliga luz do segundo quarto

if(isset($_POST['Quarto2on'])) { $msg = '1WL#';}

if(isset($_POST['Quarto2of'])) { $msg = '0WL#';}

//Liga e desliga luz do terceiro quarto

if(isset($_POST['Quarto3on'])) { $msg = '1YL#';}

if(isset($_POST['Quarto3of'])) { $msg = '0YL#';}

//Liga e desliga luz da suite

if(isset($_POST['Suiteon'])) { $msg = '1TL#';}

if(isset($_POST['Suiteof'])) { $msg = '0TL#';}

//liga e desliga luz fora

if(isset($_POST['Foraon'])) { $msg = '1FL#';}

if(isset($_POST['Foraof'])) { $msg = '0FL#';}

// Abre e fecha portão do carro

if(isset($_POST['Grandeon' ])){ $msg = 'AG#'; }

if(isset($_POST['Grandeof' ])){ $msg = 'HG#'; }

// Liga a Piscina

33

if(isset($_POST['Piscinaon' ])){ $msg = '1PL#'; }

if(isset($_POST['Piscinaof' ])){ $msg = '0PL#'; }

socket_write($sock,$msg,strlen($msg));

}

socket_close($sock);

?>

</div>

<div>

<a href="index.php?logout">Logout</a>

</div>

</body>

</html>

34

Apêndice 4: Código de controle (Arduino)

#include <SPI.h> #include <Ethernet.h> #include <Stepper.h> //Configurações do Ethernet Shield byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192,168,1, 22 }; // ip que o arduino assumirá byte gateway[] = { 192,168,1, 1 }; // ip do roteador byte subnet[] = { 255, 255, 255, 0 }; EthernetServer server(8081); // Cria o servidor na porta 8081 // String que representa o estado dos dispositivos char Luz[7] = "0000L#"; // String onde é guardada as msgs recebidas char msg[7] = "0000L#"; const int VoltaCompleta = 2037; // numero de passos por volta completa Stepper Motor(VoltaCompleta,8,10,11,9); //pinos que o motor esta conectado int velocidade = 5; // determina a velocidade inicial para 5 RPM int travamento = 1; int passos = 430; // passos para abrir e fechar o portão void setup() { Ethernet.begin(mac, ip, gateway, subnet); server.begin(); pinMode(A0,OUTPUT); pinMode(A1,OUTPUT); pinMode(A2,OUTPUT); pinMode(A3,OUTPUT); pinMode(A4,OUTPUT); pinMode(A5,OUTPUT); pinMode(A7,OUTPUT); pinMode(A8,OUTPUT); pinMode(A9,OUTPUT); Motor.setSpeed(velocidade); Serial.begin(9600); delay(1000); Serial.println("connecting..."); } void loop() { // recebe os dados do cliente EthernetClient client = server.available(); // SE receber um caracter... if (client == true) { // 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]; // guarda na variavel msg[6], o que recebeu do php msg[6] = client.read();

35

if (msg[6]=='#') { switch(msg[5]) { case 'R': // Se receber o comando 'R#' envia de volta o status dos // dispositivos. (Que é a string 'Luz') client.write(Luz); break; // Caso G#, ele abre ou fecha o portão do carro case 'G': if (travamento != 1){ if (msg[4] == 'H'){ Motor.step(-passos); travamento = 1; } } if (travamento != 0){ if (msg[4] == 'A'){ Motor.step(passos); travamento = 0; } } break; //caso L#, verifica as lampadas case 'L': switch(msg[4]) { // caso S#, liga ou desliga lampada da sala case 'S': if (msg[3] == '1') digitalWrite(A0,HIGH); if (msg[3] == '0') digitalWrite(A0,LOW); break; // caso C#, liga ou desliga lampada Cozinha case 'C': if (msg[3] == '1') digitalWrite(A1,HIGH); if (msg[3] == '0') digitalWrite(A1,LOW); break; // caso B#, liga ou desliga lampada Banheiro case 'B': if (msg[3] == '1') digitalWrite(A2,HIGH); if (msg[3] == '0') digitalWrite(A2,LOW); break; // caso Q#, liga ou desliga lampada Quarto 1 case 'Q': if (msg[3] == '1') digitalWrite(A3,HIGH); if (msg[3] == '0') digitalWrite(A3,LOW);

36

break; // caso W#, liga ou desliga lampada Quarto 2 case 'W': if (msg[3] == '1') digitalWrite(A4,HIGH); if (msg[3] == '0') digitalWrite(A4,LOW); break; // caso Y#, liga ou desliga lampada Quarto 3 case 'Y': if (msg[3] == '1') digitalWrite(A5,HIGH); if (msg[3] == '0') digitalWrite(A5,LOW); break; // caso T#, Liga ou desliga lampada suite case 'T': if (msg[3] == '1') digitalWrite(A7,HIGH); if (msg[3] == '0') digitalWrite(A7,LOW); break; // caso F#, liga ou desliga lampada quintal case 'F': if (msg[3] == '1') digitalWrite(A8,HIGH); if (msg[3] == '0') digitalWrite(A8,LOW); break; // caso P#, liga ou desliga piscina case 'P': if (msg[3] == '1') digitalWrite(A9,HIGH); if (msg[3] == '0') digitalWrite(A9,LOW); break; break; } } } } }