• Nenhum resultado encontrado

UNIVERSIDADE FEDERAL DO SUL E SUDESTE DO PARÁ INSTITUTO DE GEOCIÊNCIAS E ENGENHARIAS

N/A
N/A
Protected

Academic year: 2021

Share "UNIVERSIDADE FEDERAL DO SUL E SUDESTE DO PARÁ INSTITUTO DE GEOCIÊNCIAS E ENGENHARIAS"

Copied!
54
0
0

Texto

(1)

INSTITUTO DE GEOCIÊNCIAS E ENGENHARIAS

Faculdade de Computação e Engenharia Elétrica

Bacharelado em Engenharia Elétrica

Trabalho de Conclusão de Curso

SISTEMA DE AQUISIÇÃO DE DADOS DE QUALIDADE DA ÁGUA

POR REFRATOMETRIA

Davi de Souza Sena

Marabá-PA 2019

(2)

SISTEMA DE AQUISIÇÃO DE DADOS DE QUALIDADE DA ÁGUA

POR REFRATOMETRIA

Trabalho de Conclusão de Curso, apresentado à Universidade Federal do Sul e Sudeste do Pará, como parte dos requisitos necessários para obtenção do Título de Bacharel em Engenharia Elétrica.

Orientador:

Prof. Dr. José Carlos da Silva

Marabá-PA 2019

(3)

Dados Internacionais de Catalogação-na-Publicação (CIP) Biblioteca Setorial II da UNIFESSPA

Sena, Davi de Souza

Sistema de aquisição de dados de qualidade da água por refratometria / Davi de Souza Sena ; orientador, José Carlos da Silva. — Marabá : [s. n.], 2019.

Trabalho de Conclusão de Curso (Graduação) - Universidade Federal do Sul e Sudeste do Pará, Campus Universitário de Marabá, Instituto de Geociências e Engenharias, Faculdade de Computação e Engenharia Elétrica, Curso de Engenharia Elétrica, Marabá, 2019.

1. Aquisição de dados. 2. Controle de processo. 3. Sistemas de controle digital. 4. Detectores ópticos. 5. Controle de qualidade da água. I. Silva, José Carlos da, orient. II. Universidade Federal do Sul e Sudeste do Pará. III. Título.

CDD: 22. ed.: 629.895

(4)

SISTEMA DE AQUISIÇÃO DE DADOS DE QUALIDADE DA ÁGUA

POR REFRATOMETRIA

Trabalho de Conclusão de Curso, apresentado à Universidade Federal do Sul e Sudeste do Pará, como parte dos requisitos necessários para obtenção do Título de Bacharel em Engenharia Elétrica.

Marabá, 11 de Julho de 2019. BANCA QUALIFICADORA:

________________________________________ Prof. Dr. José Carlos da Silva

(Orientador - UNIFESSPA)

________________________________________ Prof. Dr. Diego de Azevedo Gomes

(Examinador da Banca - UNIFESSPA)

________________________________________ Prof. MSc. Pedro Baptista Fernades

(Examinador da Banca - UNIFESSPA)

Marabá-PA 2019

(5)
(6)

Neste trabalho será apresentado o desenvolvimento de um sistema de aquisição de dados de qualidade da água por refratometria, com a finalidade de monitoramento, controle e prevenção contra doenças proveniente de fontes de águas contaminadas, conforme a Política Nacional de Recursos Hídricos e demais normativas legais e institucionais pertinentes. Este sistema será uma plataforma eletrônica composto uma plataforma de prototipagem utilizando microcontrolador série ESP32, módulo sensor óptico por refratometria, módulo leitor de cartões de memória SD, módulo display LCD e módulo de conexão com redes sem fio.

(7)

Figura 1:Estrutura de componentes internos do dispositivo...13

Figura 2:Geometria da reflexão (r) e refração (t) de um raio de luz incidente (i) [3]..16

Figura 3:Alteração do ângulo de incidência em região de fibra curvada [4]...17

Figura 4:Placa de desenvolvimento DOIT ESP32 DevKit V1...20

Figura 5:Módulo Display LCD 16x2...21

Figura 6:Módulo leitor de cartão de memória SD...22

Figura 7:Medidas utilizadas para confecção da curvatura em forma de U [3]...23

Figura 8:Fibra óptica curvada utilizando o primeiro método...23

Figura 9:Fibra óptica curvada utilizando o segundo método...24

Figura 10:Fibra óptica curvada utilizando o terceiro método...24

Figura 11:Circuito elétrico do módulo sensor...25

Figura 12:Esboço do suporte para acoplamento do sensor...26

Figura 13:Suporte em madeira para acoplamento da fibra óptica...27

Figura 14:Esquema de montagem da placa e dos módulos na protoboard...28

Figura 15:Circuito para conexão do módulo sensor...29

Figura 16:Circuito para conexão do display LCD...30

Figura 17:Circuito para conexão do módulo leitor de cartão de memória SD...31

Figura 18:Montagem no sensor no suporte para acoplamento...43

Figura 19:Sensor em funcionamento durante realização de leituras...43

Figura 20:Montagem do circuito elétrico do dispositivo na protoboard...44

Figura 21:Informações apresentadas pela interface de exibição...44

Figura 22:Informações apresentadas pela interface de transmissão...45

Figura 23:Amostras utilizadas em todos os cenários...46

Figura 24:Gráfico dos resultados obtidos no Cenário 1...47

Figura 25:Gráfico dos resultados obtidos no Cenário 2...48

(8)

Tabela 1: Resultados obtidos no Cenário 1...47 Tabela 2: Resultados obtidos no Cenário 2...48 Tabela 3: Resultados obtidos no Cenário 3...49

(9)

Quadro 1: Inclusão de bibliotecas...32

Quadro 2: Instanciação das classes e variáveis globais...33

Quadro 3: Implementação da função setup...35

Quadro 4: Implementação da função loop...35

Quadro 5: Implementação da função verificarConexao...36

Quadro 6: Implementação da função realizarLeitura...36

Quadro 7: Implementação da função calcularQualidade...37

Quadro 8: Implementação da função armazenarLeitura...37

Quadro 9: Implementação da função atualizarVisor...38

Quadro 10: Implementação da função gerenciarRequisicaoWeb...39

Quadro 11: Implementação da função paginaHistorico...40

Quadro 12: Implementação da função paginaAdmin...40

Quadro 13: Implementação da função paginaUltimaLeitura...41

Quadro 14: Implementação da função limparHistorico...41

(10)

1 INTRODUÇÃO...10 1.1 Motivação...10 1.2 Objetivo Geral...11 1.3 Objetivos Específicos...11 2 METODOLOGIA...13 3 REVISÃO DE LITERATURA...15 3.1 Qualidade da Água...15

3.2 Sensores Ópticos para Refratometria...15

3.3 Dispositivos Eletrônicos Registradores de Dados (DataLoggers)...17

4 DESENVOLVIMENTO...19

4.1 Práticas Recentes em Projetos de Dispositivos Eletrônicos...19

4.2 Materiais Utilizados...20

4.2.1 Plataforma de Prototipagem Eletrônica...20

4.2.2 Display LCD...21

4.2.3 Módulo Leitor de Cartão de Memória SD...21

4.2.4 Módulo de Comunicação com Redes Sem Fio...22

4.3 Confecção do Sensor para Refratometria...22

4.4 Elaboração e Confecção do Circuito Elétrico...27

4.5 Implementação do Código Fonte...31

4.5.1 Inclusão de Bibliotecas...31

4.5.2 Instanciação de Classes e Variáveis Globais...32

4.5.3 Funções...34

5 RESULTADOS E DISCUSSÃO...43

6 CONCLUSÃO...51

(11)

1 INTRODUÇÃO

Hoje pode-se afirmar que é praticamente impossível avançar o conhecimento científico sem a utilização de sistemas automáticos de aquisição de dados. (D’AGOSTINI, 2005). De fato, a evolução destes sistemas tem sido a base para criação de sistemas inteligentes capazes de acessar grandes volumes de dados, reconhecer padrões, realizar diagnósticos e até mesmo tomar decisões de forma autônoma [11].

