Upload
tranxuyen
View
214
Download
1
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
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; } } } } }