• Nenhum resultado encontrado

5.3 Implementac¸˜ao Computacional

5.3.3 Acionamento do Sistema Mecˆanico, Aquisic¸˜ao e Envio dos Dados

Depois de iniciado, o programa principal fica respons´avel por acionar o sistema mecˆanico que introduzir´a os sensores na ´agua. Para isso, o raspberry envia o comando de start para o microcontrolador. Este executa o algoritmo de controle do sistema mecˆanico e quando finaliza, envia um sinal de ready para o raspberry. Esse fluxo est´a apresentado na figura 5.16.

Figura 5.16: Funcionamento do Sistema Mecˆanico.

O algoritmo de controle do sistema mecˆanico foi baseado no fluxo apresentado na figura 5.16. Basicamente, utiliza-se da biblioteca Wire.h, dispon´ıvel na plataforma Ar- duino, e no envio de comandos para o servo a partir da bilbioteca Servo.h. O algoritmo 5.3 refere-se ao evento criado que recebe e envia os comandos via I2C e aciona o servo motor.

1 void receiveEvent (int howMany ) 2 {

3 while(1 < Wire . available () )

4 {

5 char c = Wire . read () ;

6 // Verifica o caractere recebido , se ’p ’, aciona para baixar

os sensores , se ’s ’, aciona

8 if( c == ’s ’) {

9 for( pos = 180; pos >=1; pos -=1) {

10 servo . write ( pos ) ;

11 delay (15) ;

12 }

13 }

14 if( c == ’p ’) {

15 for( pos = 0; pos < 180; pos += 1) {

16 servo . write ( pos ) ;

17 delay (15) ;

18 }

19

20 }

21 Wire . write (’R ’) ; // Envia comando de " pronto " para

indicar fim de curso

22 } 23

24 }

Algoritmo 5.3: Trecho do c´odigo do acionamento do sistema mecˆanico.