As barreiras existentes para criação e implantação de sistemas automáticos de aquisição de dados não são poucas, e geralmente possuem alto grau de complexidade. Podemos pegar como exemplo as dificuldades no desenvolvimento de sensores, que demandam elevado nível de sensibilidade e precisão, bem como, um baixo grau de incerteza sobre os valores obtidos [3] [4] [7]. Além disso, a necessidade de serem construídos sobre plataformas robustas, que suportem trabalhar em regime permanente, de forma ininterrupta, e muitas vezes em ambientes agressivos (umidade, calor, poeira) e com presença de interferências e ruídos [10] [11].

Apesar disso, as vantagens obtidas com a utilização deste tipo de sistema estimulam cada vez mais os projetos de novos dispositivos e as pesquisas com utilização de novos materiais. Uma destas vantagens é a agilidade na obtenção dos dados, que possibilitam menor tempo de resposta na tomada de decisão quando detectadas anormalidades. Outra vantagem tem sido a utilização de materiais de baixo custo na implantação destes sistemas, o que tem reduzido os custos de operação mesmo com a utilização de uma quantidade maior de equipamentos de aquisição de dados. Esse último fato tem se tornado possível graças a utilização dos microcontroladores, que atualmente alcançaram poder de processamento satisfatório para a maioria das aplicações, encontram-se facilmente disponíveis no mercado e possuem baixo custo de comercialização [7] [10] [11].

1.1 Motivação

Nas últimas décadas a preocupação do ser humano com os recursos hídricos têm crescido muito, devido, tanto ao fato de serem utilizados para importantes finalidades, quanto em função de seu uso de forma indevida e irracional da água. Dentre elas, uma das práticas mais comuns é o despejo de esgotos diretamente nos corpos hídricos, sem nenhum tipo de tratamento, e contendo diversos tipos de bactérias, sendo um dos principais grupos o dos coliformes [1] [2].

(12)

As bactérias denominadas coliformes totais não são causadoras de doenças, porém, sua presença possui relação direta com o grau de contaminação fecal, e pela sua concentração na água é possível estabelecer um parâmetro indicador da possível existência de micro-organismos patogênicos responsáveis por doenças de veiculação hídrica, tais como a febre tifóide, febre paratifóide, disenteria bacilar e cólera. Além disso, são facilmente detectáveis e quantificáveis por técnicas simples e economicamente viáveis em qualquer tipo de água [1] [2] [6].

A utilização da fibra óptica curvada no desenvolvimento de sensores de refratometria potencializou a utilização das fibras como elemento sensor tornando a atrativa para determinação da qualidade da água [3] [7]. De maneira mais específica, a variação no índice de refração pode estar associada a determinação da concentração de bactérias em amostras de água, pois a presença de bactérias interfere no índice de refração da água, por exemplo, alterando seu valor entre 1,33 e 1,39 para o caso específico da bactéria Escherichia coli [3] [4] [9].

Neste contexto, este projeto visa o desenvolvimento de um sistema de aquisição automática de dados, a partir de sensores de refratometria a fibra óptica, como meio de identificação e alerta para prevenção de várias doenças de veiculação hídrica, e como meio através do qual seja possível a verificação de conformidade dos reservatórios de água, nas formas estabelecidas pela legislação em vigor.

1.2 Objetivo Geral

Este trabalho tem por finalidade desenvolver o projeto de um dispositivo eletrônico como sistema de aquisição automática de dados de sensores ópticos por refratometria para estabelecer parâmetros de qualidade da água, bem como, estudar a viabilidade de execução dos métodos de baixo custo para confecção de sensores ópticos por refratometria utilizando fibra óptica plástica curvada.

1.3 Objetivos Específicos

 Desenvolver as interfaces de entrada capaz de realizar leitura de sinal analógico, filtrado e amplificado, a partir de sensores ópticos por refratometria;

 Implementar rotinas para automatização de amostragem e aquisição de dados das interfaces de entrada, utilizando microcontroladores da família PIC;

(13)

 Implementar parâmetros para classificação da qualidade da água a partir dos dados coletados;

 Desenvolver interfaces de saída para exibição, ou transmissão, dos dados de qualidade da água;

 Desenvolver módulos necessários para integração entre as interfaces de entrada, interfaces de saída e módulos de processamento;

 Confeccionar sensores ópticos por refratometria utilizando fibra óptica plástica curvada;

 Manter ou priorizar, durante a execução de todo o projeto, a utilização de materiais e procedimentos de baixo custo.

(14)

2 METODOLOGIA

A elaboração deste projeto iniciou-se com uma pesquisa aplicada referente às boas práticas adotadas na elaboração de projetos de dispositivos eletrônicos utilizados para aquisição de dados de forma automatizada, bem como, nos métodos de confecção de sensores ópticos de baixo custo para refratometria utilizando fibra óptica plástica [3] [10].

Para definição dos parâmetros que devem ser atendidos durante a confecção do sensor foram utilizados cálculos numéricos e simulações computacionais, em seguida o mesmo foi modelado e foram especificados os materiais necessários para a sua fabricação [3] [4] [9]. Após estudo deste modelo, iniciou-se as etapas para confecção do sensor, sendo que, a realização destas etapas foram precedidas de um processo de aquisição de todos os componentes e materiais necessários.

Figura 1: Estrutura de componentes internos do dispositivo.

Posteriormente iniciaram-se as etapas para construção do dispositivo de aquisição e registro automático dos dados obtidos do sensor fabricado na etapa anterior [10]. O projeto deste dispositivo será dividido em módulos, conforme os componentes apresentados na Figura 1, entre eles: um módulo para conversão analógico-digital do sinal de entrada; um módulo para processamento deste sinal, incluindo, tratamento, validação e a formatação como registro de um arquivo; um módulo para escrita e leitura deste registro em alguma memória ou dispositivo de armazenamento; e um módulo para exibição ou transmissão de todos os registros armazenados.

(15)

O projeto de cada um destes módulos seguiram as etapas de elaboração do projeto do circuito elétrico, implementação do código-fonte e simulação computacional. Em seguida, foram realizados os procedimentos de aquisição dos componentes necessários para a construção de todos os módulos e a montagem do dispositivo em uma plataforma de prototipação, sendo realizada neste momento também a gravação dos microcontroladores com a compilação dos programas desenvolvidos anteriormente [10] [11].

Após as etapas de construção ocorreram então os procedimentos de realização de experimentos para aquisição de dados, e os resultados verificados com a execução destes experimentos foram analisados e discutidos, podendo apontar as falhas que ocorreram durante a execução do projeto, e apresentando os objetivos que foram alcançados com sucesso.

(16)

3 REVISÃO DE LITERATURA 3.1 Qualidade da Água

No Brasil, a avaliação da qualidade da água em rios e mananciais é determinada a partir do IQA (Índice de Qualidade da Água), adotado pela ANA (Agência Nacional de Águas) para determinar a qualidade da água que pode ser utilizada para o abastecimento público [1] [2]. Com este índice, nove parâmetros são observados para se calcular o valor obtido de qualidade da água, entre eles a quantidade de bactérias coliformes termotolerantes, que podem indicar a presença de microrganismos patogênicos, e a turbidez da água, determinada pela quantidade de corpos sólidos em suspensão [1] [2].

Já o controle e vigilância da qualidade da água para o consumo humano e seu padrão de potabilidade, fica determinado pela Portaria de Consolidação Nº 5, do Ministério da Saúde, publicada em 28 de setembro de 2017, em seu artigo 129. Onde, em seu Anexo XX, determina os indicadores de qualidade microbiológicos da água, anexo 1, e seu padrão de turbidez com os valores máximos permitidos, anexo 2, bem como, os intervalos mínimos de tempo entre as realizações de coletas de amostras para análise e as ações corretivas a serem tomadas em caso de não conformidade das amostras coletadas com os padrões estabelecidos [6].

Em ambos os casos, tem-se como indicadores importantes da qualidade da água então, a turbidez e a quantidade de Escherichia Coli presente nas amostras coletadas. Sendo que os mesmos podem ser constatados a partir de exames de baixa complexidade e de simples verificação para valores altos de concentração. Portanto, apesar de nenhum desses dois parâmetros serem diretamente causadores de doenças em seres humanos, possuem maior frequência de execução devido a suas características de realização dos exames [1] [6].

