Preparação para o Projeto

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

DOMÓTICA COM ANDROID

A domótica permite o controle de diversas funções da casa, quer seja de forma automática ou através de um comando remoto, da Internet ou do seu celular. Este projeto visa encontrar ideias para controle e monitoramento residencial através de celular e placa microcontrolada. Através de programas desenvolvidos para uso em celular baseado em sistema operacional Android e também para microcontrolador da família Atmega (Arduino) com o objetivo de controlar diretamente cargas de corrente alternada como lâmpadas, motores, etc. Na programação do celular será utilizado o programa gratuito App Inventor do MIT .

Nosso projeto integrador foi motivado pela Monografia sob o título “DroidLar - Automação residencial através de um celular Android”, defendida por Michel Vinicius de Melo Euzebio, apresentada e aprovada em agosto de 2011 a Coordenação do Curso Superior de Tecnologia em Sistemas de Telecomunicações do Instituto Federal de Santa Catarina para a obtenção do diploma de Tecnólogo em Sistemas de Telecomunicações. http://wiki.sj.ifsc.edu.br/images/b/b7/TCC_MichelEusebioMello.pdf

Os sistemas de automação residencial oferecem muitas opções, muitos possibilitam a utilização de aplicativos em smartfones. O DroidLar consiste num sistema de automação residencial onde é possível controlar dispositivos de uma residência utilizando como interface de controle celulares Android.

A arquitetura do DroidLar foi construída de forma centralizada, ou seja, um servidor central gerencia toda a rede. Este é capaz de se comunicar tanto com as interfaces de controle quanto com os dispositivos controladores. O DroidLar é dividido em três partes: Cliente Android; Servidor de Automação Residencial (SAR); Arduino.

O cliente Android atua como uma interface de controle no sistema e se comunica pela rede IP, os kits Arduino funcionam como controladores de dispositivos e utilizam ZigBee (IEEE802.15.4) para a comunicação, já o SAR é o servidor central, ele se comunica tanto pela rede IP quanto por ZigBee e tem como principal função transferir as mensagens entre essas duas redes.

O SAR deve ficar continuamente conectado na rede IP, fazendo a verificação de pedidos e atualização do status dos dispositivos. O aplicativo no telefone poderia conectar com a WebDB para verificar o status dos dispositivos e solicitar uma nova configuração para os ambientes.

O objetivo desse trabalho é dimensionar o projeto em questão para turmas da disciplina de PJI1 executarem, simplificando e omitindo detalhes muito complexos para os alunos da primeira fase de engenharia. Uma das propostas para simplificar o projeto é usar inicialmente um módulo bluetooth para a comunicação, migrando posteriormente para a comunicação via rede IP.

ESPECIFICAÇÕES DO SISTEMA

DESCRIÇÃO DO PRODUTO

Este documento descreve um sistema de automação para residência controlado por smartphones ou tablets com sistema operacional Android. Usaremos esse sistema como base para a especificação e construção de nosso projeto integrador nesse semestre.


AppServidor.png
Figura 1: Sistema de automação.


O sistema oferece comunicação entre usuário e os eletroeletrônicos de sua residência através de uma conexão sem fio. Essa conexão entre o celular ou tablet do usuário e o servidor de automação residencial, possibilita controle e verificação de status de eletroeletrônicos como iluminação, irrigadores de jardim, aparelhos de climatização, portões eletrônicos, sensores, entre outros.

ESPECIFICAÇÕES DO PRODUTO

Três componentes com funções específicas constituem o sistema: o Aplicativo para controle do sistema usando celular ou tablet; o Servidor de automação residencial; e os Controladores de Eletroeletrônicos.


AppServerEDs.png
Figura 2: Componentes do sistema de automação.


O Aplicativo atua como interface de controle Homem-Máquina e se comunica com o Servidor usando tecnologia sem fio. O Servidor gerência a rede fazendo a ponte entre o APP e os controladores de eletroeletrônicos.

