Você está na página 1de 89

CENTRO UNIVERSITRIO DE BRASLIA- UniCEUB

FACULDADE DE TECNOLOGIA E CINCIAS SOCIAIS APLICADAS FATECS


CURSO DE ENGENHARIA DA COMPUTAO

PAULO EDUARDO PROPATO SANDOVAL

MONITORAMENTO REMOTO APLICADO


AO CONTROLE DA UMIDADE AMBIENTAL

BRASLIA DF
2 SEMESTRE DE 2014

PAULO EDUARDO PROPATO SANDOVAL

MONITORAMENTO REMOTO APLICADO


AO CONTROLE DA UMIDADE AMBIENTAL

Trabalho apresentado ao Centro Universitrio de


Braslia (UniCEUB) como pr-requisito para a
obteno de Certificado de Concluso de Curso
de Engenharia de Computao.
Orientador: Prof.. MSc. Francisco Javier de
Obalda Daz

Braslia
Dezembro, 2014

AGRADECIMENTOS

Agradeo primeiramente aos meus pais, por me proporcionarem


absolutamente tudo nessa vida. Pelos valores e educao passados ao longo
desses anos e pelo apoio, compreenso e confiana que sempre tiveram comigo.
Agradeo s minhas irms, minhas melhores amigas. A presena de
vocs duas essencial na minha vida.
Um agradecimento aos professores do UniCEUB, em especial ao
professor e meu orientador MSc. Francisco Javier pela compreenso da falta de
tempo para reunies e pela motivao e estmulo que sempre me passou, atitude
fundamental para que este projeto obtivesse xito.
Aos colegas de trabalho, principalmente ao meu diretor e amigo Rafael
Aguiar, obrigado pela pacincia e apoio durante essa etapa.
Aos monitores e colegas que de alguma forma participaram desta
caminhada para me tornar engenheiro, meu muito obrigado!

Paulo Eduardo Propato Sandoval

"Action is the foundational key to all success.


Pablo Picasso

SUMRIO

CAPTULO 1 INTRODUO .................................................................................... 11


1.1

Apresentao do problema .......................................................................... 11

1.2

Objetivos ...................................................................................................... 12

1.2.1

Objetivo Geral ........................................................................................ 12

1.2.2

Objetivos Especficos ............................................................................ 12

1.3

Motivao ..................................................................................................... 13

1.4

Metodologia .................................................................................................. 13

1.5

Resultados Esperados ................................................................................. 14

1.6

Estrutura do trabalho .................................................................................... 14

CAPTULO 2 REFERENCIAL TERICO .................................................................. 15


2.1

Elementos principais que compem o prottipo ........................................... 15

2.1.1

Plataforma Arduino ................................................................................ 15

2.1.2

Sensor de temperatura e umidade DHT11 ............................................ 17

2.1.3

Sensor de BlueTooth HC-05 .................................................................. 17

2.1.4

Sensor de nvel da gua ICOS LA16M-40............................................. 18

2.1.5

Rel ....................................................................................................... 19

2.1.6

Transistor 2N3904 ................................................................................. 20

2.1.7

Resistor ................................................................................................. 22

2.1.8

Diodo 1N4007 ........................................................................................ 23

2.2

Programao ................................................................................................ 23

2.2.1

Algoritmos .............................................................................................. 24

2.2.2

Estruturas de Dados .............................................................................. 25

2.2.3

Linguagem C++ ..................................................................................... 28

2.2.4

GUI (Graphic Use Interface) .................................................................. 28

2.2.5

QT Creator ............................................................................................. 29

2.3

Umidade Relativa do Ar ............................................................................... 32

2.4

Umidificador ................................................................................................. 33

CAPTULO 3 DESENVOLVIMENTO DO PROTTIPO ............................................ 35


3.1

Viso Geral do Projeto ................................................................................. 35

3.2

Descrio das Etapas .................................................................................. 39

3.2.1

Montagem do Hardware ........................................................................ 39

3.2.2

Escolha do modo de funcionamento...................................................... 40

3.2.3

Comunicao com Arduino .................................................................... 44

3.2.4

Repasse de dados e acionamento do umidificador ............................... 49

CAPTULO 4 TESTES E RESULTADOS ALCANADOS ........................................ 55


4.1.1

Captao dos sensores ......................................................................... 55

4.1.2

Comunicao com bluetooth ................................................................. 56

4.1.3

Sensor de nvel ...................................................................................... 58

4.1.4

Acionamento do rel .............................................................................. 61

4.1.5

Desligamento automtico ...................................................................... 61

CAPTULO 5 CONCLUSES E CONSIDERAES FINAIS ................................... 63


5.1

Concluses .................................................................................................. 63

5.2

Sugestes para trabalhos futuros ................................................................ 63

Referncias......................................................................................................... 64
APNDICE A PROGRAMA DO ARDUINO ..................................................... 66
APNDICE B HEADER INTERFACE USURIO ............................................. 71
APNDICE C MAIN INTERFACE USURIO .................................................. 76
APNDICE D PROGRAMA PRINCIPAL INTERFACE USURIO ................... 77

LISTA DE FIGURAS
FIGURA 2. 1 - PLACA ARDUINO UNO .................................................................... 16
FIGURA 2. 2 - SENSOR DE UMIDADE E TEMPERATURA ..................................... 17
FIGURA 2. 3 - MDULO BLUETOOTH HC-05 ......................................................... 18
FIGURA 2. 4 - SENSOR DE NVEL DA GUA ......................................................... 19
FIGURA 2. 5 REL 1POLO 5V ................................................................................. 20
FIGURA 2. 6 - TRANSISTOR COM DESCRITIVO DOS FILAMENTOS ................... 21
FIGURA 2. 7 - TRANSISTOR 2N3904 ...................................................................... 21
FIGURA 2. 8 - RESISTORES.................................................................................... 22
FIGURA 2. 9 - DIODO 1N4007 ................................................................................. 23
FIGURA 2. 10 - INTERFACE DO USURIO DESENVOLVIDA PARA O PROJETO 29
FIGURA 2. 11 - PGINA DE ENTRADA DA IDE DO QT CREATOR ....................... 30
FIGURA 2. 12 - QT CREATOR OVERVIEW ............................................................. 30
FIGURA 2. 13 - EDITOR DO QT CREATOR ............................................................ 31
FIGURA 2. 14 - DESIGNER DO QT CREATOR ....................................................... 32
FIGURA 2. 15 - NDICE DE UMIDADE RELATIVA X TEMPERATURA ................... 33
FIGURA 2. 16 - UMIDIFICADOR UTILIZADO NO PROJETO................................... 34
FIGURA 3. 1 - VISO GERAL DO PROJETO .......................................................... 35
FIGURA 3. 2 - HARDWARE DESENVOLVIDO......................................................... 36
FIGURA 3. 3 - INTERFACE DE COMUNICAO .................................................... 36
FIGURA 3. 4 - DIAGRAMA DE BLOCOS DO PROJETO ......................................... 37
FIGURA 3. 5 - ESQUEMTICO DOS COMPONENTES NO PROTEUS .................. 39
FIGURA 3. 6 GUI DESENVOLVIDO ......................................................................... 41
FIGURA 3. 7 PORTA SERIAL DO BLUETOOTH...................................................... 46
FIGURA 3. 8 - TABELA ASCII GRIFADA. ................................................................. 54
FIGURA 4. 1 - TESTE DE CAPTAO DE UMIDADE E TEMPERATURA .............. 55
FIGURA 4. 2 - VARIAO NA UMIDADE E TEMPERATURA ................................. 56
FIGURA 4. 3 - INICIANDO O PROGRAMA TERA TERM PARA FAZER A CONEXO
SERIAL ............................................................................................................... 57
FIGURA 4. 4 - TERMINAL COM O PROGRAMA FUNCIONANDO .......................... 57
FIGURA 4. 5 - HARDWARE COM SENSOR ABERTO ............................................. 58
FIGURA 4. 6 - RESPOSTAS DOS CENRIOS PROPOSTOS NO TERA TERM ..... 59
FIGURA 4. 7 - RESPOSTA DO TESTE DE SENSOR DE NVEL NA INTERFACE
PARA ESTADO VAZIO....................................................................................... 59
FIGURA 4. 8 - HARDWARE COM SENSOR FECHADO .......................................... 60
FIGURA 4. 9 - RESPOSTA DO TESTE DE SENSOR DE NVEL NA INTERFACE
PARA ESTADO CHEIO ...................................................................................... 60
FIGURA 4. 10 - FUNCIONAMENTO DO UMIDIFICADOR........................................ 61

SIGLAS

EDR Enhanced Data Rate


EPROM Erasable Programmable Read Only Memory
GND Ground
GUI Graphical User Interface
IDE Integrated Developmnet Enviroment
OMS Organizao Mundial de Sade
RAM Random Access Memory
RFCOMM - Radio Frequency Communications
SI Sistema Internacional
SSP Serial Port Protocol
USB Universal Serial Bus

RESUMO
Este trabalho tem como proposta, desenvolver um sistema remoto de controle de
umidificao. O projeto consiste em uma interface grfica desenvolvida em C++ que
utilizada para controlar os modos de operao do umidificador. Para a
comunicao entre o sistema e o hardware foi utilizada a conexo bluetooth. Alm
do controle, o sistema informa a temperatura e a umidade relativa do ar, tambm
disponibilizando na interface, o nvel do reservatrio de gua do umidificador. A
plataforma Arduino pea fundamental, uma vez que a conexo com o sistema
esteja estabelecida, ele quem, utilizando os sensores acoplados, disponibiliza os
dados de temperatura do ambiente, umidade relativa do ar e o nvel da gua do
reservatrio, alm de interpretar as instrues do sistema e acionar o funcionamento
do umidificador.