Além disso, os resultados destes exames são utilizados como referência para determinar a necessidade de realização de outros exames mais complexos para constatar presença de microrganismos patogênicos como Giardia spp. e oocistos de Cryptosporidium, no caso de valores altos de concentração de Escherichia Coli, ou de substâncias químicas nocivas à saúde dos seres humanos, no caso de valores altos de turbidez [1] [6].

(17)

A luz é capaz de percorrer no interior de uma fibra óptica devido ao fenômeno físico da reflexão interna total. Este fenômeno ocorre devido às características de fabricação da fibra óptica, constituída de uma camada interna, o núcleo, envolta por uma camada externa, a casca, produzidas utilizando materiais com índices de refração diferentes, devendo ser o índice de refração do núcleo maior que o valor do índice de refração da casca [3] [4].

Esse comportamento físico é descrito pelas leis da reflexão (Princípio de Huygens) e da refração (Lei de Snell-Descartes), onde determinam que um feixe de luz ao incidir sobre uma superfície que separa dois meios com índices de refração diferentes, terá então parte da luz refletida e parte dela sofrerá refração para o segundo meio, conforme Figura 2 [3].

Figura 2: Geometria da reflexão (r) e refração (t) de um raio de luz incidente (i) [3].

Determinando também, que os ângulos de incidência, de reflexão e de refração, deverão ser tomados a partir da normal desta superfície, sendo, que o ângulo de reflexão será igual ao ângulo de incidência, e também, que o produto índice de refração do meio de incidência pelo seno do ângulo de incidência será igual ao produto do índice de refração do segundo meio pelo seno do ângulo de refração, conforme Equação (1) abaixo [3] [4] [9].

n1senθi=n2senθt (1)

θc=sen−1

(

n2

n1

)

(2)

A partir da Equação (1), conhecida como Lei de Snell, é possível concluir que não haverá reflexão quando o feixe de luz incidir normalmente sobre o segundo meio, havendo

(18)

refração total da luz. E também, que a partir de determinado valor do ângulo de incidência, denominado ângulo crítico, que pode ser obtido pela Equação (2), haverá a reflexão total da luz, não havendo refração da luz [4].

Figura 3: Alteração do ângulo de incidência em região de fibra curvada [4].

Importante observar, exposto na Figura 3, que, nas regiões onde a fibra estiver posicionada de forma curvada, a normal da superfície entre os meios sofrerá alteração e diminuirá o ângulo de incidência do feixe de luz, causando perdas de intensidade de luz refletida nos casos em que este novo ângulo deixe de ser maior que o ângulo crítico [3] [4].

Porém, essa perda é desejada quando da utilização da fibra curvada como sensor para refratometria, uma vez que ao ser alterado o índice de refração de um dos meios também se altera o ângulo crítico, a presença de uma região curvada na fibra irá potencializar a atenuação da intensidade de luz refletida e torná-la muito mais sensível a mudanças no índice de refração [3] [4] [5] [7] [8].

Essa alta sensibilidade é fundamental no desenvolvimento de sensores ópticos que tenham como objetivo medir a qualidade da água, e realizar a detecção de bactérias na mesma, com base nas alterações de valor do índice de refração. Alguns estudos realizados foram capazes de determinar os valores de índice de refração para alguns tipos de bactérias, como Escherichia Coli, Giardia spp. e oocistos de Cryptosporidium [3] [4] [9]. Além disso, também existem estudos no sentido de determinar uma relação existente entre aumento do índice de refração da água quando ocorre um aumento de sua turbidez [7] [8].

3.3 Dispositivos Eletrônicos Registradores de Dados (DataLoggers)

Os avanços das tecnologias de desenvolvimento de sensores eletrônicos aumentaram significativamente a escala de produção de sensores, reduziram custos de produção, bem

(19)

como, possibilitaram a miniaturização dos sensores e a transdução de uma ampla nova gama de grandezas físicas para sinais elétricos [7] [11]. Por outro lado, a evolução tecnológica na área de microeletrônica permitiu a obtenção de maior resolução e precisão dos conversores analógico-digital e maiores taxas de amostragem. Ambos fatores contribuíram para o aumento expressivo do volume de dados que são gerados através da utilização de sensores [10] [11].

Os DataLoggers são desenvolvidos como plataformas eletrônicas de aquisição de dados, analógicos ou digitais, capazes ler os dados dos sensores de forma automatizada e armazená-los em um dispositivo de memória interno com o objetivo de disponibilizá-los posteriormente, podendo esta disponibilidade ser feita na forma dos dados bruto, ou ainda na forma de informações compiladas, como índices ou relatórios [10].

Um dispositivo de aquisição de dados deve possuir configuração eletrônica de suas entradas compatíveis com as características elétricas do sinal produzido pelo sensor que se deseja realizar a leitura. Entre estas características podemos destacar a natureza do sinal, que pode tratar-se de uma tensão, corrente, luz, som, ou até mesmo um campo eletromagnético. Além disso, é necessário que as características de amplitude e frequência mínimas e máximas emitidas pelo sensor possam ser suportadas pela entrada do dispositivo de aquisição [10] [11].

Outros fatores importantes que influenciam no projeto de um dispositivo de aquisição de são a sua capacidade de processamento, a sua quantidade de entradas simultâneas disponíveis, a sua capacidade de armazenamento de dados e as suas interfaces de comunicações disponíveis para exibição ou transmissão dos dados [10].

(20)

4 DESENVOLVIMENTO

4.1 Práticas Recentes em Projetos de Dispositivos Eletrônicos

O recente avanço dos dispositivos desenvolvidos para atender às necessidades dos projetos de soluções de Internet das Coisas tem agilizado as fases de elaboração e prototipação [12]. O desenvolvimento de plataformas de prototipagem eletrônica de fonte aberta, já com microprocessadores integrados, e o desenvolvimento de diversos e variados módulos de dispositivos eletrônicos, já com a presença de interface integrada em seus circuitos para a conexão com estas plataformas de prototipagem, causou o surgimento de uma padronização informal no mercado que teve como consequências a queda de preço dos dispositivos utilizados e uma demanda crescente pelo desenvolvimento de novos módulos [12] [13].

A utilização de plataformas de prototipagem eletrônica em conjunto com os módulos de dispositivos eletrônicos tem sido uma tendência adotada também no desenvolvimento de trabalhos acadêmicos, principalmente devido ao fato de que agilizam na elaboração do projeto eletrônico, permitindo, desta forma, uma maior concentração de esforços na realização de pesquisas e análise dos resultados, que são objeto alvo destes trabalhos [10] [11] [14] [15] [16] [17] [18].

Além do mencionado, o custo envolvido na utilização deste tipo de solução diminuiu significativamente, sendo possível observar, atualmente, estas plataformas sendo utilizadas até mesmo durante a fase de produção de projetos de desenvolvimento de dispositivos eletrônicos. Porém, as vantagens proporcionadas pela escolha de adotar esta estratégia de trabalho vai muito além de ser apenas o baixo custo de produção [11] [12] [13].

A alta disponibilidade dos componentes no mercado, a extensa variedade de módulos com os mais diversos sensores e atuadores, a prototipação de execução rápida devido à facilidade de conexão dos módulos com as plataformas, bem como, a baixa curva de aprendizagem para a programação dos microcontroladores, se apresentam como vantagens que tornam o tempo de desenvolvimento destes projetos muito menor utilizando as plataformas de prototipagem [12] [13 ] [16] [17].

Como resultado, o desenvolvimento de projetos de dispositivos eletrônicos tornou-se muito mais dinâmico, com grande diversidade de novos dispositivos criados a cada dia, porém, com integração e comunicação entre si, surgindo um cenário de Internet das Coisas que tem mudado totalmente a forma como interagimos com nosso meio ambiente [12].

(21)

4.2 Materiais Utilizados

4.2.1 Plataforma de Prototipagem Eletrônica

Baseado nas pesquisas da sessão anterior, foi selecionada como plataforma de prototipagem eletrônica, para ser utilizada na elaboração e desenvolvimento do projeto deste trabalho, a placa de desenvolvimento modelo ESP32 DevKit V1, representada na Figura 4, fabricado pela empresa DOIT (Doctors of Intelligence & Technology), possuindo embarcado um microcontrolador, modelo ESP-WROOM-32 e série ESP32 da fabricante Espressif, e também um regulador de tensão, que entrega tensão de 3,3V para alimentar o microcontrolador, porém, permite alimentação da placa com tensão entre 5V a 12V [19].