Os controladores de eletroeletrônicos tem a função de acender lâmpadas, fechar persianas, ligar aparelhos de ar-condicionado etc.

O Aplicativo possui interfaces com botões que permitem procurar e conectar o Servidor de Automação, escolher um ambiente da casa onde se localiza o eletroeletrônico que se quer controlar, escolher o eletroeletrônico e enviar comandos para execução de tarefas ou leitura do status desses eletroeletrônicos e sensores.

Os controladores permitem controlar eletroeletrônicos em ambientes internos e externos da residência.

Nos ambientes internos o sistema permite por exemplo ascender ou apagar as luzes dos ambientes, regular a intensidade da iluminação, ligar/desligar e regular a temperatura dos condicionadores de ar, abrir ou fechar persianas, regular o volume do som, verificar a temperatura de um ambiente e ligar ou desligar aparelhos eletrônicos.

Nos ambientes externos é possível por exemplo ascender ou apagar as luzes do jardim e piscina, ligar ou desligar motores, regular ou verificar a temperatura da água de piscinas, abrir e fechar portões.

A figura abaixo mostra os componentes do sistema. É possível visualizar as ligações entre cada componente do sistema, os ambientes e eletroeletrônicos controláveis por cada controlador.


AMBIENTES.png
Figura 3: Diagrama do sistema.

PROJETO

Introdução

Esta seção apresenta as linhas gerais de um projeto para um sistema de automação com Android, Arduino e módulos XBee. Esse sistema será a base para incorporar ao projeto integrador solicitado pelo "cliente".

Visão Geral do Sistema

A estrutura proposta para o sistema especificado é mostrada abaixo.


SISTEMAPI.png

O sistema é subdividido em três subsistemas:

• APP para controle do sistema de automação

• Servidor de Automação

• Controladores de Eletroeletrônicos


A arquitetura do sistema foi definida de forma centralizada. O Servidor gerencia toda a rede, sendo capaz de comunicar-se tanto com o APP quanto com os Controladores de Eletroeletrônicos.

APP para controle do sistema de automação

O App permite a comunicação e o controle do sistema. Ele atua como interface Homem-Máquina, enviando mensagens ao Servidor de Automação. Essas mensagens são enviadas como Strings e contém campos que definem parâmetros da mensagem. A comunicação entre o APP e o Servidor é feita usando tecnologia Bluetooth.

Servidor de Automação

O Servidor do sistema, pode comunicar-se nas duas redes (Bluetooth e ZigBee) e faz a ponte entre o APP e os dispositivos finais, recebendo e encaminhando as mensagens nas duas redes.

Controladores de Eletroeletrônicos

Os controladores de eletroeletrônicos tem a função de executar os comandos enviados pelo APP, tais como acender lâmpadas, fechar persianas, ligar aparelhos de ar-condicionado. Os Controladores recebem as mensagens pela rede sem fio e executam os comandos determinados pelo usuário, acionando os eletroeletrônicos. Esses Controladores também enviam mensagens de confirmação de recebimento de mensagem e status dos eletroeletrônicos para o Coordenador.


Servidor de Automação

Para desempenhar a função de Servidor da rede foi escolhido o microcontrolador Arduino.

A plataforma Arduino é uma ferramenta simples e fácil de usar mesmo para leigos em programacão e eletrônica. Essas características tornaram ela uma plataforma muito utilizada para o desenvolvimento de prototipos. Por se tratar de uma plataforma aberta de hardware e software, qualquer um pode montar protótipos com kits Arduino.

O kit Arduino é composto por um um microcontrolador que contém um código a ser executado, além de portas de entrada e saída digitais, portas para comunicação serial, portas de entrada analógicas e de saída PWM (Pulse-Width Modulation), onde é possível controlar o nível médio de tensão da saída e com isso controlar velocidade de motores, intensidade de iluminação entre outras aplicações.