Palavras chaves: Arduino, Umidificao, Bluetooth, C++, Remoto.

ABSTRACT
This work has as a purpose, develop a humidity control remote system. The project
consists of a graphical interface developed using C++ which is used to control the
humidifiers operational modes. It was used a Bluetooth connection for the
communication between the system and the hardware. Besides the control, the
system informs the temperature and the relative air humidity, also displaying at the
interface, the water level at the humidifiers container. The Arduinos platform is
fundamental key, once the connection with the system is established, it is it that,
using coupled sensors, make available the environment temperature data, relative air
humidity and the water containers level, besides to interpret the system instructions
and activate the humidifier functioning.

Keywords: Arduino, Humidifier, Bluetooth, C++, Remote.

11

CAPTULO 1 INTRODUO
1.1

Apresentao do problema
O perodo de inverno conhecido por potencializar vrias doenas tpicas

da poca, como gripes e alergias. Porm, outro fator vem preocupando as entidades
de sade: a falta de umidade.
Umidade relativa definida como a relao de gua no ar ambiente para
a quantidade total de umidade que pode ser carregada no ar numa determinada
temperatura ambiente, expressa como percentual.
Em 2011, nas primeiras semanas de agosto, Braslia chegou a registrar
um nvel de umidade comparvel ao deserto do Saara, com 10% de umidade relativa
do ar (SANTOS, 2011) e em 2010, 7%. (ESTADO, 2010). Segundo a Organizao
Mundial de Sade (OMS), a umidade do ar ideal de 60%. A OMS recomenda a
declarao do estado de ateno quando os ndices ficam abaixo de 30%.
Nveis baixos de umidade podem acentuar os efeitos de alergias
respiratrias, j que a umidade do ar essencial para ajudar o organismo a eliminar
as impurezas provenientes da aspirao do ar. Pessoas com bronquite, rinite e
asma, precisam redobrar os cuidados.
Para diminuir os efeitos da baixa umidade, normalmente, empregam-se
umidificadores, que, aumentando os ndices de umidade relativa do ambiente,
podem ajudar a melhorar a qualidade do ar. Seu funcionamento bastante simples:
um pequeno tanque de gua acondicionado junto a um emissor de ultrassom, que
quando ligado, quebra as molculas de gua. Combinados a um ventilador, h a
disperso da gua em forma de nvoa sobre o ambiente.

12

1.2

Objetivos

1.2.1 Objetivo Geral


O projeto tem como objetivo criar um sistema de hardware e software que
ir controlar um umidificador para melhorar a umidade relativa do ar tomando
cuidado para que tambm no exceda o nvel considerado prejudicial pela Comisso
Municipal da Defesa Civil de Campinas, definido como 80%.
Este sistema informa a temperatura do ambiente, umidade e nvel da
gua no reservatrio do umidificador, possuindo quatro modos: manual, automtico,
temporizador e desligado.
O modo manual se caracteriza por ser capaz de configurar a umidade
relativa do ar desejada para que o umidificador seja ativado.
O automtico se caracteriza por ativar o sistema at que a umidade
chegue a 80%.
O temporizador se caracteriza por ser capaz de configurar o tempo
desejado que o umidificador permanece ligado.
O desligado desativa o sistema.

1.2.2 Objetivos Especficos

1. Desenvolver um sistema em C++ que ir comandar o hardware de


controle

montado

em

cima

do

Arduino

conectado

ao

funcionamento do umidificador.
2. Adaptar interface do umidificador do Arduino.
3. Programao

do

sistema,

mostrando

acionamento

dos

dispositivos conforme dados adquiridos do ambiente.


4. Mostrar as informaes de controle na prpria tela do computador.

13

1.3

Motivao

A motivao deste projeto se originou nos alertas constantes sobre a


baixa umidade do ar, no perodo de inverno, em Braslia. O uso de umidificadores
cada vez mais necessrio e um sistema remoto para controlar o uso destes
aparelhos facilitaria o dia a dia das pessoas.

1.4

Metodologia

Para obter o resultado esperado, a interface desenvolvida deve


apresentar as informaes da temperatura e umidade relativa do ar, e ser capaz de
controlar a seleo dos mdulos do umidificador; Automtico, Manual, Temporizador
e Desligado, por meio de comunicao Bluetooth. Estas informaes so obtidas por
hardware composto de sensores de temperatura e umidade relativa do ar. Neste
cenrio, como metodologia para desenvolver o trabalho proposto, so delineadas as
seguintes etapas:
1 A primeira etapa composta pela coleta da temperatura e umidade
do ar e do nvel da gua no reservatrio do umidificador. Esta coleta
ser realizada a partir de sensores instalados em hardware
desenvolvido como parte do projeto.
2 A segunda etapa composta pela transferncia desta informao
para o software. Realizada via Bluetooth.
3 A terceira etapa ser a seleo do modo de operao do sistema. O
software responsvel por enviar o modo que o hardware ir
operar.
4 Por fim, se o nvel da gua ficar abaixo de um nvel mnimo definido
na instalao do sensor, o sistema entra em modo Desligado.

14

1.5

Resultados Esperados

Como resultado deste projeto, espera-se desenvolver um sistema que ir


auxiliar no controle, de maneira automatizada, da umidade relativa do ar em um
ambiente.

1.6

Estrutura do trabalho
A estrutura do trabalho se divide nos seguintes captulos:
O captulo 1 expe uma breve introduo, motivao, objetivos e

resultados esperados em relao ao projeto composto.


No captulo 2 apresentado o referencial terico sobre umidade relativa
dor ar, o umidificador, elementos que compem o hardware e programao.
No captulo 3 apresentado o desenvolvimento do prottipo, mostrando
descrio da construo e a descrio dos materiais utilizados.
O captulo 4 apresenta os testes realizados no prottipo.
No captulo 5 so apresentadas as concluses do trabalho.

15

CAPTULO 2 REFERENCIAL TERICO


Neste captulo ser abordada a teoria e o cenrio que envolve este
projeto. Funcionamento de umidificadores, a importncia da umidade relativa do ar e
uma introduo em relao aos principais componentes utilizados.

2.1

Elementos principais que compem o prottipo


Neste item ser abordada a teoria que envolve os principais componentes

utilizados no desenvolvimento do prottipo. O uso de cada componente detalhado e


suas funes no projeto sero descritos no captulo 3, o de desenvolvimento.

2.1.1 Plataforma Arduino


Arduino uma plataforma de prototipagem eletrnica de hardware livre e
placa nica (LEMOS, 2013). Projetado com um microcontrolador Atmega328 com
suporte I/O embutido, uma linguagem de programao padro, a qual tem origem
em Wiring e essencialmente C/C++ (ARDUINO, 2014).
O projeto Arduino originou-se na cidade de Ivrea, Itlia, em 2005, por
Massimo Banzi e David Cuartielles, com o intuito de interagir em projetos escolares.
Desde seu lanamento, o Arduino se tornou um produto de sucesso por conta de
sua facilidade de uso e durabilidade (MONK, 2013).
A IDE (Integrated Development Environment) responsvel pela
comunicao entre o Arduino e o computador. Esse software, desenvolvido em Java,
executado no computador e possibilita a criao de sketches, ou cdigos, para a
placa Arduino. Depois de criado, feito o upload do sketch para a placa, o cdigo
traduzido para a linguagem C, e este novo cdigo transmitido a um compilador que
realiza a traduo final dos comandos para uma linguagem compreendida pelo
microcontrolador (BANZI, 2011).
Na Figura 2.1, possvel observar a placa do Arduino UNO, ltimo
modelo da srie mais popular de placas Arduino, a qual utilizada neste projeto. O

16

nmero 1 representa o conector USB (Universal Serial Bus), responsvel pela


comunicao do Arduino com o computador. O boto RESET representado pelo
nmero 2 reinicializa o microcontrolador, comeando a executar o cdigo desde o
incio. Indicadas pelo nmero 3 esto as conexes digitais que podem ser uma
entrada ou uma sada. Quando utilizada como sada, seu comportamento se
assemelha aos conectores de alimentao eltrica de 5 volts. Entre os conectores
digitais e de alimentao, existem dois conectores GND (Ground ou Terra) que
possuem 0 volts. O nmero 4 representa o microcontrolador Atmega328. Contm:
Processador, memria RAM (Random Acess Memory) para armazenar dados e
memria EPROM (Erasable Programmable Read Only Memory) que armazena os
programas desenvolvidos.

O nmero 5 indica as entradas analgicas utilizadas

como entradas e sadas digitais. Representado pelo nmero 6, esto os conectores


de alimentao eltrica. Os conectores fornecem tenses de 5 volts e 3,3 volts
conforme indicados na placa. E por fim, o nmero 7 o conector de alimentao do
Arduino (MONK, 2013).

Figura 2. 1 - Placa Arduino UNO (Fonte: Autor)

17

2.1.2 Sensor de temperatura e umidade DHT11