Figura 4: Placa de desenvolvimento DOIT ESP32 DevKit V1.

Essa placa de desenvolvimento possui 30 conectores, dois deles (VIN e GND) podem ser utilizados para alimentação de energia ou para acessar a tensão da fonte de alimentação, outros dois (3V3 e GND) podem ser utilizados para acessar a tensão de 3,3V do regulador de tensão, e um conector (EN) é utilizado para habilitar ou reiniciar a placa. Os outros conectores permitem a configuração de até 25 portas como entradas/saídas digitais, até 6 entradas analógicas com conversor ADC (Analog to Digital Converter) de 12 bits, até 6 saídas analógicas com conversor DAC (Digital to Analog Converter) de 8 bits, até 3 interfaces UART (Universal Synchronous Receiver/Transmitter), até 2 interfaces SPI (Serial Peripheral Interface) e até 2 interfaces I2C (Inter-Integrated Circuit) [19].

O microprocessador ESP-WROOM-32 possui um processador de 32 bits, com dois núcleos de processamento, que suporta até 240 MHz de clock, sendo capaz de executar até 600 milhões de instruções por segundo. Possui 448 KB de memória ROM, 520 KB de memória SRAM, 4 MB de memória Flash externa, 4 MB de memória SRAM externa. Além disso, possui um módulo de rádio integrado com modulação em 2,4 GHz, com suporte a redes sem fio 802.11b/g/n e bluetooth v4.2 BLE. Este microprocessador opera com tensão típica de

(22)

3,3V e pode fornecer um total de corrente de 1.200 mA, considerando o consumo acumulado de todas as portas de entrada e saída [20].

4.2.2 Display LCD

Um display LCD foi utilizado com o objetivo de atuar como módulo para exibição dos dados do último registro de leitura realizada. O display utilizado, representado na Figura 5, tem capacidade para exibição de 2 linhas com 16 caracteres em cada linha, dessa forma foi necessário segmentar as informações para apresentação em telas separadas, em uma tela foi mostrado o horário e o valor da leitura, e em uma segunda tela foi mostrada a estimativa de qualidade da água. Este display será utilizado ainda para exibir uma terceira tela com as informações do endereço IP obtido quando o dispositivo estiver conectado na rede sem fio.

Figura 5: Módulo Display LCD 16x2.

A conexão deste módulo com a plataforma de prototipagem utiliza seis portas da placa ESP32 configuradas como saída digital. A biblioteca LiquidCrystal é utilizada para facilitar a programação das configurações do display no microcontrolador, bem como para facilitar a programação das operações de exibição de dados no display. A alimentação de energia deste display é realizada pelo conector VIN da placa ESP32 que fornece tensão de 5V e corrente diretamente da fonte de alimentação. Um potenciômetro com resistência nominal de 1 KOhms é utilizado para controlar o ajuste de contraste do visor do display.

4.2.3 Módulo Leitor de Cartão de Memória SD

Como módulo para escrita e leitura dos registros, contendo os valores obtidos do sensor, em dispositivos de armazenamento, foi utilizado um módulo leitor de cartão de memória do tipo SD, representado na Figura 6. Neste cartão de memória foi criado e mantido

(23)

um arquivo com o nome “log.csv” onde estarão armazenados os registros dos dados de leitura do sensor, sendo um registro por linha, contendo as informações de horário da leitura, valor da leitura e estimativa de qualidade da água.

Figura 6: Módulo leitor de cartão de memória SD.

Este módulo se conecta com a plataforma de prototipagem utilizando a interface SPI que consiste 4 conectores para configuração e transmissão dos dados. Para otimizar a programação das operações de escrita e leitura dos dados, e de configuração do módulo, são utilizadas as bibliotecas FS, SD e SPI. A alimentação de energia deste módulo pode ser com tensão de 3,3V ou de 5V, e neste trabalho é utilizada alimentação de 3,3V realizada pelo conector 3V3 da placa ESP32.

4.2.4 Módulo de Comunicação com Redes Sem Fio

Uma vez que o microprocessador integrado na placa de prototipagem utilizada neste trabalho já possui um módulo de conexão com redes sem fio nos padrões 802.11b/g/n, este será utilizado para transmissão dos registros armazenados, calibração do sensor e também para sincronizar o horário da leitura do sensor a partir de servidores NTP da internet. Para otimizar a programação das operações deste módulo foram utilizadas as bibliotecas WiFi, WiFiUdp e NTPClient.

4.3 Confecção do Sensor para Refratometria

O sensor construído neste trabalho foi confeccionado utilizando um pequeno segmento de fibra óptica plástica, com comprimento de aproximadamente 7cm, sendo submetido a procedimento de fabricação artesanal para dobrar a fibra com objetivo de criar uma curvatura em forma de U, com diâmetro interno de aproximadamente 7mm, assim como representado na Figura 7. A fibra óptica utilizada possui diâmetro de 1mm e não foi realizado procedimento para remoção de casca.

(24)

Figura 7: Medidas utilizadas para confecção da curvatura em forma de U [3].

As medidas adotadas para confecção do sensor, bem como, a utilização da fibra óptica plástica com 1mm de diâmetro, foram definidas levando em consideração estudos realizados recentemente [3] e [4], onde estas medidas foram obtidas a partir de cálculos numéricos e simulações computacionais, e tiveram seus valores confirmados posteriormente de forma experimental onde ficou comprovada a sua eficácia, sendo esta configuração a que obteve melhor desempenho entre os resultados encontrados nestas pesquisas.

Para realizar o procedimento de dobrar a fibra óptica plástica foram testados três métodos diferentes, onde todos foram capazes de criar uma curvatura em formato de U de forma permanente na fibra. O primeiro método consistiu de aquecer levemente a fibra óptica utilizando jatos de ar quente e flexionar aos poucos a mesma, até atingir o formato da curva desejada, e então manter a fibra nesta posição até resfriar.

(25)

O segundo método consistiu de flexionar a fibra com a curvatura desejada e, ao mesmo instante, aplicar uma força mecânica de fricção na região da dobra utilizando um objeto cilíndrico com o mesmo diâmetro desejado para a curvatura, apesar de eficaz esse método causou um desgaste na fibra na região da curva. Esse desgaste não influenciou no funcionamento do sensor, porém não foi possível determinar se o mesmo prejudicou de alguma forma a sensibilidade do sensor.

Figura 9: Fibra óptica curvada utilizando o segundo método.

O terceiro método consistiu de fabricar um gabarito utilizando uma chapa de material plástico, com dois furos para a passagem da fibra, afastados pela distância do diâmetro desejado para a curvatura, a fibra é então flexionada e posicionada nos furos do gabarito, de forma a criar a curvatura em forma de U, e mantida em repouso nesta posição até que a inércia torne permanente a deformação causada pela força de flexão.

(26)

Para transmissão do sinal através da fibra óptica, os componentes utilizados foram o diodo LED TIL32, como emissor para converter o sinal elétrico em luz infravermelha de 850nm, e o fototransistor TIL78, como receptor para conversão de luz infravermelha de 850nm em sinal elétrico. Foi elaborado um simples circuito elétrico para funcionamento deste emissor e receptor, apresentando também uma conexão para a leitura do sinal de saída do sensor, este circuito permite desenvolver este sensor como um módulo para a maioria das plataformas de prototipagem existentes atualmente, o diagrama esquemático do circuito elétrico do módulo sensor pode ser conferido na Figura 11 abaixo.

Figura 11: Circuito elétrico do módulo sensor.

Inicialmente, para testar o funcionamento do circuito do sensor, foi realizado acoplamento manual da fibra com o emissor e o receptor, e a leitura do sinal de saída foi realizado utilizando a plataforma ESP32. Não foi possível realizar testes de leitura de qualidade da água utilizando acoplamento manual devido à necessidade de se manter isolados os componentes eletrônicos do sensor. Nesta etapa constatou-se que a luz solar causava interferência na leitura do sinal, mostrando haver necessidade de proteger o receptor contra outras fontes de iluminação infravermelha. Por outro lado, constatou-se ausência de interferência elétrica na leitura do sinal, não havendo necessidade de implementação de filtros no circuito elétrico do sensor.