No que se refere `a aquisic¸˜ao de dados, o algoritmo principal foi escrito na linguagem de programac¸˜ao C++. Primeiramente, esse algoritmo inicia um servidor socket para re- ceber os comandos de inicializac¸˜ao. Depois, cria a thread de aquisic¸˜ao e envio de dados dos sensores e fica aguardando um sinal de controle para finalizar a aquisic¸˜ao.

Um ponto importante que deve ser analisado ´e que cada sensor da Altas Scientific demora, em m´edia, 1 segundo para responder a uma requisic¸˜ao de dado. Desta forma, o tempo gasto para atualizac¸˜ao dos gr´aficos na tela referente a um dado sensor ´e de um pouco mais de quatro segundos, considerando tamb´em os dados dos sensores conectados ao conversor A/D. Isso poderia ser um problema, caso consider´assemos mudanc¸as abrup- tas nas vari´aveis monitoradas. Por´em, como a aplicac¸˜ao consiste em an´alise de dados de par´ametros f´ısico-qu´ımicos da ´agua, essas variac¸˜oes n˜ao ocorrem em tempos muito curtos, o que permite a aplicac¸˜ao ser realizada de forma sequencial e a atualizac¸˜ao dos gr´aficos acontecer em um intervalo de tempo maior.

Com isso, o processo do sistema funciona utilizando do conceito de multitarefa (apre- sentado no cap´ıtulo 2). O fluxo principal fica respons´avel por receber os comandos de inicializac¸˜ao e finalizac¸˜ao da aquisic¸˜ao de dados, enquanto uma thread ´e respons´avel por gerenciar as seguintes operac¸˜ao dos sensores:

5.3. IMPLEMENTAC¸ ˜AO COMPUTACIONAL 61

• Aquisic¸˜ao dos dados dos sensores; • Armazenamento dos dados;

• Processamento dos dados para envio; • Envio dos dados via socket para o servidor. A figura 5.17 mostra essa rotina.

Figura 5.17: Rotina Multitarefa.

O c´odigo do programa principal foi separado em duas partes principais. A primeira parte consiste no acionamento do sistema mecˆanico e nada mais ´e que iniciar o servidor socket, esperar conex˜ao do cliente e o comando para iniciar o sistema, enviar o comando de “p” de “play” para o microcontrolador e esperar o estado de “pronto”, ou comando “R”, enviado pelo AtMega, para continuar a execuc¸˜ao do programa. A segunda ´e consiste no fluxo que a thread realiza de forma sequencial (c´odigo seguinte). A func¸˜ao readData ´e a respons´avel por fazer a solicitac¸˜ao dos dados e envi´a-los, via socket, para o servidor.

Trˆes func¸˜oes s˜ao importantes no processo de aquisic¸˜ao de dados dos sensores que res- pondem sobre o protocolo I2C: setup, writeSensor e readSensor. A func¸˜ao setup solicita o

controle do barramento para um determinado enderec¸o. A writeSensor envia o comando de solicitac¸˜ao do dado. Para os sensores da Atlas Scientific, esse comando consiste no caractere “R” ou, em hexadecimal, 0x52. Quando esse comando ´e enviado, o sistema espera por 1 segundo e executa o readSensor, que recebe o dado enviado pelo EZO. O c´odigo desse processo ´e visto em no algoritmo 5.4.

1 int fd = setup ( address , fileName ) ; 2 buf [0] = 0 x52 ; 3 writeSensor ( fd , buf ) ; 4 buf [0] = 0 x00 ; 5 sleep (1) ; 6 7 if( readSensor ( fd , buf ) < 0) {

8 perror (" ReadSensorEr ror ") ; 9 }

Algoritmo 5.4: Trecho de c´odigo do processo de aquisic¸˜ao dos dados.

No caso dos dados do conversor anal´ogico digital que opera usando o protocolo SPI, os m´etodos mais importantes s˜ao: wiringPiSetup, mcp3004Setup e analogRead. Esses trˆes m´etodos s˜ao da biblioteca wiringPi. O primeiro e o segundo s˜ao respons´aveis por inicializar e configurar a execuc¸˜ao da biblioteca e do protocolo. J´a o analogRead recebe como parˆametro o canal do ADC que se deseja receber o dado, retornando, ent˜ao, o valor da convers˜ao anal´ogico-digital.

5.3.4

Funcionamento do Servidor e Apresentac¸˜ao dos Dados para o

Usu´ario

Como mencionado anteriormente, o servidor foi feito utilizando a tecnologia servlet. Com isso, todo o algoritmo do lado do servidor utiliza a linguagem de programac¸˜ao Java. Al´em disso, tamb´em s˜ao utilizadas linguagens de sistemas web, como: HTML, CSS e JavaScript.

Quando o cliente solicita a p´agina inserindo a URL no navegador, o servlet ´e execu- tado, recebendo a solicitac¸˜ao do cliente atrav´es do m´etodo doGet() (algoritmo 5.5)

1 protected void doGet ( H ttpS er v letR eque st request ,

H tt pS er vl et Re sp on se response ) throws ServletException , IOException {

2 // TODO Auto - generated method stub

5.3. IMPLEMENTAC¸ ˜AO COMPUTACIONAL 63

4 response . s et C ha r a ct e rE n c od i ng (" UTF -8 ") ;

5 String variableId = request . getParameter (" variableId ") ; 6 if( variableId . equals (" sensorData ") ) {

7 response . getWriter () . write ( Server . getInstance () .

getDataString () ) ;

8 }

9 }

Algoritmo 5.5: Trecho do c´odigo de inicializac¸˜ao da p´agina dos gr´aficos.

Como pode ser visto no c´odigo acima, a resposta da solicitac¸˜ao est´a no formato Json, estruturado da seguinte forma: ”temp”: value, ”ph”: value, ”DO”:value, ”POR”:value, ”Cond”:value. Com isso, o servidor envia ao cliente os valores dos sensores rec´em atua- lizados.

No momento da requisic¸˜ao, uma classe chamada Server ´e executada. Essa classe ´e respons´avel por iniciar uma thread para chamar a comunicac¸˜ao socket, receber os dados dos sensores e inseri-los na vari´avel que ´e acessada pelo m´etodo getDataString(), mos- trado no c´odigo anterior. Dessa forma, os valores s˜ao sempre atualizados `a medida que s˜ao enviados pelo processo embarcado.

Na p´agina dinˆamica (JSP) gerada pelo servidor, um trecho de c´odigo (algoritmo 5.6) em javaScript ´e fundamental para o funcionamento on-line do sistema.