Nessas portas de entrada e saída é possível conectar botões, sensores, LEDs ou quaisquer outros dispositivos elétricos, tornando inúmeras as possibilidades de uso para essa plataforma.


ArduinoUno.jpg


Na topologia escolhida o Coordenador desempenha função fundamental na rede, ou seja, tem todo o controle da rede, assumindo um papel central e fazendo a comunicação direta com o APP e todos os dispositivos finais. Toda a informação transmitida tem que passar pelo Coordenador, por esse motivo seu código deve processar as mensagens das duas redes, Bluetooth e Zigbee.


A expansão das funcionalidades da plataforma Arduino é possível através da conexão de diversos shields e módulos de comunicação encontrados no mercado.

Para a conexão com o dispositivo Andróid, por exemplo, pode ser usado o shield bluetooth HC-06. Similar ao módulo da figura abaixo.


HC06.png


Para a comunicação entre o Servidor e os Controladores Finais foram escolhidos os módulos XBee.

XBee é a marca da Digi International para uma família de módulos de rádio comunicação. Esses rádios operam usando o protocolo ZigBee, utilizado para aplicações que exigem baixas taxas de transmissão de dados e baixo consumo de energia.


Xbee Pro2 g.jpg


O programa para o Servidor é dividido em subsistemas. Cada um desses subsistemas e suas funcionalidades são mostrados na figura abaixo.

SubsitemaServidor.png


As variáveis criadas no código usadas para a extração dos campos da mensagem do APP e manipulação pelos diferentes subsistemas são as seguintes:

get_char - Usada para guardar o primeiro byte recebido na porta bluetooth, ou seja, o caractere de início de mensagem.

disp_xbee - Define o módulo XBee de destino;

APP_command - Define o tipo de comando;

pin_num - Define a porta do microcontrolador;

pin_value - Define o valor da porta.


No início do programa são definidos os tipos de mensagem, e o endereço dos módulos XBee que fazem parte do sistema.

Em seguida é definida a comunicação com os módulos bluetooth e XBee a uma velocidade de 9600bps.

O programa verifica a chegada de mensagens enviadas pelo Aplicativo nas portas onde o módulo bluetooth está conectado, colocando qualquer byte recebido na variável get_char.

Se o caractere recebido na variável get_char for diferente do caractere definido como início de mensagem, o programa retorna e inicia nova leitura na porta bluetooth.

Se esse caractere for igual ao caractere de início de mensagem, é iniciada a recepção dos próximos bytes, os bytes são recebidos campo por campo e colocados nas suas respectivas variáveis.

Se o tipo de mensagem não for válida, não executa nenhuma ação, retornando ao início no final do código.

Se o tipo de mensagem for válida verifica o endereço do módulo XBee de destino, cujo valor foi recebido e guardado na variável disp_xbee. Com o auxílio da biblioteca xbee, é montado uma mensagem padrão Zigbee repassando os dados alocados nas variáveis para os campos do payload.Após a montagem a mensagem é enviada para o Controlador de Eletroeletrônicos.

Após enviada a mensagem para o Controlador, o programa verifica o retorno do Controlador indicando o recebimento da mensagem e execução do comando. Essa mensagem de retorno pode conter valores que devem ser mostrados ao usuário. O programa então extrai o dado do pacote Zigbee, monta e envia um novo pacote de resposta no padrão exigido pelo APP.

Controladores de Eletroeletrônicos

O microcontrolador Arduino também foi escolhido para desempenhar a função de Controlador de Eletroeletrônicos e o módulo Xbee para a comunicação com o Servidor.

O programa do Controlador também é dividido em subsistemas como mostrado abaixo.

SubsitemaControlador.png


No início do programa dos Controladores são definidos os tipos de mensagem, e o endereço do módulo XBee do Servidor de Automação. Também é definida a comunicação com o módulo XBee a uma velocidade de 9600bps e as portas 2 a 13 como saída (output).