Durante o procedimento de confecção do suporte para acoplamento do sensor foi necessário então alcançar o objetivo de fixar a fibra óptica alinhada com o emissor e com o receptor, e também, de proteger o receptor da luz natural do sol e contra outras fontes de luz infravermelha. Para contornar a indisponibilidade de ferramentas para fabricação do suporte para o acoplamento utilizando material de metal [3] [4], foram confeccionados suportes

(27)

utilizando borracha e madeira. O suporte para acoplamento do emissor e receptor com a fibra óptica, confeccionado utilizando madeira, pode ser observado na Figura 13.

Ambos os suportes foram capazes de proteger o receptor contra a incidência de raios da luz solar, e contra outras fontes de luz infravermelha, porém, o suporte confeccionado com borracha apresentou ruídos no sinal de saída do sensor e sua utilização se tornou inviável. Não foram realizados estudos para determinar a causa da ocorrência dos ruídos utilizando o suporte de borracha. A confecção do suporte para acoplamento foi realizada obedecendo aproximadamente a disposição e medidas apresentadas no esboço exibido na Figura 12, com cavidades de 5mm para acoplamento do emissor e do receptor, e cavidades de 2mm para acoplamento da fibra óptica. As cavidades para acoplamento da fibra óptica foram realizadas com 2mm de diâmetro devido a indisponibilidade de ferramenta com 1mm de espessura para confeccionar a cavidade.

Figura 12: Esboço do suporte para acoplamento do sensor.

A etapa de confecção do suporte envolveu a realização de novos testes para leitura do sinal de saída com a plataforma ESP32, porém, os testes realizados com acoplamento manual, executados nas mesmas condições, apresentavam melhores resultados, obtendo maior amplitude e maior estabilidade do sinal recebido. A execução desta etapa repetiu-se até a obtenção de resultados aceitáveis de amplitude e estabilidade do sinal recebido.

(28)

Figura 13: Suporte em madeira para acoplamento da fibra óptica.

4.4 Elaboração e Confecção do Circuito Elétrico

Assim como previsto no resultado das pesquisas sobre as práticas recentes na elaboração e confecção de projetos de dispositivos eletrônicos, foram utilizados os módulos eletrônicos padronizados disponíveis na plataforma de prototipagem especificada (ESP32) sendo acoplado a esta plataforma o sensor óptico (diodo LED TIL32 e o fototransistor TIL78), módulo leitor de cartão SD, módulo display LCD. Assim a elaboração do projeto do circuito elétrico foi realizado através do estudo da documentação da plataforma ESP32 para levantamento e especificação do módulo de condicionamento de sinal (conversor analógico para digital (ADC – Analog Digital Converter)), módulo de transmissão (módulo WIFI) e identificação das portas da placa ESP32 para conexão com os módulos periféricos.

(29)

Figura 14: Esquema de montagem da placa e dos módulos na protoboard.

Uma protoboard foi uma utilizada para auxiliar na conexão dos módulos com a placa ESP32. A disposição da placa e dos demais módulos montados na protoboard pode ser conferida na Figura 14. As conexões entre o módulo sensor e a placa estão representadas por fios na cor amarela, as conexões entre o módulo leitor de cartões SD e a placa estão representadas por fios na cor verde, e as conexões entre o módulo display de LCD e a placa estão representadas por fios na cor azul. Os fios vermelhos representam as conexões com a alimentação de energia e os fios pretos representam as conexões com o ground (terra).

Para cada módulo utilizado foi criado um diagrama esquemático do circuito elétrico para conexão deste módulo com a plataforma de prototipagem, nestes diagramas estão especificadas as portas utilizadas para conexão de cada terminal de seu módulo correspondente. O diagrama da Figura 15 corresponde ao circuito elétrico de conexão do módulo sensor com a placa ESP32. A Figura 16 corresponde ao diagrama de conexão do módulo display LCD. E o circuito elétrico de conexão do módulo leitor de cartão de memória SD pelo diagrama da Figura 17.

(30)
(31)
(32)

Figura 17: Circuito para conexão do módulo leitor de cartão de memória SD.

4.5 Implementação do Código Fonte

O código fonte implementado para programação do microcontrolador instalado na plataforma de prototipação, ESP-WROOM-32, foi escrito utilizando linguagem C++ e a plataforma Arduino IDE, em sua versão 1.8.9, foi utilizada como editor de código e também para compilar o código e gravar o programa compilado no microcontrolador.

4.5.1 Inclusão de Bibliotecas

A plataforma Arduino IDE disponibiliza diversas bibliotecas compatíveis com microcontroladores da série ESP32 e com os módulos utilizados neste trabalho. Neste trabalho foram utilizadas as bibliotecas WiFi.h, WiFiUdp.h, NTPClient.h, FS.h, SD.h, SPI.h, SPIFFS.h e LiquidCrystal.h. O código utilizado para incluir estes bibliotecas como referência está apresentado no Quadro 1.

A biblioteca WiFi.h foi utilizada para estabelecer a conexão do módulo de comunicação com redes sem fio, e para configurar um servidor web capaz de gerenciar

(33)

requisições, utilizando protocolo HTTP, e enviar páginas web, em formato HTML, para os clientes conectados no servidor. Utilizada também em conjunto com as bibliotecas WiFiUdp.h e NTPClient.h para estabelecer conexões UDP e realizar a sincronização do relógio interno do microcontrolador para obter a hora atual de servidores na internet utilizando requisições NTP.

A biblioteca SD.h é utilizada para configurar e acessar o módulo leitor de cartões de memória SD para realizar transferência de dados entre o módulo e o microcontrolador. E a biblioteca SPIFFS.h é utilizada para configurar e acessar a memória flash interna do microcontrolador. Sendo que ambas bibliotecas possuem como dependência o uso das bibliotecas FS.h, responsável por gerenciar o sistema de arquivos de um dispositivo de armazenamento, e SPI.h, responsável por gerenciar a comunicação de módulos periféricos com o microcontrolador utilizando a interface SPI.

A biblioteca LiquidCrystal.h é utilizada para configurar o módulo display LCD, identificando quais portas na plataforma de prototipagem foram utilizadas para cada conector do módulo, além de, definir a quantidade de linhas e colunas que podem ser exibidas no visor do display, e também, atualizar o conteúdo que está sendo exibido no visor do módulo display.

Quadro 1: Inclusão de bibliotecas.

#include <WiFi.h> #include <WiFiUdp.h> #include <NTPClient.h> #include "FS.h" #include "SD.h" #include "SPI.h" #include "SPIFFS.h" #include <LiquidCrystal.h>

4.5.2 Instanciação de Classes e Variáveis Globais

Foram criadas variáveis e instâncias de classes em escopo global com objetivos de configurar e controlar os módulos de comunicação com redes sem fio, display LCD e módulo sensor, e também, configurar o servidor web, configurar a sincronização do horário e armazenar os dados da última leitura realizada pelo sensor. O código fonte utilizado para instanciação das classes e variáveis globais pode ser conferido no Quadro 2.

(34)

Quadro 2: Instanciação das classes e variáveis globais.

// Configuração da rede sem fio WiFiServer servidorWeb(80); IPAddress ip;

char rede[] = "rsfdss";

char senha[] = "pswveaomacho"; // Configuração para NTP

WiFiUDP udpCon;

char ntpServidor[] = "a.ntp.br";

NTPClient ntpCliente(udpCon, ntpServidor, -10800); // Configuração do display LCD 16x2

LiquidCrystal visor(33, 25, 26, 27, 14, 13); int visorAtual = 1;

long visorEpoch; String visorBarra = "";

// Configuração do módulo sensor int ENVIO = 32;

int LEITURA = 35;

int valorAltaQualidade = 4095; int valorBaixaQualidade = 1; // Dados da última leitura do sensor long leituraEpoch;

String leituraHora; int leituraValor;

int leituraQualidade = 0;

As configurações da rede sem fio, nome da rede e senha de autenticação, foram definidas em duas variáveis globais, respectivamente, “rede” e “senha”. E uma instância da classe IPAddress, com nome “ip”, foi criada para armazenar o endereço IP obtido pelo dispositivo ao se conectar com a rede sem fio. Para configuração e funcionamento do servidor web foi criada uma instância da classe WiFiServer, com nome “servidorWeb”, escutando requisições HTTP pela porta 80.

