Inosensor Ferramenta para Gerenciamento de Sensores para Arduino
-
Upload
haissam-yebahi -
Category
Technology
-
view
7.915 -
download
0
description
Transcript of Inosensor Ferramenta para Gerenciamento de Sensores para Arduino
HAISSAM YEBAHI
INOSENSOR: FERRAMENTA PARA GERENCIAMENTO DE
SENSORES PARA ARDUINO
Monografia apresentada no Centro de
Educação do Planalto Norte/CEPLAN, da
Universidade do Estado de Santa
Catarina/UDESC, como requisito parcial
para conclusão do curso de Pós-graduação
Lato Sensu de Especialização em
Desenvolvimento de Software.
Orientador: Alex Luiz de Sousa
SÃO BENTO DO SUL, SC
2013
HAISSAM YEBAHI
INOSENSOR: FERRAMENTA PARA GERENCIAMENTO DE
SENSORES PARA ARDUINO
Monografia apresentada no Centro de Educação do Planalto
Norte/CEPLAN, da Universidade do Estado de Santa Catarina/UDESC,
como requisito parcial para conclusão do curso de Pós-graduação Lato
Sensu de Especialização em Desenvolvimento de Software.
Banca Examinadora
Orientador: __________________________________________
M.Eng. Alex Luiz de Sousa
Universidade do Estado de Santa Catarina
Membro: __________________________________________
Dr. Nilson Ribeiro Modro
Universidade do Estado de Santa Catarina
Membro: __________________________________________
Dr. Mário Ezequiel Augusto
Universidade do Estado de Santa Catarina
São Bento do Sul, SC, 03/10/2013.
Ao meu amor, Thalita Gabriela Costa,
pelo carinho, paciência e apoio durante
a realização deste trabalho.
AGRADECIMENTOS
Agradeço a todos que direta ou indiretamente contribuíram com
a concretização deste trabalho.
Em primeiro lugar agradeço a Deus, por ter me guiado diante de
tantas dúvidas mesmo quando a esperança parecia não ser suficiente.
Ao professor e o orientador Alex Luiz de Sousa, de maneira
especial, por confiar na minha capacidade, pelo apoio e contribuição.
A minha amiga e coordenadora de TI da empresa Tigre S.A.
Palmira Bozzola Serpa por sempre apoiar e permitir a ausência do
trabalho para comparecer às aulas da pós graduação durante os dias de
semana.
Ao meu amigo Bruno Hasse por me apresentar o Arduino e que
serviu de base para este projeto. Ao meu amigo Cleomar Roeper pela
parceria durante as viagens a São Bento do Sul durante os dias de aula e
pela indicação do curso de Pós-Graduação.
As demais pessoas, amigos, professores que apoiaram ou
contribuíram para este projeto com ideias, sugestões e críticas.
RESUMO
YEBAHI, Haissam. InoSensor: Ferramenta para gerenciamento de
sensores para Arduino. 2013. 141 f. Monografia apresentada no
Centro de Educação do Planalto Norte/CEPLAN, da Universidade do
Estado de Santa Catarina/UDESC, como requisito parcial para
conclusão do curso de Pós-graduação Lato Sensu de Especialização em
Desenvolvimento de Software, São Bento do Sul, 2013.
As tecnologias estão cada vez mais inseridas no cotidiano das pessoas.
Com o passar do tempo, novas soluções surgem com o intuito de
facilitar a execução de tarefas manuais e reduzir o tempo gasto em
tarefas rotineiras, que poderiam ser executadas por equipamentos
eletrônicos de maneira mais eficaz e controlada. Independente do
ambiente em que é aplicada, a Automação pode proporcionar o
gerenciamento de recursos de forma bastante eficiente e sustentável em
ambientes residenciais, prediais ou industriais. A Domótica, ou
automação residencial, é composta por dispositivos e sistemas
interconectados através de uma rede de comunicação, responsável por
prover os mecanismos necessários à supervisão e gerenciamento do
ambiente relacionado. A Domótica está se tornando cada vez mais
acessível devido principalmente à grande disseminação e ao baixo custo
oriundo do aumento do número de fabricantes desses dispositivos. O
emprego de soluções integradas gera inúmeras vantagens como redução
de custos, facilidade de instalação e expansão do sistema. Estão
disponíveis no mercado diferentes plataformas para prototipação e
desenvolvimento de sistemas baseados em microcontroladores de forma
bastante simples a custos relativamente baixos. Arduino é uma
plataforma open source que combina diferentes tipos de hardware e
possui uma arquitetura padrão composta por portas analógicas e digitais
e um microcontrolador da família Atmel. O microcontrolador é
responsável pelo gerenciamento de sensores e periféricos conectados ao
dispositivo. Apesar da simplicidade da plataforma, o desenvolvimento
de soluções exige conhecimentos básicos de eletrônica e programação
durante a elaboração do firmware do Arduino. Seguindo esse conceito, a
ferramenta InoSensor foi desenvolvida com o objetivo de facilitar o uso
de sensores e permitir o gerenciamento e monitoramento da plataforma
Arduino remotamente, sem realizar a programação do hardware sempre
que houver a necessidade de modificar as configurações dos sensores
conectados. A solução da ferramenta InoSensor é composta dos
seguintes módulos: (i) Sistema Web para gerenciamento de Arduino,
responsável por cadastrar o Arduino, seus sensores e as ações que
devem ser executadas na ocorrência de eventos configurados; (ii)
Firmware do Arduino, para interpretar as ações e comunicar com o
sistema gerenciador Web; e (iii) Sistema para atualização de firmware
do Arduino, desenvolvido para simplificar as etapas de atualização do
Arduino, sem a necessidade da IDE de desenvolvimento. Entre os
diferenciais existentes na ferramenta InoSensor, em comparação a
soluções similares existentes, destaca-se a capacidade de monitoramento
remoto de sensores através de redes locais ou Internet e de uso da
solução por pessoas sem conhecimento em programação, pois as
configurações dos sensores e atuadores são realizadas pelo servidor
Web. Este projeto teve como objetivo relacionar as diferentes áreas de
conhecimento estudadas no curso de Especialização em
Desenvolvimento de Software. A solução desenvolvida é responsável
por apresentar uma alternativa de baixo custo na área de Domótica e de
fácil utilização, pois seu uso não necessita de conhecimentos em
programação.
Palavras-chave: Arduino. Monitoramento de sensores. Eletrônica.
Domótica.
ABSTRACT
YEBAHI, Haissam. InoSensor: Management Tool for Arduino
Sensors. 2013. 141 f. Monograph (Pós-graduação Lato Sensu de
Especialização em Desenvolvimento de Software) - Universidade do
Estado de Santa Catarina. Programa de Pós-graduação em
Desenvolvimento de Software, São Bento do Sul, 2013.
The technologies are becoming more present on people's lives. Over
time, new solutions come up to facilitate the execution of manual works
and reduce the time spent on routine tasks that could be executed by
electronic devices more effectively and controlled. Regardless the
environment that it is applied, Automation can provide resource
management more efficiently and sustainably in residential and
industrial environments. Home Automation consists in devices and
systems interconnected through a network, which are responsible for
providing a mechanism for monitoring and managing the related
environment. Home Automation is increasing its accessibility due to the
large spread and low cost provided by the growing number of
manufacturers of these devices. The use of integrated solutions
generates numerous advantages such as cost reduction, simple
installation and system expansion. There are available different
platforms for development of systems based on microcontrollers fairly
simple and with a relative low costs. Arduino is an open source platform
that combines different hardware types and a standard architecture made
by analog and digital ports with an Atmel microcontroller. This
microcontroller is responsible for managing sensors and peripherals
connected to the Arduino. Despite the simplicity of the platform, the
development for solutions requires basic knowledge about electronics
and programming. According to this concept, the InoSensor tool was
developed to facilitate the use of sensors and enable easy management
and monitoring of the Arduino platform remotely, with no need to
perform programming of the firmware whenever is needed to modify
sensors settings. The InoSensor solution consists in the following
modules: (i) a Web management system, responsible to register the
Arduino, its sensors and the actions that must be performed when an
event occurs; (ii) Arduino firmware, to interpret the action and
communicate with the Web Management System; and (iii) firmware
update wizard, developed to simplify the steps for updating the Arduino
with no need to use Arduino’s IDE. Among the existing differentials in
InoSensor tool, compared to existing solutions, there is the ability of
remote monitoring sensors across a local network or the Internet, and
the use of the solution by people without programming knowledge
because the sensors and actuators setting are carried out on the Web
server. This Project aimed to relate the different knowledge areas
studied in the course of Software Development Specialization. The
developed solution is responsible for presenting a low-cost and easy to
use alternative in Home Automation area, because no programming
knowledge is required to use this tool.
Keywords: Arduino. Sensors monitoring. Electronic
Automation. Home automation.
LISTA DE ILUSTRAÇÕES
Figura 1 – Interdisciplinaridade na Automação .................................... 26
Figura 2 – Exemplos de sensores para Arduino .................................... 28
Figura 3 – Exemplo de sensor de umidade do solo ............................... 31
Figura 4 – Módulo de comunicação sem fio Xbee ................................ 33
Figura 5 – Transmissor X10 .................................................................. 34
Figura 6 – Exemplo de Receptor ........................................................... 35
Figura 7 – Esquemática de comunicação dos módulos IHC ................. 37
Figura 8 – Primeiro modelo de Arduino projetado ............................... 40
Figura 9 – Modelo atual do Arduino Uno ............................................. 40
Figura 10 – Arduino Mega .................................................................... 41
Figura 11 – Principais componentes do hardware do Arduino ............. 41
Figura 12 – Alimentação de energia do Arduino .................................. 42
Figura 13 – Portas de alimentação de energia para sensores ................. 43
Figura 14 – Identificação de operação na comunicação serial .............. 44
Figura 15 – Microcontrolador Atmel no Arduino ................................. 45
Figura 16 – Estrutura interna de um microcontrolador Atmel .............. 46
Figura 17 – Arquitetura Harvard ........................................................... 47
Figura 18 – Botão para reiniciar o Arduino........................................... 49
Figura 19 – Conectores de expansão ..................................................... 51
Figura 20 – Shields sobrepostos e conectados sobre um Arduino ......... 52
Figura 21 – Exemplo de circuito integrado em um sensor .................... 53
Figura 22 – Portas utilizadas pelo shield ethernet no Arduino Mega.... 56
Figura 23 – Exemplo de sketch carregada na IDE do Arduino ............. 57
Figura 24 – Seleção do modelo do Arduino na IDE ............................. 58
Figura 25 – Framework Noduino .......................................................... 60
Figura 26 – Ferramenta Breakout .......................................................... 61
Figura 27 – Visão macro da representação do sistema .......................... 65
Figura 28 – Sensor Temperatura e Umidade DHT11 ............................ 66
Figura 29 – Fotoresistor ........................................................................ 66
Figura 30 – Sensor de chama ................................................................ 67
Figura 31 – Sensor de gás ..................................................................... 67
Figura 32 – Sensor de vibração ............................................................. 68
Figura 33 – Sensor magnético ............................................................... 68
Figura 34 – Sensor presença PIR .......................................................... 69
Figura 35 – Relé .................................................................................... 69
Figura 36 – LED RGB .......................................................................... 70
Figura 37 – Buzzer ................................................................................ 70
Figura 38 – Arduino conectado à protoboard ....................................... 72
Figura 39 – Modelo de protoboard ....................................................... 72
Figura 40 – Shield ethernet ................................................................... 73
Figura 41 – Diagrama de casos de uso .................................................. 82
Figura 42 – Diagrama de pacotes PHP do framework CodeIgniter ...... 84
Figura 43 – Diagrama de pacotes ExtJS ............................................... 87
Figura 44 – Diagrama de classes Java................................................... 88
Figura 45 – Diagrama entidade relacionamento ................................... 90
Figura 46 – Diagrama de atividades...................................................... 92
Figura 47 – Diagrama MVC da aplicação InoSensor ........................... 96
Figura 48 – Prompt de comando do Arduino Builder ........................... 98
Figura 49 – Estrutura simplificada do arquivo CSV ........................... 100
Figura 50 – Tela inicial da ferramenta InoSensor ............................... 102
Figura 51 – Tela de usuários da ferramenta InoSensor ....................... 103
Figura 52 – Tela de detalhes do sensor ............................................... 104
Figura 53 – Exibição das configuração de portas do Arduino ............ 105
Figura 54 – Lista de Arduinos cadastrados ......................................... 106
Figura 55 – Tela de cadastro de Arduino ............................................ 107
Figura 56 – Lista de sensores e ações do Arduino .............................. 108
Figura 57 – Tela para cadastro de sensor ............................................ 109
Figura 58 – Tela para cadastro de ação de um sensor ......................... 110
Figura 59 – Tela de verificação de configuração ................................ 111
Figura 60 – Tela de notificações ......................................................... 112
Figura 61 – Tela do assistente de configuração .................................. 113
Figura 62 – Memória utilizada pelo Arduino Mega2560 .................... 119
Figura 63 – Memória utilizada pelo Arduino Uno .............................. 120
LISTA DE QUADROS
Quadro 1 – Comparação da especificação dos Arduinos ...................... 51
Quadro 2 – Comparativo com ferramentas similares ............................ 62
Quadro 3 – Tipos de portas utilizadas por cada sensore ....................... 71
Quadro 4 – Componentes eletrônicos do projeto ................................ 116
Quadro 5 – Equipamentos para testes do projeto ................................ 117
LISTA DE ABREVIATURAS E SIGLAS
ADC Analog Digital Convert
AJAX Asynchronous JavaScript And XML
ALU Arithmetic Logic Unit
API Application Programming Interface
CABA Continental Automated Buildings Associations
CEDIA Custom Electronic Design and Installation Association
CI Circuito Integrado
CPU Central Processing Unit
DHCP Dynamic Host Configuration Protocol
EEPROM Electrically Erasable Programmable Read-Only Memory
ER Entidade Relacionamento
FTDI Future Technology Devices International
GLP Gás Liquefeito de Petróleo
GND Ground
GPRS General Packet Radio Service
GSM Global System for Mobile
HTML Hyper Text Markup Language
HTTP Hyper Text Transfer Protocol
I2C Inter Integrated Circuit
IDE Integrated Development Environment
IHC Intelligent Home Control
IP Internet Protocol
JSON JavaScript Object Notation
KB Kilobyte
LCD Liquid Crystal Display
LDR Light Dependent Resistor
LED Light Emitting Diode
MAC Media Access Control
MISO Master In Slave Out
MOSI Master Out Slave In
MVC Model View Controller
OSGI Open Service Gateway Initiative
OSI Open System Interconnection
PC Program Counter
PDT PHP Development Tool
PHP Hypertext Preprocessor
PING Packet Internet Grouper
PIR Passive InfraRed
PWM Pulse Width Modulation
P2P Peer to Peer
RAM Random Access Memory
RGB Red Green Blue
ROM Read Only Memory
RX Receiver
SCK Serial Clock
SMD Semi Metalic Disc
SPI Serial Peripheral Interface
SRAM Static Random Access Memory
TCP Transmission Control Protocol
TX Transmitter
UDP User Datagram Protocol
UML Unified Modeling Language
USART Universal Synchronous Asynchronous Receiver Transmitter
USB Universal Serial Bus
SUMÁRIO
1 INTRODUÇÃO ....................................................................... 18
1.1 FORMULAÇÃO DO PROBLEMA ......................................... 19
1.2 SOLUÇÃO PROPOSTA ........................................................... 20
1.3 OBJETIVOS .......................................................................... 201
1.3.1 Objetivo geral .......................................................................... 21
1.3.2 Objetivos específicos ............................................................... 21
1.4 METODOLOGIA ..................................................................... 22
2 FUNDAMENTAÇÃO TEÓRICA ......................................... 25
2.1 AUTOMAÇÃO ......................................................................... 25
2.1.1 Sensores .................................................................................... 27
2.2 DOMÓTICA ............................................................................. 29
2.3 SOLUÇÕES PARA AUTOMAÇÃO DOMÓTICA ................. 33
2.3.1 X10 ............................................................................................ 33
2.3.3 Sistema Lonworks ................................................................... 38
2.4 ARDUINO ................................................................................ 39
2.4.1 Hardware ................................................................................. 39
2.4.1.1 Fonte de alimentação ................................................................ 41
2.4.1.3 Microcontrolador ...................................................................... 44
2.4.1.4 Reset .......................................................................................... 49
2.4.1.5 Conectores de expansão e portas ............................................... 49
2.4.1.6 Shields ....................................................................................... 52
2.4.1.7 Sensores .................................................................................... 53
2.4.2 Comunicação ........................................................................... 53
2.4.2.1 Redes e Internet ......................................................................... 54
2.4.3 Armazenamento de Dados Externo ....................................... 55
2.4.4 Plataforma de Desenvolvimento ............................................. 56
2.4.4.1 Compilação de código ............................................................... 59
2.4.5 Modelos e variantes ................................................................. 59
2.5 FERRAMENTAS SIMILARES ................................................ 60
2.5.1 Noduino .................................................................................... 60
2.5.2 Breakout ................................................................................... 61
2.5.3 Arduino-Homebot ................................................................... 61
2.6 ANÁLISE COMPARATIVA ENTRE AS FERRAMENTAS . 62
2.7 CONCLUSÕES DO CAPÍTULO ............................................. 63
3 PROJETO ................................................................................ 64
3.1 COMPOSIÇÃO DO SISTEMA ................................................ 64
3.1.1 Sensores Utilizados .................................................................. 65
3.1.2 Plataforma de Prototipação .................................................... 71
3.1.3 Shield ethernet e SD ................................................................. 73
3.2 COMPORTAMENTO DO SISTEMA ...................................... 73
3.2.1 Ações ......................................................................................... 74
3.3 PROTOCOLO DE COMUNICAÇÃO...................................... 75
3.3.1 Monitor de Notificações .......................................................... 75
3.4 MODELAGEM DO SISTEMA ................................................ 76
3.4.1 Requisitos ................................................................................. 76
3.4.1.1 Requisitos Funcionais ............................................................... 76
3.4.1.2 Regras de Negócio .................................................................... 77
3.4.1.3 Requisitos Não-Funcionais........................................................ 79
3.4.2 Casos de Uso ............................................................................ 80
3.4.3 Diagramas de Pacotes e Classes ............................................. 83
3.4.4 Diagrama Entidade-Relacionamento..................................... 89
3.4.5 Diagrama de Atividades ......................................................... 92
3.5 CONCLUSÕES DO CAPÍTULO ............................................. 93
4 IMPLEMENTAÇÃO .............................................................. 94
4.1 PADRÕES DE PROJETO MVC .............................................. 94
4.2 TECNOLOGIAS E FERRAMENTAS ..................................... 94
4.2.1 Servidor Web ........................................................................... 94
4.2.2 ExtJS ........................................................................................ 95
4.2.3 C/C++ ....................................................................................... 96
4.2.4 Java .......................................................................................... 97
4.2.5 Arduino Builder ...................................................................... 97
4.3 BANCO DE DADOS................................................................ 98
4.4 PROTOCOLO DE CONFIGURAÇÕES DO ARDUINO ........ 99
4.5 APRESENTAÇÃO DA FERRAMENTA .............................. 101
4.5.1 Módulo Web InoSensor ........................................................ 101
4.5.1.1 Cadastro de Usuários .............................................................. 102
4.5.1.2 Configuração Geral ................................................................. 103
4.5.1.3 Configuração de E-mail .......................................................... 103
4.5.1.4 Tipo de Ação ........................................................................... 103
4.5.1.5 Sensor ...................................................................................... 104
4.5.1.6 Tipo de Porta ........................................................................... 104
4.5.1.7 Modelo de Arduino ................................................................. 105
4.5.1.8 Arduino ................................................................................... 105
4.5.1.9 Monitoramento ........................................................................ 111
4.5.2 Módulo Atualização de Firmware ....................................... 113
4.6 CONCLUSÕES DO CAPÍTULO ........................................... 113
5 TESTES E VALIDAÇÃO .................................................... 115
5.1 TESTES DO FIRMWARE DO ARDUINO ........................... 115
5.2 TESTES DE INTEGRAÇÃO ................................................. 117
5.3 TESTE DE ESCALABILIDADE DO FIRMWARE .............. 118
5.4 PROBLEMAS IDENTIFICADOS .......................................... 119
5.5 CONCLUSÕES DO CAPÍTULO ........................................... 121
6 CONCLUSÕES ..................................................................... 122
6.1 TRABALHOS FUTUROS ...................................................... 124
REFERÊNCIAS .................................................................... 125
APÊNDICES .......................................................................... 128
18
1 INTRODUÇÃO
O uso de dispositivos eletrônicos, seja para a realização de
tarefas do cotidiano ou para Automação industrial, está presente nos
mais variados ambientes. O simples fato de utilizar um sensor
infravermelho para detectar a presença de movimento, ou ligar uma
lâmpada automaticamente ao escurecer, envolve componentes
eletrônicos que reduzem a necessidade de executar tarefas manualmente.
Independente da aplicação, o uso de tecnologia para
Automação, seja para residências, empresas ou indústrias, proporciona o
gerenciamento de recursos de forma bastante eficiente e sustentável,
além de obter diversos benefícios como redução de custos, manutenção
e segurança (DIAS; PIZZOLATO, 2004).
A automação residencial, também conhecida como Domótica, é
formada por um conjunto de dispositivos e equipamentos
interconectados através de uma rede para comunicação. Nesse contexto,
as informações são coletadas e processadas, conforme as regras são
definidas. Determinadas ações podem ser executadas com o objetivo de
supervisionar ou gerenciar o ambiente em que estão inseridas e assim
satisfazer as necessidades de comunicação, conforto e segurança (DIAS;
PIZZOLATO, 2004).
Devido às constantes mudanças e às necessidades individuais de
cada cenário, o comportamento de sistemas automatizados deve
proporcionar flexibilidade e uma fácil adaptação às condições do
ambiente (SGARBI; TONIDANDEL, 2006).
Para Sousa (2009), com a crescente popularização da Internet,
tornou-se possível desenvolver novos modelos de sistema baseados em
ações executadas de forma remota e transparente para controle e atuação
de forma bastante rápida e segura. Atualmente a velocidade de acesso a
rede mundial de computadores, possibilita que as informações sejam
transmitidas por diferentes meios e entre dispositivos geograficamente
distribuídos, sem a necessidade de altos investimentos em infraestrutura.
Estão disponíveis no mercado, plataformas que permitem a
programação de microcontroladores de forma bastante simplificada a
custos relativamente baixos se comparados à prototipação de hardware
customizado para Automação.
Arduino é uma das plataformas para prototipação e
desenvolvimento baseada em microcontroladores mais populares da
atualidade. Em 2011, já haviam sido vendidas mais de trezentas mil
19
unidades da versão original. Isso se deve principalmente à sua
característica open source1, o que torna possível o desenvolvimento de
diversas soluções para uma mesma arquitetura (TORRONE, 2011). Sua
concepção envolve a combinação de diferentes modelos de hardware,
empregados através de uma arquitetura e software padrão para a
prototipação de circuitos eletrônicos sem exigir grandes conhecimentos,
pois grande parte dos componentes são construídos para facilitar a
utilização de sensores.
Desenvolvida para controlar o ambiente em que está inserida, a
interação entre os componentes na plataforma Arduino ocorre por meio
dos sinais recebidos por sensores conectados as portas analógicas e
digitais existentes na placa principal. O gerenciamento é realizado por
um microcontrolador Atmel AVR. A programação é feita com o uso de
uma variante da linguagem C, que permite criar projetos autônomos ou
a comunicação com software de outros dispositivos eletrônicos
(Arduino, 2013).
Ainda que a simplicidade da plataforma facilite o
desenvolvimento das mais variadas soluções, é necessário que os
interessados, além de conhecimento em eletrônica básica, também
tenham conhecimentos mais avançados de lógica e programação.
Devido à ausência de um sistema operacional, a codificação de
microcontroladores com limitações de processamento e memória exige
maior atenção na elaboração do software que estará embarcado no
dispositivo, pois todo controle necessário deve estar presente na solução.
1.1 FORMULAÇÃO DO PROBLEMA
Muitas das ações envolvidas ao se criar projetos baseados em
sensores incluem padrões e rotinas em código programado bastante
semelhantes, mas que necessitam de retrabalho para ajustar as ações
executadas. Essas atividades despendem tempo e dificultam a
manutenção, quando uma simples parametrização poderia adaptar as
regras e comportamentos desejados a um novo contexto.
Segundo alguns princípios presentes na Automação e Domótica,
é necessário que haja uma forma simples de gerenciar os dispositivos e
1 Software de utilização livre e sem custo que permite a alteração e distribuição
de cópias de forma gratuita de acordo com a licença de software livre, visando
beneficiar a comunidade de todos os desenvolvedores e usuários (SEABRA,
2007)
20
as ações que devem ser executadas com base nas regras estabelecidas.
Levando-se em conta o ambiente que se deseja controlar ou monitorar, é
preciso que se considere a possibilidade de realizar um monitoramento
remoto de forma centralizada, para facilitar e acelerar o processo de
análise de informações.
A plataforma Arduino possui soluções simples para as mais
variadas tarefas, porém é necessário programar os sensores sempre que
for preciso ajustar as condições e ações que devem ser automatizadas.
Estão disponíveis na Internet soluções com as quais é possível
executar comandos de forma remota no Arduino com o uso da
comunicação serial. Isso acaba por limitar a autonomia do dispositivo
em ambientes distribuídos, devido à necessidade de um computador
para prover o serviço de conexão da rede ou Internet para o Arduino.
1.2 SOLUÇÃO PROPOSTA
Neste trabalho, foi desenvolvida a ferramenta InoSensor, com o
propósito de facilitar e simplificar o processo de adição de sensores e
permitir o monitoramento e controle de Arduino em uma rede local ou
Internet. Sua utilização estende-se como uma ferramenta de apoio para
disciplinas como Eletrônica Básica e Redes de Computadores, pois pode
facilitar a compreensão de conceitos teóricos aprendidos em cursos de
graduação com foco em tecnologia ou para pessoas interessadas em
alternativas para Automação de baixo custo.
A proposta da solução InoSensor contempla o desenvolvimento
dos seguintes módulos: (i) Sistema Web para gerenciamento de Arduino;
(ii) Firmware para interpretar as ações e comunicar com o sistema
gerenciador Web; e (iii) Sistema para atualização de firmware de
Arduino.
A execução e desenvolvimento deste projeto justificam-se por
contemplar e integrar diversas áreas do curso de Especialização de
Desenvolvimento de Software, como engenharia de software, sistemas
web, padrões de projeto, programação, sistemas distribuídos, redes de
computadores e banco de dados, além de contribuir para o meio
acadêmico como uma ferramenta de apoio para disciplinas como
Eletrônica Básica, Programação e Sistemas Distribuídos.
21
1.3 OBJETIVOS
Esta subseção define as metas e características necessárias para
que a proposta da ferramenta desenvolvida atinja os objetivos definidos
para a solução do problema.
1.3.1 Objetivo geral
Desenvolver um sistema de monitoramento de sensores para a
plataforma Arduino por meio de uma rede local ou Internet para
simplificar o processo de ajuste de configurações, sem a necessidade de
reprogramar o firmware em caso de mudanças de regras e ações.
1.3.2 Objetivos específicos
Estudar os conceitos relacionados à Domótica, sensores,
comunicação via rede ethernet e armazenamento de dados para
Arduino;
Pesquisar soluções similares de ferramentas para gerenciamento
de sensores com Arduino;
Pesquisar as tecnologias necessárias para o desenvolvimento do
projeto;
Elaborar a modelagem conceitual do sistema;
Implementar o sistema;
Módulo para gerenciamento de Arduino;
Módulo para cadastro de sensores;
Sensor de temperatura e umidade;
Relé;
Foto resistor;
Sensor de fogo;
Sensor de vibração;
Sensor magnético;
LED RGB;
Buzzer;
Sensor de presença infravermelho.
Módulo para cadastro de ações
Enviar e-mail;
Acionar sensor;
Ligar LED RGB.
22
Módulo para reset remoto de alarme;
Módulo para atualização de configurações;
Firmware para controle de sensores e ações para Arduino;
Sistema de apoio à atualização de firmware;
Desenvolver protocolo para troca de informações entre
gerenciador e Arduino.
Testar e validar a implementação das funcionalidades propostas
pela ferramenta;
Documentar o desenvolvimento e resultados alcançados.
1.4 METODOLOGIA
A estrutura deste trabalho foi dividida em seis grandes etapas,
listadas abaixo:
Levantamento bibliográfico: Documentar os temas envolvidos
neste trabalho para facilitar a compreensão e selecionar as
soluções mais adequadas para o desenvolvimento da ferramenta
InoSensor;
Fundamentação teórica sobre a área de Automação e
Domótica na área da Computação;
Fundamentação teórica sobre Arduino, shields e sensores
com o objetivo de identificar as características e
particularidades da plataforma, bem como os mecanismos
necessários para gerenciar os dispositivos conectados;
Pesquisa de soluções similares para Automação com
Arduino a fim de avaliar inovações e soluções eficazes
existentes.
Análise técnica: Estudo das tecnologias necessárias para o
desenvolvimento da ferramenta proposta, suas particularidades
e compatibilidades;
Estudo das tecnologias envolvidas na ferramenta:
JavaScript Object Notation (JSON), framework ExtJS,
Javascript, PHP, MySQL, Java e C++ para
microcontroladores Atmel presentes no Arduino;
Padrões de projetos Model View Controller (MVC) para
PHP e JavaScript, com o objetivo de facilitar a ampliação
da ferramenta em versões futuras;
Avaliar os protocolos de comunicação e bibliotecas
disponíveis para Arduino, tanto para comunicação via
23
ethernet quanto para armazenamento de dados em cartão de
memória SD;
Pesquisar soluções para atualização de firmware sem a
necessidade da IDE de desenvolvimento para Arduino.
Levantamento de requisitos e modelagem: Definição dos
requisitos e funcionalidades da ferramenta proposta;
Definição dos requisitos e regras de negócio necessários
para contemplar o funcionamento da ferramenta InoSensor;
Modelagem Unified Modeling Language (UML) do
sistema, a análise deverá abranger a especificação e
componentes de software necessários para desenvolver os
módulos propostos no escopo do trabalho. Para isto serão
modelados, casos de uso, diagrama de atividades e
diagrama de pacotes e diagrama de classes;
Definição do modelo Entidade Relacionamento (ER) para o
banco de dados utilizado no servidor Web.
Desenvolvimento: Desenvolvimento do sistema, seguindo o
escopo e a definição do projeto;
Definição da estrutura de banco de dados para suprir as
necessidades do sistema;
Implementação dos módulos propostos conforme a
definição dos requisitos. Todo o desenvolvimento deve
seguir a modelagem e as funcionalidades descritas no
escopo do trabalho.
Testes e validação: Executar testes e validações da solução
proposta e verificar as funcionalidades desenvolvidas,
corrigindo-as caso seja necessário;
Testes das funcionalidades presentes, avaliando se os
serviços implementados alcançaram os resultados
esperados;
Testes de comunicação de rede e atualização de
dispositivos via ethernet para certificar-se de que a
atualização é executada corretamente.
Documentação: Durante o projeto, são registradas as etapas
executadas desde o levantamento do problema, a fundamentação teórica, a proposta da solução, o
desenvolvimento, testes, validações, os resultados finais e as
conclusões. Esta documentação deve permitir que interessados
possam compreender a solução, acrescentar novas
24
funcionalidades em versões futuras e efetuar os mesmos testes
executados para a validação do projeto.
1.5 ESTRUTURA DO TRABALHO
No primeiro capítulo, é apresentada uma introdução sobre o
projeto, objetivos, a devida importância do projeto na assimilação e
aplicação dos temas abordados no curso de Especialização em
Desenvolvimento de Software.
No segundo capítulo (Fundamentação Teórica), são definidos os
conceitos relacionados a Automação, Domótica, soluções para
automação residencial e Arduino e meios de comunicação, além de um
estudo de soluções similares disponíveis, para comparação com a
ferramenta InoSensor.
O terceiro capítulo (Projeto) descreve as especificações das
funcionalidades da ferramenta InoSensor, sua documentação, diagrama
de atividades da UML, requisitos e regras de negócio, diagrama de
pacotes, diagrama de classes e modelo ER do banco de dados.
No quarto capítulo (Implementação) e quinto capítulo
(Apresentação da Ferramenta), são apresentados os resultados obtidos
durante a implementação da ferramenta, descrevendo as funcionalidades
implementadas.
O quinto capítulo apresenta os resultados dos testes aplicados
para avaliar a conformidade dos requisitos e verificar a integração entre
os módulos desenvolvidos.
O sexto e último capítulo apresentam as conclusões,
dificuldades encontradas durante o desenvolvimento e sugestões para
trabalhos futuros que possam aprimorar e expandir as funcionalidades
presentes na ferramenta.
25
2 FUNDAMENTAÇÃO TEÓRICA
Neste capítulo, são abordados os conceitos necessários para o
projeto, a fim de servir como base para o desenvolvimento da solução
proposta pela ferramenta InoSensor. A seção 2.1 apresenta o estudo
sobre Automação, sua evolução com o uso de computadores e os
conceitos relacionados a esse trabalho, como sensores e atuadores. Na
seção 2.2, são abordados os temas relacionados a Domótica e os
benefícios que podem ser gerados com o seu uso. Na seção 2.3, são
apresentadas algumas das soluções existentes no mercado para a
Automação residencial e predial. Os estudos da plataforma Arduino,
suas particularidades e os conceitos necessários ao desenvolvimento da
solução proposta, são apresentados na seção 2.4. A seção 2.5 apresenta
um estudo de ferramentas similares existentes e um comparativo entre
as funcionalidades das ferramentas pesquisadas e a ferramenta
InoSensor. Por fim, na seção 2.6, são apresentadas as considerações dos
estudos da fundamentação teórica.
2.1 AUTOMAÇÃO
Desde a antiguidade o homem tem buscado ferramentas para
reduzir a carga de trabalho e para facilitar a execução de tarefas de
forma automatizada, desenvolvendo instrumentos que o auxiliem a
controlar e alcançar seus objetivos de forma mais rápida. A área de
Automação foi impulsionada com o crescimento adjunto da Revolução
Industrial e trouxe diversos benefícios, tanto para o setor industrial, com
a introdução das máquinas para substituir o homem e melhorar os
processos produtivos, quanto para as pessoas, que puderam despender
seu tempo em atividades mais importantes para melhorar a sua condição
de vida (BIONDO, 2011).
Para Martins (2012), a Automação pode ser definida por um
conjunto de técnicas que possibilitam construir sistemas ativos, capazes
de atuar de forma autônoma com base em informações recebidas no
meio que atuam, de forma bastante eficiente. Uma das características
presentes na Automação é a realização de trabalhos por sistemas
apoiados por computadores, com o objetivo de reduzir a intervenção
humana e obter maior segurança, qualidade e rapidez. Um erro comum é
confundir a Automação com automatização, que está relacionada à
execução de movimentos automáticos, repetitivos e mecânicos.
26
A Automação permite a integração de conhecimentos,
substituindo observação, esforços e decisões humanas por dispositivos
(mecânicos, elétricos e eletrônicos) e software desenvolvido para
gerenciamento e controle. Essa integração é ilustrada na Figura 1 e
demonstra a interdisciplinaridade entre áreas afins como: (i) a
computação, responsável por prover os mecanismos necessários à
modelagem, análise e simulação do software, (ii) a eletrônica,
responsável por processar os sinais e controlar os equipamentos, (iii) a
mecânica, formada por todos os equipamentos conectados que formam a
parte física do sistema e (iv) sistema de controle, responsável por definir
o comportamento e ações desejadas do sistema (MARTINS, 2012).
Figura 1 – Interdisciplinaridade na Automação
Fonte: ROSARIO (2009)
Antes da Automação ser realizada por computadores, o controle
de tarefas e comandos de máquinas era feito por circuitos com válvulas
eletrônicas e equipamentos de controle, medição elétrica e pneumática
conectados a fios elétricos. A adaptação a um novo contexto exigia a
modificação nas conexões, sendo que em muitos casos tornava-se mais
barato substituir o sistema por um novo painel controlador (ROSARIO,
2009).
27
Por volta da década de 70, os avanços tecnológicos permitiram
a substituição das válvulas por transistores e dos fios por circuitos
integrados, trazendo inúmeros benefícios. Esses avanços possibilitaram
transferir as modificações de hardware para o software e deram origem
aos Controladores Lógicos Programáveis (CLPs), que possuem memória
programável e executam instruções de entrada e saída (MARTINS,
2012).
A produção desses equipamentos em larga escala, possibilitou o
desenvolvimento de microprocessadores dedicados a um baixo custo. A
utilização de componentes eletrônicos como sensores, atuadores e
circuitos controladores não está mais limitada a ambientes industriais e
são empregados em diversas áreas de aplicações como robótica,
medicina, automação predial e Domótica (MARTINS, 2012).
Qualquer que seja o emprego da Automação, é necessário que
existam mecanismos para determinar condições variáveis (e.g.,
temperatura, luminosidade, umidade) do ambiente e informar ao circuito
eletrônico a ocorrência de eventos para avaliar e comandar a execução
de ações desejadas (WENDLING, 2010). Dois dos principais elementos
que podem ser encontrados na Automação são os sensores e os
atuadores.
2.1.1 Sensores
Um sensor pode ser descrito como um dispositivo
eletroeletrônico que possui a propriedade de transformar uma grandeza
física (e.g., calor, luz, som, movimento) relacionada ao material
utilizado na fabricação do sensor em um sinal elétrico. Pode-se citar
como exemplos: (i) sensores de fotodiodos para conversão
elétrica/luminosa, (ii) termistores para conversão elétrica/térmica e (iii)
sensores magnéticos para conversão elétrica/magnética (WENDLING,
2010). A Figura 2 ilustra diferentes tipos de sensores que podem ser
utilizados com a plataforma Arduino.
28
Figura 2 – Exemplos de sensores para Arduino
Fonte: Adaptado de DX2 (2013)
Os sinais gerados por sensores podem ser manipulados,
armazenados ou servir como base para processamento por outros
dispositivos. Podem ser utilizados em sistemas de monitoramento para
detectar abertura de portas, movimento de pessoas, vibrações, ruídos,
princípios de incêndio e temperatura (SOUSA, 2009).
Alguns sensores não possibilitam a leitura do sinal gerado
diretamente pelo sistema de controle, sendo necessário um circuito de
interface responsável por produzir um sinal que possa ser lido pelo
controlador. O dispositivo completo, formado pelo sensor e o circuito de
interface, é denominado transdutor. Como exemplos, podem ser citados
os transdutores de temperatura, detecção de presença, velocidade,
campo eletromagnético, etc. (WENDLING, 2010).
2.1.2 Atuadores
Um sistema automatizado deve possibilitar a execução de ações
baseadas em eventos e informações coletadas do ambiente pelos
sensores. Os atuadores agem sobre o ambiente através de um sinal
gerado pelo controlador e normalmente são compostos por uma
interface eletromecânica que tem suas características alteradas conforme
os impulsos elétricos recebidos (PINHEIRO, 2013).
Como os atuadores estão relacionados à interface de saída,
existem basicamente dois tipos:
2 Disponível em: http://www.dx.com/
29
Saídas digitais: representadas por valores discretos, que
permitem determinar se uma grandeza física atingiu um valor
predeterminado e admitem o estado ligado e desligado. Essas
saídas possibilitam controlar dispositivos como relés,
solenoides, LEDs (WENDLING, 2010);
Saídas analógicas: convertem valores contínuos em sinais de
saída de tensão, normalmente variando entre 0V e 5V. Essas
saídas podem controlar motores e luminosidade (ALIEVI,
2005).
2.2 DOMÓTICA
Por volta dos anos 80, a Automação presente nas indústrias
alcançou as edificações corporativas e originou um novo conceito
denominado de edifício inteligente, que possibilitou o emprego de
componentes e soluções para proporcionar diversos benefícios, tais
como: gerenciamento, conforto, economia e prevenção de acidentes
(DIAS, PIZZOLATO, 2004).
A aplicação dos conceitos de Automação em edifícios torna os
ambientes mais produtivos, saudáveis e eficientes, além de contribuir
para o aumento da produção e redução de custos operacionais. Estes
fatores permitiram o emprego mais fácil da Automação em ambientes
comerciais e industriais, em relação aos habitacionais (DIAS,
PIZZOLATO, 2004).
Com o passar dos anos, os mesmos princípios de Automação
passaram a ser aplicados nas residências, utilizando equipamentos
direcionados a criação de casas inteligentes com ênfase no controle de
recursos, iluminação, segurança, temperatura, conforto e entretenimento.
Com a grande popularização, a Automação residencial passou a
ter uma designação própria, conhecida como Smart House ou Intelligent
House. No Brasil, é empregado o termo Domótica, sob influência do
termo francês Domotique (ROSARIO, 2009).
A Domótica agrega diversos conceitos de outras ciências, como
arquitetura, engenharia, computação e possui o objetivo de oferecer
novas possibilidades, introduzidas pelas tecnologias digitais frente as
necessidades do usuário, e uma maior interação com a residência (BOLZANI, 2007).
Um sistema Domótico é formado por diversos componentes,
dispositivos e sistemas interconectados por meio de uma rede de
comunicação. Essa rede é responsável pela troca de informações e pela
30
execução de ações para supervisionar e gerenciar o ambiente no qual o
sistema está inserido (DIAS, PIZZOLATO, 2004).
A Automação residencial está cada vez mais acessível, devido
ao barateamento das tecnologias e ao aumento da concorrência no setor.
O uso de soluções integradas gera ainda mais vantagens, podendo ser
citadas a redução de custos, maior facilidade para a instalação e
expansões do sistema (ROSARIO, 2009).
No Brasil, a Associação Brasileira de Automação residencial
(AURESIDE) menciona que o emprego da Domótica em construções
residenciais e prediais, além de ser uma ferramenta de marketing, é um
diferencial para o setor, pois agrada tanto os desejos de pessoas
interessadas por tecnologia, que estão sempre em busca de novidades,
quanto pessoas que anseiam por maior segurança, ambas características
que podem ser encontradas em sistemas de automação predial (DIAS,
PIZZOLATO, 2004).
As inúmeras soluções tecnológicas que podem ser incorporadas
na Domótica criam novas oportunidades, aumentando a qualidade de
vida das pessoas e até mesmo removendo impedimentos que dificultam
a mobilidade de pessoas portadoras de necessidades especiais, além de
possibilitar um maior racionamento no consumo de recursos como água
e luz e auxiliar na preservação do meio ambiente (DIAS, PIZZOLATO,
2004).
Uma das utilidades da Domótica é aliar o uso de dispositivos
eletrônicos à equipamentos da informática de forma sistêmica e
possibilitar uma gestão integrada de recursos presentes em um ambiente.
Segundo Rosário (2009), essa ciência tem tornado a vida mais
confortável, segura e até mais divertida, com a programação de tarefas
rotineiras para serem executadas de acordo com as necessidades.
De face a essa nova realidade, as residências podem usufruir de
benefícios de sistemas denominados complexos, que não atuam somente
como controladores, mas sim como gerenciadores, com a troca de
informações entre todos os sistemas que compõem as instalações
automatizadas, para que as funcionalidades possam ser personalizadas
pelo cliente (DIAS, PIZZOLATO, 2004).
As necessidades de economia, conforto e segurança criam as
condições ideais para viabilizar o emprego da Domótica em questões
como (ROSÁRIO, 2009):
Controle de Energia e Água: O uso de módulos apropriados
possibilita uma melhor gestão de recursos, levando-se em
consideração os aspectos do ambientes que se deseja controlar.
31
É possível, por exemplo, o acionamento noturno de
equipamentos, detecção de presença e desligamento automático
após um determinado tempo. Já para o racionamento de água, é
possível realizar o controle com o emprego de sensores de
presença, botão temporizador, irrigação do solo conforme as
condições de umidade da terra (Figura 3);
Figura 3 – Exemplo de sensor de umidade do solo
Fonte: DX (2013)
Controle de Segurança: Existem diversos sensores para
controle da segurança em diferentes níveis, que determinam as
ações a serem executadas, baseadas nos eventos ocorridos. Com
apenas alguns componentes, é possível detectar situações de
emergência como: vazamento de gás, detecção de presença,
prevenção de incêndios, controles de acessos, abertura de portas
e janelas e emissão de sinais sonoros ou luminosos. O uso de
sensoriamento em um sistema de alarme possibilita proteger
áreas comercias e residências e foi desenvolvido para manter as
dependências seguras de forma simples, executando ações
como disparo de alarmes, acendimento de lâmpadas, etc;
Controle de Temperatura e Umidade: São fatores de
comodidade. Através do controle térmico, é possível programar
equipamentos de aquecimento, ventilação, desumidificadores e
condicionadores de ar para serem ligados ou desligados e
propiciar um melhor nível de conforto, além de gerar maior
comodidade e propiciar o uso racional de energia.
32
Levando-se em conta as necessidades da Automação, é
primordial que os equipamentos sejam integrados e interligados com o
objetivo de oferecer aos usuários a ampliação dos resultados desejados.
Em relação à tecnologia empregada, os sistemas de automação podem
ser categorizados de duas formas (DIAS, PIZZOLATO, 2004):
Centralizado: São os sistemas nos quais o processamento
ocorre de forma centralizada em uma central de controle, onde
são conectados todos os dispositivos presentes no circuito. Essa
central é responsável por receber os sinais e informações dos
sensores e enviar os comandos das ações e ajustes que devem
ser executados no sistema;
Distribuído: Os dispositivos conectados possuem
processamento inteligente, cada qual com uma função
específica para atender uma necessidade do sistema. Os
dispositivos apresentam-se conectados por meio de uma rede,
realizando a comunicação e troca de informações entre sensores
e atuadores, além de possibilitar o controle e monitoramento do
sistema.
Independente da arquitetura, um sistema de Automação deve
prover flexibilidade no desenvolvimento das soluções e na integração
dos dispositivos, dessa forma é necessário escolher a tecnologia
adequada ao projeto de Automação.
Apesar dos benefícios propostos pela Domótica, ainda existem
diversos desafios a serem superados principalmente por existirem
poucos protocolos e dispositivos padronizados para a aplicação de
soluções em residências, onde muitas destas soluções são herdadas dos
ambientes de Automação industrial. Devido à crescente demanda,
existem diversas entidades nacionais e internacionais que buscam
definir mecanismos para padronizar o emprego de soluções tecnológicas
residenciais, como a Continental Automated Buildings Associations
(CABA), a Open Service Gateway Initiative (OSGI) e a Custom Electronic Design and Installation Association (CEDIA) (BOLZANI,
2007).
Atualmente, no Brasil, existem normas internacionais relacionadas à definição dos padrões de cabeamento para sistemas de
Automação. Destacam-se a ANSI/EIA/TIA-570-A para cabeamento
residencial e a norma ANSI/EIA/TIA-862, para edifícios comerciais
(PINHEIRO, 2004).
33
Um dos destaques no cenário atual do mercado é a Zigbee
Alliance, responsável por desenvolver um padrão de redes sem fio
(Figura 4) de baixo custo, também conhecido como Xbee, destinado a
aplicações embarcadas, formada por dezenas de empresas como
Mitsubishi, Samsung, Cisco, Philips, Motorola, entre outras (DIAS,
PIZZOLATO, 2004).
Figura 4 – Módulo de comunicação sem fio Xbee
Fonte: DX (2013)
2.3 SOLUÇÕES PARA AUTOMAÇÃO DOMÓTICA
Grandes corporações estão se unindo para formar consórcios e
associações para aperfeiçoar e desenvolver soluções integradas de
produtos e sistemas de Automação residencial. Nas subseções a seguir,
são descritas algumas das soluções convencionais existentes para
aplicação da Domótica.
2.3.1 X10
Desenvolvida na década de 70 pela empresa escocesa Pico
Electronics, é uma tecnologia para controlar dispositivos em residências
através da transmissão de dados binários pela corrente elétrica.
Atualmente, o protocolo também está disponível para operar via rádio
frequência (WOLLZ, 2012).
Devido ao tempo de mercado, o sistema X10 é um dos
protocolos mais utilizados no mundo para Automação residencial,
principalmente devido a expiração da patente no ano de 1997, que
possibilitou a fabricação dos dispositivos por diferentes empresas, além
de uma grande difusão e diversificação de produtos (WOLLZ, 2012).
34
Uma das grandes vantagens desse sistema é a facilidade de
instalação, já que a comunicação é feita na própria estrutura de rede
elétrica (DIAS, PIZZOLATO, 2004). Existem dois tipos de dispositivos
no sistema X10, os transmissores e os receptores.
Os transmissores (Figura 5) são responsáveis por enviar sinais
de comando para os equipamentos que serão controlados (ROSARIO,
2009). Existem diferentes tipos de controladores, podendo ser citados:
(i) módulo transmissor serial, para envio de comandos para a rede
elétrica e gerenciamento dos receptores pelo computador; (ii) módulo
transmissor termostato, que possibilita ligar e desligar equipamentos
com base na temperatura ajustada; (iii) módulo transmissor para
controle via telefone, pelo qual pode-se receber comandos via linha
telefônica e controlar os equipamentos da rede.
Figura 5 – Transmissor X10
Fonte: ROSARIO (2009)
Os receptores são os equipamentos que recebem os comandos
dos transmissores, sendo que um receptor pode ser controlado por mais
de um controlador (ROSARIO, 2009). Entre os modelos convencionais
de receptores, podem ser citados: (i) o módulo receptor de lâmpada com
função de ligar, desligar, ajuste de intensidade luminosa (dimmer); (ii)
módulo receptor para tomada, para ligar e desligar equipamentos
elétricos.
35
O funcionamento é bastante simples. Cada receptor (Figura 6)
deve ser configurado com um endereço formado por um código da casa
representado por uma letra (A-P), seguido por um identificador para o
receptor (A1-A16), totalizando 256 endereços possíveis de serem
configurados. Após a configuração, um transmissor conectado na
mesma rede elétrica ou frequência pode enviar um comando para
controlar um equipamento em um endereço específico ou até mesmo
todos os equipamentos configurados em um mesmo código de casa
(ROSARIO, 2009).
Figura 6 – Exemplo de Receptor
Fonte: ROSARIO (2009)
Os modelos mais simples de receptores não permitem que seu
status seja detectado pelos transmissores. Os modelos que possibilitam
desenvolver sistemas mais robustos com comunicação em mão dupla e
retroalimentação de status, custam de duas a quatro vezes mais
(WOLLZ, 2012).
Apesar dos benefícios propostos pelo X10, existem limitações
que devem ser consideradas e solucionadas com o emprego de técnicas e
recursos apropriados. Em relação à segurança, é necessário instalar
filtros nas entradas da residência para impedir a entrada ou saída de
36
sinais gerados por outros módulos X10. Para casos em que a residência
utilize circuito bifásico ou trifásico, a transmissão do sinal deve ser feita
em diferentes fases. Outro fator importante é a limitação da velocidade
de comunicação, pois a taxa máxima de transmissão é de 60bps. Em
condições que necessitam de maior velocidade e confiabilidade, deve-se
optar por soluções mais robustas e confiáveis (DIAS, PIZZOLATO,
2004).
2.3.2 IHC
A Inteligent Home Control (IHC) é uma tecnologia proprietária
para Automação residencial com comunicação via cabeamento
estruturado. Baseada em uma arquitetura centralizada, os dispositivos
presentes na instalação do sistema são conectados a um equipamento
central, responsável pelo gerenciamento local por um controle remoto
ou, remotamente, com o uso de telefone, Internet e smartphones (DIAS,
PIZZOLATO, 2004).
A configuração do sistema é feita através da programação das
funções dos dispositivos em um software baseado em perguntas e
respostas, responsável por adaptar as necessidades e preferências do
usuário. Como o IHC é desenvolvido em uma plataforma modular
padronizada, suas funcionalidades podem ser adaptadas e expandidas de
forma gradativa e implantadas em etapas (TERUEL, 2008).
Entre os principais módulos responsáveis pelo funcionamento
existentes no sistema IHC (Figura 7), podem ser citados (DIAS,
PIZZOLATO, 2004):
Módulo gerenciador: responsável pelo gerenciamento do
sistema, é uma unidade composta por um microprocessador
responsável por receber os comandos dos dispositivos e pelas
ações feitas com base nas configurações do usuário. Possui uma
capacidade máxima de 128 entradas e 128 saídas
(SCHNEIDER ELECTRIC, 2013);
Módulos de Entrada: Possibilitam ao sistema ler informações
do ambiente e são responsáveis por receber os sinais
provenientes de dispositivos acionadores conectados na rede. Cada módulo de entrada possui 16 portas digitais;
Módulo de Saída: Possui a função de acionar os dispositivos
de saída conectados e ativar luzes e LEDs de acordo com o
37
estado dos equipamentos e do sistema. Cada módulo de saída
suporta 8 saídas digitais ou dimmerizadas;
Módulos de alimentação de energia: São empregados quando
os módulos de entrada e saída não fornecem corrente elétrica
suficiente para equipamentos que necessitam de tensão própria
para o funcionamento;
Módulo de comunicação remota: Permite gerenciar e
controlar os equipamentos do sistema pela linha telefônica ou
Internet.
Figura 7 – Esquemática de comunicação dos módulos IHC
Fonte: SCHNEIDER ELECTRIC (2013)
A tecnologia IHC pode ser considerada uma plataforma
bastante sólida com inúmeras soluções para Automação de residências e
edifícios, porém a arquitetura proprietária reduz a possibilidade de
38
integrar os equipamentos a outros sistemas e as funcionalidades de
software estão limitadas às soluções disponibilizadas pela empresa.
2.3.3 Sistema Lonworks
Também conhecido como LON, foi projetado pela empresa
Echelon Corporation em 2005. Foi originado de um grande conjunto de
protocolos e do sistema Fieldbus, empregado na Automação Industrial
na década de 60 (BIONDO, 2011).
A principal motivação no desenvolvimento de um novo padrão
era fornecer uma plataforma comum para a interoperabilidade de
dispositivos de diferentes fabricantes. A comunicação entre os
equipamentos é feita por cabeamento estruturado através do protocolo
LonTalk, implementado com base no modelo Open Systems Interconnection (OSI) que permite distribuir o processamento de carga e
controlar de dois até trinta e dois mil dispositivos (TERUEL, 2008).
No sistema LON, o controle é descentralizado. Os dispositivos
denominados “Nós”, são compostos por um microcontrolador Neuron,
comunicando-se por um protocolo Peer to Peer (P2P) entre os atuadores
e sensores, sem a necessidade de transmitir as informações para uma
central de processamento. Esse sistema também faz a comutação das
mensagens em diferentes meios físicos, como fibra ótica, infravermelho,
radio frequência, par trançado, bastando para isso que transmissores e
receptores sejam compatíveis a um mesmo meio (BIONDO, 2011).
Todo o controle é realizado pelo software Lonwork Network
Service, composto por uma Application Programming Interface (API)
para permitir a programação, gerenciamento e diagnóstico, além de
suportar o protocolo IP que possibilita a integração da rede com a
Internet (BIONDO, 2011).
A aplicação da tecnologia LON é reconhecida pela American
National Standards Institute (ANSI) e é adotada como padrão aberto
para instalação em ambientes industriais, prediais e residenciais, além de
ser uma das três tecnologias recomendadas para automação predial pela
Inteligent Building Institute (IBI) (WOLLZ, 2012).
Apesar dos benefícios propostos, a interoperabilidade entre
equipamentos desenvolvidos por diferentes fabricantes é baixa pois, por
serem equipamentos importados, o custo de implantação torna-se caro
para o uso na Domótica.
39
2.4 ARDUINO
Arduino é uma plataforma open source criada para a
prototipação de circuitos eletrônicos de forma flexível e foi
desenvolvida com o intuito de ser utilizado por pessoas com
conhecimentos básicos em eletrônica, engenharia ou programação
(GERTZ; JUSTO, 2012).
Criado originalmente na Itália no ano de 2005 por Massimo
Banzi e David Cuartielles, Arduino é um nome próprio originado de um
rei italiano que significa “forte amigo” (WHEAT, 2011).
A placa normalmente na cor azul é o objeto mais conhecido da
plataforma e é composta por portas de conexão para comunicação com
outros dispositivos. Um dos principais componentes presentes na placa
principal do Arduino é o microcontrolador AVR Atmel, responsável
pelo processamento e que pode ser facilmente programado com
instruções para possibilitar a interação com o meio externo por meio das
portas de entradas e saída (GERTZ; JUSTO, 2012).
2.4.1 Hardware
Apesar de existirem diferentes modelos de placas, sua
arquitetura de hardware é bastante semelhante, sendo que as principais
diferenças estão na capacidade de memória, processamento e o número
de portas analógicas e digitais disponíveis (BOXALL, 2013).
O Arduino Uno (Figura 8) foi anunciado em setembro de 2011
e foi o marco inicial para o lançamento oficial da versão 1.0 do software
de desenvolvimento. Nessa versão, a comunicação serial era feita com
um conector SRS-232 e o hardware era equipado com um
microcontrolador ATmega8 com frequência máxima de 16MHz e 8KB
de memória de programa (WHEAT, 2011).
Desde o lançamento oficial, novas versões foram lançadas e
suas funcionalidades aprimoradas. Nos modelos mais recentes (Figura
9), a comunicação serial é feita por uma interface Universal Serial Bus
(USB), com um circuito Future Technology Devices International
(FTDI), que faz a conversão de SRS-232 para USB (WHEAT, 2011).
40
Figura 8 – Primeiro modelo de Arduino projetado
Fonte: WHEAT (2011)
Figura 9 – Modelo atual do Arduino Uno
Fonte: WHEAT (2011)
Semelhante ao Arduino UNO, o Arduino Mega (Figura 10)
diferencia-se pelo tamanho um pouco maior, pela quantidade de portas disponíveis e pelo emprego de um processador ATmega com maior
capacidade de memória.
41
Figura 10 – Arduino Mega
Fonte: WHEAT (2011)
O diagrama da Figura 11 apresenta uma arquitetura simplificada
dos principais componentes presentes na placa de um Arduino: porta
serial USB, fonte de energia, portas de entrada e saída (também
conhecidas como conectores de expansão) e o microcontrolador. Os
componentes deste diagrama são descritos nas subseções a seguir.
Figura 11 – Principais componentes do hardware do Arduino
Interface Serial USB
Conectores de Expansão
Placa de I/O Arduino
Microcontrolador Atmel
Conectores de Expansão
Fontes de Alimentação
Fonte: Adaptado de WHEAT (2011)
2.4.1.1 Fonte de alimentação
Por se tratar de um dispositivo eletrônico, é necessário que
exista uma fonte de energia para o funcionamento do Arduino. A
42
alimentação de energia pode ser fornecida de três formas (Figura 12):
pela porta USB, pelo conector de alimentação externa ou pela porta de
tensão não regulada (VIn) com limite de 5V. Nas placas atuais, mais de
uma alimentação de energia pode ser usada, devido à presença de um
circuito inteligente capaz de identificar e selecionar a fonte de
alimentação com maior voltagem. Este circuito regulador também
possui a função de estabilizar a tensão de 5V que será fornecida para o
circuito (WHEAT, 2011).
Figura 12 – Alimentação de energia do Arduino
Fonte: WHEAT (2011)
A alimentação de energia, quando fornecida pela porta USB,
provê uma tensão de 5V e corrente variando de 100mA quando
conectado como um dispositivo não enumerado, e até 500mA quando
conectado como um dispositivo enumerado (WHEAT, 2011).
Essa energia pode ser suficiente para fornecer tensões de 3.3V e
5V nas portas de alimentação, para sensores de baixo consumo (Figura
13), porém para sensores e dispositivos que necessitam de maior carga
(e.g., reles, motores, solenoides), deve-se considerar uma fonte de
alimentação alternativa para ligá-los, caso contrário poderá ocorrer uma
sobrecarga de tensão, ocasionando a queima do circuito. Em alguns
modelos de Arduino, existe um regulador de tensão de 3.3V utilizado
principalmente por modelos de placas mais antigos na interface de
comunicação USB FTDI (WHEAT, 2011).
No mesmo conjunto de portas de energia, existe uma porta
denominada reset, para reinicializar o dispositivo ao se fornecer uma tensão de 5V. Os conectores também são equipados com duas portas
GND, que estão relacionadas com o polo negativo do circuito.
43
Figura 13 – Portas de alimentação de energia para sensores
Fonte: WHEAT (2011)
É importante ressaltar que a alimentação fornecida afeta
diretamente a frequência com que o processador irá operar. Por
exemplo, o microcontrolador ATmega328 (Arduino Uno) pode operar
com tensão variando entre 1.8V e 5.5V, o que permite trabalhar com
frequências entre 4MHz e 20 MHz. Para o modelo ATmega2560
(Arduino Mega) a frequência é de 16MHz e não possui variação com
tensão menor (WHEAT, 2011).
2.4.1.2 Porta USB
Nos modelos convencionais do Arduino, a interface USB possui
três funções básicas (BOXALL, 2013):
Alimentação de energia: Fornece energia para o circuito do
Arduino e sensores conectados às portas;
Gravação de firmware: Um dos mecanismos básicos para a
atualização de código do microcontrolador é feito com o envio
das instruções programadas através da porta USB, também
conhecido como upload de código. Essa tarefa normalmente é
feita pela Integrated Development Environment (IDE) do
Arduino;
Troca de informações: A interface USB oferece conectividade
para a troca de informações do computador com os dispositivos
conectados e vice-versa.
44
O modo de operação para comunicação serial é realizado pelo
padrão SRS-232. Esse mecanismo é baseado em um modo assíncrono,
que opera no mesmo clock do processador durante a comunicação serial.
Quando a comunicação serial é feita via interface USB, duas
portas são utilizadas para essa tarefa, a porta zero RX para recepção e a
porta um TX para transmissão, portanto o uso destas portas para outros
fins depende da necessidade da comunicação serial ou não. As placas do
Arduino normalmente são equipadas com Light Emitting Diode (LED)
para facilitar a identificação da recepção e a transmissão de informações
pela comunicação serial (Figura 14).
Figura 14 – Identificação de operação na comunicação serial
Fonte: WHEAT (2011)
2.4.1.3 Microcontrolador
O microcontrolador (Figura 15) é responsável pelo
processamento das instruções do firmware e pelo controle das operações
do Arduino. Esse componente pode estar presente de duas formas:
soldado na placa no modelo Semi Metalic Disc (SMD) ou montado sob
um invólucro conectado na placa principal, sendo que o segundo modelo
permite a troca do chip apenas desconectando-o da placa principal
(WHEAT, 2011).
Os microcontroladores são circuitos integrados caracterizados
por incorporar diversos elementos dentro de um mesmo componente.
Um microprocessador necessita que outros componentes sejam
adicionados para poder operar, como por exemplo memória, chipset e
barramentos para enviar e receber dados. A existência desses
45
componentes dentro do mesmo circuito é o principal aspecto que
diferencia um microprocessador de um microcontrolador, tornando-o
um sistema computacional completo (SALLES, 2009).
Figura 15 – Microcontrolador Atmel no Arduino
Fonte: WHEAT (2011)
Nota: Na parte superior da figura, um exemplo de microcontrolador
montado, na parte inferior exemplo de um microcontrolador soldado.
Os microcontroladores Atmel AVR possuem a característica de
serem eficientes em termos de consumo energético e desempenho. São
desenvolvidos com a tecnologia Reduced Complexity Instruction Set
Computer (RISC) de 8 bits formado por instruções de 16 e 32 bits
(ATMEL, 2013). Apesar de muitos acharem que a arquitetura RISC
objetiva reduzir o número de instruções, na realidade o objetivo é
reduzir a complexidade das instruções para serem executadas no menor
número de ciclos possíveis, fazendo com que não seja necessário
executar processamentos adicionais para decodificar as instruções
(ATMEL, 2013).
O software escrito para Arduino, também denominado
firmware, é carregado para a área de memória dos microcontroladores
Atmel através de um software conhecido como bootloader. O
bootloader fica armazenado na área de memória de programa e sua
46
responsabilidade é possibilitar a comunicação do dispositivo com a
interface USB pela qual o firmware é carregado. Esse código é sempre
executado na inicialização e permite ao ambiente de desenvolvimento
enviar o comando de reinicialização para começar o envio do novo
firmware.
Em processadores, a velocidade pode ser medida em Million Instructions Per Second (MIPS). Uma característica importante na
família dos microcontroladores AVR é a velocidade de processamento,
pois o seu conjunto de instruções necessita de apenas um ciclo de
máquina para executar a maioria das instruções. Tomando como
exemplo um microcontrolador AVR operando com um oscilador de
4MHz, pode-se considerar que a velocidade de processamento é de 4
MIPS. Essa informação pode ser de grande importância quando for
necessário executar operações com alta velocidade e desempenho
(SOARES, 1998).
A Figura 16 mostra um diagrama simplificado dos principais
componentes existentes em um microcontrolador Atmel AVR, descritos
na sequência (WHEAT, 2009):
Figura 16 – Estrutura interna de um microcontrolador Atmel
Fonte: WHEAT (2011)
Central Processing Unit (CPU): As instruções presentes no
firmware são executadas pela CPU e normalmente são
compostas por: uma Arithmetic Logic Unit (ALU) responsável
47
por executar operações lógicas e aritméticas, registradores de 8
bits, registrador de status, Program Counter (PC), um
decodificador de instruções, interfaces para acesso a memória
interna e periféricos (WHEAT, 2009). São baseados na
arquitetura Harvard (Figura 17), que utiliza dois barramentos,
um para memória de dados e outro para memória de programa,
que possibilitam maior velocidade no processamento
(SOARES, 1998).
Figura 17 – Arquitetura Harvard
Modelo Harvard
CPUMemória de
DadosMemória de Programas
Fonte: Adaptado de SOARES (1998)
Memória de programa e dados (ROM, Flash, RAM,
EEPROM): As memórias presentes nos microcontroladores são
caracterizadas pela volatilidade. Normalmente a capacidade é
bastante reduzida (na ordem de KBs) se comparada aos
computadores atuais e varia com o modelo. Vale ressaltar que
as memórias não voláteis possuem a vida útil reduzida a cada
escrita. A Read Only Memory (ROM) é uma memória não
volátil responsável por armazenar o conjunto de instruções que
formam a aplicação. Um microcontrolador possui apenas um
programa na memória que é sempre executado quando é
inicializado ou reiniciado (desconsiderando o bootloader). Já a
memória Random Access Memory (RAM) é responsável por
armazenar as variáveis durante a execução do programa. Como
as aplicações são pequenas, não há a necessidade de copiá-las
para a memória RAM (WHEAT, 2011). Memória Flash é uma
memória não volátil e regravável, cujas informações
permanecem salvas mesmo após o desligamento do Arduino.
48
Suporta até dez mil gravações e pode gravar configurações ou
persistir dados em caso de queda de energia. A Electrically
Erasable Programmable Read-Only Memory (EEPROM) é
semelhante à memória Flash, mas usa uma tecnologia mais
antiga. Essa é uma memória bastante limitada (menor que
1KB), porém com uma vida útil bem maior, em torno de cem
mil gravações (ARDUINO, 2013);
Clock: Também conhecido como circuito de relógio, é um
circuito oscilador responsável por controlar a sincronização das
operações do sistema. A frequência é ajustada por um cristal de
quartzo, presente na placa principal do Arduino. O ajuste da
frequência é dependente da alimentação fornecida, permitindo
trabalhar em modo de economia de energia ou alto desempenho
(WHEAT, 2013);
Periféricos: Os microcontroladores Atmel são formados por
circuitos adicionais que facilitam a comunicação com outras
partes do sistema e a integração com novos componentes. Pode-
se citar: (i) a presença de portas de entrada e saída, sendo essas
divididas em analógicas ou digitais, utilizadas para
comunicação com outros dispositivos, (ii) interrupção externa
para executar ações na ocorrência de eventos externos ao
sistema, (iii) temporizador ou contador com a função de
controlar tempo ou até mesmo interrupções para serem tratadas
por outros sistemas, (iv) watchdog timer para reinicialização do
sistema periodicamente para se recuperar de falhas e o (v)
Universal Synchronous Asynchronous Receiver Transmitter
(USART), um padrão universal para comunicação serial de
forma síncrona ou assíncrona;
Conversores analógicos-digitais: Os microcontroladores
usados no Arduino possuem um periférico Analog Digital
Converter (ADC) para a conversão de sinais analógicos em um
respectivo sinal digital variando entre 0 e 1023. Estes
conversores tornam-se importantes quando se trabalha com
dispositivos e sensores que operam com informações variáveis
(e.g., som, luminosidade) que necessitam de um meio para
mapear e tratar as informações recebidas;
Geradores de sinal Pulse Width Modulation (PWM): Permite
simular saídas analógicas em uma interface digital, o que torna
possível controlar, por exemplo, o escurecimento de lâmpadas e
49
velocidades de motores devido a oscilação da energia entre 0V
e 5V nas portas que possuem essa interface.
2.4.1.4 Reset
O Arduino é equipado com um botão (Figura 18) para reiniciar
o dispositivo, caso ele se encontre travado ou não esteja operando
corretamente. Essa funcionalidade é bastante útil quando se está
testando uma solução e se deseja depurar o código pelas saídas enviadas
para interface serial. Ao pressionar esse botão, o microcontrolador
reiniciará a execução do firmware (WHEAT, 2011).
Figura 18 – Botão para reiniciar o Arduino
Fonte: WHEAT (2011)
2.4.1.5 Conectores de expansão e portas
Uma das características que tornam o uso do Arduino bastante
prático, é a possibilidade de adicionar componentes que possam
interagir com o ambiente de forma simples e rápida. Através das portas
(também conhecidas como sockets) digitais e analógicas, é possível
realizar a troca de informações entre os componentes e executar ações
baseadas em condições e eventos que venham a ocorrer.
O modo de operação é configurado com instruções presentes no
firmware e possibilita que elas operem como portas de entrada, ou seja,
recebendo sinal, ou como portas de saída, enviando um sinal. Todas as
portas são numeradas para facilitar a sua identificação. Normalmente
estão agrupadas em conectores de expansão conforme o tipo e estão
posicionadas nas laterais e extremidades para facilitar a adição de
circuitos mais complexos.
50
A nomenclatura segue uma convenção e é amplamente adotada
na documentação e na programação. As portas analógicas iniciam com a
letra “A” seguida de um número sequencial (e.g., A0, A1, A2) e as
portas digitais iniciam com a letra “D” seguida de um número
sequencial (e.g., D0, D1, D2).
As portas (Figura 19) são formadas por conectores que fazem
com que não seja necessário soldar os componentes diretamente na
placa de prototipação, conhecida também como breadboard, muito
usada para conectar e desconectar os fios a sensores e outros
componentes eletrônicos. Existem basicamente três tipos de portas no
Arduino (ARDUINO, 2013):
Portas digitais sem PWM: trabalham com valores discretos
quando configuradas como portas de saída e podem gerar dois
níveis de sinais: (i) sinal baixo (0V) ou (ii) sinal alto (5V).
Quando configuradas como portas de entrada, permitem ler o
sinal elétrico identificado como sinal alto (tensão superior a 3V)
ou sinal baixo (tensão inferior a 3V);
Portas digitais PWM: Operam da mesma forma que as portas
digitais convencionais, porém possuem a capacidade de
representar resultado analógico de forma digital. Ao executar
um comando de escrita analógica em uma porta digital PWM, é
possível obter valores que variam em uma escala de 0 a 255 e
esses valores são modulados de forma digital em voltagem
variando de 0V a 5V. Assim, por exemplo, pode-se controlar a
intensidade de um LED ou a velocidade de um motor. As portas
que podem gerar sinal elétrico variável são marcadas com til
(~).
Portas Analógicas: São utilizadas para ler valores analógicos
dos componentes conectados. Os sinais são convertidos em um
valor entre 0 e 1023, que será proporcional à tensão elétrica
aplicada na porta.
51
Figura 19 – Conectores de expansão
Fonte: WHEAT (2011)
Nota: Exemplo de conectores de expansão de portas digitais (superior) e
analógicas (inferior)
O Quadro 1 apresenta as principais diferenças de
processamento, portas e memória entre os modelos mais populares,
Arduino Uno e Arduino Mega (WHEAT, 2011).
Quadro 1 – Comparação da especificação dos Arduinos
Especificação Arduino
Uno
Arduino
Mega 1280
Arduino
Mega 2560
Modelo Processador ATmega
328
ATmega
1280
ATmega
2560
Clock Processador 16MHz 16MHz 16MHz
Memória Programa
(FLASH) 32KB 128KB 256KB
Memória Dados (SRAM) 2KB 8KB 8KB
EEPROM 1KB 4KB 4KB
Pinos Processador 28/32 100 100
Portas Entradas/Saídas 14 54 54
Portas Analógicas 6 16 16
Portas PWM 6 14 14
Fonte: WHEAT(2011)
52
2.4.1.6 Shields
Muitos dos componentes que podem ser integrados à plataforma
Arduino são comercializados em módulos (e.g., GPS, GSM, LCD,
Sensores). Esses módulos possuem uma interface simplificada e já
disponibilizam bibliotecas desenvolvidas para operar com o Arduino.
Dessa forma, é possível manter o foco na solução desejada, sem exigir
grandes esforços na elaboração de um circuito desde o início
(BOXALL, 2013).
Quando existe a necessidade de se usar componentes mais
complexos, as portas de expansão servem de base para conectar placas
diretamente sobre o Arduino, as quais são conhecidas como shields.
Como exemplos, podem ser citados: (i) o shield ethernet, para
comunicação via conexão ethernet, (ii) shield XBee, para a
comunicação sem fio com outras placas Arduino e distâncias variando
de trinta a cem metros, (iii) shield para controle de motores, que operam
em corrente contínua, (iv) shield GPS, para receber sinal GPS e
possibilitar a localização global via satélite e (v) shield GSM,
responsável por prover mecanismos de acesso à Internet via rede GPRS.
Como nem todas as portas são utilizadas pelos Shields, as portas
são expandidas em novos conectores de expansão para possibilitar a
adição de novas funcionalidades e sensores ao Arduino. A Figura 20
ilustra dois shields conectados a um Arduino, sendo o primeiro um
shield ethernet e o segundo um shield composto por um visor numérico
e sensor de temperatura.
Figura 20 – Shields sobrepostos e conectados sobre um Arduino
Fonte: BOXALL (2013)
53
2.4.1.7 Sensores
A utilização de sensores para ler informações do ambiente torna
vasta a possibilidade de soluções que podem ser desenvolvidas.
Dependendo do sensor, deve se levar em conta a necessidade de
circuitos adicionais, como é o caso de um relé que necessita de um
circuito de controle para evitar que uma sobrecarga danifique tanto o
Arduino quanto o dispositivo conectado.
Quando as pessoas interessadas não possuem muito
conhecimento sobre eletrônica, estão disponíveis módulos de sensores,
semelhante ao shield, que fornecem uma interface mais simples para a
comunicação com o Arduino. Esses sensores são montados com todo o
circuito necessário para o correto funcionamento. Em casos mais
complexos, são adicionados microcontroladores para traduzir os dados
em informações mais claras através de bibliotecas disponibilizadas na
Internet pelos fabricantes e pela comunidade de desenvolvedores.
Um caso bastante comum é o sensor de temperatura e umidade
(Figura 21), também conhecido como DHT11, composto por um
Circuito Integrado (CI) com apenas três portas: uma porta para GND
(Negativo), uma para os 5V (Positivo) e uma porta digital para leitura
das informações. Normalmente, os componentes eletrônicos são
acompanhados de uma folha de dados (datasheet), um documento que
apresenta de forma resumida todas as características técnicas de um CI.
Figura 21 – Exemplo de circuito integrado em um sensor
Fonte: DX (2013)
2.4.2 Comunicação
Uma das características que expande as funcionalidades do
Arduino é a possibilidade de realizar a comunicação de diferentes
54
formas com outros equipamentos eletrônicos, sendo a comunicação
serial via porta USB o método convencional. Com as bibliotecas
disponíveis para o Arduino, é possível que a comunicação seja feita por
diferentes protocolos, como por exemplo:
Inter Integrated Circuit (I2C): Disponível na biblioteca Wire
do Arduino, é um protocolo desenvolvido pela Philips na
década de 80, com o objetivo de reduzir a complexidade das
conexões em circuitos eletrônicos e torná-los menos suscetíveis
a interferências eletromagnéticas. Seu funcionamento consiste
em um barramento de dois fios para possibilitar a conexão de
periféricos ao barramento de dados e endereços da CPU através
de um decodificador de endereços e uma unidade de controle
para gerenciar o barramento. Todos os dispositivos conectados
no barramento possuem um endereço e podem atuar como
mestre (master) ou escravo (slave). O dispositivo que iniciar a
transmissão é considerado o master, além disso os dispositivos
conectados podem atuar como transmissores ou receptores
(PRADO, 2007).
Serial Peripheral Interface (SPI): Semelhante ao protocolo
I2C, é um protocolo serial síncrono empregado por
microcontroladores para controlar um ou mais periféricos,
podendo inclusive servir para comunicação entre
microcontroladores. Em uma conexão SPI, existe um
dispositivo atuando como master (normalmente o
microcontrolador) responsável por controlar os periféricos.
Nessa comunicação, são usadas três linhas, comuns a todos os
dispositivos: (i) Master In Slave Out (MISO), para enviar
informações do slave para o master, (ii) Master Out Slave In
(MOSI), para envio de informações do master para os
periféricos e (iii) Serial Clock (SCK), responsável por
sincronizar a transmissão de informações entre os dispositivos.
Para cada dispositivo slave é utilizado um pino para o master habilitar ou desabilitar a comunicação que está ativa no
barramento em um determinado momento (ARDUINO, 2013).
2.4.2.1 Redes e Internet
Os diferentes protocolos disponíveis no Arduino reduzem a
complexidade necessária para a comunicação em diferentes meios, seja
55
via cabo ou sem fio. Muitas das soluções estão disponíveis em shields
fabricados e montados para serem conectados diretamente na placa
principal de forma bastante prática.
Com esses mecanismos, novos horizontes se abrem para prover
meios alternativos de acesso a dispositivos de forma remota, em redes
locais ou Internet, além de possibilitar o gerenciamento remoto de
dispositivos para coleta de informações em ambientes geograficamente
distribuídos.
Com o uso do shield ethernet ou rede sem fio, a conectividade
do Arduino se expande e possibilita sua atuação em uma arquitetura
cliente-servidor. Nesse modelo, é possível transferir processamentos
mais pesados para serem executado em equipamentos de maior
desempenho, como microcomputadores e servidores. As bibliotecas
disponíveis para Arduino permitem a comunicação por sockets,
requisições HTTP, DHCP, conexões TCP e UDP, etc.
Com o shield ethernet, o Arduino pode operar tanto como
cliente quanto como servidor. Sua biblioteca suporta um total de quatro
conexões simultâneas (Arduino, 2013). A comunicação desse shield é
controlada pelo barramento SPI, conectado a quatro portas, sendo três
dessas para comunicação e uma para ativar e desativar o acesso ao
barramento.
2.4.3 Armazenamento de Dados Externo
Alguns shields comercializados, como é o caso do shield
ethernet, são equipados com um circuito adicional para manipular
arquivos em cartão de memória SD. Consequentemente, se reduz a
limitação de memória disponível no Arduino, tornando possível, por
exemplo, o gerenciamento de configurações gravadas em arquivo. Para
evitar o uso de portas adicionais, a comunicação do circuito de
armazenamento em SD com o Arduino é feito sob o mesmo barramento
utilizado para ethernet, através do protocolo SPI. Esse controle é feito
com a adição de uma única porta adicional, responsável pela seleção do
barramento pelo dispositivo controlador (master) (ARDUINO, 2013).
Existem diversas bibliotecas para manipulação de arquivo com suporte
aos sistemas de arquivos FAT16 e FAT32. Entre as operações
disponíveis, podem ser citadas: manipulação de diretório e arquivo e
execução de leitura e escrita. A Figura 22 ilustra as portas de
comunicação e controle utilizadas pelo shield ethernet em um Arduino
Mega.
56
Figura 22 – Portas utilizadas pelo shield ethernet no Arduino Mega
Fonte: ARDUINO (2013)
2.4.4 Plataforma de Desenvolvimento
Para facilitar a programação, a plataforma Arduino
disponibiliza a Integrated Development Environment (IDE), responsável
por prover os mecanismos necessários à comunicação do computador
com o Arduino. A IDE para Arduino é desenvolvida em Java e está
disponível em ambiente multiplataforma (e.g., Windows, Mac OS X e
Linux).
Todo desenvolvimento para Arduino é iniciado com a criação
de um projeto, também conhecido como sketch, que contém o código-
fonte do programa e normalmente é salvo em arquivo com a extensão
.ino (ARDUINO, 2013).
Dentro da IDE (Figura 23), é possível executar diversas ações,
como compilar o código, o monitoramento e troca de mensagens via
interface USB e principalmente o upload do firmware para o Arduino.
Na parte inferior da IDE (Figura 23), existe uma área de cor preta que
exibe informações importantes, como o tamanho do projeto e a memória
total do firmware.
57
Figura 23 – Exemplo de sketch carregada na IDE do Arduino
Fonte: produção do próprio autor
Outra opção importante existente na IDE, é a escolha do
modelo do Arduino (Figura 24). Devido aos diferentes modelos, é
necessário definir o modelo correto, para que o código compilado seja
possível de ser gravado no microcontrolador, principalmente devido às
limitações de memória. Quando houver a necessidade de alterar o modelo do Arduino, basta selecionar o modelo correspondente e todos
os ajustes necessários para compilação com o novo hardware serão
feitos automaticamente sem afetar o código escrito.
58
Figura 24 – Seleção do modelo do Arduino na IDE
Fonte: produção do próprio autor
A linguagem de programação do Arduino foi desenvolvida
baseada na plataforma Wiring e implementada em C/C++. Wiring é um
framework open source multiplataforma de desenvolvimento de
software para controlar dispositivos conectados a microcontroladores da
família AVR Xmega, AVR Tiny, TI MSP430 e Microchip PIC24/32. O
objetivo principal da plataforma é permitir que pessoas com diferentes
níveis de conhecimento em eletrônica possam desenvolver soluções
criativas e realizar a interação entre objetos, espaço e experimentos
físicos (WIRING, 2013).
59
2.4.4.1 Compilação de código
Quando se desenvolve um software em linguagem de alto nível
(e.g., C, Java. .NET), o compilador é responsável por transformar o
código em linguagem de máquina, para que as instruções possam ser
interpretadas pelo microcontrolador. O Arduino utiliza o pacote AVR
LibC, composto por um conjunto de bibliotecas desenvolvidas para
operar com os microcontroladores Atmel AVR. Essa biblioteca,
juntamente com o compilador GCC, forma o compilador denominado
AVR-GCC.
Na compilação do código, os objetos gerados são transformados
em um arquivo no padrão Intel HEX, um formato de arquivo especial
que codifica imagens de arquivos binários, que pode ser reconhecido por
outros tipos de software. Existe um utilitário para fazer a gravação do
firmware no Arduino, denominado AVRDUDE. Para que seja possível
executar essa tarefa, o Arduino vem de fábrica com um código pré-
gravado, denominado de bootloader, uma espécie de código que é
sempre executado quando o Arduino é ligado ou reinicializado. Dessa
forma, a IDE consegue reinicializar o Arduino e enviar o comando para
o bootloader gravar o programa na área de memória correta, sem
sobrescrever essa área (WHEAT, 2011).
2.4.5 Modelos e variantes
Por se tratar de uma plataforma open source, a equipe
responsável pelo Arduino disponibiliza toda a documentação,
esquemática, layouts de placas e código-fonte necessário, possibilitando
a qualquer pessoa ou fabricante montar o seu próprio Arduino. A única
restrição é quanto ao uso do nome Arduino, que é de uso exclusivo.
Sendo assim, existem diversos fabricantes que usam nomes similares
com características padrões para desenvolver soluções compatíveis com
o modelo original (e.g., Freeduino, Meeeno). É importante ressaltar que
devido aos diferentes fabricantes, os preços variam, juntamente com a
qualidade dos componentes de fabricação. Com isso, a durabilidade do
circuito pode ser comprometida, reduzindo a confiabilidade do
equipamento, portanto o ideal é sempre optar por fabricantes licenciados
oficialmente pelo Arduino.
60
2.5 FERRAMENTAS SIMILARES
Na elaboração deste projeto, foram feitas pesquisas de
ferramentas similares para o gerenciamento de sensores com Arduino.
2.5.1 Noduino
Framework open source desenvolvido em JavaScript e
HTML5, permite a configuração das portas, o envio de comandos e o
tratamento de eventos gerados no Arduino em uma interface Web. A
comunicação do computador com o Arduino pode ser feita via interface
serial ou WebSocket (disponível para HTML 5). Para que as
informações sejam interpretadas, foi desenvolvido um firmware para o
Arduino denominado duino, que controla e trata as ações recebidas
(NODUINO, 2013).
Na ferramenta Noduino, é necessário que as funcionalidades
sejam programadas com o uso das bibliotecas disponíveis pelo
framework. A execução das ações depende da comunicação do servidor
com o Arduino. As informações da comunicação com o Arduino (Figura
25) podem ser facilmente atualizadas na tela, utilizando-se os recursos
da biblioteca JavaScript Node.js presente no framework da ferramenta
Noduino.
Figura 25 – Framework Noduino
Fonte: NODUINO (2013)
61
2.5.2 Breakout
A ferramenta Breakout foi desenvolvida para controlar as portas
de entrada e saída do Arduino através de uma interface Web. É
composta por bibliotecas que facilitam a utilização de sensores. Para
programá-la, é necessário conhecimento apenas em JavaScript. A
comunicação com o Arduino é feita via socket, por uma ferramenta
desenvolvida em Java (Figura 26), que atua como servidor e envia os
comandos para o Arduino. A ferramenta também disponibiliza um
firmware, responsável por interpretar e executar as ações recebidas do
cliente (BREAKOUT, 2013).
Figura 26 – Ferramenta Breakout
Fonte: Breakout (2013)
2.5.3 Arduino-Homebot
O Arduino-Homebot é um projeto experimental de Automação
residencial para controle de sensores via comunicação sem fio. Os
Arduinos são definidos por suas características e são divididos em dois
tipos: (i) Arduino robô, que transmite as informações e (ii) Arduino
mestre, que recebe as informações. Os robôs são nomeados como: (i)
Horai para controle de temperatura e umidade e (ii) Itus para controle de
gás e fumaça. O Arduino mestre, denominado Uranus, recebe as
informações dos diversos robôs, exibe as informações em um display
LCD e opcionalmente pode enviar as informações para tratamento em
um servidor Web. O firmware é específico e deve ser gravado no
62
Arduino de acordo com a responsabilidade desempenhada (HOMEBOT,
2013).
2.6 ANÁLISE COMPARATIVA ENTRE AS FERRAMENTAS
O Quadro 2 apresenta uma comparação das funcionalidades
existentes nas ferramentas similares pesquisadas, em relação à
ferramenta InoSensor em sua versão atual.
Quadro 2 – Comparativo com ferramentas similares
Descrição InoSensor
1.0
Noduino Breakout Arduino
Homebot
Gerenciamento
Web X X X
Configuração de
sensores X X X
Monitoramento
remoto X X X X
Conhecimentos em
programação X X X
Controle de Acesso X
Envio de
notificações X
Alteração remota
de configuração X X
Operação
autônoma (sem
conectividade)
X X
Persistência de
configuração (não
volátil)
X X
Fonte: produção do próprio autor
Com essa pesquisa, foi possível observar que existem diversos projetos para o controle do Arduino de forma remota, cada um com as
suas particularidades e características semelhantes.
Um dos aspectos presentes em todas as ferramentas é a
capacidade de monitoramento remoto de sensores via rede local ou
Internet e a existência de soluções desenvolvidas para serem executadas
63
diretamente do navegador Web. Vale destacar que a maioria dessas
ferramentas necessita de conhecimentos em programação para
implementar a lógica de controle dos sensores, o que acaba dificultando
o uso e adaptação para alcançar o objetivo desejado.
A ausência de um mecanismo para alterar as ações, sem a
necessidade de atualizar o firmware do Arduino, é outro fator
importante, pois dependendo da situação, pode se tornar inviável o
ajuste das ações que devem ser executadas.
Em relação à segurança, as ferramentas pesquisadas não
possuíam uma forma efetiva para controle de acesso aos dispositivos,
diminuindo a segurança e tornando os dispositivos vulneráveis a
modificações indevidas. Com exceção da ferramenta Arduino-Homebot,
os Arduinos não possuem um mecanismo autônomo para executar
ações. Esse fator os torna dependentes do servidor, sendo necessário o
envio de comandos pela ferramenta Web toda vez que o usuário desejar
realizar uma nova tarefa.
Nessa comparação, foi possível identificar alguns aspectos
ausentes na ferramenta InoSensor. Um deles se refere à ausência de um
meio de comunicação sem fio em ambientes onde não exista uma
conexão via rede ethernet. Outro aspecto ausente é um display LCD
para exibir informações importantes do funcionamento do dispositivo.
De forma geral, a ferramenta InoSensor pode contribuir na área
acadêmica, através do uso da ferramenta como objeto de estudo para
Arduino, e como uma solução para monitoramento de sensores de baixo
custo.
2.7 CONCLUSÕES DO CAPÍTULO
Nesse capítulo, foram documentados os estudos relacionados ao
tema do projeto, para facilitar a compreensão dos conceitos pertinentes à
Automação, Domótica e à arquitetura da plataforma Arduino, além da
pesquisa de ferramentas similares relacionadas ao contexto do projeto.
Ainda que as soluções existentes para a Domótica não sejam
adaptáveis a diferentes situações, existem estudos e projetos que buscam
empregar a Automação de forma mais simples. Assim, diferentes
dispositivos em uma residência poderão ser integrados e gerenciados por
um computador ou smartphone.
64
3 PROJETO
Este capítulo apresenta a definição do escopo, a metodologia,
bem como os hardware e software utilizados no desenvolvimento deste
trabalho. No que se refere a modelagem física e lógica do sistema,
foram adotados alguns dos conceitos convencionais da engenharia de
software, para facilitar a compreensão da solução a todos os
interessados.
3.1 COMPOSIÇÃO DO SISTEMA
A ferramenta InoSensor foi desenvolvida baseada em uma
arquitetura distribuída, onde o servidor é responsável por monitorar as
informações, enviar e-mails, desligar alarmes remotamente e alterar o
comportamento das ações executadas por cada Arduino. Já o Arduino,
será responsável por processar as informações geradas pelos sensores e
executar as ações com base nas condições configuradas em cada sensor.
Para exemplificar o funcionamento do sistema, a Figura 27
ilustra, de forma geral, como é feita a comunicação entre o servidor
InoSensor e o Arduino.
Após devidamente configurado com o firmware padrão, o
Arduino necessita se conectar a uma rede local ou Internet, para permitir
a comunicação com o servidor e assim receber as configurações dos
sensores. A ferramenta InoSensor foi desenvolvida para gerenciar um ou
mais Arduinos. Para adicionar um novo dispositivo ao sistema, é
necessário cadastrar e configurar os sensores e ações que irão fazer parte
do conjunto. Em seguida, as configurações devem ser transmitidas para
o Arduino poder operar com as funções desejadas. A partir desse
momento, o Arduino pode controlar os sensores e notificar o servidor
sobre a ocorrência de eventos. Caso um Arduino tenha disparado algum
alarme, é possível desligá-lo remotamente através do servidor. Se for
necessário alterar as ações, adicionar ou remover sensores, os ajustes
podem ser feitos no servidor e as configurações serão retransmitidas
sem a necessidade de atualizar o firmware do Arduino. Uma das
vantagens desse modelo é a possibilidade de alterar remotamente o
comportamento geral do Arduino sem a necessidade de programação via
código.
65
Figura 27 – Visão macro da representação do sistema
Rede/Internet
InoSensor
Arduino 1
Arduino 2
Arduino 3
Sensores
Sensores
Sensores
Fonte: produção do próprio autor
3.1.1 Sensores Utilizados
A escolha dos sensores foi feita com base nos módulos
disponíveis para o estudo da solução proposta, evitando gerar custos
financeiros desnecessários ao projeto. Os sensores são fabricados em
circuitos prontos para o uso, bastando conectar as portas do sensor
diretamente às portas do Arduino. A alimentação de energia é de 5V
para todos os sensores. Os componentes selecionados podem ser
considerados os mecanismos básicos para o monitoramento e segurança
de ambientes residenciais ou prediais. Dependendo da aplicação do
sistema, deve-se avaliar a aquisição de sensores mais robustos e mais
precisos, reduzindo a chance de ocorrência de falhas.
Abaixo são detalhados os principais aspectos técnicos dos
sensores para a comunicação com o Arduino.
Sensor de Temperatura e Umidade: Foi usado o sensor
conhecido como DHT11 (Figura 28), um sensor digital de baixo
custo para efetuar a leitura de informações de temperatura e
umidade do ambiente. Esse sensor é composto por um sensor
capacitivo de umidade e um termistor para medir a temperatura
do ar. A leitura das informações é simplificada, com o uso de
uma biblioteca (DHT11) disponível junto a IDE do Arduino,
que possibilita ler a umidade e converter a temperatura em
diferentes unidades de medida, através de uma porta digital.
Como uma alternativa, existe o modelo DHT22, com maior
66
precisão na medição das informações. Esse sensor pode servir
para acionar equipamentos de acordo com a temperatura ou
umidade.
Figura 28 – Sensor Temperatura e Umidade DHT11
Fonte: DX (2013)
FotoResistor: Também conhecido como Light Dependent
Resistor (LDR), nada mais é do que um resistor sensível a
luminosidade para detectar a presença ou ausência de luz em
um ambiente (Figura 29). É um componente simples, que pode
apresentar grande variação, portanto seu uso se torna limitado.
Quanto maior a luminosidade, maior será a resistência e menor
será o valor de leitura na porta analógica. Por se tratar de uma
porta analógica, a leitura varia entre 0 (zero) para alta
luminosidade até 1023 para baixa luminosidade.
Figura 29 – Fotoresistor
Fonte: DX (2013)
67
Sensor de Fogo: Esse sensor (Figura 30) serve para detectar a
presença de fogo em distâncias de vinte a cem centímetros do
dispositivo. Não requer o uso de bibliotecas e pode detectar a
presença ou ausência de fogo pela leitura de uma porta digital,
sendo retornado o valor 1 (um) para presença de fogo ou 0
(zero) para ausência de fogo.
Figura 30 – Sensor de chama
Fonte: DX (2013)
Sensor de Gás: É um sensor eletroquímico (Figura 31) que
reage à presença de gás no ar, em temperatura ambiente.
Existem diferentes modelos para identificar gases como
metano, butano, LPG, fumaça, gases inflamáveis e
combustíveis, etc. O gás é detectado através de uma porta
analógica que retorna um valor entre 0 (zero) para ausência de
gás e 1023. Quanto maior o valor retornado, maior a presença
de gás no ar.
Figura 31 – Sensor de gás
Fonte: DX (2013)
68
Sensor de Vibração: É um sensor digital (Figura 32) composto
por um circuito para detectar vibração. O sinal é lido por uma
porta digital que retorna o valor 0 (zero) quando detectar algum
tipo de vibração ou 1 (um) para ausência de vibração. Pode ser
utilizado como mecanismo de detecção de arrombamento.
Figura 32 – Sensor de vibração
Fonte: DX (2013)
Sensor Magnético: Também conhecido como sensor de
proximidade ou sensor de efeito hall (Figura 33), pode detectar
a presença de objetos que tenham campo magnético. É
composto por uma porta digital que retorna o valor 0 (zero)
quando detectar a presença de magnetismo ou 1 (um) para
ausência de campo magnético. Pode servir como mecanismo
para detectar abertura de portas e janelas.
Figura 33 – Sensor magnético
Fonte: DX (2013)
Detector de presença InfraVermelho: Seu funcionamento é
baseado em um sensor infravermelho passivo (PIR) que detecta
o movimento por calor infravermelho (Figura 34). Esse sensor
utiliza uma porta digital que retorna o valor 1 (um) quando
69
detectar a presença de movimento ou o valor 0 (zero) na
ausência de movimento.
Figura 34 – Sensor presença PIR
Fonte: DX (2013)
Relé: O uso do relé (Figura 35) estende-se como um circuito
eletromecânico para acionar equipamentos elétricos com
corrente elétrica maior que a fornecida pelo Arduino. O
funcionamento é semelhante a um interruptor e pode ser
acionado através da aplicação de um sinal alto (valor um), em
uma porta digital que fecha o circuito elétrico ou um sinal baixo
(valor zero), que abre o circuito e interrompe a passagem da
corrente elétrica. Pode ser utilizado para ligar ou desligar
equipamentos elétricos como motores e eletrodomésticos
ligados à rede elétrica convencional com tensão de até 240V e
corrente máxima de 10 amperes.
Figura 35 – Relé
Fonte: DX (2013)
70
LED RGB: É um componente eletrônico (Figura 36) que
possui a capacidade de emitir luz nas três cores primárias:
vermelho (Red), verde (Green) e azul (Blue). O acionamento de
mais de uma cor ao mesmo tempo permite combiná-las e gerar
novas cores. Esse circuito possui três portas digitais, uma para
cada cor. A luz se acende quando é enviando um sinal alto
(valor um) e se apaga quando se envia um sinal baixo (valor
zero) para a porta do módulo.
Figura 36 – LED RGB
Fonte: DX (2013)
Buzzer: É um pequeno alto-falante (Figura 37) que pode emitir
sons em diferentes frequências e intervalos. Pode ser
empregado quando houver a necessidade de emitir alertas e
alarmes. Para o funcionamento do buzzer, é necessário conectá-
lo a uma porta digital PWM, responsável por definir a
frequência do som. Ao aplicar um sinal na porta conectada (1-
255), o buzzer irá soar um alarme. Ao aplicar o valor zero, o
som será desligado.
Figura 37 – Buzzer
Fonte: DX (2013)
71
O Quadro 3 apresenta os tipos de portas e as respectivas quantidades
utilizadas por cada sensor.
Quadro 3 – Tipos de portas utilizadas por cada sensor
Sensor Portas
Digitais
Portas
Analógicas
Portas
PWM
DHT11 1
Fotoresistor 1
Fogo 1
Gás 1
Vibração 1
Magnético 1
Infravermelho 1
Relé 1
LED RGB 3
Buzzer 1
Fonte: produção do próprio autor
3.1.2 Plataforma de Prototipação
Um dos benefícios da plataforma Arduino, é a facilidade de
criar protótipos de circuitos eletrônicos sem a necessidade de soldar os
componentes, conectando-os a fios elétricos em placa de ensaio,
também conhecidas como protoboard ou breadbord (Figura 38).
A protoboard é composta de diversos orifícios adjacentes,
conectados em trilhas verticais e horizontais, formando uma matriz, que
variam de oitocentos até seis mil furos, dependendo do modelo. O
espaçamento entre cada orifício é de 2,54 mm (0,1 polegada), uma
medida que foi padronizada e seguida por diversos fabricantes de
componentes eletrônicos (WHEAT, 2011). A Figura 39 mostra um
desenho esquemático de como os furos estão conectados no modelo de
protoboard deste projeto. Em cada lateral, existem duas trilhas com os
furos conectados verticalmente, as quais são normalmente utilizadas
para conexão dos componentes no polo positivo e negativo do circuito.
Já os furos verticais são conectados horizontalmente e separados por
uma fenda, agrupados de cinco em cinco furos. Para facilitar a
identificação, os furos das trilhas verticais são identificados por números
e os furos nas linhas horizontais, por letras (MARGOLIS, 2011).
72
Figura 38 – Arduino conectado à protoboard
Fonte: MARGOLIS (2011)
Figura 39 – Modelo de protoboard
Fonte: ClarkZapper.net (2004)
Ao manipular uma protoboard, deve-se atentar à alguns
cuidados. O uso constante e a má qualidade do produto podem causar
intermitência nos sinais elétricos, ocasionando a leitura de informações
erradas e até mesmo o mau funcionamento do circuito (MARGOLIS,
2011).
73
3.1.3 Shield ethernet e SD
Para possibilitar a comunicação do Arduino com a ferramenta
InoSensor, foi utilizado um shield ethernet, conforme ilustrado na
Figura 40.
Esse shield funciona tanto no modelo Uno quanto no modelo
Mega2560. Por ser conectado na parte superior do Arduino, acaba
cobrindo parte da placa principal. Dessa forma, os conectores, o botão
de reset e os LEDs indicadores de transmissão (RX e TX) são
expandidos e disponibilizados na parte superior do shield ethernet.
Figura 40 – Shield ethernet
Fonte: DX (2013)
3.2 COMPORTAMENTO DO SISTEMA
A ferramenta InoSensor permite cadastrar os sensores e
atuadores para executarem as ações de acordo com as necessidades. De
forma simplificada, o processo é iniciado com o cadastro dos sensores.
Ao cadastrar um sensor, deve-se informar as portas disponíveis que
serão utilizadas para o módulo do sensor, em seguida são cadastradas as
ações que devem ser executadas com base nas condições específicas para cada tipo de sensor e, ao finalizar a configuração, deve ser feita a
transmissão, para o Arduino entrar em funcionamento.
O Arduino é responsável pelo gerenciamento dos sensores
conectados e pela execução das ações que foram configuradas por meio
74
da ferramenta InoSensor. As configurações, condições e ações são
armazenadas em um arquivo na memória externa no cartão SD.
Ao iniciar o Arduino, o firmware configura todas as portas de
entrada e saída com base nas informações coletadas do arquivo de
configuração e em seguida, a interface ethernet é inicializada para
possibilitar a troca de informações com o servidor. A partir desse
momento, é iniciada a leitura das informações dos sensores que estão
configurados e caso uma condição seja verdadeira, é iniciada a execução
dos atuadores. Além disso, o Arduino pode notificar o servidor
InoSensor da ocorrência de um evento e até mesmo solicitar ao servidor
o envio de um e-mail para notificação dos responsáveis.
3.2.1 Ações
O sistema foi desenvolvido com a capacidade de responder à
ocorrência de eventos externos e possibilitar o controle e gerenciamento
dos sensores conectados, sendo assim, o Arduino possui a capacidade de
executar três tipos de ações distintas, descritas abaixo:
Acionar Atuador: Possui a função de executar um atuador do
sistema, disparar alarmes através de um buzzer, ligar ou
desligar algum equipamento elétrico por meio de um relé ou
ligar e desligar LED RGB;
Enviar e-mail: Para situações de emergência que devem
notificar algum responsável, é possível configurar o Arduino
para disparar para o servidor uma solicitação de envio de e-
mail. Isso permite deixar todo o trabalho necessário para envio
de e-mail, como autenticação, configuração e tratamento de
erros, a cargo do servidor e manter a responsabilidade do
Arduino no gerenciamento dos sensores;
Notificar servidor: É possível configurar quando da ocorrência
de um condição de um sensor, o envio de uma notificação para
o servidor InoSensor. Essa ação irá aparecer no painel de
monitoramento do servidor, informando a data, hora,
dispositivo e informação relativa ao sensor (e.g., temperatura,
fogo) que disparou a ação.
75
3.3 PROTOCOLO DE COMUNICAÇÃO
Uma característica importante, implementada na ferramenta
InoSensor, é a possibilidade de ajustar as configurações dos sensores e
atuadores sem a necessidade de atualizar o firmware do Arduino,
facilitando o uso da ferramenta e eliminando a necessidade de
conhecimento em linguagem de programação do firmware.
Em relação à conectividade do Arduino ao Servidor InoSensor,
foi usado o protocolo TCP/IP para viabilizar a comunicação através da
Internet ou Local Area Network (LAN). Entre as vantagens desse
protocolo, podem ser citadas: (i) a grande utilização, (ii) velocidade de
comunicação, (iii) ser um protocolo roteável, ou seja, permite interligar
computadores em diferentes redes, (iv) disponível na arquitetura
ethernet, (v) comunicar-se com o servidor PHP via socket de forma
bastante prática e (vi) testar a conectividade com o uso do utilitário de
rede PING.
Devido à capacidade de ajuste variável das configurações, as
informações são armazenadas em arquivo texto, gravadas na memória
externa do cartão SD. O uso da memória externa diminui as limitações
de memória do Arduino, pois as particularidades de cada dispositivo são
ajustadas e gravadas na memória externa, sem comprometer o
funcionamento do hardware por estouro de memória. Outra vantagem é
tornar o firmware do Arduino mais robusto e facilitar a depuração de
erros, já que o firmware se torna padrão.
3.3.1 Monitor de Notificações
O Arduino pode controlar os sensores de forma isolada,
executando as ações com base nas condições configuradas, desde que as
configurações estejam devidamente gravadas na memória do cartão SD.
Nesse modelo, a operação do Arduino está restrita aos atuadores
conectados no próprio dispositivo, como relé, buzzer e LED RGB.
Já para possibilitar o monitoramento remoto do dispositivo, é
necessário que haja uma conexão ativa. Nesse modo de operação o
Arduino pode trocar informações com o servidor InoSensor e notificá-lo
da ocorrência de eventos e, se necessário, o servidor pode enviar e-mail
para notificar os responsáveis.
A ferramenta InoSensor conta com um painel de notificações
atualizado constante e automaticamente, responsável por mostrar os
últimos eventos ocorridos em cada Arduino configurado no sistema.
76
3.4 MODELAGEM DO SISTEMA
A fase de modelagem tem como objetivo confeccionar um
documento para delimitar o escopo e mapear as tarefas e atividades que
serão executadas pelo sistema InoSensor.
A modelagem do sistema foi elaborada seguindo a notação
UML. Os artefatos gerados possibilitam avaliar o projeto em diferentes
visões, definir a estrutura necessária para a implementação e mostram as
características particulares do sistema.
3.4.1 Requisitos
As subseções seguintes apresentam o levantamento de
requisitos da ferramenta InoSensor.
3.4.1.1 Requisitos Funcionais
Os requisitos funcionais estão descritos abaixo. O termo
“manter” empregado nos requisitos está relacionado às operações de
listar, cadastrar, editar e deletar.
RF01. O sistema deve permitir ao administrador manter o
cadastro de administradores no sistema;
RF02. O sistema deve permitir ao administrador manter as
configurações do serviço de envio de e-mail;
RF03. O sistema deve permitir ao administrador manter as
configurações do servidor InoSensor;
RF04. O sistema deve permitir ao administrador visualizar os
tipos de ações disponíveis para o Arduino;
RF05. O sistema deve permitir ao administrador visualizar os
tipos de sensores/atuadores disponíveis para uso com o
Arduino;
RF06. O sistema deve permitir ao administrador visualizar os
tipos de portas disponíveis no Arduino;
RF07. O sistema deve permitir ao administrador visualizar os
modelos compatíveis de Arduino;
RF08. O sistema deve permitir ao administrador manter o
cadastro de Arduinos gerenciados pela ferramenta;
77
RF09. O sistema deve permitir ao administrador manter
sensores e atuadores em um Arduino;
RF10. O sistema deve permitir ao administrador manter as
ações de um sensor;
RF11. O sistema deve permitir ao administrador resetar os
alarmes de um Arduino;
RF12. O sistema deve permitir ao administrador enviar
configuração de ações para o Arduino;
RF13. O sistema deve permitir ao administrador monitorar os
Arduinos cadastrados no sistema e identificar as notificações
geradas por cada sensor;
RF14. O sistema deve permitir ao administrador fazer upload
do firmware para o Arduino;
RF15. O sistema deve permitir ao administrador validar as
configurações antes de enviar as configurações para o Arduino.
3.4.1.2 Regras de Negócio
As regras de negócio são:
RN01. O acesso ao sistema deve ser restrito a administradores
cadastrados;
RN02. Os tipos de ações serão somente visualizados e não
podem ser cadastrados ou alterados pelos administradores. As
ações disponíveis são: enviar e-mail, acionar atuador e ligar
LED RGB;
RN03. Os tipos de sensores serão somente visualizados e não
podem ser cadastrados ou alterados pelos administradores;
RN04. Os tipos de portas serão somente visualizados e não
podem ser cadastrados ou alterados pelos administradores. Os
tipos de portas são: digital com PWM, digital sem PWM e
analógica;
RN05. Os modelos de Arduino serão somente visualizados e
não podem ser cadastrados ou alterados pelos administradores.
Para a versão 1.0 da ferramenta InoSensor, só está disponível o Arduino Mega;
RN06. Ao cadastrar um sensor em um Arduino, o sistema deve
restringir as portas necessárias para o funcionamento do sensor
selecionado;
78
RN07. Para a versão 1.0 da ferramenta InoSensor, estarão
disponíveis os sensores: temperatura e umidade, fotoresistor,
fogo, vibração, magnético, presença (PIR) e fumaça;
RN08. Para a versão 1.0 da ferramenta InoSensor, estarão
disponíveis os atuadores: relé, LED RGB e buzzer.
RN09. Um Arduino pode ter vários sensores. Um sensor
cadastrado pertence a um único Arduino;
RN10. Um sensor pode ter várias ações. Uma ação deve estar
relacionada a um sensor que está cadastrado em um Arduino.
Atuadores não podem ter ações;
RN11. Ao reiniciar o alarme de um Arduino pela ferramenta
InoSensor, todos os alarmes do dispositivo são desligados;
RN12. A configuração de um Arduino só pode ser transmitida
se não forem encontrados erros na validação da configuração;
RN13. Ao modificar uma configuração, o Arduino deve ser
marcado como não sincronizado para alertar o administrador.
Após sincronizar, deve ser marcado como sincronizado;
RN14. Ao cadastrar uma ação, deve ser possível informar se o
servidor deve ser notificado da ocorrência do evento;
RN15. Um Arduino deve possuir um IP e MAC Address, que
devem ser únicos no sistema;
RN16. O envio de configuração para o Arduino deve ser
validado com o usuário e senha, antes de gravar a nova
configuração no dispositivo;
RN17. A atualização de firmware só pode ser feita por
administradores com cadastro no sistema;
RN18. Ao atualizar o firmware, deve ser selecionado o
dispositivo já cadastrado no sistema;
RN19. Uma porta analógica de um sensor só pode ser
conectada em uma porta analógica do Arduino;
RN20. Uma porta digital sem PWM de um sensor pode ser
conectada a uma porta digital com PWM ou uma porta digital
sem PWM do Arduino;
RN21. Uma porta digital com PWM de um sensor só pode ser
conectada a uma porta digital com PWM do Arduino;
RN22. Uma porta do Arduino só pode ser conectada a um único
sensor;
RN23. A tela de monitoramento de sensores deve ser atualizada
automaticamente, de cinco em cinco segundos;
79
RN24. As configurações do servidor devem ser gravadas no
firmware, para permitir a comunicação entre o servidor e o
Arduino;
RN25. O envio de e-mails deve ser configurável e permitir a
modificação da conta de e-mail pelo administrador;
RN26. Cada Arduino deve possuir um usuário e senha no
cadastro, que será utilizado para atualizar as configurações.
3.4.1.3 Requisitos Não-Funcionais
Os requisitos não-funcionais identificados são:
RNF01. O sistema Web da ferramenta INOSensor será
desenvolvido para ser executado em um servidor PHP
utilizando o framework MVC CodeIgniter;
RNF02. O banco de dados utilizado será o MySQL versão 5.1;
RNF03. O acesso às funcionalidades do sistema será realizado
por controle de acesso através de login e senha;
RNF04. O sistema InoSensor deve ser compatível com os
navegadores Firefox 10 ou superior, Internet Explorer 8 ou
superior e Google Chrome;
RNF05. A camada de visão da ferramenta InoSensor será
desenvolvida utilizando o padrão MVC do framework
JavaScript ExtJS versão 4.1;
RNF06. O módulo para atualização de firmware será
desenvolvido em Java;
RNF07. O desenvolvimento do firmware para Arduino será
desenvolvido em C utilizando a IDE do Arduino;
RNF08. Para o funcionamento da comunicação USB na
atualização do Arduino, será utilizada a biblioteca Java
RXTXcomm;
RNF09. A comunicação do Arduino com o módulo Web
InoSensor será feita via socket pela porta 80 do próprio servidor
PHP;
RNF10. A comunicação dos dispositivos com o servidor será
feita utilizando o protocolo TCP/IP;
RNF11. As configurações devem ser gravadas em um arquivo
texto, denominado config.dat, no formato Comma Separated
Value (CSV), salvo em cartão SD no Arduino;
80
RNF12. Para facilitar a atualização de firmware pelo
administrador sem conhecimentos em programação, será
utilizada a ferramenta ArduinoBuilder, que deverá ser integrada
ao módulo de atualização de firmware;
RNF13. Para simplificar o processo de envio de notificação por
e-mail, deve ser utilizada a biblioteca PHPMailer.
3.4.2 Casos de Uso
Esta seção apresenta, resumidamente, os casos de uso das
funcionalidades implementadas. A Figura 1 apresenta o diagrama
contendo os casos de uso da ferramenta InoSensor.
UC01. Manter usuário: O acesso a ferramenta InoSensor é
restrito a usuários cadastrados. Esse caso de uso, possibilita ao
administrador do sistema cadastrar, editar e excluir usuários por
meio de um formulário;
UC02. Configurar e-mail: Devido a capacidade de enviar e-
mails pelo servidor Web em que a ferramenta InoSensor está
configurada e instalada, essa funcionalidade possibilita a
configuração do serviço de envio de mensagens eletrônicas;
UC03. Configurar Servidor: O Arduino precisa se comunicar
com a ferramenta InoSensor. Essa função permite configurar as
informações de rede do servidor;
UC04. Monitorar Eventos de Sensores: Permite ao
administrador monitorar os eventos disparados pelos sensores
de todos os Arduinos que estão configurados no sistema,
informando o total de eventos disparados na última hora e, caso
necessário, os detalhes desses eventos;
UC05. Visualizar tipo de ações: Permite ao administrador
visualizar os tipos de ações possíveis de serem executadas
quando uma condição verdadeira ocorrer em um sensor.
Pensando na capacidade de expansão do sistema, a ferramenta
foi desenvolvida de forma flexível, permitindo que ações
possam ser adicionadas sem interferir no funcionamento das
ações existentes;
UC06. Visualizar tipo de portas: Permite ao administrador
visualizar os tipos de portas existentes no Arduino;
UC07. Visualizar Modelo Arduino: Permite ao administrador
visualizar os modelos de Arduino suportados pela ferramenta
81
InoSensor. Para permitir a expansão do sistema, a ferramenta
foi desenvolvida de forma flexível, permitindo que novos
modelos sejam adicionados sem interferir no funcionamento
dos modelos existentes;
UC08. Visualizar tipos de sensores: Permite ao administrador
visualizar os tipos de sensores e atuadores possíveis para serem
conectados ao Arduino. Para facilitar a conexão dos sensores ao
Arduino, essa funcionalidade exibe detalhes de cada sensor,
informando as características físicas, modo de funcionamento e
portas utilizadas além de apresentar a identificação de cada pino
à respectiva porta;
UC09. Manter Arduino: Essa é uma das funções mais
complexas da ferramenta, pois permite ao administrador
cadastrar, editar e excluir os Arduinos através de um formulário
com as informações de identificação e dados para conexão de
rede. Após o cadastro, é possível adicionar, editar e excluir os
sensores e atuadores. Depois de selecionar um sensor, são
exibidas as portas disponíveis para sua conexão com o Arduino.
Para os sensores, é possível cadastrar as ações disponíveis.
Dependendo do sensor selecionado, deve ser configurada a
condição para executar a ação e informar se o servidor deve ser
notificado da ocorrência do evento;
UC10. Validar Configuração: Após o cadastro do Arduino e
configuração dos sensores, essa função permite ao
administrador validar se o cadastro, sensores e ações estão
devidamente configurados e se comunicação com o Arduino
está ativa, para que a transmissão possa ser realizada;
UC11. Atualizar Firmware: Para que o Arduino possa
interpretar as ações e se comunicar com o servidor, inicialmente
ele deve estar cadastrado no sistema. Em seguida, deve-se
utilizar o utilitário para atualização de firmware. Esse utilitário
permite ao administrador gravar o firmware com versão mais
recente, com as devidas configurações necessárias para a
comunicação em rede.
82
Figura 41 – Diagrama de casos de uso
Fonte: produção do próprio autor
uc
Vis
ão
Ca
so
s d
e U
so
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
Ad
min
istr
ad
or
UC
01
. M
an
ter
Us
uá
rio
UC
02
. C
on
fig
ura
r E
-Ma
il
UC
03
. C
on
fig
ura
r
Se
rvid
or
UC
09
. M
an
ter
Ard
uin
o
UC
04
. M
on
ito
rar
Ev
en
tos
UC
10
. V
ali
da
r
Co
nfi
gu
raç
ão
UC
01
3.
Ma
nte
r
Se
ns
or/
Atu
ad
or
UC
14
. M
an
ter
Aç
õe
s
UC
16
. A
tua
liza
r
Fir
mw
are
UC
12
. R
es
eta
r A
larm
e
UC
07
. V
isu
ali
za
r
Mo
de
lo A
rdu
ino
UC
06
. V
isu
ali
za
r Tip
o
Po
rta
s
UC
08
. V
isu
ali
za
r Tip
os
Se
ns
ore
s
UC
05
. V
isu
ali
za
r Tip
o
Aç
õe
s
UC
15
. V
isu
ali
za
r
De
talh
es
Se
ns
or
UC
11
. A
tua
liza
r
Fir
mw
are
«extend»
«extend»
«extend»
«extend»
«extend»
83
3.4.3 Diagramas de Pacotes e Classes
A ferramenta InoSensor foi desenvolvida com dois frameworks
de desenvolvimento Web. A escolha dessas plataformas foi feita com
base em trabalhos anteriores, que demonstraram qualidade e estabilidade
na execução das aplicações através de padrões de desenvolvimento de
software. Outra característica importante é a documentação existente na
Internet, que facilita o estudo das tecnologias empregadas.
Para o servidor Web, foi escolhido o framework MVC
CodeIgniter. Para a camada de apresentação, foi usado o framework
ExtJS 4.1, que em sua versão mais recente emprega uma arquitetura
baseada também no padrão MVC, facilitando inclusive a manutenção
por diferentes desenvolvedores.
Devido à complexidade da estrutura de ambos os frameworks,
optou-se por elaborar um diagrama de pacotes da UML contendo as
principais estruturas implementadas na ferramenta e dividir o sistema
em agrupamentos lógicos, para facilitar a compreensão. Somente para a
modelagem da camada de apresentação do framework ExtJS, existem
cento e sete classes responsáveis por controlar todos os componentes.
Para a ferramenta de upload de firmware, foi elaborado um
diagrama de classes, com a modelagem da ferramenta desenvolvida.
Conforme ilustrado na Figura 42, os pacotes no servidor da
aplicação InoSensor são divididos nas três camadas correspondentes a
arquitetura MVC:
Controller: Para cada funcionalidade, existe uma classe
responsável por tratar as requisições vindas do cliente. O
controlador inosensor.php é o controlador principal da
aplicação e possui a função de carregar a aplicação da camada
de visão desenvolvida através do framework ExtJS;
Model: Responsável por acessar o modelo de dados. O
framework possui uma camada de abstração com funções
genéricas para acesso a diferentes bancos de dados;
View: Como a camada de visão foi implementada com o
framework ExtJS, todas as informações retornadas são geradas
no padrão JSON e são tratadas pelo arquivo json_result.php.
84
Figura 42 – Diagrama de pacotes PHP do framework CodeIgniter
Fonte: produção do próprio autor
85
A arquitetura da camada de visão utiliza o padrão do framework
ExtJS e é ilustrada na Figura 43. Cada classe é salva em um arquivo
separado. As classes são organizadas conforme a sua responsabilidade e
são carregadas através de uma classe principal denominada Ext. Para
iniciar a aplicação, é definida uma classe que executa o método launch
da classe Application presente no pacote ExtJS. A partir desse ponto, a
chamada das funcionalidades ocorre conforme as requisições feitas pelo
cliente. Abaixo são descritos os principais pacotes com suas respectivas
responsabilidades:
App: Pacote que possui o agrupamento de todas as classes que
fazem parte da aplicação ExtJS;
UX: Nesse pacote são armazenadas classes de extensão do
framework, desenvolvidas pela comunidade. Para essa
aplicação, foram usadas e adaptadas para a ferramenta duas
extensões: gerenciamento de layout e autenticação definido na
classe Initialization.js e gerenciamento de rotas de ação,
responsável por gerenciar as funções executadas dentro da
aplicação;
Controller: Possui as classes separadas de acordo com as
responsabilidades e funções disponíveis na ferramenta. Dentro
dos controladores, são definidas: (i) as classes de modelo que
serão acessadas, (ii) ações de botões, (iii) criação de objetos de
janela para cadastro, edição, listagem e exclusão, (iv) validação
das informações e (v) submissão dos dados para o servidor de
aplicação. A classe Viewport é responsável por controlar a
divisão das áreas da aplicação, como: menu, tela principal e
cabeçalho;
View: Esse pacote possui todas as classes responsáveis por
montar os formulários e demais objetos visíveis na aplicação.
Esse objeto é criado pela classe da camada de controle. Dentro
de cada diretório, existem subdiretórios contendo basicamente
duas classes principais: List, para montar as telas de listagem
dos registros exibidos na tela e Edit, responsável por exibir o
formulário para cadastro ou edição de informações;
Model: Todos os modelos de dados acessados pela ferramenta
devem estar criados em classes específicas. Ao definir uma
classe de modelo, é feito o mapeamento de todos os campos e
seus respectivos tipos de dados. Essa classe também pode
86
conter informações de associação com outras classes (um para
muitos, muitos para muitos);
Store: O framework ExtJS possui uma camada adicional,
responsável por configurar o acesso às informações e permitir o
armazenamento em cache, fornecendo funções de ordenação,
filtro e consulta local no lado cliente. Para cada modelo, existe
uma respectiva classe Store. Para valores estáticos (e.g., Sim,
Não, Ligado, Desligado) é possível definir as informações
dentro da própria classe, para o uso em listas de valores
(Combo Box).
A ferramenta InoSensor conta com um aplicativo desenvolvido
em Java para facilitar o processo de atualização de firmware do
Arduino. Esse aplicativo se comunica com três ferramentas: (i) o
servidor InoSensor, responsável por prover as informações de
identificação do dispositivo e versões de firmware, (ii) a biblioteca
RXTXComm para comunicação via interface serial USB e (iii) o
utilitário ArduinoBuilder, responsável por compilar o código e fazer o
upload do firmware para o Arduino. A biblioteca RXTXComm e o
utilitário ArduinoBuilder são descritos em mais detalhes na seção 4.2.5.
As classes relacionadas são ilustradas na Figura 44 e são
descritas abaixo:
InoSensor: Classe principal, responsável por iniciar a execução
do utilitário de atualização de firmware e controlar as etapas
existentes no processo;
DefaultStep: Classe responsável por definir uma janela padrão,
desenvolvida com a toolkit Swing. A ferramenta é composta por
três etapas, todas herdadas desta mesma classe, alterando-se
apenas as particularidades de cada janela;
ArduinoDao: Classe contendo as informações relacionadas ao
modelo de dados da entidade Arduino;
FirmwareDao: Classe contendo as informações relacionadas
ao modelo de dados da entidade firmware;
Output: Classe responsável por exibir o log de atualização do
firmware.
87
Figura 43 – Diagrama de pacotes ExtJS
Fonte: produção do próprio autor
88
Figura 44 – Diagrama de classes Java
Fonte: produção do próprio autor
cla
ss
Cla
ss
Mo
de
l
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
EA
9.3
Unre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion E
A 9
.3 U
nre
gis
tere
d T
rial V
ers
ion
Step
3
+ at
ualiz
arPo
rtaS
eria
l() :
void
# bt
Ava
ncar
Clic
k(ja
va.a
wt.
even
t.A
ctio
nEve
nt)
:voi
d-
btLo
gAct
ionP
erfo
rmed
(java
.aw
t.ev
ent.
Act
ionE
vent
) :v
oid
- bt
Refr
eshA
ctio
nPer
form
ed(ja
va.a
wt.
even
t.A
ctio
nEve
nt)
:voi
d+
disp
lay(
) :v
oid
+ G
etIn
stan
ce(In
oSen
sor)
:D
efau
ltSt
ep-
getW
inO
utpu
t()
:Out
put
- in
itCo
mpo
nent
s()
:voi
d-
sele
cion
arA
rdui
no(ja
va.a
wt.
even
t.It
emEv
ent)
:vo
id-
Step
3(In
oSen
sor)
Step
2
+ di
spla
y()
:voi
d+
getA
rdui
no()
:A
rdui
noD
ao+
getF
irm
war
e()
:Fir
mw
areD
ao+
Get
Inst
ance
(InoS
enso
r) :
Def
ault
Step
- in
itCo
mpo
nent
s()
:voi
d-
sele
cion
arA
rdui
no(ja
va.a
wt.
even
t.It
emEv
ent)
:vo
id-
sele
cion
arVe
rsao
(java
.aw
t.ev
ent.
Item
Even
t) :
void
+ se
tArd
uino
(Ard
uino
Dao
) :v
oid
+ se
tFir
mw
are(
Firm
war
eDao
) :v
oid
- St
ep2(
InoS
enso
r)
Step
1
- bt
Test
arA
ctio
nPer
form
ed(ja
va.a
wt.
even
t.A
ctio
nEve
nt)
:voi
d#
Def
ault
Step
(InoS
enso
r)+
Get
Inst
ance
(InoS
enso
r) :
Def
ault
Step
- in
itCo
mpo
nent
s()
:voi
d-
Step
1(In
oSen
sor)
+ te
star
Cone
xao(
) :v
oid
java
x.sw
ing
.JF
ram
e
Out
put
- in
itCo
mpo
nent
s()
:voi
d+
mai
n(St
ring
[])
:voi
d+
Out
put(
)+
setT
ext(
Stri
ng)
:voi
d
InoS
enso
r
+ ge
tCur
rent
Step
() :
I...
+ In
oSen
sor(
)+
mai
n(St
ring
[])
:voi
d+
Nex
tSte
p()
:voi
d+
Prev
ious
Step
() :
void
+ se
tCur
rent
Step
(Inte
...
java
x.sw
ing
.JF
ram
e
Def
ault
Step
- bt
Ava
ncar
Act
ionP
erfo
rmed
(java
.aw
t.ev
ent.
Act
ionE
vent
) :v
oid
# bt
Ava
ncar
Clic
k(ja
va.a
wt.
even
t.A
ctio
nEve
nt)
:voi
d-
btVo
ltar
Act
ionP
erfo
rmed
(java
.aw
t.ev
ent.
Act
ionE
vent
) :v
oid
# D
efau
ltSt
ep(In
oSen
sor)
+ di
spla
y()
:voi
d-
init
Com
pone
nts(
) :v
oid
Dat
abas
e
+ ge
tCon
nect
ion(
) :C
onne
ctio
n+
setS
ervi
dor(
Stri
ng)
:voi
d-
setU
ser(
) :v
oid
Ard
uino
Dao
+ ge
tAti
vo()
:St
ring
+ ge
tDes
cric
ao()
:St
ring
+ ge
tId(
) :in
t+
getI
p()
:Str
ing
+ ge
tMac
_add
ress
() :
Stri
ng+
getM
asca
ra_r
ede(
) :S
trin
g+
getM
odel
o_ar
duin
o_id
() :
int
+ ge
tSen
ha()
:St
ring
+ ge
tUsu
ario
() :
Stri
ng+
setA
tivo
(Str
ing)
:vo
id+
setD
escr
icao
(Str
ing)
:vo
id+
setI
d(in
t) :
void
+ se
tIp(
Stri
ng)
:voi
d+
setM
ac_a
ddre
ss(S
trin
g) :
void
+ se
tMas
cara
_red
e(St
ring
) :v
oid
+ se
tMod
elo_
ardu
ino_
id(in
t) :
void
+ se
tSen
ha(S
trin
g) :
void
+ se
tUsu
ario
(Str
ing)
:vo
id+
toSt
ring
() :
Stri
ng
Firm
war
eDao
+ ge
tDat
a()
:Dat
e+
getF
onte
() :
Stri
ng+
getI
d()
:int
+ ge
tMod
elo_
ardu
ino_
id()
:in
t+
getV
ersa
o()
:Str
ing
+ se
tDat
a(D
ate)
:vo
id+
setF
onte
(Str
ing)
:vo
id+
setI
d(in
t) :
void
+ se
tMod
elo_
ardu
ino_
id(in
t) :
void
+ se
tVer
sao(
Stri
ng)
:voi
d+
toSt
ring
() :
Stri
ng
RXTX
com
m
Ard
uino
Build
er
-win
Ou
tpu
t
+a
rdu
ino
+fi
rmw
are
-win
do
ws 0..
*
#m
ain
89
3.4.4 Diagrama Entidade-Relacionamento
Na Figura 45, é apresentado o Diagrama Entidade
Relacionamento (DER) do banco de dados da ferramenta InoSensor. A
descrição das entidades geradas são descritas na sequência.
90
Figura 45 – Diagrama entidade relacionamento
Fonte: produção do próprio autor
91
config_email: Entidade responsável por armazenar as
configurações, para que o servidor Web possa enviar e-mail;
config_sistema: Entidade responsável por armazenar as
configurações de rede do servidor de aplicação que serão
utilizadas para a atualização do firmware do Arduino;
usuario: Entidade responsável por armazenar o cadastro de
administradores que terão acesso à ferramenta e à atualização
de firmware;
tipo_acao: Entidade responsável por armazenar os tipos de
ações possíveis de serem executadas pelo Arduino;
tipo_porta: Entidade responsável por armazenar os tipos de
portas existentes em um Arduino;
porta_arduino: Entidade responsável por mapear as portas
existentes em cada modelo de Arduino, de acordo com a
identificação existente;
sensor: Entidade responsável por armazenar os tipos de
sensores suportados pela ferramenta, a descrição dos sensores e
a classe JavaScript correspondente ao sensor para carregamento
dinâmico;
porta_sensor: Entidade responsável por armazenar o número e
os tipos de portas utilizadas por cada sensor.
arduino: Entidade responsável por armazenar os Arduinos
cadastrados para gerenciamento no sistema;
sensor_arduino: Entidade responsável por armazenar os
sensores conectados a cada Arduino, sua descrição e estado
inicial;
sensor_arduino_porta: Entidade responsável por armazenar a
porta em que um sensor está conectado à respectiva porta do
Arduino;
acao_sensor_arduino: Entidade responsável por armazenar as
condições de verificação dos sensores e ações que devem ser
executadas quando uma condição verdadeira ocorrer;
notificacao: Entidade responsável por armazenar as
notificações geradas pelo Arduino, para serem exibidas no
painel de notificações;
email: Entidade responsável por armazenar as solicitações de
envio de e-mail geradas pelo Arduino;
Firmware: Entidade responsável por armazenar as versões de
firmware por modelo de Arduino.
92
3.4.5 Diagrama de Atividades
O diagrama de atividades da Figura 46 apresenta a sequência
das atividades que devem ser executadas na ferramenta, para possibilitar
o gerenciamento do Arduino.
Figura 46 – Diagrama de atividades
Fonte: produção do próprio autor
93
3.5 CONCLUSÕES DO CAPÍTULO
A elaboração do projeto foi responsável por delimitar o escopo
da ferramenta InoSensor, visando contemplar os objetivos propostos
pelo trabalho.
Os artefatos e diagramas gerados durante a especificação da
ferramenta serviram de base para o desenvolvimento e são importante
fonte de referência para trabalhos futuros, pois além de simplificar a
compreensão, são responsáveis por abstrair a complexidade de todos os
componentes utilizados na fase de desenvolvimento. Durante a
implementação, algumas funcionalidades sofreram alterações e foram
posteriormente atualizadas na documentação.
94
4 IMPLEMENTAÇÃO
Neste capítulo, são apresentados os resultados obtidos durante a
fase de implementação e integração das soluções da ferramenta
InoSensor. Também são abordadas as bibliotecas utilizadas, capazes de
acelerar o desenvolvimento em versões futuras do sistema.
4.1 PADRÕES DE PROJETO MVC
Visando oferecer uma plataforma robusta e facilitar a expansão
das funcionalidades existentes na versão inicial da ferramenta
InoSensor, optou-se por utilizar na camada do servidor Web, padrões e
bibliotecas bastante difundidos e documentados na Internet. A
arquitetura MVC é bastante comum em linguagens como PHP, Java e
.NET.
Durante as pesquisas em busca de soluções para serem
empregadas no projeto, foi encontrada a biblioteca JavaScript ExtJS em
uma versão reformulada para adotar o padrão MVC através do
framework Sencha. Entre as inúmeras vantagens dessa solução, está a
capacidade de separação das funcionalidades, além da possibilidade de
identificar os componentes de forma rápida, durante uma manutenção
ou expansão.
4.2 TECNOLOGIAS E FERRAMENTAS
O desenvolvimento da ferramenta InoSensor envolveu o uso de
diferentes tecnologias, linguagens de programação e ferramentas. Com
exceção da modelagem dos diagramas da UML, que foram elaborados
na ferramenta Enterprise Architect em versão de avaliação, as demais
tecnologias e ferramentas são todas open source.
4.2.1 Servidor Web
Para o desenvolvimento da camada de aplicação da ferramenta
InoSensor, foi utilizado o servidor Web Apache3 juntamente com a
linguagem de programação PHP4 na versão 5.3.0, uma linguagem
bastante prática que conta com diversos recursos para realizar tarefas
3 Disponível em: http://www.apache.org/ 4 Disponível em: http://www.php.net/
95
como comunicação via socket, geração de arquivos e acesso a banco de
dados de forma bastante simples e rápida.
Juntamente com o PHP, foi utilizado o framework MVC
CodeIgniter versão 2.1, para separar as camadas da aplicação, prover os
mecanismos de acesso ao banco de dados e para a comunicação com a
camada de visão com o uso de requisições Asynchronous JavaScript And XML (AJAX) e JSON.
O sistema foi implementado na IDE de desenvolvimento
Eclipse, juntamente com o plug-in PHP Development Tools (PDT),
responsável por suportar as particularidades e extensões da linguagem.
4.2.2 ExtJS
Toda a interface do servidor InoSensor foi desenvolvida com a
nova SDK do framework EXTJS5, baseada nos padrões MVC e de
orientação a objetos. A partir da versão 4.0, toda a arquitetura do
framework foi remodelada seguindo os mais recentes padrões de
desenvolvimento de software. Sua API é composta de centenas de
componentes, para criar as mais diversas soluções com interfaces
semelhantes à aplicações desktop, com a vantagem de serem executadas
diretamente do navegador Web, inclusive com suporte para recursos do
HTML5.
O desenvolvimento de aplicações para Web exige grande
esforço durante a elaboração da interface, pois os navegadores usam
mecanismos de renderização diferentes, sendo necessário adaptar
diferentes versões de código e layout para manter a compatibilidade. No
framework ExtJS, essa tarefa é feita de forma transparente, devido a
compatibilidade com as versões mais recentes dos principais
navegadores, como Internet Explorer, Mozilla, Opera, Chrome e Safari.
A Figura 47 exemplifica a arquitetura do framework. Ao
desenvolver um projeto, é definida uma aplicação, carregada uma única
vez pela página principal. Essa aplicação gerencia todos os componentes
e carrega o controlador de acordo com a função selecionada. Ao
executar uma ação, o controlador é responsável por enviar as
solicitações para buscar os dados do servidor e por instanciar os objetos
e componentes que fazem parte da camada de visão para serem exibidos
para o usuário. O framework ExtJS permite manipular os dados
localmente (e.g., ordenação, armazenamento em cache), reduzindo o
5 Disponível em: http://www.sencha.com/products/extjs
96
número de acessos ao servidor da aplicação. Outra característica
importante do framework é a possibilidade de carregar classes
JavaScript de forma dinâmica, fazendo com que as classes sejam
baixadas do servidor na medida em que as solicitações são feitas, o que
gera uma menor sobrecarga na inicialização da aplicação.
Figura 47 – Diagrama MVC da aplicação InoSensor
App.js Aplicação
Controlador
Modelo Visão
Navegador Web
Fonte: produção do próprio autor
Como não existem ferramentas com suporte total a
programação em JavaScript, foram utilizados o editor Notepad++ para
codificação e o utilitário Firebug do navegador Mozilla Firefox, para
depuração do código.
4.2.3 C/C++
Para implementar o firmware do Arduino, foram estudadas as
particularidades da linguagem C/C++, para o desenvolvimento da
solução. A documentação das bibliotecas e exemplos existentes na
97
Internet facilitaram o aprendizado e auxiliaram durante o
desenvolvimento da comunicação entre o Arduino e o Servidor Web
InoSensor. A ferramenta para o desenvolvimento foi a própria IDE do
Arduino.
4.2.4 Java
A forma convencional de atualizar o firmware do Arduino é
através da IDE, com o dispositivo conectado à porta USB do
computador.
Como o objetivo da ferramenta InoSensor era facilitar o
gerenciamento de Arduino, mesmo por pessoas sem conhecimentos em
programação, optou-se por desenvolver um utilitário para atualizar o
firmware sem a necessidade de instalar a IDE. Devido à necessidade de
enumerar os dispositivos USB conectados ao computador, foi
encontrada a biblioteca Java RXTXComm. Desenvolvida pela empresa
americana MFizz, é responsável por prover os mecanismos necessários
para detecção e comunicação de dispositivos conectados à interface
serial ou paralela, a qual se mostrou bastante prática e eficiente.
Entre outros benefícios obtidos com o uso do Java, estão a
capacidade de comunicação com o banco de dados do servidor
InoSensor para controlar o acesso a usuários cadastrados e a
possibilidade do usuário selecionar versões sempre atualizadas, já que o
código fonte fica armazenado no servidor. O desenvolvimento das
interfaces foi feito pela IDE NetBeans versão 7.1.2 que facilitou a
integração com todas as bibliotecas.
4.2.5 Arduino Builder
O firmware é padrão para todos os Arduinos usados com a
ferramenta, porém devido às necessidades de configuração da
comunicação (e.g., IP, máscara, MAC Address) e segurança (e.g., usuário, senha), foi necessário compilar o código com as
particularidades de cada Arduino. Essas informações são gravadas no
código fonte, no momento de iniciar a compilação do código. A
compilação de código exige diversas etapas como compilação, geração
de arquivo-objeto e linking, para finalmente gerar o arquivo final (HEX)
para upload no Arduino.
A IDE do Arduino não possui uma versão simplificada para
execução via linha de comando, por isso optou-se por utilizar o Arduino
98
Builder, uma ferramenta alternativa para compilação de código e
atualização de firmware para Arduino, formado pelo compilador AVR-
GCC, juntamente com as bibliotecas da própria IDE do Arduino.
O Arduino Builder6 conta com um utilitário via linha de
comando, denominado Arduino Uploader, tanto para compilar o código
quanto para atualizar o firmware do Arduino conectado na interface
USB do computador. Sua execução é bastante simples, sendo necessário
informar basicamente três parâmetros: nome do arquivo de sketch,
modelo do Arduino e porta USB.
Figura 48 – Prompt de comando do Arduino Builder
Fonte: produção do próprio autor
4.3 BANCO DE DADOS
Para armazenar as informações no servidor InoSensor, foi
utilizado o SGBD relacional MYSQL7 versão 5.1. Esse banco de dados
foi escolhido devido à sua popularidade em aplicações Web e
principalmente à velocidade, facilidade e ao suporte pela grande maioria
das linguagens de programação. A modelagem do banco de dados foi
feita com a ferramenta MySQL Workbench CE na versão 5.1.
6 Disponível em: http:// arduinodev.com/arduino-uploader/ 7 Disponível em: http:/www.mysql.com/
99
4.4 PROTOCOLO DE CONFIGURAÇÕES DO ARDUINO
Para a comunicação entre o Servidor InoSensor e o Arduino, foi
definido um protocolo de comunicação com socket TCP/IP. O Arduino
pode atuar de duas formas: como um cliente socket, responsável por
enviar as notificações da ocorrência de eventos diretamente para o
servidor PHP, ou através do envio de mensagens com o protocolo HTTP
1.18. Já para receber novas configurações do servidor InoSensor, o
Arduino cria um servidor socket, realiza a autenticação para validar o
usuário e senha armazenados no Arduino e em seguida inicia a
transmissão das informações para finalmente gravá-las em um arquivo
texto no padrão CSV.
Para evitar que uma nova configuração seja transmitida
incompletamente e impeça o funcionamento, a nova configuração é
gravada em um arquivo temporário e só passa a ser válida após a devida
finalização da conexão entre o Servidor InoSensor e o Arduino.
A Figura 49 mostra a estrutura simplificada do arquivo de
configurações. Cada nó possui um identificador iniciado com o prefixo
begin (e.g., beginauth) seguido do nome do bloco e pela palavra end
(e.g., endauth), que informa o fim de um bloco.
8 Disponível em: http://w3.org/Protocols/rfc2616/
100
Figura 49 – Estrutura simplificada do arquivo CSV
101
Fonte: produção do próprio autor
Os cinco nós principais existentes no arquivo de configuração
são descritos abaixo:
Authorization: É formado pelas informações para autenticação.
Como o Arduino possui uma senha, no arquivo devem ser
informados os respectivos usuário e senha cadastrados no
sistema. Caso a autenticação falhe, o firmware irá abortar as
verificações e ações dos sensores;
Version: Possui as informações da versão do firmware,
permitindo ao servidor identificar a versão instalada no
Arduino;
Network: Possui as informações necessárias à configuração e ao
acesso à rede, além de conter as informações para comunicação
com o servidor InoSensor;
Pins: Possui as informações relacionadas às configurações das
portas do Arduino, identificando-as como portas de entrada ou
saída e inicializando seu estado;
Checks: Esse bloco pode conter uma ou mais verificações,
armazenadas linha a linha. Para cada tipo de sensor existe uma
regra padrão para montar o registro. Ao final de cada registro de
verificação existe a ação que deve ser executada quando a
condição do sensor for verdadeira. Em cada registro também
está presente um flag, informando se o servidor deve ser
notificado da ocorrência do evento ou não.
4.5 APRESENTAÇÃO DA FERRAMENTA
Nesta seção, são apresentados todos os módulos desenvolvidos
na ferramenta InoSensor e são relacionados com os devidos
identificadores dos requisitos funcionais e regras de negócio a que se
referem, com o objetivo de demonstrar a execução das atividades
previstas na etapa de projeto.
4.5.1 Módulo Web InoSensor
A interface principal do sistema possui uma estrutura padrão de
navegação. Em sua parte central são carregadas as funcionalidades, de
acordo com a função que deve ser selecionada no menu, posicionado à
esquerda da tela (Figura 50). O painel de notificações fica disponível na
102
parte inferior da aplicação para que, durante o uso da ferramenta, novas
notificações possam ser visualizadas rapidamente.
Figura 50 – Tela inicial da ferramenta InoSensor
Fonte: produção do próprio autor
4.5.1.1 Cadastro de Usuários
Para manter a segurança e garantir que as modificações sejam
feitas somente por usuários autorizados, é necessário que os
responsáveis tenham um usuário cadastrado (RF01, RN01; ver subseção
3.4.1) no servidor InoSensor. Esse usuário é necessário para acessar a
ferramenta Web e controlar a atualização do firmware do Arduino. Ao
acessar a função do menu, são listados todos os usuários cadastrados no
sistema (Figura 51). Caso necessário, um usuário pode ser desativado
diretamente da lista.
Ao clicar no botão superior direito, no sinal positivo (+), é
exibida a janela para o cadastro de usuário. Para alteração, basta
executar um duplo clique na linha em que se encontra o usuário que se
deseja alterar.
103
Figura 51 – Tela de usuários da ferramenta InoSensor
Fonte: produção do próprio autor
4.5.1.2 Configuração Geral
Para tornar as configurações da ferramenta mais flexíveis, foi
desenvolvido um módulo para armazenar o endereço do servidor (RF03,
RN24) e permitir ao firmware do Arduino se comunicar com a
ferramenta. Estão disponíveis nessa configuração três temas, que
modificam as características e cores do layout.
4.5.1.3 Configuração de E-mail
Para gerar maior flexibilidade na configuração do serviço de e-mail (RF02, RN25), é possível alterar as informações da conta de e-mail
responsável pelo envio das mensagens.
4.5.1.4 Tipo de Ação
Essa função exibe uma relação de todos os tipos de ações
(RF04, RN02) possíveis de serem executadas pelo Arduino e que estão
disponíveis na versão atual. No caso de novas ações serem adicionadas
em versões futuras, elas serão facilmente visualizadas dentro da
ferramenta. Os tipos de ações não podem ser alterados, pois impactam
em mudanças no Servidor e no firmware do Arduino.
104
4.5.1.5 Sensor
Essa função exibe uma relação de todos os sensores e atuadores
(RF05, RN03) disponíveis na versão atual, exibindo os detalhes dos
sensores suportados pela ferramenta InoSensor e facilitando a conexão
dos sensores ao Arduino.
Ao executar um duplo clique sobre um registro da lista, é
exibida uma janela contendo informações como a identificação dos
pinos e detalhes do sensor ou atuador selecionado (Figura 52). Os tipos
de sensores não podem ser alterados, pois impactam em mudanças no
Servidor e no firmware do Arduino.
Figura 52 – Tela de detalhes do sensor
Fonte: produção do próprio autor
4.5.1.6 Tipo de Porta
Os tipos de portas existentes no Arduino são categorizados e
exibidos nessa função (RF06, RN04). Essas categorias são utilizadas na
fase de configuração dos sensores, conforme as suas características. Os
105
tipos de portas não podem ser alterados, pois estão relacionados ao
hardware do Arduino.
4.5.1.7 Modelo de Arduino
Os modelos de Arduino (RF07, RN05) compatíveis com a
ferramenta InoSensor são listados nessa função. Para cada modelo são
informadas as portas e as respectivas quantidades.
Ao executar um duplo clique, é possível visualizar os detalhes
(Figura 53) de todas as portas, como número, identificação presente no
hardware, tipo de porta correspondente e se possui suporte a PWM.
Figura 53 – Exibição das configuração de portas do Arduino
Fonte: produção do próprio autor
4.5.1.8 Arduino
Para iniciar a configuração de um Arduino, é necessário
cadastrar o dispositivo (RF08, RN15, RN26). Ao acessar a listagem, são
exibidos todos os Arduinos cadastrados (Figura 54), com indicação de
conectividade e sincronização. Caso um Arduino esteja com o alarme
disparado, é possível desligar o alarme remotamente, através do botão
de reset de alarme (RF11, RN11).
106
Figura 54 – Lista de Arduinos cadastrados
Fonte: produção do próprio autor
107
Ao clicar no botão para cadastrar um Arduino, é exibida uma
janela com as informações necessárias para o funcionamento e
identificação do dispositivo na rede (Figura 55).
Figura 55 – Tela de cadastro de Arduino
Fonte: produção do próprio autor
Após o cadastro, devem ser configurados todos os sensores que
estarão presentes no Arduino. Ao selecionar um sensor, são listadas as
respectivas ações cadastradas (Figura 56). Também é possível excluir e
alterar tanto as ações quanto os sensores, com um duplo clique.
108
Figura 56 – Lista de sensores e ações do Arduino
Fonte: produção do próprio autor
109
Inicialmente, ao cadastrar um novo sensor (RF09, RN06, RN07,
RN08, RN09, RN19, RN20, RN21, RN22), deve ser selecionado um dos
tipos de sensores suportados (Figura 57). Abaixo do lado esquerdo da
janela, são exibidas todas as portas disponíveis no Arduino para serem
conectadas. Essas portas estão categorizadas por tipo e nome, para
facilitar a identificação. Do lado direito, são exibidas as portas
necessárias para o sensor selecionado. Para conectar uma porta do
Arduino à porta do sensor ou atuador, basta arrastar a porta desejada do
Arduino até a respectiva porta do sensor, respeitando-se o tipo de porta.
Após uma porta ser conectada a um sensor, ela não estará mais
disponível para uso por outro sensor.
Figura 57 – Tela para cadastro de sensor
Fonte: produção do próprio autor
Após um sensor ser cadastrado, é possível adicionar uma ou
mais ações (RF10, RN10, RN14) disponíveis na ferramenta. Ao abrir a
janela para cadastro de ação, deve ser informada uma descrição e a
condição desejada (Figura 58). Essa condição é dependente do tipo de
sensor. Em seguida, deve ser informada a ação que será executada caso
a condição informada seja verdadeira. Nesse momento, deve ser
110
informado se a ocorrência da condição deve notificar o servidor
InoSensor.
Figura 58 – Tela para cadastro de ação de um sensor
Fonte: produção do próprio autor
Após a configuração, deve ser executada a validação (RF15),
para certificar-se de que nenhuma informação importante esteja faltando
ou seja incorreta (Figura 59). As verificações são categorizadas em dois
tipos: uma advertência é simplesmente responsável por alertar o usuário
de possíveis problemas que possam ocorrer, como uma senha muito
curta, já uma mensagem de erro informa que alguma informação está
ausente ou incorreta e irá impedir o envio das configurações para o
Arduino.
Somente após a correção dos erros, será possível atualizar as
configurações do Arduino (RF12, RN12, RN13, RN16). Antes de um
Arduino receber as configurações, é realizada uma autenticação com o
usuário e senha armazenados no firmware do Arduino, impedindo que
novas configurações sejam gravadas indevidamente. Caso ocorra
alguma alteração no Arduino, será exibido um ícone, informando que as
configurações devem ser sincronizadas novamente.
111
Figura 59 – Tela de verificação de configuração
Fonte: produção do próprio autor
4.5.1.9 Monitoramento
Com o Arduino atualizado e devidamente configurado no
servidor, já é possível monitorar os sensores (RF13, RN23) conectados a
cada dispositivo. Periodicamente, o sistema verifica se novas
notificações estão disponíveis e as exibe em um painel com detalhes
como identificação do Arduino, o sensor que criou a notificação e a data
em que o servidor foi notificado (Figura 60).
112
Figura 60 – Tela de notificações
Fonte: produção do próprio autor
113
4.5.2 Módulo Atualização de Firmware
O utilitário é responsável por atualizar o firmware (RF14,
RN17, RN18, RN24) com a versão mais recente disponível no servidor
InoSensor. Para utilizá-lo, é necessário ter um usuário cadastrado no
servidor InoSensor. O utilitário é executado localmente em um
computador com interface USB, através da qual será conectado o
Arduino para atualização (Figura 61). O processo é composto de três
etapas. Na primeira fase, devem ser informados os dados do servidor e
usuário para autenticação. No segundo passo, deve ser selecionado o
Arduino que se deseja atualizar e, por fim, deve ser conectado o
Arduino à interface USB, para que o sistema possa detectá-lo e assim
iniciar a gravação do firmware.
Figura 61 – Tela do assistente de configuração
Fonte: produção do próprio autor
4.6 CONCLUSÕES DO CAPÍTULO
Para a implementação dos módulos da ferramenta InoSensor, as
tecnologias do servidor Web tiveram que ser estudadas para tornar
viável o emprego do padrão MVC proposto pelos framework. O material
da fundamentação teórica do Arduino serviu de base para a
implementação do firmware. A documentação existente na Internet
114
também foi fundamental para resolver todos os problemas identificados
durante o desenvolvimento.
115
5 TESTES E VALIDAÇÃO
Este capítulo apresenta os resultados dos testes executados para
validação da ferramenta, com o objetivo de avaliar seu funcionamento
em condições normais de uso.
Segundo Dijkstra (1972 apud GOLDMAN; KON, 2004), a
realização de testes é uma maneira eficaz de detectar a presença de
erros, porém insuficiente para demonstrar a sua total ausência.
A execução de testes pode ser considerada uma tentativa
sistemática para encontrar erros em programas que espera-se estar em
pleno funcionamento (GOLMAN; KON, 2004).
Os testes da ferramenta InoSensor foram efetuados em paralelo
ao desenvolvimento, com o objetivo de identificar possíveis falhas e
garantir a integração entre todos os módulos.
5.1 TESTES DO FIRMWARE DO ARDUINO
Durante o desenvolvimento do firmware do Arduino, foram
realizados testes individuais para avaliar o funcionamento das
características específicas de cada sensor e atuador. Foram testados dois
modelos de Arduino, o Arduino Uno e Arduino Mega2560.
Todos os componentes de hardware do projeto foram
conectados ao Arduino com o uso de uma protoboard. O Quadro 4
mostra a relação de todos os equipamentos utilizados durante os testes e
o preço médio unitário, em dólares, dos componentes comprados pela
Internet no site http://www.dx.com.
116
Quadro 4 – Componentes eletrônicos do projeto
Componente Quantidade Preço
USD
Arduino Uno 1 18,6
Arduino Mega2560 1 23,0
Shield ethernet com interface para cartão SD 1 15,0
Cartão Memória MicroSD 2GB 1 4,9
Protoboard 1 4,5
Sensor Fogo 1 3,0
Sensor de Fumaça 1 3,8
Sensor de Temperatura e Umidade 1 3,1
Fotoresistor 1 2,2
Sensor Vibração 1 3,1
Sensor Magnético 1 2,4
Sensor IR de presença 2 5,3
Relé 3 2,4
LED RGB 2 2,0
Buzzer 2 2,6
Fonte: produção do próprio autor
Durante os testes, optou-se por definir rotinas específicas para
cada sensor, visando facilitar os testes individuais e uma melhor
integração entre todas as partes que compõem o firmware do Arduino.
Após os testes dos sensores e atuadores, foi desenvolvido o
firmware do Arduino. Para simular o arquivo de configurações que
posteriormente seria gravado na memória externa do cartão SD, foi
montada uma estrutura de dados para armazenar as informações. A
partir desse ponto, foi possível ter uma ideia de como o sistema se
comportaria após as configurações serem transmitidas do servidor
InoSensor para o Arduino.
A qualidade dos sensores é um ponto que merece destaque.
Devido ao baixo custo dos sensores adquiridos inicialmente, observou-
se que a acurácia das informações lidas de alguns senores acabava sendo
afetada, tornando o sistema ineficaz e em alguns casos até gerando
informações incorretas. Para resolver esse problema, foram adquiridos
novos sensores com um custo um pouco mais alto, porém que
mostraram ser mais precisos e tolerantes a falhas.
117
Os testes dos sensores e atuadores foram realizados com o uso
do monitor da interface serial USB presente na IDE do Arduino, para
verificar o comportamento do firmware.
5.2 TESTES DE INTEGRAÇÃO
Após testar todos os sensores individualmente, foram iniciados
os testes de integração entre o servidor InoSensor e o Arduino, para
avaliar o comportamento de todo o conjunto.
Nessa fase, iniciaram-se os testes do shield ethernet, através da
comunicação com o servidor em uma rede TCP/IP e do armazenamento
das configurações do Arduino em memória externa. Para isso, foram
utilizados os equipamentos listados no Quadro 5.
Quadro 5 – Equipamentos para testes do projeto
Componente Descrição Quantidade
Roteador TP-
LINK
Roteador com 4 portas ethernet 1
Cabo ethernet Cabos para conectar o Arduino e o
servidor no roteador 2
Servidor
InoSensor
Microcomputador
Processador Intel Core i7 2.4GHz,
8GB RAM,
256GB SDD,
Sistema Operacional Windows 8
Professional,
XAMPP LITE (PHP 5.3, MySQL
5.1, APACHE)
1
Fonte: produção do próprio autor
Para facilitar o estudo das funções de rede disponíveis para o
Arduino, inicialmente foram feitos os testes através dos exemplos
disponíveis na própria IDE do Arduino. Em seguida, foram criadas as
rotinas de conexão via socket no servidor PHP, necessárias tanto para o
envio de notificações do Arduino para o Servidor, quanto para a
transmissão de configurações do Servidor para o Arduino. As
bibliotecas disponíveis em ambos os ambientes facilitaram a integração
118
e se mostraram bastante estáveis durante o envio e recebimento de
informações.
O mesmo processo foi realizado para testar o armazenamento
das configurações no cartão de memória SD, disponível no shield
ethernet. Foi identificada uma característica interessante, que facilitou
bastante o uso de ambas as soluções: a seleção automática do
barramento de comunicação serial entre o microcontrolador e os
periféricos, já que somente um periférico por vez pode acessar o
barramento. Em versões mais antigas das bibliotecas do Arduino, o
controle era feito de forma manual e a responsabilidade ficava por conta
do desenvolvedor. Nas versões mais recentes, é possível deixar que a
própria biblioteca gerencie os periféricos no barramento SPI.
Após a integração entre todos os módulos, foi testada a
atualização do firmware do Arduino através do assistente de
configurações desenvolvido com o Arduino Builder. Essa ferramenta se
mostrou bastante simples e funcional para a compilação do firmware
sem a utilização da IDE.
5.3 TESTE DE ESCALABILIDADE DO FIRMWARE
Ao desenvolver soluções de firmware para microcomputadores,
convencionalmente não é necessário controlar a alocação de memória, já
que esses recursos possuem grande capacidade de armazenamento.
Normalmente, essa tarefa é controlada pelo sistema operacional, que
gerencia a memória. Porém, o desenvolvimento para microcontroladores
exige um conhecimento aprofundado da plataforma e deve se levar em
consideração as limitações de processamento e memória de cada
dispositivo.
A ferramenta Arduino Builder possui um recurso para exibir o
percentual de consumo por cada tipo de memória. Essas informações
são geradas pelo compilador AVR para os microcontroladores Atmel e
são exibidas em gráficos para facilitar a visualização da memória total.
Na Figura 62 são exibidos três gráficos. O primeiro para a memória
Flash, onde fica armazenado o firmware do Arduino, o segundo para a
memória SRAM e o terceiro e último para a memória EEPROM.
O tamanho total da versão do firmware ficou em
aproximadamente 53KB (53954 bytes) e a memória das variáveis em
torno de 3KB (3116 bytes). Como o Arduino Mega2560 possui uma
memória de programa de 256KB, isso representa aproximadamente
20,6% da capacidade total do Arduino, o que permite ampliar as
funcionalidades sem comprometer as limitações do hardware.
119
Figura 62 – Memória utilizada pelo Arduino Mega2560
Fonte: produção do próprio autor
5.4 PROBLEMAS IDENTIFICADOS
Para testar o desempenho e disponibilidade do hardware, foi
aplicado um teste de estresse do firmware com o objetivo de avaliar o
funcionamento do Arduino. Após algumas iterações no programa
principal, observou-se o congelamento do microcontrolador, tornando o
sistema inoperante. O microcontrolador voltou ao funcionamento
somente após a reinicialização feita pelo botão reset. Para identificar o
problema, as partes do sistema foram isoladas e testadas
individualmente até que se identificou que o problema estava sendo
ocasionado na leitura das configurações em variáveis do tipo String.
Após pesquisas feitas na Internet, identificou-se que o problema
era causado pela biblioteca String.h, responsável por controlar a
memória para alocação de variáveis. Esse problema havia sido corrigido
120
na versão 1.0.5 da IDE do Arduino, então após a atualização da IDE não
ocorreram mais travamentos.
Inicialmente, a proposta contemplava o uso de ambos os
modelos do Arduino citados anteriormente, porém somente o Arduino
Mega2560 se mostrou compatível, devido ao tamanho final do firmware
e à memória para o Arduino Uno ser de apenas 32KB.
Mesmo com as configurações armazenadas no cartão SD e com
a otimização do código, não foi possível utilizá-lo na versão 1.0 da
ferramenta InoSensor. Para tentar identificar os códigos do programa
que estavam consumindo a maior quantidade de memória, todas as
funcionalidades foram isoladas. Ao final dos testes, foi identificado que
somente as bibliotecas para comunicação via ethernet e SD consumiam
aproximadamente 19KB (18716 bytes), cerca de 57,1% da memória
total do Arduino Uno, conforme ilustra a Figura 63.
Figura 63 – Memória utilizada pelo Arduino Uno
Fonte: produção do próprio autor
121
A biblioteca nativa para manipulação de memória SD era
bastante limitada, pois não permitia, por exemplo, renomear arquivos.
Sendo assim, foram pesquisadas bibliotecas alternativas e mais
eficientes para tornar essa tarefa mais segura e fazer com que a nova
configuração somente seja ativada após a conclusão da transmissão das
informações pelo servidor.
5.5 CONCLUSÕES DO CAPÍTULO
Os testes de integração entre os módulos da ferramenta foram
fundamentais para garantir o funcionamento de acordo com os objetivos
propostos pelo trabalho. As informações disponíveis na Internet foram
essenciais para a solução dos problemas encontrados durante as fases de
desenvolvimento e testes do projeto.
Para testar a compatibilidade da interface visual do framework
ExtJS, foram executados os testes nos principais navegadores
disponíveis (Internet Explorer versão 10, Firefox versão 23 e Google
Chrome na versão 28). Os resultados mostraram total funcionamento no
Firefox e no Google Chrome. Já o navegador Internet Explorer se
comportou de maneira inesperada em algumas situações, sendo
necessária a atualização da página Web do servidor para continuar a
utilização da ferramenta.
A otimização do código para a execução do firmware no
modelo Uno necessitaria de um grande trabalho e maior conhecimento
da linguagem C. Para tentar solucionar o problema, o firmware deveria
ser programado com recursos de baixo nível, porém ainda assim, o
desenvolvimento de novas versões da ferramenta seria limitado.
122
6 CONCLUSÕES
Esse trabalho teve como objetivo desenvolver uma ferramenta
para gerenciamento de sensores na plataforma Arduino e facilitar o
processo de atualização de configurações sem a necessidade de
reprogramar o firmware, além de permitir que interessados possam
utilizar a plataforma mesmo sem conhecimentos em programação.
A ferramenta InoSensor também pode servir de apoio à
disciplinas como Programação, Redes de Computadores e Eletrônica
Básica, pois muitos dos componentes e bibliotecas podem ser facilmente
adaptados e modificados, melhorando a absorção de conhecimento com
exemplos práticos.
Devido aos diferentes sensores disponíveis, foram selecionados
os módulos com características similares e que poderiam atuar em
conjunto para serem empregados no monitoramento de ambientes.
Na fundamentação teórica (Capítulo 2), foram apresentados os
estudos relacionados à Automação e a sua consequente evolução, que
deram origem a Domótica. Também foram analisadas algumas das
soluções atuais para Automação residencial e as particularidades da
plataforma Arduino, com o objetivo de compreender o seu
funcionamento e aplicar a solução mais adequada ao projeto. Para
finalizar esses estudos, foram pesquisadas e comparadas soluções
similares disponíveis, a fim de verificar as contribuições geradas pela
ferramenta InoSensor.
Na parte de projeto (Capítulo 3), foi definida a solução proposta
através da especificação e modelagem da ferramenta, com o uso da
notação UML. Para a documentação, foram elaborados os casos de uso,
requisitos e regras de negócio. Também foram elaborados diagrama de
classe, ER, pacotes e atividades, para que as pessoas interessadas
possam compreender a solução desenvolvida.
Todas as etapas da fase de implementação (Capítulo 4) foram
documentadas com os módulos desenvolvidos. Optou-se pelo emprego
de framework para facilitar que novas versões possam ser desenvolvidas
em trabalhos futuros.
Para melhorar a usabilidade da ferramenta e garantir
compatibilidade com os navegadores, devido as características Web da
ferramenta InoSensor, optou-se por um framework desenvolvido com os
padrões da Web 2.0. A escolha do framework ExtJS foi feita com base
em trabalhos acadêmicos já realizados anteriormente e que se mostraram
bastante práticos e funcionais.
123
Com a versão 4.0 do ExtJS, foi necessário estudar as novas
particularidades, devido aos padrões e a estrutura MVC do framework.
Mesmo com a complexidade, a solução proposta por essa versão se
mostrou bastante eficiente, principalmente durante a manutenção do
código.
Após a implementação da solução, foi testada a integração entre
todos os módulos, para avaliar o funcionamento correto em condições
normais de uso. Devido à limitação do tempo disponível, não foi
possível executar um teste mais elaborado para avaliar o uso da
ferramenta em condições reais de utilização, portanto essa tarefa fica
como sugestão de um trabalho futuro.
Inicialmente, a proposta era empregar os dois modelos
convencionais de Arduino, Uno e Mega. Porém, durante o
desenvolvimento, foi identificado que a limitação de 32KB de memória
disponível no Arduino Uno impediu seu uso na versão final da
ferramenta. Apesar do custo maior do modelo Mega em relação ao
modelo Uno, a diferença é compensada pela maior capacidade de
memória e quantidade de portas do modelo Mega, que
consequentemente permite adicionar uma maior quantidade de sensores.
Em relação à estabilidade do firmware, foi identificado um problema na
biblioteca de Strings, que acabava congelando o processamento do
Arduino. Após pesquisas feitas na Internet, foi identificado que o
problema havia sido solucionado em uma nova versão da IDE. Como o
microcontrolador Atmel possui o recurso Watchdog, foi inserida no
firmware a rotina responsável por reinicializar o dispositivo
automaticamente, caso ocorra o travamento inesperado.
Ao avaliar a versão final do trabalho, pode-se concluir que
todos os objetivos foram alcançados, baseados na solução proposta, e
novos conhecimentos foram absorvidos. Com o desenvolvimento da
ferramenta InoSensor, foi possível aplicar, na prática, os principais
conteúdos vistos no curso de Especialização, como ambientes de
desenvolvimento de software, padrões de projeto, redes de
computadores e sistemas distribuídos. A versão final da solução integra
quatro linguagens de programação: Java, PHP, JavaScript e C. Essa
integração demonstra que, apesar das particularidades de cada
tecnologia, elas podem se complementar, para que a solução
desenvolvida alcance os objetivos desejados.
124
6.1 TRABALHOS FUTUROS
A proposta da ferramenta InoSensor pode ser de grande
contribuição para soluções baseadas em monitoramento de sensores na
plataforma Arduino, sem a necessidade de conhecimentos em
programação.
Como existe a dependência de um meio físico para
comunicação com o servidor, sugere-se o desenvolvimento de um
firmware para comunicação sem fio, através do padrão XBee, ou até
mesmo via GPRS, para o monitoramento em ambientes em que não seja
possível realizar o uso de rede ethernet.
Em relação ao comportamento dos sensores, fica como sugestão
a aplicação de alguma técnica de inteligência artificial para melhorar o
gerenciamento e apoio à tomada de decisões de todo o conjunto,
inclusive com o emprego de autômatos para modelar e analisar os
estados do sistema.
Sugere-se também como proposta, a adição de novos sensores e
atuadores e a inclusão de um relógio de tempo real (RTC) para executar
ações ou verificações de acordo com o tempo. Como o Arduino não
possui um relógio interno, o RTC serviria de base para atuar como
temporizador, acionador de atuadores e verificador de sensores.
125
REFERÊNCIAS
ALIEVI, C. Automação residencial com utilização de controlador
lógico programável, 2008. Disponível em: <http://www.aureside.org.br
/temastec/tcc_0410.pdf>. Acesso em: 05 jul. 2013.
ARDUINO. Arduino Reference, 2013. Disponível em:
<http://arduino.cc/en/Reference/HomePage>. Acesso em: 13 June 2013.
ATMEL. AVR 8-bit and 32-bit Microcontroller, 2013. Disponível
em:<http://www.atmel.com/products/microcontrollers/avr/default.aspx>
Acesso em: 10 July 2013.
BIONDO, R. Domótica: Sistemas e Aplicabilidade, 2011. Disponível
em: <http://www.tcc.sc.usp.br/tce/disponiveis/18/180450/tce-19102011-
122815/>. Acesso em: 15 jun. 2013.
BOLZANI, C. Desmistificando a Domótica, 2007. Disponível em:
<http://www.bolzani.com.br/artigos/art01_07.pdf>. Acesso em: 05 jul.
2013.
BOXALL, J. Arduino Workshop. 1st. ed. California. No Starch Press,
2013.
BREAKOUT, Breakout, 2013. Disponível em: <http://breakoutjs
.com/>. Acesso em: 22 ago. 2013.
DIAS, C, L. de A.; PIZZOLATO N. D. Domótica: Aplicabilidade e
Sistemas de Automação residencial, 2004. Disponível em:
<http://www.essentiaeditora.iff.edu.br/index.php/vertices/article/view/9
8/86>. Acesso em: 10 jun. 2013.
GERTZ, E.; JUSTO, P. Environmental Monitoring with Arduino.
1st. ed. California. O’Reily Media, 2012.
GOLDMAN, A.; KON, F. Testes de Software, 2004. Disponível em:
<www.ime.usp.br/~kon/presentations/testes2004.ppt>. Acesso em: 25
out. 2013.
126
HOMEBOT. Arduino Homebot, 2013. Disponível em: <https://github
.com/indyfromoz/Arduino-Homebot/>. Acesso em: 22 ago. 2013.
MARGOLIS, M. Arduino Cookbook. 1 st. ed. California. O’Reily
Media, 2011.
MARTINS, G. Princípios de Automação Industrial, 2012. Disponível
em: <www.ufsm.br/desp/geomar/automacao/Apostila_032012.pdf>.
Acesso em: 15 jun. 2013.
NODUINO. Noduino, 2013. Disponível em: <http://semu.github.io/nod
uino/>. Acesso: 22 ago. 2013.
PINHEIRO, J. Sistema de Automação, 2004. Disponível em:
<http://www.projetoderedes.com.br/artigos/artigo_sistemas_automacao.
php>. Acesso em: 07 jul. 2013.
PINHEIRO, J., Automação e controle de processos, 2013. Disponível
em: <http://www.projetoderedes.com.br/aulas/unifoa_automacao_contro
le_processos/aula02_unifoa_automacao_controle_processos.pdf>.
Acesso em: 02 jul. 2013.
PRADO, S. Barramento I2C, 2007. Disponível em:
<http://www.embarcados.com.br/Artigos/Hardware-Embarcado/Barram
ento-I2C.html>. Acesso em: 20 jul. 2013.
ROSARIO, J. Automação Industrial. 1. ed. São Paulo. Editora
Baraúna, 2009.
SALLES, T. Projeto do Controle de Varredura Automática do
Tanque Acústico, 2009. Disponível em:
<http://www.tcc.sc.usp.br/tce/disponiveis/18/180500/tce-20042010-135
025/publico/Salles_Tito_Pagoto.pdf>. Acesso em: 01 jul. 2013.
SCHNEIDER ELECTRIC. Automação residencial IHC, 2013.
Disponível em: <http://www.schneider-electric.com.br/documents/electr
icians/manual-residencial.pdf>. Acesso em: 20 jul. 2013.
SEABRA, R. M. S. O que é Software Livre, 2007. Disponível em:
<http://ansol.org/filosofia>. Acesso em: 20 ago. 2013.
127
SGARBI, J. A.; TONINANDEL, F. Domótica Inteligente: Automação
residencial baseada em Comportamento, 2006. Disponível em:
<http://fei.edu.br/~flaviot/pub_arquivos/wtdia06.pdf>. Acesso em: 10
jun. 2013.
SOARES, M. Os microcontroladores AVR Atmel - Noções Básicas,
1998. Disponível em: <http://www.arnerobotics.com.br/eletronica/Micr
ocontroladores_AVR_basico.htm>. Acesso em: 15 jul. 2013.
SOUSA, A. Um sistema de apoio à tomada de decisão para o
monitoramento remoto de centrais de alarmes patrimoniais, 2009.
Disponível em: <http://www.tede.udesc.br/tde_busca/arquivo.php?codA
rquivo=2943>. Acesso em: 20 mar. 2013.
TERUEL, E. Uma proposta de framework para sistemas de
Automação residencial com interface Web, 2008. Disponível em:
<http://www.centropaulasouza.sp.gov.br/posgraduacao/Trabalhos/Disse
rtacoes/evandro-carlos-teruel.pdf>. Acesso em: 15 jul. 2013.
TORRONE, P. Why the Arduino won and why it’s here to stay,
2011. Disponível em: <http://makezine.com/2011/05/12/why-google-
choosing-arduino-matters-and-the-end-of-made-for-ipod-tm/>. Acesso
em: 11 June 2013.
WENDLING, M. Sensores. Disponível em: <http://www2.feg.unesp.br/
Home/PaginasPessoais/ProfMarceloWendling/4---sensores-v2.0.pdf>.
Acesso em: 01 jul. 2013.
WHEAT, D. Arduino Internals. 1st. ed. New York. Apress, 2011.
WIRING. Wiring, 2013. Disponível em: <http://wiring.org.co/about.ht
ml>. Acesso em: 25 July 2013.
WOLLZ, F. Estratégias para Otimização da Iluminação e Redução
do Consumo Energético em Edifícios Residenciais, 2012. Disponível
em: <http://www.ipog.edu.br/uploads/arquivos/bdeddbda29d57021a03d
bc9cb249abe7.pdf >. Acesso em: 07 jul. 2013.
128
APÊNDICE A – Dicionário de dados
O dicionário de dados apresenta a relação de todas as entidades
do banco de dados do servidor InoSensor.
ENTIDADE CONFIG_EMAIL
Esta entidade é responsável por armazenar as configurações
utilizadas para conexão com a conta responsável por enviar os e-mails
de notificação.
Atributo Definição do atributo Tipo Dado
id Identificador único para configuração. int
servidor_email Endereço do servidor de e-mail. varchar(45)
porta_email Porta do servidor de e-mail. int
usuario_email Usuário da conta de e-mail. varchar(50)
senha_email Senha da conta de e-mail. varchar(50)
autenticacao Informa se o servidor de e-mail
requere autenticação. Os valores
possíveis são:
S – Sim
N – Não
char(1)
129
ENTIDADE CONFIG_SERVIDOR
Esta entidade é responsável por armazenar as configurações de
rede utilizadas para permitir ao Arduino realizar a comunicação com o
Servidor.
Atributo Definição do atributo Tipo Dado
id Identificador único para configuração. int
servidor Endereço IP do servidor InoSensor. varchar(20)
mascara_rede Máscara de rede do Servidor
InoSensor. varchar(20)
gateway Gateway da rede do Servidor
InoSensor. varchar(50)
porta_gateway Porta do Gateway da rede do Servidor
InoSensor. int
tema Define o tema visual utilizado pela
aplicação Web. Os valores possíveis
são:
Neptune
Classic
Gray
Accessibility
varchar(20)
130
ENTIDADE USUARIO
Esta entidade é responsável por armazenar os usuários com
acesso ao sistema.
Atributo Definição do atributo Tipo Dado
id Identificador único para usuário. int
nome Nome do usuário. varchar(45)
email E-mail do usuário varchar(45)
usuario Identificador do usuário. varchar(45)
senha Senha do usuário. varchar(45)
ativo Define se o usuário está ativo. Os valores
possíveis são:
S – Ativo
N – Não Ativo
char(1)
131
ENTIDADE MODELO_ARDUINO
Esta entidade é responsável por armazenar os modelos de
Arduino disponíveis na ferramenta InoSensor. Um modelo pode estar
relacionado a um Arduino e às portas que compõem o Arduino.
Atributo Definição do atributo Tipo Dado
id Identificador único para modelo de
Arduino. int
modelo Nome do modelo do Arduino. varchar(50)
ativo Define se o modelo está ativo. Os
valores possíveis são:
S – Ativo
N – Não Ativo
char(1)
ENTIDADE FIRMWARE
Esta entidade é responsável por armazenar as versões de
firmware de um Arduino. Um firmware é relacionado a um modelo de
Arduino.
Atributo Definição do atributo Tipo Dado
id Identificador único do firmware. int
versao Descrição da versão do firmware. varchar(5)
fonte Armazena o código fonte do
firmware. text
modelo_arduino_id Identificador de um modelo de
Arduino. int
data Data de criação do firmware. datetime
132
ENTIDADE TIPO_PORTA
Esta entidade é responsável por armazenar os tipos de portas
existentes no Arduino. Um tipo de porta é relacionado às portas de cada
modelo de Arduino e às portas utilizadas por cada tipo de sensor.
Atributo Definição do atributo Tipo Dado
id Identificador único para tipo de porta de
Arduino. int
nome Nome do tipo de porta do Arduino. varchar(50)
porta_pwm Define se a porta possui a função PWM.
Os valores possíveis são:
S – Possui PWM
N – Não possui PWM
char(1)
tipo Define se a porta é digital ou analógica.
Os valores possíveis são:
A – Analógica
D – Digital
char(1)
133
ENTIDADE TIPO_ACAO
Esta entidade é responsável por armazenar os tipos ações para
serem executadas pelo Arduino. Um tipo de ação é relacionado à ação
de um sensor de um Arduino.
Atributo Definição do atributo Tipo Dado
id Identificador único do tipo de ação Int
nome Nome do tipo de ação. varchar(45)
descricao Descrição detalhada da ação. Text
classe Nome da classe JavaScript para
carregamento dinâmico durante a
inclusão de uma ação.
varchar(100)
ENTIDADE PORTA_ARDUINO
Esta entidade é responsável por definir as portas existentes em
cada Arduino de acordo com o modelo. Uma porta do Arduino pode ser
relacionada a um sensor conectado em um Arduino.
Atributo Definição do atributo Tipo Dado
id Identificador único de uma porta de
Arduino. int
modelo_arduino_id Identificador de um modelo de
Arduino. int
id_porta Identificador da porta do Arduino. varchar(5)
num_porta Número real da porta do
microcontrolador. int
tipo_porta_id Identificador do tipo de porta. int
134
ENTIDADE SENSOR
Esta entidade é responsável por definir os tipos de sensores e
atuadores existentes e suportados pela ferramenta InoSensor. Um tipo de
sensor é relacionado a um sensor conectado em um Arduino e às portas
utilizadas por cada tipo de sensor.
Atributo Definição do atributo Tipo Dado
id Identificador único de um tipo de
sensor/atuador. Int
nome Nome do tipo de sensor. varchar(45)
descricao Descrição detalhada do tipo de sensor. varchar(5)
imagem Endereço da imagem do tipo de sensor. varchar(45)
tipo_sensor Identificador do tipo de sensor. Os
valores possíveis são:
E – Entrada (Sensor)
S – Saída (Atuador)
char(1)
classe Nome da classe JavaScript para
carregamento dinâmico da condição de
acordo com o tipo de sensor durante a
inclusão de um sensor.
varchar(50)
caracteristicas Características das portas utilizadas por
cada tipo de sensor. Text
codigo Identificador para o tipo de sensor,
utilizado internamento no firmware do
Arduino e no arquivo de configuração.
Os valores possíveis são:
rele - Rele
temp – Sensor Temperatura
varchar(10)
135
foto - Fotoresistor
fogo – Sensor Fogo
vibr – Sensor Vibração
magn – Sensor Magnético
rgb – LED RGB
buzz - Buzzer
gend – Sensor Genérico Porta Digital
pres – Sensor de Presença
ENTIDADE PORTA_SENSOR
Esta entidade é responsável por definir os tipos de portas e as
respectivas quantidades utilizadas por cada tipo de sensor. Um sensor
pode ter uma ou várias portas.
Atributo Definição do atributo Tipo
Dado
sensor_id Identificador para tipo de sensor. int
tipo_porta_id Identificador do tipo de porta. int
qt_porta_id Quantidade de portas utilizadas. int
136
ENTIDADE ARDUINO
Esta entidade é responsável por armazenar os Arduinos que
serão controlados pela ferramenta InoSensor. Um Arduino deve ser
relacionado a um modelo de Arduino e pode ter vários sensores.
Atributo Definição do atributo Tipo Dado
id Identificador único para o
Arduino. Int
modelo_arduino_id Identificador de um modelo de
Arduino. Int
descricao Descrição do Arduino. varchar(100)
usuario Usuário gravado no firmware,
utilizado para autenticação
durante a gravação e leitura de
novas configurações.
varchar(50)
Senha Senha gravado no firmware para
autenticação. varchar(50)
ip IP do Arduino na rede. varchar(50)
mascara_rede Máscara de rede do Arduino. varchar(50)
mac_address MAC Address do Arduino. varchar(50)
ativo Identificador de status do
Arduino no sistema. Os valores
possíveis são:
S – Sim
N – Não
char(1)
sincronizado Informar se as últimas
configurações foram enviadas char(1)
137
para o dispositivo. Os valores
possíveis são:
S – Sim
N – Não
gateway Gateway da rede do Arduino. varchar(50)
porta_gateway Porta do Gateway da rede do
Arduino. int
ENTIDADE SENSOR_ARDUINO
Esta entidade é responsável por definir os sensores conectados
ao Arduino.
Atributo Definição do atributo Tipo Dado
id Identificador único do sensor do
Arduino.
int
sensor_id Identificador para tipo de sensor. int
arduino_id Identificador do Arduino. int
descricao Descrição do sensor. varchar(100)
estado_inicial Estado inicial do Sensor para
informar se está ligado ou desligado.
Os valores possíveis são:
S – Sim
N – Não
char(1)
138
ENTIDADE SENSOR_ARDUINO_PORTA
Esta entidade é responsável por definir as portas utilizadas por
cada sensor conectado a um Arduino. Um sensor de um Arduino deve
estar conectado a uma ou mais portas.
Atributo Definição do atributo Tipo
Dado
porta_arduino_id Identificador de uma porta de um tipo
de Arduino.
int
sensor_id Identificador de um sensor de um
Arduino. int
ordem Ordem de conexão da porta. int
139
ENTIDADE ACAO_SENSOR_ARDUINO
Esta entidade é responsável por definir as ações para cada
sensor de um Arduino. Uma ação é relacionada a um tipo de ação e a
um sensor de um Arduino.
Atributo Definição do atributo Tipo Dado
id Identificador único de uma ação
de um sensor.
int
sensor_arduino_id Identificador de um sensor de um
Arduino. int
tipo_acao_id Identificador do tipo de ação. int
descricao Descrição da ação. varchar(50)
acao[1-5] Campo flex para armazenar
detalhes da acao executada. varchar(45)
condicao[1-9] Campo flex para armazenar
detalhes da condição da ação. varchar(45)
notificar_servidor Identificador para informar se o
servidor será notificado da
ocorrência do evento. Os valores
possíveis são:
S – Sim
N – Não
140
ENTIDADE NOTIFICACAO
Esta entidade é responsável por armazenar as notificações
enviadas pelos sensores de um Arduino. Uma notificação é relacionada
a um sensor de um Arduino.
Atributo Definição do atributo Tipo Dado
id Identificador único da
notificação.
int
acao_sensor_arduino_id Identificador da ação
relacionada a notificação int
dt_notificacao Data e hora em que o servidor
foi notificado. timestamp
mensagem Mensagem da notificação. text
verificada Identificador se a notificação
já foi exibida no painel. Os
valores possíveis são:
S – Sim
N – Não
char(1)
141
ENTIDADE EMAIL
Esta entidade é responsável por armazenar as solicitações de
envio de e-mail enviadas pelo Arduino, na ocorrência de um evento. Um
e-mail é associado a uma ação de um Arduino.
Atributo Definição do atributo Tipo Dado
id Identificador único de
envio de e-mail.
int
acao_sensor_arduino_id Identificador da ação
relacionada a notificação int
dt_notificacao Data e hora em que o
servidor foi notificado. timestamp
destinatario E-mail do destinatário da
mensagem varchar(45)
assunto Assunto da mensagem de e-
mail Varchar(200)
mensagem Mensagem do corpo do e-
mail. text