Um sensor um dispositivo que responde a um estmulo fsico/qumico de
maneira especfica e mensurvel analogicamente. Os sensores de temperatura e
umidade da famlia DHTxx so compostos por um sensor capacitivo para medir a
umidade e por um termistor, que so dispositivos eltricos que tm sua resistncia
eltrica alterada termicamente. Ambos os sensores so calibrados nos laboratrios
durante sua fabricao (ELETRONICS, 2013). A Figura 2.2 ilustra o sensor DHT11
que foi utilizado no projeto para coletar dados de temperatura e umidade.

Figura 2. 2 - Sensor de umidade e temperatura (Fonte: www.inmotion.pt)

2.1.3 Sensor de BlueTooth HC-05


O Bluetooth uma tecnologia desenvolvida que visava a substituio de
cabos de sinal, mas atualmente permite at implementar redes de comunicao com
vrios dispositivos interconectados, tais como: computadores, fones de ouvido,
celulares, impressoras, cmeras digitais, tablets, entre outros (HUGNEY, 2014).
O protocolo Bluetooth complexo e composto por vrias camadas, uma
parte feita por hardware e outra pelo software embarcado no dispositivo de
aplicao. Porm, o Bluetooth permite um protocolo denominado RFCOMM (Radio
Frequency Communications), que emula uma comunicao serial padro, permitindo

18

a troca de informaes entre dispositivos como se fossem conectados por um cabo


destinado comunicao RS232.
A Operao EDR (Enhanced Data Rate) com modulao de 3Mbps com
rdio transceptor em 2.4GHz, a qual emprega um algoritmo de alta velocidade de
deslocamento pseudoaleatrio de frequncia (altera a frequncia de trabalho
continuamente) com uma chave de criptografia de 128 bits, torna a comunicao
muito segura (HUGNEY, 2014).
A Figura 2.3 mostra o mdulo bluetooth HC-05. Esse mdulo integra um
chip Bluetooth SPP (Serial Port Protocol) responsvel por realizar o protocolo de
porta serial, tornando a comunicao sem fio transparente ao usurio (HUGNEY,
2014).

Figura 2. 3 - Mdulo BlueTooth HC-05 (Fonte: blog.roman-mueller.ch)

2.1.4 Sensor de nvel da gua ICOS LA16M-40

Sensores de nvel detectam nvel de lquidos em reservatrios na altura


em que forem instalados, com contato ON/OFF como sada. Tambm conhecidos
como chave de nvel ou bia de nvel, funcionam com contato Reed Switch
(contatos hermeticamente selados que comutam com um campo magntico) e
flutuador magntico (ICOS, 2014).

19

Para determinar um modelo de sensor ou chave de nvel, fundamental


saber qual lquido se deseja detectar o nvel. A Figura 2.4 ilustra o sensor LA16M-40
utilizado neste projeto. O LA16M-40 indicado para gua, leo e combustveis
(ICOS, 2014).