1 $ . get (’ ServletClass ’, {

2 " variableId " : varID

3 } , function ( resp ) {

4 $ . each ( resp , function ( key , value ) { 5 if( key === " DO ") {

6 console . log ( value ) ;

7 yValO2 = value ;

8 }

9 if( key === " ph ") {

10 console . log ( value ) ;

11 yValPH = value ;

12 }

13 if( key === " por ") {

14 console . log ( value ) ;

15 yValPOR = value ;

16 }

17 if( key === " cond ") {

19 yValCondutivi dade = value ;

20 }

21 if( key === " temp ") {

22 console . log ( value ) ;

23 yValTemperatura = value ;

24 }

25

26 }) ;

27 }) . fail ( function () { // on failure 28 alert (" Request failed . ") ; 29 }) ;

Algoritmo 5.6: Trecho do c´odigo da requisic¸˜ao AJAX.

Esse trecho ´e inserido dentro de uma m´etodo chamado updateChart(), que ´e execu- tado a cada 1 segundo para fazer a atualizac¸˜ao dos gr´aficos. O m´etodo get corresponde a requisic¸˜ao AJAX, que solicita dados atualizados ao servidor sem a necessidade de recar- regamento da p´agina, fazendo com que os gr´aficos sejam modificados em tempo real.

Para a visualizac¸˜ao dos gr´aficos, ´e utilizada a biblioteca Canvas.js. Essa biblioteca permite a manipulac¸˜ao de v´arios tipos de gr´aficos, est´aticos e dinˆamicos, a partir de declarac¸˜oes de estilos. Visualmente, a p´agina ´e composta por c´odigos HTML e CSS, e a explicac¸˜ao para tais c´odigos est´a fora do escopo deste trabalho, dado que o foco principal ´e no funcionamento do sistema.

Cap´ıtulo 6

Experimentos e Resultados

Com o sistema em funcionamento, foram realizados experimentos para comprovar o seu conceito e sua aplicac¸˜ao para monitoramento da qualidade da ´agua. Para tal, colhemos amostras de ´agua em quatro lugares diferentes:

• Rio Pium;

• Lagoa de Alcac¸uz;

• “Riozinho” - Nascente pr ´oximo `a lagoa de Alcac¸uz; • Lago Azul;

A figura 6.1 mostra a localizac¸˜ao de cada um dos lugares de coleta. No mapa, o ponto “A” indica o posicionamento de Natal, capital do Rio Grande do Norte. Todas as amotras foram coletadas no dia 25 de setembro de 2015.

Vale salientar que no local que chamamos de “Riozinho” foram coletados duas amos- tras. A primeira foi adquirida diretamente da nascente. A segunda, um pouco mais dis- tante da primeira, sofre constante interferˆencia da ac¸˜ao humana devido a passagem de carros, modificando, teoricamente, os seus parˆametros f´ısico-qu´ımicos.

6.1

Experimentos e Resultados Manuais

No m´etodo manual, foram utilizados dois instrumentos para medic¸˜ao: um termˆometro digital para medir temperatura e uma fita (Figura 6.2) que mede: Nitrito, Nitrato, pH, Durezas Gerais e Duzeras de Carbonato1. Por esse m´etodo, a fita ´e inserida na ´agua por 10 segundos, fazendo modificar a colorac¸˜ao de cada um dos quadrados que representavam

1

Parˆametros utilizados em alguns ´ındices de qualidade da ´agua. O Nitrito e Nitrato est˜ao diretamente relacionados com a capacidade de existˆencia de vida. Altos ´ındices de Nitrato, por exemplo, podem diminuir a capacidade de transporte de oxigˆenio do sangue. J´a as durezas est˜ao relacionadas com a quantidade de c´alcio e magn´esio [Ribeiro & Beneditti 2012]

Figura 6.1: Mapa com os lugares de coleta de dados.

um determinado parˆametro. Depois, a an´alise ´e feita por m´etodo comparativo, ou seja, a partir das cores obtidas, analisava-se uma escala de cor (Figura 6.3), de cada parˆametro, para identificar o intervalo de valores que correspondia `aquela amostra.

Para visualizar como o teste ´e realizado, a figura 6.4 mostra os momentos da comparac¸˜ao em 3 pontos de medic¸˜ao. Da esquerda para direita: lagoa de Alcac¸uz, “Riozinho” e lago Azul.

Percebe-se claramente que ´e uma an´alise complicada e sem precis˜ao. Para os parˆametros medidos, os dados obtidos, nas trˆes medic¸˜oes, se apresentaram em ´ındices satisfat´orios, com valores de Nitrito, Nitrato e os relativos a dureza pr´oximo de zero, enquanto que o pH ficou na faixa de valores entre 6 e 7. Com relac¸˜ao `a temperatura, a tabela 6.1 mostra os valores adquiridos para cada amostra.

Tabela 6.1: Valores de Temperatura na An´alise Manual.

Lugar Valor (oC) Rio Pium 30,7 Lagoa de Alcac¸uz 30,1 ”Riozinho”Medida 1 31,5 ”Riozinho”Medida 2 30,4 Lago Azul 28,4

Documentos relacionados