Dentre as configurações necessárias para realizar a sincronização do relógio interno do microcontrolador, foram criadas a variável “ntpServidor”, para armazenar o endereço do servidor na internet para o qual serão encaminhadas as requisições NTP, uma instância da classe WiFiUDP, com nome “udpCon”, para gerenciar conexões UDP, e uma instância da classe NTPClient, com nome “ntpCliente”, para realizar as requisições NTP e atualizar o horário atual no microcontrolador. O construtor da classe NTPClient recebe como parâmetros

(35)

a instância da classe WiFiUDP, o endereço do servidor NTP e um valor inteiro que representa o fuso horário local em segundos.

Uma instância da classe LiquidCrystal, com nome “visor”, foi criada para configurar e controlar o conteúdo exibido no módulo display LCD. Além disso, foram utilizadas as variáveis “visorAtual”, para identificar a informação que deve ser exibida no visor, “visorEpoch”, para registrar o horário em que a informação exibida no visor foi atualizada, e “visorBarra”, para armazenar o texto que representará em forma de barra o valor da qualidade da água obtido após cada leitura do sensor.

Para configurar o módulo sensor foram definidas duas variáveis, denominadas “ENVIO” e “LEITURA”, para identificar respectivamente as portas da placa ESP32 nas quais serão conectados o emissor e o receptor do módulo sensor. E mais duas variáveis, denominadas “valorAltaQualidade” e “valorBaixaQualidade”, foram criadas para armazenar respectivamente os valores de calibração do sensor com amostras de alta qualidade e de baixa qualidade.

Para armazenar os dados obtidos pela leitura mais recente realizada pelo módulo sensor foram criadas quatro variáveis, sendo elas, “leituraEpoch”, para armazenar o horário em formato epoch, “leituraHora”, para armazenar o horário em formato de texto, “leituraValor”, para armazenar o valor obtido pelo receptor, e “leituraQualidade”, para armazenar o valor calculado como porcentagem de qualidade da água.

4.5.3 Funções

Quando utilizamos o Arduino IDE, duas funções especiais, "setup" e "loop", devem ser implementadas no código fonte para que haja correto funcionamento da placa ESP32. A função setup é executada apenas uma vez, logo que o microcontrolador é inicializado, e a função loop é executada repetidamente, iniciando logo após execução dos comandos dentro da função setup, e permanece em execução até o microcontrolador ser desligado. O código implementado na função setup está presentado no Quadro 3, e o código implementado na função loop está apresentando no Quadro 4.

(36)

Quadro 3: Implementação da função setup. void setup() { visor.begin(16, 2); visor.noCursor(); pinMode(ENVIO, OUTPUT); pinMode(LEITURA, INPUT); WiFi.begin(rede, senha); ntpCliente.begin(); if (!SPIFFS.begin(true)) { return; } else { if (SPIFFS.exists("/calibracao.txt")) {

File arquivoCalibracao = SPIFFS.open("/calibracao.txt"); valorBaixaQualidade = arquivoCalibracao.parseInt(); valorAltaQualidade = arquivoCalibracao.parseInt(); arquivoCalibracao.close(); } } }

Dentro da função setup foram implementados os comandos necessário para configuração do dispositivo, inicialização dos módulos sensor, display LCD e de comunicação com rede sem fio, e também, inicialização do serviço de cliente NTP, para sincronização do horário na internet, e recuperação de valores de calibração do sensor armazenados na memória flash interna do microcontrolador.

Na função loop foi implementada a lógica de funcionamento do dispositivo, que consiste de verificar se houve alterações na conexão com a rede sem fio, sincronizar o horário do relógio interno do microcontrolador, realizar leitura do sensor a cada 60 segundos e armazenar os valores obtidos, atualizar as informações exibidas no visor do display LCD a cada 3 segundos, e, gerenciar as requisições web.

Quadro 4: Implementação da função loop.

void loop() { verificarConexao(); ntpCliente.update(); if ((ntpCliente.getEpochTime() - leituraEpoch) > 60) { realizarLeitura(); armazenarLeitura(); } if (((ntpCliente.getEpochTime() - visorEpoch)) > 3) { atualizarVisor(); } gerenciarRequisicaoWeb(); }

(37)

Para executar a atividade de verificar se houve alterações na conexão com a rede sem fio foi implementada uma função chamada verificarConexao, código apresentado no Quadro 5, que atualiza a variável “ip” com o endereço IP atual e, se houver conexão estabelecida na rede sem fio, inicia o servidor web.

Quadro 5: Implementação da função verificarConexao.

void verificarConexao() { if (WiFi.localIP() != ip) { ip = WiFi.localIP(); if (WiFi.status() == WL_CONNECTED) { servidorWeb.begin(); } } }

Para executar a atividade de realizar leitura do sensor foi implementado a função realizarLeitura, código apresentado no Quadro 6, responsável por enviar um sinal digital pelo emissor, capturar um valor analógico obtido no receptor, atualizar as variáveis de horário e valor da última leitura e calcular a porcentagem de qualidade da água.

Quadro 6: Implementação da função realizarLeitura.

void realizarLeitura() { int i = 0; int valor = 0; digitalWrite(ENVIO, HIGH); delay(100); for (i = 0; i < 10; i++) { valor += analogRead(LEITURA); } digitalWrite(ENVIO, LOW); leituraEpoch = ntpCliente.getEpochTime(); leituraHora = ntpCliente.getFormattedTime(); leituraValor = valor / 10; calcularQualidade(); }

Para executar a atividade de calcular a porcentagem de qualidade da água foi implementada a função calcularQualidade, onde o valor da porcentagem de qualidade da água é definida através de um cálculo utilizando como referência os valores de calibração do sensor, para leituras de baixa e de alta qualidade, e o valor da última leitura realizada. Além disso, esta função estabelece o texto utilizado como barra de qualidade da água apresentado no display LCD. O código implementado para esta função está apresentado no Quadro 7.

(38)

Quadro 7: Implementação da função calcularQualidade.

void calcularQualidade() {

if (leituraValor <= valorBaixaQualidade) { leituraQualidade = 0;

visorBarra = "=";

} else if (leituraValor >= valorAltaQualidade) { leituraQualidade = 100;

visorBarra = "================"; } else {

leituraQualidade = ((leituraValor - valorBaixaQualidade) * 100) / (valorAltaQualidade - valorBaixaQualidade);

visorBarra = "";

for (int i = 0; i < (leituraQualidade / 100) * 16; i++) { visorBarra += "=";

} } }

Para executar a atividade de armazenar os dados de horário, valor e qualidade da última leitura realizada, foi implementada a função armazenarLeitura. Esta função é responsável por inicializar o módulo leitor de cartão de memória SD e verificar se este possui um cartão de memória inserido e se foi possível montar o sistema de arquivo do mesmo. Em caso de sucesso, irá então abrir com permissão de escrita o arquivo no caminho “/log.csv” onde estão armazenados os registros do histórico de leituras realizadas, devendo criar primeiramente este arquivo caso o mesmo não exista. Em seguida, a função aponta para o final do arquivo e escrever nele os valores das variáveis “leituraEpoch”, “leituraValor” e “leituraQualidade”, nesta ordem e separados pelo caractere “;”. O código fonte escrito para implementar a função armazenarLeitura está apresentado no Quadro 8.

Quadro 8: Implementação da função armazenarLeitura.

void armazenarLeitura() { if (!SD.begin()) {

return; }

File arquivoLog = SD.open("/log.csv", FILE_WRITE); if (arquivoLog) { arquivoLog.seek(arquivoLog.size()); arquivoLog.print(leituraEpoch); arquivoLog.print("; "); arquivoLog.print(leituraValor); arquivoLog.print("; "); arquivoLog.println(leituraQualidade); arquivoLog.close(); } }

(39)

Para executar a atividade de atualizar as informações exibidas no visor do display LCD foi implementada a função atualizarVisor, código apresentado no Quadro 9, que inicia limpando o conteúdo do visor e em seguida escreve a informação correspondente, de acordo com a tela que deverá ser exibida. A função está programada para exibir três telas, a primeira escreve no visor a barra que representa a porcentagem de qualidade da água, segunda escreve a hora de realização e o valor obtido da última leitura, e a terceira escreve o endereço IP obtido pelo módulo de conexão com a rede sem fio.