Figura 2. 4 - Sensor de nvel da gua (Fonte:http://www.icos.com.br/SensorDeNivel/LA16M40/)

2.1.5 Rel

Tendo o surgimento em torno do sculo XIX, o Rel um dispositivo


eletromecnico, formado por um magneto mvel, que desloca unindo dois contatos
metlicos funcionando como um interruptor. A movimentao fsica desse interruptor
ocorre quando a corrente eltrica percorre as espiras da bobina do rel, criando um
campo magntico que atraia a alavanca responsvel pela mudana do estado dos
contatos (SANTOS, 2012).
A Figura 2.5 ilustra o rel 1POLO 5V utilizado no projeto para acionar o
funcionamento do umidificador.

20

Figura 2. 5 Rel 1POLO 5V (Fonte:http://www.huinfinito.com.br/reles/361-rele-1polo-5v.html)

2.1.6 Transistor 2N3904

Criado na dcada de 1950, o transistor um componente eletrnico


responsvel pela revoluo da eletrnica, segundo (MORIMOTO, 2004), na dcada
de 1960. A importncia do transistor relacionada a ter tornado possvel a
disseminao dos computadores e equipamentos eletrnicos, pelo seu baixo preo e
sua possibilidade de ser produzido em enormes quantidades utilizando tcnicas
simples. So utilizados como amplificadores e interruptores de sinais eltricos sendo
conveniente salientar que praticamente impossvel encontrar um circuito integrado
que no possua, internamente, centenas, milhares ou mesmo milhes de
transistores.
Um transistor composto, basicamente, de trs filamentos, base, emissor
e coletor, como pode ser visto na Figura 2.6, para o caso de um transistor NPN. O
emissor o polo positivo, o coletor o negativo, e a base quem controla o estado do

21

transistor. Quando se aplica uma tenso na base, normalmente maior que 0,7 Volts,
o circuito fechado e estabelecida a corrente entre o emissor e o coletor.

Figura 2. 6 - Transistor com descritivo dos filamentos (Fonte: www.instructables.com)

A Figura 2.7 ilustra o transistor 2N3904 utilizado no projeto. O transistor


funciona como interruptor para o acionamento do rel, recebendo uma tenso
proveniente do Arduino em sua base e controlando a corrente para o rel.

Figura 2. 7 - Transistor 2N3904 (Fonte:Autor)

22

2.1.7 Resistor

Conhecidos como componentes bsicos de um circuito eltrico, os


resistores so utilizados para controlar a intensidade de corrente que passa pelos
diversos componentes bem como controlar a tenso aplicada em cada parte do
circuito.
O funcionamento dos resistores est baseado na resistncia eltrica que
todos os materiais possuem. A resistncia, que serve como relao de tenso para a
corrente, medida em Ohms, unidade SI (Sistema Internacional). Um componente
tem a resistncia de 1 Ohm se uma tenso de 1 volt no componente fizer com que
percorra, pelo mesmo, uma corrente com a intensidade de 1 Ampre.
Devido ao seu tamanho reduzido, foi criado um cdigo de cores que
impresso no resistor para indicar sua resistncia.
A Figura 2.8 representa o resistor de 1k2 utilizado no projeto para limitar a
tenso passada para o transistor.

Figura 2. 8 - Resistores (Fonte: www.comptotal.com.br)

23

2.1.8 Diodo 1N4007

O diodo um componente que possibilita o fluxo de corrente em uma


nica direo. Caso a corrente tente voltar na direo contrria, ele a impede.
composto por uma juno P-N. Possui uma faixa branca perto do terminal negativo.
Esta faixa representa uma barreira. A eletricidade corre atravs do diodo pelo
terminal que no tem a barreira. Quando a voltagem revertida e tenta fluir pelo lado
que tem a faixa, h uma interrupo na corrente (MCROBERTS, 2011).
A Figura 2.9 ilustra o diodo utilizado no projeto para que sirva como uma
barreira de corrente, no permitindo que flua para a placa do Arduino, possivelmente
queimando-a.

Figura 2. 9 - Diodo 1N4007 (Fonte: Autor)

2.2

Programao

O homem sempre procurou, desde o incio de sua existncia, criar


mquinas que o auxiliasse em seu trabalho, diminuindo esforo e economizando
tempo. O computador, at o momento, vem se mostrando ser uma das mais
versteis, rpidas e seguras, dentre estas mquinas.

24

O computador pode auxili-lo em qualquer tarefa. trabalhador, possui


muita energia, mas no tem iniciativa, nenhuma independncia, no criativo nem
inteligente, por isso precisa receber instrues nos mnimos detalhes (ASCENCIO,
1999).
A finalidade de um computador de realizar a tarefa de processamento
de dados, isto , receber dados por um dispositivo de entrada (por exemplo, teclado,
mouse, scanner, entre outros), realizar operaes com esses dados e gerar um
resposta que ser expressa em um dispositivo de sada (por exemplo, impressora,
monitor de vdeo, entre outros) (ASCENCIO, 1999).
Portanto, um computador possui duas partes diferentes que trabalham
juntas: o hardware, composto por partes fsicas, e o software, composto pelos
programas. Para criar ou desenvolver um software para realizar determinado tipo de
processamento de dados, necessrio escrever um programa ou vrio programas
interligados. No entanto, para que o computador compreenda e execute esse
programa, deve-se escrev-lo usando uma linguagem que tanto o computador
quanto o criador de software entendam. Essa linguagem chamada de Linguagem
de Programao (ASCENCIO, 1999).
O conceito central da programao o de algoritmo (LAGES, 1988).
Programar basicamente construir algoritmos. Programas so formulaes
concretas de algoritmos abstratos, baseados em representaes e estruturas
especficas de dados.
Outro aspecto fundamental da construo de programas so as estruturas
de dados usadas no algoritmo para representar as informaes do problema a ser
resolvido (LAGES, 1988).

2.2.1 Algoritmos

Para que seja possvel entender o conceito de algoritmo, importante que


o conceito de ao seja fixado. Ao um acontecimento que, a partir de um
estado inicial, aps um perodo de tempo finito, produz um estado final previsvel e

25

bem definido (FARRER, BECKER, et al., 1989). Dessa forma, algoritmo a


descrio de um conjunto de comandos que, obedecidos, resultam numa sucesso
finita de aes.
Exemplo de algoritmo:

Algoritmo
repita
invente um problema
escreva um algoritmo para sua resoluo
se estiver cansado
ento interrompa
fim se
mostre os algoritmos feitos para um colega
Fim algoritmo

Um algoritmo geralmente se destina a resolver um problema. Fixa um


padro de comportamento a ser seguido, uma norma de execuo a ser trilhada,
para se atingir como resultado, a soluo de um problema (FARRER, BECKER, et
al., 1989).

2.2.2 Estruturas de Dados

Para se resolver um problema por meio de um programa, a primeira


providncia conceber um algoritmo adequado. No entanto, a eficincia de um
algoritmo qualquer est intimamente relacionada disposio, na memria, dos

26

dados que so tratados pelo programa. Por exemplo, se frequentemente


enfrentarmos o problema de descobrir os nmeros de telefones de nossos
conhecidos, conveniente dispor de uma relao de nmeros, organizada em uma
agenda. Se a organizao for feita por ordem alfabtica, a agenda de fato ajuda. Se,
porm, organizssemos nossa agenda pela ordem de altura das pessoas, com raras
excees, a agenda se tornaria difcil de manusear (PCCOLO, 2000).
Estruturas de dados so formas de distribuir e relacionar os dados
disponveis, de modo a tornar mais eficiente os algoritmos que manipulam esses
dados. Por exemplo:

Problema
Manipular um conjunto de fichas de um fichrio.

Soluo
Organizar as fichas em ordem alfabtica.

Operaes possveis
Inserir ou retirar uma ficha, procurar uma ficha, etc.

Estrutura de Dados Correspondente


LISTA sequncia de elementos dispostos em ordem.

27

Outro exemplo:
Problema
Organizar as pessoas que querem ser atendidas num guich.

Soluo
Colocar as pessoas na fila.

Operaes possveis
medida que uma pessoa atendida no guich, outra entra no final da
fila. No permitido furar a fila.

Estrutura de Dados Correspondente


FILA sequncia de elementos dispostos em ordem com uma regra para
a entrada e sada dos elementos.

O estudo de estruturas de dados parte fundamental para o


desenvolvimento de programas e algoritmos. Assim como um nmero pode ser
representado em vrios sistemas diferentes, tambm um conjunto de dados
relacionados entre si pode ser descrito atravs de vrias estruturas de dados
distintas.
Quando o programador cria um algoritmo para solucionar um problema,
ele tambm cria uma estrutura de dados que manipulada pelo algoritmo. A escolha
de uma determinada estrutura pode afetar substancialmente a quantidade de rea
de armazenamento requerida para o processamento bem como o tempo deste
processamento.

28

, portanto, de grande importncia o estudo de diferentes estruturas que


possam ser utilizadas eventualmente na resoluo de um problema, de maneira a
simplificar a sua implementao prtica, como o caso do projeto aqui
desenvolvido.

2.2.3 Linguagem C++

Com o princpio de escrever e manter o sistema operacional UNIX, a


linguagem C foi desenvolvida por Dennis Ritchie, dos AT&T Bell Laboratories, na
dcada de 70 (SAVITCH, 2004).
Por ser uma linguagem de alto nvel com muitos recursos de linguagem
de baixo nvel, C possui vantagens e desvantagens por sua peculiaridade. Como o
Assembly, a linguagem C pode manipular diretamente a memria do computador.
Por outro lado, ela possui recursos de linguagem de alto nvel, o que a torna mais
fcil de ler e escrever que o Assembly. No entanto, para alguns programas, C no
to fcil de entender quanto outras linguagens. Alm disso, no possui tantas
verificaes automticas quanto outras linguagens de alto nvel.
Para superar essas e outras desvantagens, segundo (SAVITCH, 2004),
Bjarne Stroustrup, dos AT&T Bell Laboratories, desenvolveu o C++ no incio da
dcada de 80. A maior parte de C subconjunto da C++, no entanto, ao contrrio de
C, C++ possui recursos para classes e, portanto, pode ser usada para a
programao orientada a objetos.

2.2.4 GUI (Graphic Use Interface)

GUI (Graphical User Interface) um tipo de interface do usurio que


permite a interao com dispositivos digitais atravs de elementos grficos como
cones e outros indicadores visuais, em contraste com a interface de linha de
comando.

29

A iterao feita geralmente atravs de um mouse ou teclado, permitindo


que o usurio selecione smbolos representativos de forma a obter algum resultado
prtico.
A Figura 2.10 mostra a interface desenvolvida no projeto. Nela as
informaes de temperatura e umidade, como tambm o nvel do reservatrio do
umidificador, so disponibilizadas. Abaixo dos sensores, possvel notar os
controles de modos de operao do sistema.

Figura 2. 10 - Interface do usurio desenvolvida para o projeto (Fonte: Autor)

2.2.5 QT Creator

O desenvolvimento do que eventualmente iria se transformar no QT


Creator comeou em 2007, no escritrio da TrollTech GmbH, com o nome de
Workbench e posteriormente Project Greenhouse (TESKE, 2009).
Qt Creator uma IDE multi-plataforma e traz consigo a Qt SDK. A Figura
2.11 ilustra as ferramentas que o Qt proporciona para desenvolver aplicaes
desktop e celulares.

30

Figura 2. 11 - Pgina de entrada da IDE do QT Creator (Fonte: Autor)

Para ser capaz de construir e rodar aplicaes, o Qt Creator precisa


das mesmas informaes que um compilador precisaria. Essas informaes so
especificadas no Project build e run settings. A criao de um Projeto no Qt Creator
permite que voc agrupe arquivos, adicione padronizao no passo a passo para
desenvolvimento, inclua formas e arquivos de recursos e especifica as configuraes
da aplicao. A Figura 2.12 ilustra o que foi dito.

Figura 2. 12 - QT Creator Overview


(Fonte:http://developer.nokia.com/community/wiki/Qt_Creator)

31

O Qt Creator possui a parte de edio de cdigo e um modelador de


interface grfica (Qt Designer) para desenvolvimento de GUIs. O Editor, ilustrado
pela Figura 2.13, entende linguagens de programao C++ e QML, auxiliando na
formatao do cdigo, completando comandos, demonstra o erro na linha e
mensagens de alerta, entre outros. O Designer, ilustrado pela Figura 2.14,
proporciona as ferramentas necessrias para se criar GUIs atravs de widgets
disponibilizados pelo QT. Formas e widgets criados no Designer so integradas com
cdigos programados facilitando o agendamento de funo daquele elemento
grfico.

Figura 2. 13 - Editor do QT Creator (Fonte: Autor)

32

Figura 2. 14 - Designer do QT Creator (Fonte: Autor)

Se for instalado como parte do Qt SDK, a ferramenta de depurao GNU


Symbolic Debbuger instalada automaticamente e pronta para ser usada quando
um novo projeto for criado. No entanto, podem-se utilizar outros sistemas de
depurao, configurando para, por exemplo, utilizar ferramentas do Windows.

2.3

Umidade Relativa do Ar

Umidade relativa relao entre a presso de vapor do ar (medida em


pascal) e a presso de vapor do ar obtida em condies de equilbrio ou saturao
sobre

uma

superfcie

de

gua

lquida

ou

gelo

(WEATHERLY,

2008).

Convencionalmente denotada em porcentagem. Em outras palavras, pode-se dizer


que umidade relativa do ar a relao entre a quantidade de gua existente no ar e
a quantidade mxima que poderia haver na mesma temperatura.
A umidade relativa tem papel importante em nossa sensao de conforto.
Se a umidade relativa for de 100%, significa que a gua no vai evaporar, pois o ar

33

j est saturado. Nosso organismo depende da evaporao da gua atravs da


pele para esfriar.
A Figura 2.15 ilustra quanto uma determinada temperatura vai nos
parecer quente (sensao trmica) em vrios nveis de umidade relativa.

Figura 2. 15 - ndice de umidade relativa x temperatura (Fonte:


http://static.hsw.com.br/gif/humidifier-heat-index.gif)

Se a umidade relativa for de 100%, sentimos mais calor que a


temperatura real porque nosso suor no consegue evaporar. No entanto, se a
umidade relativa estiver baixa, sentimos menos calor do que a temperatura real
devido rpida evaporao do suor.

2.4

Umidificador

Umidificador um aparelho cuja funo bsica manter a umidade


relativa do ar dentro dos nveis recomendados para o conforto humano. O tipo mais
simples de umidificador o umidificador evaporativo. Seu funcionamento consiste
em um reservatrio captar a gua fria e a introduzir em um recipiente. A gua
absorvida por um recipiente com parede porosa e um ventilador fora o ar passar

34

nesse recipiente que fica mido. Conforme o ar passa, um pouco de gua evapora
(BRAIN, 2010).
A Figura 2.16 mostra o umidificador ultra-snico utilizado no projeto. Seu
princpio de funcionamento atravs de um sistema ultra-snico. Utiliza um cristal
piezoeltrico, que imerso em um reservatrio de gua, vibra a uma frequncia muito
alta (cerca de 1,6 milhes de oscilaes por segundo), gerando uma fina e
homognea nvoa de vapor de gua frio e inodoro (BRAIN, 2010).

Figura 2. 16 - Umidificador utilizado no projeto (Fonte: Autor)

Os aspectos tericos e tcnicos abordados neste captulo so


fundamentais para o desenvolvimento da soluo, conforme ser visto nos prximos
captulos.

35

CAPTULO 3 DESENVOLVIMENTO DO PROTTIPO

Neste captulo ser abordado o desenvolvimento do prottipo idealizado.


Passos da construo, debugs e solues aplicadas so alguns dos tpicos
tratados.

3.1

Viso Geral do Projeto

A viso geral do projeto ilustrada na Figura 3.1. Basicamente, o


funcionamento do sistema iniciado a partir do momento em que o usurio
seleciona o modo que o ir atuar, por meio da interface. A interface, ento, repassa
a instruo para o hardware por comunicao bluetooth e ativa o funcionamento do
umidificador.

Figura 3. 1 - Viso geral do projeto. (Fonte: Autor)

O projeto dividido em duas partes. A Figura 3.2 ilustra a primeira parte,


constitudo pelo hardware desenvolvido.

36

Figura 3. 2 - Hardware desenvolvido (Fonte: Autor)

A segunda parte, vide Figura 3.3, formada pela interface de


comunicao com o usurio.

Figura 3. 3 - Interface de Comunicao (Fonte: Autor)

37

O diagrama a seguir, Figura 3.4, retrata as etapas do processo de seleo


do modo de funcionamento atravs da interface do usurio, comunicao entre
software e hardware, captao dos dados e disponibilizao, e acionamento do
umidificador.

Figura 3. 4 - Diagrama de blocos do projeto (Fonte: Autor)

38

O marco inicial a seleo do modo de operao do sistema: Manual,


Automtico e Temporizador. Aps essa etapa, o sistema envia o modo para o
Arduino por bluetooth ativando seu funcionamento. O Arduino retorna os dados de
umidade do ar, temperatura do ar, o nvel da gua do repositrio e ativa o
funcionamento do umidificador. Este permanece ligado at o modo Desligado.
Outros fatores que desligam o funcionamento do umidificador so o nvel da gua
abaixo do mnimo, a umidade relativa atingir o limite repassado no modo manual ou
a umidade relativa do ar chegar a 80%. O quadro a seguir, descreve a estrutura de
dados utilizada para desenvolver o sistema.

Problema
Interpretar instruo enviada pela porta serial.

Soluo
Abrir conexo com a porta serial e interpretar o dado.

Operaes possveis
medida que um dado interpretado no programa, outro entra na fila da
porta serial. No permitido furar a fila.

Estrutura de Dados Correspondente


A biblioteca do Qt Creator QtSerialPort utiliza FILA sequncia de
elementos dispostos em ordem com uma regra para a entrada e sada dos
elementos.

39

3.2

Descrio das Etapas

3.2.1 Montagem do Hardware

O hardware foi montado em cima de uma plataforma de prototipagem


eletrnica, Arduino Uno. A Figura 3.5 ilustra, representativamente, os pinos
utilizados, os componentes e sensores.

Figura 3. 5 - Esquemtico dos componentes no Proteus (Fonte: Autor)

Do lado esquerdo do Arduino Uno (placa azul na Figura 3.5)


encontram-se os sensores de bluetooth e umidade e temperatura, HC-05 e DHT11,
respectivamente. O sensor HC-05 conectado nos pinos 10 e 12 da placa e sada
5v e GND. O sensor DHT11 conectado no pino A1 (analgico 1) da placa, e
tambm ao 5v e GND. Para o esquema do rel, foi utilizado o transistor, diodo e
resistor para o seu funcionamento. O esquema est conectado ao pino 13 da placa
que quando acionado, a corrente limitada pelo resistor, passa para o transistor
ativando a passagem de corrente para o rel funcionar. O diodo funciona como um

40

bloqueio da corrente para a placa do Arduino no sofrer avarias. Por ltimo, o sensor
de nvel conectado ao pino 8 e a um resistor de pull-up para captao do nvel do
reservatrio.

3.2.2 Escolha do modo de funcionamento

Para a comunicao com o Arduino, foi desenvolvido uma GUI (Graphical


User Interface) em C++ utilizando o Qt Creator como IDE. O objetivo do GUI
permitir ao usurio a interao com dispositivos digitais atravs de elementos
grficos como cones e outros indicadores visuais.
A Figura 3.6 mostra o GUI desenvolvido no QT Creator. Representado
pelos nmeros 1 e 2, esto os displays de temperatura e umidade respectivamente.
Seus valores so atualizados a partir do momento em que se escolhe um modo de
funcionamento. Os nmeros 3, 4, 6 e 8 representam os modos que o sistema possui.
A particularidade dos modos Manual e Temporizador, so representados pelos
nmeros 5 e 7. O nmero 5 ilustra a umidade desejada para o ambiente, ou seja, o
umidificador ir ficar ligado at atingir esse valor ou, o modo Desligar seja acionado,
ou ainda, o reservatrio chegue a um nvel muito baixo, representado pelo nmero 9.
O nvel de gua representado apenas com duas situaes, vazio ou cheio.
Seguindo a mesma lgica do modo Manual, o nmero 7 representa a quantidade de
horas que o umidificador ficar ligado se o modo Temporizador for acionado.
Tambm desligando se houver a troca de modo para Desligado, ou se o nvel da
gua ficar muito baixo.

41

Figura 3. 6 GUI desenvolvido. (Fonte: Autor)

O cdigo, em C++, de cada modo selecionado pode ser observado logo


abaixo:

/**
* Comandos da seleo do boto de modo automtico;
*/
void propatoMain::on_autoButton_clicked() //Quando o modo automtico
selecionado
{
this->timerStatus = false; //seta o timer para falso
this->myTimer->stop();
this->mode = 'A';

//para o timer

//atribui para a varivel mode a string A

42

this->humidity = 80;

//atribui para a varivel humidity o number 80

/**
* Comandos da seleo do boto de modo manual;
*/
void propatoMain::on_manButton_clicked()

//quando o modo manual

acionado
{
this->timerStatus = false; // seta o timerStatus para falso
this->myTimer->stop();
this->mode = 'B';

//para o timer

//atribui a string B para a varivel mode

this->humidity = this->ui->humBox->value();

//captura o valor da

umidade que esta na caixa humBox e atribui para a varivel humidity.


}

/**
* Comandos da seleo do boto de modo temporizador;
*/
void propatoMain::on_timeButton_clicked()

//quando o boto de

temporizador for acionado


{
if (this->timerStatus = false)

//condio do timerStatus para falso

43

{
connect(this->myTimer, SIGNAL(timeout()), this,
SLOT(on_offButton_clicked()));
this->myTimer->setSingleShot(true); //aciona o timer uma nica vez
this->myTimer->start(abs(this->ui->timeEdit>time().msecsTo(QTime())));

//checa o valor repassado na interface para

repassar para o timer


}
this->timerStatus = true;
this->mode = 'A';

//seta timerstatus como true

//atribui a string A para a varivel mode

this->humidity = 80;

//atribui o number 80 para a varivel humidity

/**
* Comando do boto de desligar;
*/
void propatoMain::on_offButton_clicked() //quando acionado o boto de
desligar
{
this->timerStatus = false; //seta o timerstatus para falso
this->myTimer->stop();
this->mode = 'D';

//para o timer

//atribui D para a varivel mode

this->humidity = 0; //atribui 0 para a varivel humidity


}

44

3.2.3 Comunicao com Arduino

Pode-se

observar

que

sistema

possui

diferentes

modos

de

funcionamento. No projeto, foi utilizado o bluetooth para realizar a comunicao


entre Arduino e software.
O protocolo bluetooth complexo e composto por vrias camadas.
Porm, o bluetooth permite um protocolo denominado RFCOMM, que emula uma
comunicao serial padro, permitindo a troca de informaes entre dispositivos
como se fossem conectados por um cabo destinado comunicao RS232. O ponto
inicial, ento, ter um software de bluetooth instalado no computador a ser utilizado.
No projeto, foi utilizado o bluetooth HC-05 que pode servir como mestre e
escravo. O segundo passo para a conexo foi configurar o bluetooth como modo
escravo, pois o bluetooth do computador agiria como mestre, requisitando servios,
e o do Arduino como escravo, provendo servios. Para isso, foi necessrio criar um
sketch com o seguinte cdigo de configurao, configurando o bluetooth no apenas
para agir como escravo mas tambm alterando algumas outras configuraes que
esto comentadas no cdigo:
void configuraBluetooth()
{
//configurando

taxa

de

comunicao

do

Bluetooth

microcontrolador Arduino em 115200bps(baud).


bluetoothSerial.begin(115200);

//configurando o Bluetooth para operar no modo escravo.


bluetoothSerial.print("\r\n+STWMOD=0\r\n");

//configuando a permisso de emparelhamento.

com

45

bluetoothSerial.print("\r\n+STOAUT=1\r\n");

//configurando o bloqueio de emparelhamento.


bluetoothSerial.print("\r\n+STAUTO=0\r\n");

//configurando o cdigo de emparelhamento (PINCODE) com: 0000


bluetoothSerial.print("\r\n+STPIN=0000\r\n");

//configuando a solicitao de pino de entrada.


bluetoothSerial.print("\r\n+RTPIN=0000\r\n");

delay(2000); //aguarda um tempo em milissegundos.

//configurar o Bluetooth para ser reconhecido como escravo.


bluetoothSerial.print("\r\n+INQ=1\r\n");

delay(2000); //aguarda um tempo em milissegundos.

//descarrega a serial.
bluetoothSerial.flush();
}

46

Feita a configurao, o terceiro passo foi reconhecer o bluetooth do


Arduino com o do computador. O driver GL-6B ATSPP que, corresponde ao do
bluetooth, foi instalado e disponibilizado na porta serial COM6 conforme Figura 3.7.

Figura 3. 7 Porta serial do bluetooth (Fonte: Autor)

O quarto e ltimo passo para estabelecer a conexo foi configurar o


software para que capte informaes da porta serial. Dessa forma, foi desenvolvido
um cdigo para verificar as portas seriais disponveis e abrir a COM4. Depois,
configurar os parmetros de comunicao e warnings para o caso de algum erro
ocorrer. A codificao, desenvolvida como parte desse projeto, pode ser observada
a seguir:

47

Worker::Worker()

//mtodo Worker da classe Worker

{
doBreak = 0;

//seta 0 na variavel dobreak

myPort = new QSerialPort;

//criando

funo

que

reconhece

comunicao serial
myPort->moveToThread(this->thread()); //move funo para a thread
if (!QSerialPortInfo::availablePorts().isEmpty())

//condio de se

no encontrar nenhuma porta serial aberta para conexo


{
myPort->setPort(QSerialPortInfo("COM4")); //seta a porta COM4
if(!myPort->open(QIODevice::ReadWrite))

//condio de se

no conseguir conectar
{
qWarning("No foi possvel abrir a porta!");

//aviso

de

no foi possvel conectar


}
//condio se abaixo checa se foi possvel configurar a porta ou no e
caso no tenha sido possvel, um aviso aparece
if(!myPort->setParity(QSerialPort::NoParity) ||
!myPort->setStopBits(QSerialPort::OneStop) ||
!myPort->setDataBits(QSerialPort::Data8) ||
!myPort>setFlowControl(QSerialPort::NoFlowControl ) ||

48

!myPort->setBaudRate(QSerialPort::Baud9600) ||
!myPort->setDataTerminalReady(true))
{
qWarning("Nao foi possivel configurar porta!");
if (myPort->isOpen())
{
myPort->close();
}
}
//condio se abaixo checa se conexo teve erro ou no e lana um aviso
case tenha erro.
if(myPort->error() != QSerialPort::NoError)
{
qWarning("Erro desconhecido!");
if (myPort->isOpen())
{
myPort->close();
}
}
}
Else
porta serial
{

//caso no tenha nada conectado, aviso de nada conectado na

49

qWarning("Nao existe nada conectado!");


}
}

3.2.4 Repasse de dados e acionamento do umidificador

Aps a comunicao ser estabelecida e o sistema enviar o modo, o


Arduino recebe e interpreta esse modo. Foi desenvolvido o seguinte cdigo para o
recebimento do modo:
void loop(){

//funo de repetio

float h = dht.readHumidity();

//captao da umidade

float t = dht.readTemperature(); //captao da temperatura


delay(50);

if (isnan(t) || isnan(h))

//condio para verificar se houve erro na

captao dos dados


{
bt.println("Failed to read from DHT");
}

else{

if ( off == '0'){

//verifica se varivel off 0 ou 1

50

char Mode;

//declara varivel Mode

if (bt.available()){ //condio se o serial do Bluetooth esta disponivel

Mode = bt.read(); //leitura do modo


bt.println(Mode); //imprime leitura
}

delay(50);

if( Mode == 'A'){

//se modo for A, inicia modo automatico

Humidity = GetStringNumber();
digitalWrite(RELE, HIGH);
bt.print(h);

//recebe umidade

//aciona rel para umidificador

//repassa umidade

bt.print(" ");
bt.print(t);

//repassa temperatura

bt.print(" ");
bt.println(digitalRead(IN));

//faz a leitura do sensor de nvel

if ( h == 80.00 || digitalRead(IN) = 0)

//condio se umidade

passar de 80 ele desliga o umidificador ou nvel do reservatrio abaixar


off = '1';
}

51

if( Mode == 'B'){

//modo B segue a mesma lgica do modo A

Humidity = GetStringNumber();
digitalWrite(RELE, HIGH);
bt.print(h);
bt.print(" ");
bt.print(t);
bt.print(" ");
bt.println(digitalRead(IN));
if ( h >= Humidity || digitalRead(IN) = 0)

//condio se a umidade

do ambiente for maior ou igual que a umidade repassada pelo usurio ele desliga o
umidificador ou nvel do reservatrio abaixar
off = '1';
}

if( Mode == 'D'){ //modo D segue mesma lgica que A e B


off = '1';
}
}
else
{
digitalWrite(13, LOW);
off = '0';
}

52

}
}

importante notar que o Arduino est agindo como escravo, ou seja,


provendo servio e no requisitando. O Arduino fica sempre aguardando pela
instruo do software.
Outro fator que deve ser citado o da funo de capturar o valor da
umidade, a funo GetStringNumber. Conforme foi mostrado, o sistema envia o
caractere A ou B para solicitar modo automtico e manual, respectivamente (o modo
temporizador envia o modo automtico para o Arduino e controla o tempo pelo
prprio cdigo, no enviando essa tarefa para o Arduino). No entanto, aps enviar A
ou B, enviada a temperatura. A funo no Arduino para ler esse dado seria a
bt.read(), no entanto, essa funo retornar apenas o primeiro byte do serial, no
permitindo que um nmero composto de dois algarismo, por exemplo, 40 fosse lido,
foi necessrio desenvolver outra forma de leitura. A funo leria 4 e repassaria este
valor, depois leria 0 e passaria o valor . Para resolver este problema, o seguinte
cdigo foi escrito como a seguir:

int GetStringNumber()
{
float value = 0; // declara varivel valor
while(1)
{
char byteBuffer = bt.read();
if(byteBuffer > -1)
condio
{

//l e armazena os bytes do serial

//se o serial for maior que -1 entra na

53

if(byteBuffer >= '0' && byteBuffer <= '9') //se o dado for nmero
entra na condio
value = (value * 10) + (byteBuffer - '0');
else
break;
}
}
return value; //retorna valor
}

A funo l o dado da serial e armazena na varivel bytebuffer, depois


entra na condio de se o serial no estiver vazio (o serial sempre retorna um valor,
-1 se no estiver passando dado) e verifica se ele um nmero. Caso seja um
nmero ele faz a expresso de dado (subtrao) 0. Esta expresso funciona da
seguinte forma: pela tabela ASCII, mostrada na Figura 3.8, os caracteres de 0 a 9
so representados pelos nmeros 48 a 58. Para converter o caractere 1, a
expresso seria 49 (valor de 1 na tabela ASCII) 48 (valor de 0 na tabela ASCII)
retornando 1 como resultado. Isso resolve o problema de retorno do dado digitado
no software para representar o valor da umidade.

54

Figura 3. 8 - Tabela ASCII grifada. (Fonte: Autor, adaptada de ivanicabral.blogspot.com)

Com as implementaes acima, o sistema est completo em suas partes


e pronto para funcionar. No prximo captulo, sero apresentados os testes e
resultados realizados.

55

CAPTULO 4 TESTES E RESULTADOS ALCANADOS

A parte de testes e resultados alcanados foi dividida em duas partes.


Primeiramente, a parte dos testes unitrios, da captao dos dados de temperatura
e umidade, teste de comunicao com bluetooth, teste do sensor de nvel de gua e
teste do acionamento do rel. Aps a finalizao dos testes unitrios, realizou-se a
segunda parte com a homologao do prottipo.

4.1.1 Captao dos sensores

O teste de captao de temperatura e umidade foi realizado de modo


simples com o uso do sensor DHT11. A Figura 4.1 ilustra o recebimento destes
dados no monitor do Arduino. Para confirmar a veracidade, o sensor foi movido para
a sada de um ar condicionado e podemos ver a temperatura diminuir e a umidade
aumentar na Figura 4.2.

Figura 4. 1 - Teste de captao de umidade e temperatura (fonte: Autor)

56

Figura 4. 2 - Variao na umidade e temperatura (Fonte: Autor)

Com estes resultados, foi possvel validar o sensor DHT11.

4.1.2 Comunicao com bluetooth

Para o teste da comunicao, foi utilizado o programa Tera Term. O Tera


Term um software gratuito que tem a funo de emular um programa de terminal.
Ele suporta telnet, SSH e conexo com porta serial.
As Figuras 4.3 e 4.4 ilustram o teste de comunicao realizado. Depois de
configurado o bluetooth no desktop, o programa foi executado e a porta serial

57

escolhida para conectar e realizar os testes. Foi verificado que o alcance do


bluetooth de seis metros, confirmando a especificao de seu datasheet.

Figura 4. 3 - Iniciando o programa Tera Term para fazer a conexo serial (Fonte: Autor)

Figura 4. 4 - Terminal com o programa funcionando (Fonta: Autor)

58

Aps obter o resultado positivo da conexo, a comunicao com bluetooth


foi validada.

4.1.3 Sensor de nvel

Para verificar o funcionamento do sensor de nvel da gua, instalado no


repositrio do umidificador, foram realizados dois testes utilizando o terminal do
programa Tera Term e tambm a interface.
O primeiro cenrio foi testar o nvel baixo do repositrio. Conforme a
Figura 4.5, o repositrio foi esvaziado para que o sensor acusasse nvel baixo. A
Figura 4.5 e 4.6 ilustra a resposta obtida no Tera Term e na interface.

Sensor Aberto

Figura 4. 5 - Hardware com sensor aberto. (Fonte: Autor)

59

Figura 4. 6 - Respostas dos cenrios propostos no Tera Term. (Fonte: Autor)

Figura 4. 7 - Resposta do teste de sensor de nvel na interface para estado vazio. (Fonte: Autor)

O segundo cenrio foi testar o nvel cheio do reservatrio. Dessa vez,


conforme ilustrado na Figura 4.8, inverte-se o repositrio para que o sensor acuse

60

cheio. Respectivamente, as Figuras 4.6 e 4.9 mostram a resposta no Tera Term e na


interface.

Figura 4. 8 - Hardware com sensor fechado. (Fonte: Autor)

Figura 4. 9 - Resposta do teste de sensor de nvel na interface para estado cheio. (Fonte:
Autor)

Com estes resultados, foi possvel vallidar o sensor de nvel utilizado no


prottipo.

61

4.1.4 Acionamento do rel

O acionamento do rel para ligar o umidificador deve ser realizado


sempre que os modos Automtico, Manual ou Temporizador forem escolhidos pela
interface. A Figura 4.10 representa o funcionamento do umidificador quando os
modos foram acionados.

Figura 4. 10 - Funcionamento do Umidificador. (Fonte: Autor)

Todos os modos foram interpretados corretamente pelo Arduino, ativando


e desligando quando solicitado. Aps esse resultado, foi possvel validar o
funcionamento do programa, faltando apenas verificar o desligamento automtico.

4.1.5 Desligamento automtico

O sistema, como foi descrito nos captulos anteriores, faz uma verificao
na umidade mxima que no causa prejuzo sade, que indicada pela OMS
como sendo 80%, no nvel de reservatrio do umidificador, no temporizador e na

62

umidade manual repassada pelo usurio. Assim sendo, sempre que alguma das
situaes acima for atingida, o sistema deve desligar automaticamente.
O primeiro cenrio foi uma reconfigurao do cdigo do sistema para que
a umidade ideal verificada fosse diminuda para um nvel menor do que a umidade
do ar do local testado. Ou seja, o sistema no poderia funcionar devido ao
atingimento da umidade ideal alterada no cdigo.
O segundo cenrio foi testar o monitoramento do nvel da gua. Quando o
nvel da gua estiver baixo, o sistema deixa de funcionar para preservar o
umidificador.
O ltimo cenrio foi para testar o temporizador. Foi escolhido um tempo
pequeno para ser testado o desligamento do sistema quando o tempo se esgotasse.
O sistema desenvolvido obteve sucesso em todos os cenrios propostos
acima.
O cdigo completo com a programao realizada apresentado nos
Apndices A, B, C e D.

63

CAPTULO 5 CONCLUSES E CONSIDERAES FINAIS

5.1

Concluses

O projeto teve como objetivo, criar um sistema remoto para fazer a gesto
da umidade do ambiente. O sistema deveria informar a umidade relativa do ar e a
temperatura do ambiente. E conforme proposto, agir em trs modos diferentes.
Baseado nos resultados dos testes realizados possvel concluir que o
objetivo foi alcanado, uma vez que o sistema desenvolvido cumpriu, como
esperado, com todos os requisitos propostos.
Conclui-se tambm que este projeto poderia ser adaptado para um
sistema industrial de umidificao, uma vez que o que foi construdo um sistema
de controle de acionamento do umidificador. Por ltimo, a principal contribuio
deste projeto foi um sistema de monitoramento da umidade do ambiente que foi
desenvolvido utilizando softwares gratuitos.

5.2

Sugestes para trabalhos futuros

Embora o projeto esteja funcionando e tenha atingido os objetivos


propostos, alguns aprimoramentos podem ser realizados.
O sistema desenvolvido, limitado pela distncia de comunicao do
bluetooth, considerado local. Uma sugesto de aprimoramento seria disponibilizar o
sistema para acionamento e controle remotamente, utilizando-se a internet. Assim, o
usurio poderia monitorar e tomar aes a partir dos dados informados sem que a
distncia seja levada em considerao.
Outra sugesto, como comentado no item 5.1, o sistema pode ser
aprimorado para acionar sistemas de umidificao maiores, como os de shoppings e
lojas, ou at empresas. Um estudo de viabilidade deve ser realizado devido
necessidade de componentes mais potentes.

64

Referncias

ARDUINO.

BuildProcess.

Arduino

Build

Process,

16

out.

2014.

Disponivel

em:

<arduino.cc/en/Hacking/Build>. Acesso em: 16 out. 2014.


ARDUINO. Policy. So you wat to make an Arduino, 16 out. 2014. Disponivel em:
<arduino.cc/en/Main/Policy>. Acesso em: 16 out. 2014.
ASCENCIO, A. F. G. Fundamentos da programao de computadores. [S.l.]: Pearson, 1999.
BANZI, M. Primeiros Passos com o Arduino. So Paulo: Novatec Editora Ltda., 2011.
BRAIN,

K. N. E. M. O

interior de um Umidificador. HSW,

2010. Disponivel em:

<casa.hsw.uol.com.br/umidificadores3.htm>. Acesso em: 20 out. 2014.


ELETRONICS, O. Opiron. Opiron, 03 mar. 2013. Disponivel em: <www.opiron.com/portfolio/todossobre-los-sensores-dht11-dht22-by-opiron-2>. Acesso em: 18 out. 2014.
ESTADO,

A.

Estado.

Estado,

24

ago.

2010.

Disponivel

em:

<http://www.estadao.com.br/noticias/geral,umidade-relativa-do-ar-cai-para-7-em-brasilia,599796>.
Acesso em: 15 out. 2014.
FARRER, H. et al. Algoritmos Estruturados. Rio de Janeiro: Editora Guanabara KOOGAN, 1989.
HUGNEY. Tutorial Mdulo Bluetooth. HU INFINITO, 2014. Disponivel em: <www.huinfinito.com>.
Acesso em: 2014.
ICOS. Sensores de Nvel. Icos, out. 2014. Disponivel em: <www.icos.com.br/SensorDeNivel/>. Acesso
em: 20 out. 2014.
LAGES, . D. M. G. E. N. A. D. C. Algoritmos e Estruturas de Dados. Rio de Janeiro: EDITORA, 1988.
LEMOS, M. Arduino: Conhea essa plataforma de hardware livre e suas aplicaes. Fazedores, 17
nov. 2013. Disponivel em: <blog.fazedores.com/arduino-conheca-esta-plataforma-de-hardware-livree-suas-aplicacoes>. Acesso em: 16 out. 2014.
MONK, S. Programao com Arduino. Porto Alegre: Bookman Editora Ltda., 2013.
MORIMOTO,

C.

Guia

do

Hardware.

Guia

do

Hardware,

2004.

<http://www.hardware.com.br/termos/transistor>. Acesso em: 31 out. 2014.

Disponivel

em:

65
PCCOLO, H. L. Estruturas de dados. [S.l.]: [s.n.], 2000.
SANTOS,

D.

M.

D.

Rel

Eletrnica.

Infoescola,

mar.

2012.

Disponivel

em:

<www.infoescola.com/eletronica/rele/>. Acesso em: 20 out. 2014.


SANTOS, F. Terra. Sade Terra, 08 18 2011. Disponivel em: <http://saude.terra.com.br/bemestar/baixa-umidade-do-ar-exige-cuidados-com-a-saude-vejadicas,54583f04c2f27310VgnCLD100000bbcceb0aRCRD.html>. Acesso em: 15 out. 2014.
SAVITCH, W. J. C++ Absoluto. [S.l.]: Pearson, 2004.
TESKE, D. QT Blog. Qt Creator, 6 25 2009. Disponivel em: <blog.qt.digia.com/blog/2009/06/25/qtcreator-12-released>. Acesso em: 27 out. 2014.
WEATHERLY,

K.

Science.

Science

How

Stuff

Works,

2008.

Disponivel

em:

<science.howstuffworks.com/dictionary/metereological-terms/question651.htm>. Acesso em: 20


out. 2014.

66

APNDICE A PROGRAMA DO ARDUINO

Programa utilizado para carregar o microcontrolador e fazer a


comunicao com o software.

#include <SoftwareSerial.h>
#include "DHT.h"

#define DHTPIN A1
#define DHTTYPE DHT11
#define RxD 10
#define TxD 12
#define IN 5

DHT dht(DHTPIN, DHTTYPE);

int Humidity;
char Mode;
char off = '0';
int GetStringNumber();
int RELE = 8;

67

SoftwareSerial bt(RxD,TxD);

void setup(){
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
pinMode(IN, INPUT);
pinMode(RELE, OUTPUT);
dht.begin();
bt.begin(115200);

void loop(){

float h = dht.readHumidity();
float t = dht.readTemperature();
delay(50);

if (isnan(t) || isnan(h))
{
bt.println("Failed to read from DHT");
}

68

else{

if ( off == '0'){

char Mode;
if (bt.available()){

Mode = bt.read();
bt.println(Mode);
}

delay(50);

if( Mode == 'A'){


Humidity = GetStringNumber();
digitalWrite(RELE, HIGH);
bt.print(h);
bt.print(" ");
bt.print(t);
bt.print(" ");
bt.println(digitalRead(IN));

69

if ( h = 80.00 || digitalRead(IN) = 0 )
off = '1';
}

if( Mode == 'B'){


Humidity = GetStringNumber();
digitalWrite(RELE, HIGH);
bt.print(h);
bt.print(" ");
bt.print(t);
bt.print(" ");
bt.println(digitalRead(IN));
if ( h >= Humidity || digitalRead(IN) = 0)
off = '1';
}

if( Mode == 'D'){


Humidity = GetStringNumber();
off = '1';
}
}
else

70

{
digitalWrite(RELE, LOW);
off = '0';
}
}
}
int GetStringNumber()
{
float value = 0;
while(1)
{
char byteBuffer = bt.read();
if(byteBuffer > -1)
{
if(byteBuffer >= '0' && byteBuffer <= '9')
value = (value * 10) + (byteBuffer - '0');
else
break;
}
} return value; }

71

APNDICE B HEADER INTERFACE USURIO

Cdigo do cabealho do programa utilizado para a interface.

#ifndef PROPATOMAIN_H
#define PROPATOMAIN_H

#include <QMainWindow>
#include <QSerialPort>
#include <QThread>
#include <QTimer>

/**
* Esta a declarao da classe propatoMain na interface grfica.
* Serve apenas para fazer o link do cdigo com o arquivo ui.
*/
namespace Ui {
class propatoMain;
}

/**
* Pr-definio das classes propatoMain e propatoThread de forma a
poder fazer a referncia cruzada desta com a classe Worker.

72

*/
class propatoMain;
class propatoThread;

/**
* Classe Worker, que serve para rodar as funes da thread que executa
o loop de leitura e envio para o Arduino.
* Possui um link para a interface grfica de modo a poder chamar
funes da mesma e a porta serial.
* O mtodo doWork() executa o loop.
* A funo readSerialData serve para organizar a leitura a partir do
Arduino.
*/
class Worker : public QObject
{
Q_OBJECT

public:
propatoMain* myMain;
propatoThread* myThread;
QSerialPort* myPort;
Worker();
~Worker();

73

int doBreak;

public slots:
void doWork();
QString readSerialData();
};

/**
* Classe propatoThread, que serve para isolar o objeto Worker em uma
thread separada da interface grfica.
* J possui um worker interno que criado e destrudo junto com a
thread.
* A funo run() chamada quando a thread iniciada com o comando
start().
*/
class propatoThread : public QThread
{
Q_OBJECT

public:
propatoMain* myMain;
Worker* myWorker;

74

public:
propatoThread();
~propatoThread();
void run();
};

/**
* Classe propatoMain, que possui a interface grfica principal do
programa.
* Possui um link para a definio da interface grfica (ui) e uma
propatoThread para ser executada.
* Tambm guarda de forma simples os valores de modo de operao e
umidade.
* Possui slots para cada boto clicado na interface (automtico, manual,
temporizador e desligar).
*/
class propatoMain : public QMainWindow
{
Q_OBJECT

public:
explicit propatoMain(QWidget *parent = 0);
~propatoMain();

75

public:
Ui::propatoMain* ui;
propatoThread* backThread;
QTimer* myTimer;

public:
char mode;
double humidity;
bool timerStatus;

private slots:
void on_manButton_clicked();
void on_autoButton_clicked();
void on_timeButton_clicked();
void on_offButton_clicked();
}; #endif // PROPATOMAIN_H

76

APNDICE C MAIN INTERFACE USURIO

Cdigo utilizado para fazer o link do programa principal com a interface.

#include "propatomain.h"
#include <QApplication>

/**
* Cdigo que inicia o programa chamando a interface principal.
*/
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
propatoMain w;
w.show();

return a.exec();
}

77

APNDICE D PROGRAMA PRINCIPAL INTERFACE USURIO

Cdigo principal utilizado para rodar a thread da interface.

#include "propatomain.h"
#include "ui_propatomain.h"
#include <iostream>
#include <QSerialPortInfo>

/**
* Construtor da classe Worker.
* Verifica as portas seriais disponveis e abre a primeira.
* Depois configura os parmetros de comunicao.
* Os warnings so mensagens para o caso de ocorrer algum erro.
*/
Worker::Worker()
{
doBreak = 0;
myPort = new QSerialPort;
myPort->moveToThread(this->thread());
if (!QSerialPortInfo::availablePorts().isEmpty())
{
myPort->setPort(QSerialPortInfo("COM4"));

78

if(!myPort->open(QIODevice::ReadWrite))
{
qWarning("Unable to open serial port!");
}
if(!myPort->setParity(QSerialPort::NoParity) ||
!myPort->setStopBits(QSerialPort::OneStop) ||
!myPort->setDataBits(QSerialPort::Data8) ||
!myPort->setFlowControl(QSerialPort::NoFlowControl ) ||
!myPort->setBaudRate(QSerialPort::Baud9600) ||
!myPort->setDataTerminalReady(true))
{
qWarning("Unable to configure serial port!");
if (myPort->isOpen())
{
myPort->close();
}
}
if(myPort->error() != QSerialPort::NoError)
{
qWarning("Unknown error!");
if (myPort->isOpen())
{

79

myPort->close();
}
}
}
else
{
qWarning("No device connected!");
}
}

Worker::~Worker()
{
myPort->close();
delete myPort;
}

/**
* Cdigo do loop principal.
* Espera alguns segundos, ento escreve os parmetros para o Arduino.
* Depois captura as mensagens e manda comandos para a interface.
* Os comandos esto em estruturas de invokeMethod() porque este
cdigo no roda na mesma thread que a interface.
*/

80

void Worker::doWork()
{
QThread::msleep(5000);
QString myString;
myString.clear();
char myData[1000];
if(myPort->waitForReadyRead(5000))
{
myPort->read(myData, 1000);
myString.append(myData);
qDebug(myString.toStdString().data());
}
while(doBreak == 0)
{
QThread::msleep(2500);
qDebug("write 1 (mode):");
qDebug(QString(myMain->mode).toStdString().data());
myPort->write(QString(myMain->mode).toStdString().data(), 2);
myPort->waitForBytesWritten(1000);
QThread::msleep(700);
qDebug("read 1 (echo):");
readSerialData();

81

QThread::msleep(500);
qDebug("write 2 (humidity):");
qDebug(QString::number(myMain->humidity).toStdString().data());
myPort->write(QString::number(myMain>humidity).append('\n').toStdString().data(), 5);
myPort->waitForBytesWritten(1000);
QThread::msleep(700);
qDebug("read 2 (h t l)");
myString = readSerialData();
QStringList humTemp = myString.split(" ");
if (!humTemp.isEmpty() && humTemp.length() == 3)
{
QMetaObject::invokeMethod(
myMain->ui->humLcd,
"display",
Qt::QueuedConnection,
Q_ARG(double, humTemp.at(0).toDouble())
);
QMetaObject::invokeMethod(
myMain->ui->tempLcd,
"display",
Qt::QueuedConnection,
Q_ARG(double, humTemp.at(1).toDouble())

82

);

if (humTemp.at(2).toInt() == 0)
{
QMetaObject::invokeMethod(
myMain->ui->levelBar,
"setValue",
Qt::QueuedConnection,
Q_ARG(int, 20)
);
}
else
{
QMetaObject::invokeMethod(
myMain->ui->levelBar,
"setValue",
Qt::QueuedConnection,
Q_ARG(int, 80)
);
}
myPort->write("\n");
readSerialData();

83

myPort->clear();
}
}
}

/**
* Cdigo para ler os dados do Arduino.
* Mostra no debug o comportamento da leitura.
* O cdigo espera por at 5000 milissegundos para executar cada leitura.
*/
QString Worker::readSerialData()
{
QString myString;
myString.clear();
char myData[1000];
if(myPort->waitForReadyRead(5000))
{
myPort->readLine(myData, 1000);
myString.append(myData);
qDebug(myString.toStdString().data());
}
else

84

{
myString.clear();
qWarning("Read timeout");;
}
return myString;
}

/**
* Construtor padro da propatoThread com controle do Worker interno.
*/
propatoThread::propatoThread()
{

/**
* Destrutor padro da propatoThread com controle do Worker interno.
*/
propatoThread::~propatoThread()
{
myWorker->doBreak = 1;
if (myWorker != NULL)

85

{
delete myWorker;
}
}

/**
* Cdigo a ser executado quando a propatoThread inicia.
* apenas um chamado para a funo do Worker.
* Esta estrutura garante que o Worker roda em uma thread separada.
*/
void propatoThread::run()
{
myWorker = new Worker();
myWorker->myMain = this->myMain;
myWorker->doWork();
}

/**
* Construtor da janela principal.
* Seta os parmtros iniciais de umidade e modo.
* Tambm inicia a thread de controle do Arduino.
*/

86

propatoMain::propatoMain(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::propatoMain)
{

this->humidity = 80;
this->mode = 'A';
this->timerStatus = false;
this->myTimer = new QTimer();

ui->setupUi(this);

backThread = new propatoThread();


backThread->myMain = this;
backThread->start();
}

/**
* Destrutor da janela principal.
* Encerra a thread de controle do Arduino.
* No est funcionando e no sei por que.
*/

87

propatoMain::~propatoMain()
{
delete ui;
delete myTimer;
backThread->exit();
backThread->wait();
}

/**
* Comandos da seleo do boto de modo automtico;
*/
void propatoMain::on_autoButton_clicked()
{
this->timerStatus = false;
this->myTimer->stop();
this->mode = 'A';
this->humidity = 80;
}

/**
* Comandos da seleo do boto de modo manual;
*/

88

void propatoMain::on_manButton_clicked()
{
this->timerStatus = false;
this->myTimer->stop();
this->mode = 'B';
this->humidity = this->ui->humBox->value();
}

/**
* Comandos da seleo do boto de modo temporizador;
*/
void propatoMain::on_timeButton_clicked()
{
if (this->timerStatus = false)
{
connect(this->myTimer,

SIGNAL(timeout()),

SLOT(on_offButton_clicked()));
this->myTimer->setSingleShot(true);
this->myTimer->start(abs(this->ui->timeEdit>time().msecsTo(QTime())));
}
this->timerStatus = true;
this->mode = 'A';

this,

89

this->humidity = 80;
}

/**
* Comando do boto de desligar;
*/
void propatoMain::on_offButton_clicked()
{
Worker myWorker;
this->timerStatus = false;
this->myTimer->stop();
this->mode = 'D';
this->humidity = 0;
}