Em seguida é feito um looping verificando a chegada de mensagens nos pinos usados para a comunicação com o módulo XBee. Caso seja detectada a chegada de uma mensagem, os campos da mensagem são extraídos com o uso da biblioteca XBee.

Os valores dos pinos enviados do Aplicativo de Automação variam de 1 a 6, assim, uma função identifica o tipo de mensagem e define a porta correta que deve ser comutada ou lida conforme o esquema da figura abaixo.

PortasArduino.png


Como exemplo, se o programa receber na variável APP_command o tipo de mensagem MSG_DIGITALWRITE com valor 10 e na variável pin_num o valor 1, o subsistema de Gerenciamento de comando App executa o comando solicitado no pino digital 2 (primeiro pino digital após pinos 0 e 1, RX e TX). Se o programa receber na variável APP_command o tipo de mensagem MSG_DIGITALWRITE com valor 10 e na variável pin_num o valor 2, o subsistema de Gerenciamento de comando App executa o comando solicitado no pino digital 4 (segundo pino digital após pinos 0 e 1, RX e TX).

De maneira semelhante, a função processa o valor correto dos pinos digitais PWM e dos pinos analógicos.

A figura abaixo relaciona possíveis eletroeletrônicos com as portas do Arduino e respectivos tipos de sinal usados para seu controle.

SimbolosEletros.png


Com o valor correto da porta definido pela função anterior, os comandos são executados conforme os parâmetros recebidos.

Se o controlador receber corretamente a mensagem do servidor e executar os comandos conforme solicitado, é montada e enviada em seguida uma mensagem de retorno para confirmar o recebimento da mensagem ou enviar valores de retorno.

Valor com tamanho igual a 1 byte enviado como decimal. Define tipo de mensagem para que o microcontrolador ligado ao dispositivo final execute um comando de acionamento ou desligamento de um dos seus pinos digitais. Após o envio desse tipo de mensagem é aguardado mensagem de confirmação do tipo 12.

Os pinos reservados para acionamento digital na placa Arduino, ou seja, com valores 0 ou 1 são os pinos:

D2, D4, D7, D8, D12, D13.

MSG_ANALOGWRITE 11 (1 Byte )

Valor com tamanho igual a 1 byte enviado como decimal. Define tipo de mensagem para que o microcontrolador ligado ao dispositivo final execute um acionamento de um dos pinos digitais com PWM. Após o envio desse tipo de mensagem é aguardado mensagem de confirmação do tipo 12.

Os pinos reservados para acionamento digital com PWM, ou seja, com valores que podem variar entre 0 e 255 são os pinos:

D3, D5, D6, D9, D10, D11.

MSG_DIGITALREAD 13 (1 Byte )

Valor com tamanho igual a 1 byte enviado como decimal. Define mensagem de pedido de leitura de uma das portas digitais seguintes:

D2, D4, D7, D8, D12, D13.

Após o envio desse tipo de mensagem é aguardado mensagem de resposta do tipo 15, com o valor solicitado (0 ou 1) num de seus campos.


RSP_LEITURA 15 (1 Byte )

Valor com tamanho igual a 1 byte enviado como decimal. Tipo de mensagem de resposta que define o valor de leitura da porta digital PWM solicitada em mensagens do tipo 13 e 14.

MSG_STATUS 16 (1 Byte )

Valor com tamanho igual a 1 byte enviado como decimal. Define mensagem de pedido de leitura de uma das portas analógicas do microcontrolador. As portas analógicas do microcontrolador que permitem essa leitura são as seguintes:

A0, A1, A2, A3, A4, A5.


Porta

Valor com tamanho igual a 1 byte enviado como decimal. Pode assumir valores de 1 a 6 e indicam a porta onde o eletroeletrônico está ligado no Controlador.

Valor

Valor com tamanho igual a 1 byte enviado como decimal. Assume valores entre 0 e 255 e indicam o estado do eletroeletrônico ou o valor de ajuste.