Quadro 9: Implementação da função atualizarVisor.

void atualizarVisor() { visor.clear(); if (visorAtual == 1) { visorAtual = 2; visor.print("Qualidade"); visor.setCursor(0, 1); visor.print(visorBarra); } else if (visorAtual == 2) { visorAtual = 3; visor.print("Hora: " + leituraHora); visor.setCursor(0, 1); visor.print("Valor: " + String(leituraValor)); } else { visorAtual = 1; visor.setCursor(0, 0); visor.print("Endereco IP"); visor.setCursor(0, 1); visor.print(ip); } visorEpoch = ntpCliente.getEpochTime(); }

Para executar a atividade de gerenciar as requisições recebidas pelo servidor web foi implementada a função gerenciarRequisicaoWeb, código apresentado no Quadro 10, que envia informações para o cliente no formato de páginas HTML, ou executa alguma função, conforme a requisição recebida. Requisições para a página “/log.csv” irão enviar um arquivo contendo o histórico de leituras armazenado no cartão de memória SD. Requisições para a página “/admin” irão exibir a página de administração do dispositivo. As demais requisições exibem a página principal com informações da última leitura, porém, requisições para a página “/leitura” irão realizar uma nova leitura e armazenar os valores, requisições para a página “/limpar” realizarão atividade de limpar o histórico de leituras armazenado no cartão SD, e requisições para as páginas “/alta” e “/baixa” realizarão atividade de calibrar o sensor respectivamente para amostras de água de alta e de baixa qualidade.

(40)

Quadro 10: Implementação da função gerenciarRequisicaoWeb.

void gerenciarRequisicaoWeb() {

WiFiClient clienteWeb = servidorWeb.available(); if (clienteWeb) {

String requisicao = ""; bool exibirHistorico = false; bool exibirAdmin = false;

while (clienteWeb.connected()) { if (clienteWeb.available()) { char c = clienteWeb.read(); if (c != '\r' && c != '\n') { requisicao += c; } else { if (requisicao.length() == 0) { if (exibirHistorico) { paginaHistorico(clienteWeb); exibirHistorico = false; } else if (exibirAdmin) { paginaAdmin(clienteWeb); exibirAdmin = false; } else paginaUltimaLeitura(clienteWeb); break; } else requisicao = ""; } if (requisicao.endsWith("GET /leitura")) { realizarLeitura(); armazenarLeitura(); }

if (requisicao.endsWith("GET /log.csv")) exibirHistorico = true; if (requisicao.endsWith("GET /admin")) exibirAdmin = true; if (requisicao.endsWith("GET /limpar")) limparHistorico(); if (requisicao.endsWith("GET /alta")) calibrarSensor(true); if (requisicao.endsWith("GET /baixa")) calibrarSensor(false); }

}

clienteWeb.stop(); }

}

Para executar a atividade de enviar o histórico de leituras foi implementada a função paginaHistorico, código apresentado no Quadro 11, que verifica se existe um cartão de memória SD no dispositivo e se é possível montar seu sistema de arquivos. Em caso de sucesso, o arquivo “/log.csv” será acessado, em modo somente leitura, e seu conteúdo será lido e enviado para o cliente. Em caso de falha ao acessar o cartão de memória, será enviada para o cliente uma página de erro informando que houve uma falha no dispositivo ao tentar abrir o arquivo contendo os registros do histórico de leituras realizadas.

(41)

Quadro 11: Implementação da função paginaHistorico.

void paginaHistorico(WiFiClient clienteWeb) { if (!SD.begin()) {

clienteWeb.println("HTTP/1.1 200 OK"); clienteWeb.println("Content-type:text/html"); clienteWeb.println();

clienteWeb.println("<h1>Erro</h1>");

clienteWeb.println("<br/>Erro ao abrir arquivo de hist&oacute;rico de leituras."); clienteWeb.println("<br/><a href='/'>Clique aqui</a> para voltar.<br/>");

clienteWeb.println(); } else {

File arquivoLog = SD.open("/log.csv"); clienteWeb.println("HTTP/1.1 200 OK"); clienteWeb.println("Content-type:text/csv"); clienteWeb.println(); while (arquivoLog.available()) { clienteWeb.write(arquivoLog.read()); } clienteWeb.println(); } }

Para executar a atividade de exibir a página de administração do dispositivo foi implementada a função paginaAdmin, código apresentado no Quadro 12, que envia para o cliente uma página de configuração com as opções de limpar o histórico de leituras do sensor, calibrar o sensor com uma amostra de alta qualidade, calibrar o sensor com uma amostra de baixa qualidade, e voltar para a página principal do dispositivo.

Quadro 12: Implementação da função paginaAdmin.

void paginaAdmin(WiFiClient clienteWeb) { clienteWeb.println("HTTP/1.1 200 OK"); clienteWeb.println("Content-type:text/html"); clienteWeb.println();

clienteWeb.println("<h1>Configurar Sensor</h1>");

clienteWeb.println("<br/><br/><a href='/limpar'>Clique aqui</a> limpar hist&oacute;rico de leituras do sensor.<br/>");

clienteWeb.println("<br/><br/><a href='/alta'>Clique aqui</a> para calibrar sensor com amostra de &aacute;gua de alta qualidade.<br/>");

clienteWeb.println("<br/><br/><a href='/baixa'>Clique aqui</a> para calibrar sensor com amostra de &aacute;gua de baixa qualidade.<br/>");

clienteWeb.println("<br/><br/><a href='/'>Clique aqui</a> para voltar.<br/>"); clienteWeb.println();

}

Para executar a atividade de exibir a página principal com informações da última leitura, foi implementada a função paginaUltimaLeitura, código apresentado no Quadro 13,

(42)

que exibe hora, valor e qualidade da última leitura realizada, e também as opções de realizar uma nova leitura e de exibir os registros do histórico de leituras realizadas.

Quadro 13: Implementação da função paginaUltimaLeitura.

void paginaUltimaLeitura(WiFiClient clienteWeb) { clienteWeb.println("HTTP/1.1 200 OK");

clienteWeb.println("Content-type:text/html"); clienteWeb.println();

clienteWeb.println("<h1>Dados da &Uacute;ltima Leitura</h1>"); clienteWeb.print("<br/>Hor&aacute;rio: "); clienteWeb.println(leituraHora); clienteWeb.print("<br/>Valor: "); clienteWeb.println(leituraValor); clienteWeb.print("<br/>Qualidade: "); clienteWeb.print(leituraQualidade); clienteWeb.println("%");

clienteWeb.println("<br/><br/><a href='/leitura'>Clique aqui</a> para realizar nova leitura.<br/>");

clienteWeb.println("<br/><a href='/log.csv'>Clique aqui</a> para exibir hist&oacute;rico de leituras.<br/>");

clienteWeb.println(); }

Para executar a atividade de limpar os registros do histórico de leituras foi implementada a função limparHistorico, código apresentado no Quadro 14, que verifica se existe um cartão de memória SD no dispositivo e se é possível montar seu sistema de arquivos. Em caso de sucesso, o arquivo “/log.csv” será acessado, com permissão de escrita, e o conteúdo do arquivo será substituído por um espaço em branco.

Quadro 14: Implementação da função limparHistorico.

void limparHistorico() { if (!SD.begin()) { return;

}

File arquivoLog = SD.open("/log.csv", FILE_WRITE); if (arquivoLog) {

arquivoLog.write(' '); arquivoLog.close(); }

}

Para executar a atividade de calibrar o sensor foi implementada a função calibrarSensor, código apresentado no Quadro 15, que recebe como parâmetro uma variável informando se a amostra é de água de alta ou baixa qualidade, substitui o valor de calibração correspondente pelo de uma nova leitura realizada, e armazena os valores atuais de calibração do sensor no arquivo “/calibracao.txt” na memória flash interna do microcontrolador.

(43)

Quadro 15: Implementação da função calibrarSensor.

void calibrarSensor(bool qualidadeAlta) { realizarLeitura(); if (qualidadeAlta) { valorAltaQualidade = leituraValor; } else { valorBaixaQualidade = leituraValor; } if (!SPIFFS.begin(true)) { return; } else {

File arquivoCalibracao = SPIFFS.open("/calibracao.txt", FILE_WRITE); arquivoCalibracao.write(' '); arquivoCalibracao.print(valorBaixaQualidade); arquivoCalibracao.print("; "); arquivoCalibracao.print(valorAltaQualidade); arquivoCalibracao.close(); } }

(44)

5 RESULTADOS E DISCUSSÃO

Apesar do objetivo principal deste trabalho se tratar de desenvolver o projeto de um dispositivo eletrônico para aquisição automática de dados de qualidade da água, a confecção do sensor óptico para refratometria mostrou-se um objetivo primário uma vez que a execução de todas as demais etapas deste projeto dependeram do correto funcionamento deste sensor. O resultado da montagem do sensor no suporte para acoplamento da fibra com o emissor e o receptor pode ser conferida na Figura 18, e na Figura 19 pode ser observado o sensor em funcionamento durante realizações de leituras de qualidade da água.

Figura 18: Montagem no sensor no suporte para acoplamento.

Figura 19: Sensor em funcionamento durante realização de leituras.

O resultado da montagem do circuito elétrico do dispositivo na protoboard, onde é possível observar as conexões realizadas entre a plataforma de prototipagem e todo os

(45)

módulos utilizados, seguindo as especificações do projeto elaborado no item 5.4 deste trabalho, pode ser conferido na Figura 20.

Figura 20: Montagem do circuito elétrico do dispositivo na protoboard.

Como forma de comprovar o resultado da correta implementação das funcionalidades previstas para o funcionamento do dispositivo é possível observar as informações apresentadas na interface de exibição, módulo display LCD, e na interface de transmissão de dados, que são as páginas exibidas pelo servidor web. Na Figura 21 é possível observar o display exibindo a informação de qualidade da água representada por uma barra, as informações de horário e valor da leitura realizada, e o valor do endereço IP obtido pela conexão com a rede sem fio.

(46)

Com estas informações é possível comprovar o correto funcionamento das funções de conectar o dispositivo em uma rede sem fio, sincronizar o horário do relógio interno do microcontrolador através de atualização utilizando NTP, obter e armazenar leituras de um sinal analógico a partir do sensor confeccionado e calcular a porcentagem de qualidade da água.

Na Figura 22 é possível observar o correto funcionamento das funções que implementam a interface do servidor web do dispositivo transmitindo as informações da última leitura realizada, o arquivo de registros do histórico de leituras e a página de administração do dispositivo.

(47)

Apesar do escopo deste trabalho não incluir como objetivo, que o dispositivo projetado possua os requisitos de conectividade especificados pelo conceito de internet das coisas, os resultados alcançados com a implementação da interface web para transmissão de dados, e para o acesso das operações e configurações do dispositivo, permite que o mesmo seja utilizado conectado à internet e seja capaz de interagir mutuamente com outros dispositivos.

Além disso, o projeto realizado também apresentou como resultado positivo, o objetivo de manter a utilização de materiais e procedimentos de baixo custo durante a execução de todo o projeto. Característica que também é necessária ser atendida nos projetos de dispositivos nos conceitos de internet das coisas.

Para aquisição dos resultados dos valores obtidos a partir da realização de leituras utilizando o módulo sensor, foram preparados três cenários de experimentos, sendo um cenário para cada método utilizado para confeccionar a fibra óptica curvada em forma de U. As amostras utilizadas foram as mesmas em todos os cenários e podem ser observadas na Figura 23 sendo elas, da esquerda para a direita na figura, Amostra 1, água pura, Amostra 2, solução com 10 mL de açúcar e 30 mL de água, Amostra 3, solução com 10 mL de açúcar e 20 mL de água, Amostra 4, solução com 10 mL de açúcar e 10 mL de água, e Amostra 5, óleo vegetal de canola. Também foram realizadas leituras utilizando o ar como amostra em todos os cenários.

Figura 23: Amostras utilizadas em todos os cenários.

O Cenário 1 foi realizado com o módulo sensor montado com a fibra óptica confeccionada utilizando o gabarito. O resultado dos valores de leitura obtidos neste cenário estão apresentados na Tabela 1 e na Figura 24. O Cenário 2 foi realizado utilizando módulo sensor montado com a fibra óptica curvada por fricção e o resultado dos valores de leitura obtidos neste cenário estão apresentados na Tabela 2 e na Figura 25. E o Cenário 3 foi realizado com o módulo sensor montado com a fibra óptica curvada utilizando jatos de ar quente, o resultado da aquisição dos valores de leitura obtidos neste cenário estão apresentados na Tabela 3 e na Figura 26.

(48)

Tabela 1: Resultados obtidos no Cenário 1.

Amostra Valores de leitura obtidos

Ar 2090 2087 2091 2085 2073 1 1771 1755 1764 1753 1774 2 1697 1704 1699 1691 1703 3 1656 1656 1647 1662 1658 4 1601 1609 1614 1610 1614 5 1522 1520 1521 1510 1520

(49)

Tabela 2: Resultados obtidos no Cenário 2.

Amostra Valores de leitura obtidos

Ar 1957 1967 1968 1970 1967 1 1430 1441 1427 1428 1427 2 1346 1330 1344 1342 1345 3 1327 1304 1328 1335 1327 4 1349 1350 1344 1345 1332 5 1343 1338 1330 1324 1328

(50)

Tabela 3: Resultados obtidos no Cenário 3.

Amostra Valores de leitura obtidos

Ar 1761 1783 1790 1782 1761 1 1185 1188 1174 1185 1190 2 1116 1116 1108 1110 1110 3 1087 1087 1088 1088 1082 4 1044 1046 1051 1040 1045 5 994 1012 1017 1017 1011

(51)

A partir dos valores obtidos pelas leituras realizadas durante o cenário 2 é possível constatar que houve divergência do resultado esperado com o resultado obtido, onde o esperado era que os valores das leituras com as amostras 4 e 5 fossem inferiores aos valores das leituras com a amostra 3. Este resultado pode indicar que houve falha durante o processo de confecção da fibra óptica, ou ainda, que possa ter havido um deslocamento da fibra no suporte de acoplamento do sensor durante a troca de amostras para leitura.

Além disso foi possível constatar que os valores obtidos durante realização do cenário 1 foram os que obtiveram maiores amplitudes quando comparadas as leituras por amostra. Porém, os valores obtidos no cenário 3 indicam os resultados com maior estabilidade, apresentando menor variação de amplitude do sinal recebido por amostra.

Apesar deste trabalho propor o uso de um sensor por refratometria para estimar a qualidade de uma amostra de água, não pretendeu-se como objetivo a ser alcançado conseguir determinar o índice de refração exato desta amostra. Desta forma, os resultados obtidos nos cenários 1 e 3 são satisfatórios para utilização deste dispositivo uma vez que a sensibilidade do sensor, alta resolução e baixo grau de incerteza, teve influência menor do que as estabilidades no acoplamento do sensor e na amplitude das leituras realizadas. A confiabilidade dos valores obtidos pelo dispositivo estará diretamente associada à qualidade das amostras de água, de alta qualidade e de baixa qualidade, utilizadas para calibrar o sensor.

Referências

Outline

Documentos relacionados

de professores, contudo, os resultados encontrados dão conta de que este aspecto constitui-se em preocupação para gestores de escola e da sede da SEduc/AM, em

Dessa forma, diante das questões apontadas no segundo capítulo, com os entraves enfrentados pela Gerência de Pós-compra da UFJF, como a falta de aplicação de

2- Foi analisado e aprovado o Relatório de Estágio Docência, apresentado pelo aluno pós-graduando LUCAS SANT’ANA NUNES, do Programa de Pós-Graduação em Comunicação

Tese apresentada como requisito parcial para obtenção do título de Doutor pelo Programa de Pós-graduação em Direito da PUC-Rio.. Aprovada pela Comissão Examinadora abaixo

Considerando a contabilidade como centro de gestão da informação, os autores defendem o aprimoramento de uma visão sistêmica ao profissional, como também uma maior compreensão

No final, os EUA viram a maioria das questões que tinham de ser resolvidas no sentido da criação de um tribunal que lhe fosse aceitável serem estabelecidas em sentido oposto, pelo

Realizar a manipulação, o armazenamento e o processamento dessa massa enorme de dados utilizando os bancos de dados relacionais se mostrou ineficiente, pois o

Our results provide evidence that climatic variables represent a powerful predictor of avian species composition and are key to shape current patterns of alpha