O Site do Hardware Livre - OSHW

Medição da Turbidez da Água com o sensor SKU (MIC324)

A água é vida. Parece cliché, mas nunca é demais reforçar a importância daquilo que compõe de 60 a 65% do nosso corpo e 70% da área da superfície do nosso planeta. Logo, não é exagero dizer que monitorar a qualidade da água é algo mais do que fundamental para a vida. Uma das maneiras de se medir a qualidade da água é através de sua turbidez, propriedade física relacionada com a sua transparência. Neste artigo, iremos te mostrar como se medir a turbidez da água utilizando um sensor apropriado, indo desde os fundamentos de turbidez e leitura pura do sensor até a medição da turbidez da água propriamente dita.

 

Material necessário

  • Para fazer o projeto deste artigo você precisará de:
  • Um módulo WiFi LoRa 32(V2)
  • Um sensor de turbidez SKU: SEN0189
  • Dois resistores de 18k 1/4W
  • Dois resistores de 2k 1/4W
  • Protoboard de 400 pontos ou maior
  • Jumpers macho-macho
  • Cabo micro-USB
  • Opcional (caso quiser deixar o projeto rodar sem conexão com o computador): fonte chaveada 5V/2A micro-USB

 

O que é turbidez da água?

A turbidez de um líquido é uma propriedade física do mesmo que determina o quão transparente este é. No caso da turbidez da água, esta tem como utilidade indicar o quão cheia de partículas em suspensão ela está. A turbidez é comumente medida na unidade NTU.

Para o caso da água, partículas em suspensão indicam fatores prejudiciais à sua qualidade para consumo e usos diversos, dos quais podemos citar: crescimento de colônia de bactérias, presença de terra, presença de lama, presença de resíduos químicos danosos à saúde, etc. Portanto, considera-se a turbidez um importante parâmetro físico na avaliação da qualidade da água, seja para consumo humano, irrigação de plantas, piscicultura (quanto mais turva a água, menor a penetração de luz solar na mesma e, por consequência, menor a taxa de desenvolvimento de fitoplânctons, essenciais para a vida e crescimento dos peixes) e demais usos.

A turbidez da água fornecida por distribuidoras é algo garantido em caráter legal, de acordo com a Portaria 1469, de 29/12/2000. A título de exemplo, de acordo com o site Síntese Natural ( http://www.snatural.com.br/ ), fabricante de equipamentos relacionados com tratamento de água, os níveis de turbidez de água recomendados água potável, água subterrânea e piscicultura são expressos na tabela 1.

 UTILIZAÇÃO LIMITES RECOMENDÁVEIS DE TURBIDEZ DA ÁGUA 
 Água Potável  < 0,5 até 5,0 NTU
 Água Subterrânea  < 1,0 NTU
Piscicultura   10 a 40 NTU

Tabela 1 - limites recomendáveis de turbidez de água para usos diversos, de acordo com site http://www.snatural.com.br/ 

 

Sensor de turbidez de água

Para este projeto, será utilizado o sensor de turbidez SKU: SEN0189 ( link: https://www.dfrobot.com/wiki/index.php/Turbidity_sensor_SKU:_SEN0189 ). Este sensor é ilustrado na figura 1.

 

Figura 1 - sensor de turbidez SKU: SEN0189 (imagem obtida de: https://www.dfrobot.com/wiki/index.php/Turbidity_sensor_SKU:_SEN0189)
Figura 1 - sensor de turbidez SKU: SEN0189 (imagem obtida de: https://www.dfrobot.com/wiki/index.php/Turbidity_sensor_SKU:_SEN0189)

 

Trata-se de um sensor comumente encontrado no mercado maker, o que facilita com que hobbistas e makers consigam ter acesso ao mesmo.

Este sensor é composto de duas partes:

 

1. Probe/ponta de prova (parte transparente do sensor, a qual deve ser imersa no líquido que se deseja medir a turbidez).

 

2. Placa de interface e condicionamento de sinal.

De forma simplificada, o funcionamento do sensor pode ser explicado da seguinte maneira: ele possui um emissor e um receptor de luz infravermelha, um em cada lado, conforme ilustra a figura 2.

 

Figura 2 - emissor e receptor de luz infravermelha no sensor de turbidez
Figura 2 - emissor e receptor de luz infravermelha no sensor de turbidez

 

Ao se emitir luz infravermelha, mede-se qual foi o nível de recepção da mesma no receptor, localizado logo à frente do emissor (em um ângulo de 180° com o mesmo). Quanto maior a quantidade de partículas em suspensão na água, maior é a absorção e reflexão da luz infravermelha por parte do líquido e, portanto, mais escura a água tende a ser, elevando-se assim a turbidez da água.

No sensor de turbidez aqui utilizado, tal nível de luz infravermelha capturado é manifestado na forma de uma tensão de saída, variante de 0 a 5V, sendo esta tensão de saída lida na placa de interface e condicionamento de sinal do sensor.

 

Calibração do sensor de turbidez

Antes de seguir em frente com o procedimento de medição de turbidez da água e com o projeto deste artigo em si, precisamos fazer a calibração do sensor de turbidez.

A calibração é um procedimento obrigatório para obtermos medições confiáveis, o que é o coração deste projeto. Em resumo, o procedimento de calibração do sensor consiste em ajustar, através de um trimmer contido no sensor (em destaque na figura 3), a saída de tensão do mesmo para 4,2V em situação de turbidez zero.

 

 

Figura 3 - trimmer para calibração do sensor de turbidez (ajuste da tensão de saída do sensor)
Figura 3 - trimmer para calibração do sensor de turbidez (ajuste da tensão de saída do sensor)

 

 

Você pode ver o procedimento completo de calibração a seguir:

1. Primeiramente, o sensor não deve estar imerso em quaisquer líquidos (deve estar “no ar”).

2. Abra cuidadosamente a ponta de prova / probe sensor. A ponta de prova contém uma proteção para sua placa circuito na forma de um invólucro plástico, que é preso por encaixes plásticos. Tome muito cuidado para não danificar os encaixes ou qualquer parte do invólucro. Tais danos invalidam o uso do sensor, uma vez que com o invólucro danificado este não pode ser mais inserido em quaisquer líquidos.

3. Com a placa circuito da ponta de prova em mãos, conecte-a a placa de interface e condicionamento de sinal e alimente a mesma com 5V.

4. Meça a saída de tensão do sensor (disponível na placa de interface e condicionamento de sinal) enquanto gira o trimmer com a ajuda de uma pequena chave de fenda ou faca de ponta fina. Faça este procedimento até que a tensão medida na saída do sensor seja igual a 4,2V. Atingida esta tensão de saída, a calibração está finalizada.

5. Remonte a ponta de prova (coloque a sua placa de circuito no invólucro). O sensor está calibrado e pronto para uso.

 

 

Procedimento de medição da turbidez da água

De acordo com as informações do fabricante no site https://www.dfrobot.com/wiki/index.php/Turbidity_sensor_SKU:_SEN0189  , a turbudez em NTU pode ser obtida através de uma função de parábola, conforme mostrado na figura 4.

No caso, a variável X da parábola corresponde à tensão medida do sensor e a variável Y a turbidez propriamente dita (em NTU). Logo, o cálculo da turbidez no qual o líquido está inserido é simples e facilmente executado por qualquer processador.

 

Figura 4 - turbidez (eixo y) em função da tensão de saída do sensor (eixo x). Imagem obtida de: https://www.dfrobot.com/wiki/index.php/Turbidity_sensor_SKU:_SEN0189
Figura 4 - turbidez (eixo y) em função da tensão de saída do sensor (eixo x). Imagem obtida de: https://www.dfrobot.com/wiki/index.php/Turbidity_sensor_SKU:_SEN0189

 

 

Porém, como no caso de qualquer sensor com saída analógica, a leitura do sensor de turbidez pode apresentar uma certa oscilação/ruído, o qual deve ser minimizado o quanto for possível em prol de uma boa medição. Para filtrar esta tensão de saída do sensor de turbidez, vamos utilizar um método chamado média móvel.

A média móvel funciona, de forma simplificada e objetiva, da seguinte maneira:

 

Figura 5 – Média móvel
Figura 5 – Média móvel

 

1. Primeiro, ao se iniciar o programa, carrega-se um conjunto de medições de tensão (um buffer, representado por um array de float) com leituras sucessivas da tensão de saída do sensor.

É muito importante que estas informações sejam valores reais das saídas de tensão do sensor.

2. Feito este preenchimento, na próxima medição (medição útil) de tensão de saída, o buffer deve ser todas suas medições deslocadas para a posição imediatamente anterior, fazendo com que a medição na posição 0 seja descartada e a medição útil inserida na última posição do buffer.

3. Uma vez composto o buffer conforme o item anterior, é feita a média simples de todos os valores do array, resultando assim na média móvel ou, neste caso, do valor filtrado da tensão de saída do sensor a ser considerado.

 

Para entender melhor o conceito da média móvel como filtragem, pense na mesma de forma macro. Em um nível mais macro, este procedimento faz com que o buffer de medições vá acompanhando a tendência do sinal ao longo do tempo (com um pequeno atraso, proporcional ao tamanho do buffer), utilizando do cálculo da média para minimizar picos/spikes, filtrando assim o sinal.

Este método é bastante utilizado em tratamento de leituras de sensores diversos com saídas analógicas, pois trata-se de um método eficaz, matematicamente e computacionalmente simples (logo, com menor tempo de execução por parte do processador, algo valioso em se tratando de sistemas embarcados) e de fácil e rápida implementação. Para mais detalhes de como a média móvel funciona, recomendo fortemente assistir a este ótimo vídeo do Wagner Rambo: https://youtu.be/cxPQ0AMQ5bo

Para o projeto deste artigo, um buffer de 50 medições para cálculo da média móvel se mostrou eficaz e eficiente. Você também pode testar diferentes valores e observar o comportamento final.

 

Medição da turbidez com Arduino

Para a medição da turbidez, será utilizado o módulo WiFi LoRa 32(V2), que pode ser visto em detalhes neste nosso artigo ( http://www.newtoncbraga.com.br/index.php/microcontrolador/143-tecnologia/16326-moduloesp32-heltech-mec218 ).

 

Circuito esquemático

O circuito esquemático do projeto deste artigo encontra-se na figura 6.

 

Importante:

1) NÃO SE ESQUEÇA (NEM ALTERE OS VALORES) do divisor resistivo ligado ao canal do ADC. Ele faz com que a tensão de saída do sensor não ultrapasse os limites suportados pelo ADC do módulo (3,3V). A conversão da tensão lida para o range real de 0 a 5V é feita via software.

2) Os canais do ADC 1 (ADC_1) do módulo se mostrou inadequado para medições de precisão como a exigida neste artigo. Já os canais do ADC 2 (ADC_2) se mostraram muito melhores e muito mais estáveis (inclusive na resolução máxima do ADC, 12 bits). Por esse motivo, o sensor de turbidez é lido no ADC 2 (canal 4 do mesmo).

 

Figura 6 - circuito esquemático do projeto
Figura 6 - circuito esquemático do projeto

 

 

Código-fonte

O código-fonte do projeto está abaixo.

Leia atentamente os comentários para maior compreensão do mesmo.

/* Includes para header files das bibliotecas do OLED */
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
/* Endereço I2C do display */
#define OLED_ADDR 0x3c
/* distância, em pixels, de cada linha em relação ao topo do display */
#define OLED_LINE1 0
#define OLED_LINE2 10
#define OLED_LINE3 20
#define OLED_LINE4 30
#define OLED_LINE5 40
/* Configuração da resolução do display (este módulo possui display 128x64) */
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
/* Definições do buffer (para filtro de média móvel) */
#define TAMANHO_BUFFER 50
/* Definições da leitura do sensor de turbidez */
#define ADC_MAX 4095 /* ADC do modulo WiFi LoRa 32(V2) tem 12 bits de resolucao */
#define ENTRADA_ANALOGICA_SENSOR_TURBIDEZ 13 /* GPIO 13 => ADC2_CH4 */
#define TENSAO_MAXIMA_SAIDA_SENSOR_TURBIDEZ 5 /* Sensor apresenta saida analogica de 0 a 5V */
#define FATOR_DIVISOR_TENSAO 10 /* No projeto, para serem respeitados os limites de operaçao do 
ADC e fazer com que a tensão do sensor excursione corretamente em
todo seu range, ha um divisor resistivo para que a tensão lida pelo
canal do ADC utilizado seja igual a 10% da tensão real de saída do sensor. 
Portanto, no cálculo da tensão real, este fator é utilizado
para se recuperar corretamente este valor */
#define NUM_LEITURAS_OVERSAMPLING 512 
/* Objeto do display */
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, 16);
/* Variáveis globais */
float buffer_tensao_sensor_turbidez[TAMANHO_BUFFER];
/* Protótipos */
float le_tensao_sensor_turbidez_sem_filtro(void);
float le_tensao_sensor_turbidez_com_filtro(void);
float le_turbidez_da_agua(void);
/* Função: faz a leitura da tensão de saída do sensor de turbidez (sem filtro)
* Parâmetros: nenhum 
* Retorno: tensão de saída (de 0 até 5V)
*/
float le_tensao_sensor_turbidez_sem_filtro(void)
{
   float tensao_saida_sensor = 0.0;
   int leitura_adc = 0;
   /* Faz a leitura do canal do ADC do modulo que a saida do sensor de turbidez está ligado */
   leitura_adc = analogRead(ENTRADA_ANALOGICA_SENSOR_TURBIDEZ);
   /* converte a leitura do ADC (canal onde está ligada a saída do sensor de turbidez) em uma tensão de leitura de 0 a 5V */
   tensao_saida_sensor = ((leitura_adc/(float)ADC_MAX)*(float)TENSAO_MAXIMA_SAIDA_SENSOR_TURBIDEZ);
   Serial.print("Tensao de saida (no divisor): ");
   Serial.print(tensao_saida_sensor);
   Serial.println("V");
   tensao_saida_sensor = tensao_saida_sensor*FATOR_DIVISOR_TENSAO; /* Corrige a leitura com base no divisor resistivo utilizado */
   return tensao_saida_sensor;
}
/* Função: faz a leitura da tensao de saida do sensor de turbidez (com filtro)
* Parâmetros: nenhum 
* Retorno: tensão de saída (de 0 até 5V)
*/
float le_tensao_sensor_turbidez_com_filtro(void)
{
   float tensao_saida_sensor = 0.0;
   int leitura_adc = 0;
   long soma_leituras_adc = 0; 
   int i = 0;
   float soma = 0.0;
   float tensao_filtrada = 0.0;
   /* Faz a leitura do canal do ADC do modulo que a saída do sensor de turbidez está ligado */
   /* Para amenizar efeitos de leituras ruidosas / com oscilações, um oversampling é feito */
   soma_leituras_adc = 0;
   for (i=0; i<NUM_LEITURAS_OVERSAMPLING; i++)
      soma_leituras_adc = soma_leituras_adc + analogRead(ENTRADA_ANALOGICA_SENSOR_TURBIDEZ);
   leitura_adc = soma_leituras_adc/NUM_LEITURAS_OVERSAMPLING;
   /* converte a leitura do ADC (canal onde está ligada a saída do sensor de turbidez) em uma tensão de leitura de 0 a 5V */
   tensao_saida_sensor = ((leitura_adc/(float)ADC_MAX)*(float)TENSAO_MAXIMA_SAIDA_SENSOR_TURBIDEZ);
   Serial.print("Counts de ADC: ");
   Serial.println(leitura_adc);
   Serial.print("Tensao de saida (no divisor): ");
   Serial.print(tensao_saida_sensor);
   Serial.println("V");
   tensao_saida_sensor = tensao_saida_sensor*FATOR_DIVISOR_TENSAO; /* Corrige a leitura com base no divisor resistivo utilizado */
   /* Desloca para a esquerda todas as medidas de tensão já feitas */
   for(i=1; i<TAMANHO_BUFFER; i++)
      buffer_tensao_sensor_turbidez[i-1] = buffer_tensao_sensor_turbidez[i];
   /* Insere a nova medida na última posição do buffer */
   buffer_tensao_sensor_turbidez[TAMANHO_BUFFER-1] = tensao_saida_sensor;
   /* Calcula a média do buffer (valor da média móvel, ou valor filtrado) */
   soma = 0.0;
   tensao_filtrada = 0.0;
   for(i=0; i<TAMANHO_BUFFER; i++)
      soma = soma + buffer_tensao_sensor_turbidez[i];
   tensao_filtrada = soma/TAMANHO_BUFFER;
   return tensao_filtrada;
}
/* Função: faz a leitura da turbidez da agua
* Parâmetros: nenhum 
* Retorno: turbidez da água (em NTU)
*/
float le_turbidez_da_agua(void)
{
   float turbidez_agua = 0.0;
   float tensao_filtrada = 0.0;
   float primeiro_fator = 0.0;
   float segundo_fator = 0.0;
   float terceiro_fator = 0.0;
   /* Faz a leitura da tensão filtrada do sensor de turbidez */
   tensao_filtrada = le_tensao_sensor_turbidez_com_filtro();
   /* Limita a tensão a máxima permitida pelo sensor */
   if (tensao_filtrada > 4.2)
      tensao_filtrada = 4.2;
   Serial.print("Tensao de saida do sensor de turbidez: ");
   Serial.print(tensao_filtrada);
   Serial.println("V");
   /* Calcula a turbidez */
   primeiro_fator = ((-1)*(1120.4) * tensao_filtrada * tensao_filtrada);
   segundo_fator = (5742.3 * tensao_filtrada);
   terceiro_fator = ((-1)*4352.9);
   turbidez_agua = primeiro_fator + segundo_fator + terceiro_fator;
   return turbidez_agua; 
}
/* Função setup */
void setup()
{
   int i;
   Serial.begin(115200);
   /* Configura ADC em sua resolução máxima (12 bits) */
   analogReadResolution(12);
   /* Inicializa buffer de leituras de tensão do sensor de turbidez  (para inicializar o buffer do filtro de média móvel)*/
   for(i=0; i<TAMANHO_BUFFER; i++)
      buffer_tensao_sensor_turbidez[i] = le_tensao_sensor_turbidez_sem_filtro(); 
   /* inicializa display OLED */
   Wire.begin(4, 15);
   if(!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR))
      Serial.println("Display OLED: falha ao inicializar");
   else
      {
         Serial.println("Display OLED: inicializacao ok");
        /* Limpa display e configura tamanho de fonte */
        display.clearDisplay();
        display.setTextSize(1);
        display.setTextColor(WHITE);
      }
}
/* Programa principal */
void loop()
{
   float turbidez_da_agua = 0.0;
   char str_turbidez_agua[30] = {0};
   /* Faz a leitura da turbidez da água (em NTU) */
   turbidez_da_agua = le_turbidez_da_agua();
   /* Cria uma string do valor da turbidez da água lida (com 2 casas decimais) */
   sprintf(str_turbidez_agua, "%.2fNTU", turbidez_da_agua);
   /* Exibe a turbidez da agua no display OLED */
   display.clearDisplay();
   display.setCursor(0, OLED_LINE1);
   display.println("Turbidez da agua:");
   display.setCursor(0, OLED_LINE2);
   display.print(str_turbidez_agua);
   display.display();
}

 

Conclusão

Neste artigo, vimos o que significa e o quão importante é a turbidez da água. Além disso, foi demonstrado com detalhes como se utilizar um sensor comum do mercado maker para medir a turbidez em NTU.

Em suma, este artigo serve como base para sistemas mais complexos e abrangentes, como por exemplo sistemas de monitoramento de qualidade da água com IoT e monitoramento de rios em caso de desastres de alto impacto ambiental (como foi o caso recente de Brumadinho-MG).

 

 

 

BUSCAR DATASHEET

 


N° do componente 

(Como usar este quadro de busca)

 

Opinião

As próximas novidades (OP190)

Mais uma vez levamos nossa palavra a todos que nos acompanham, tratando das novidades, fazendo alguns comentários e até tirando algumas dúvidas que notamos serem gerais. Continuamos com nossos eventos, com palestras que em breve proferiremos na FMU e na Faculdade de Medicina de Bauru.

Leia mais...

Tempo
Matamos o tempo; o tempo nos enterra.
Machadoi de Assis (1839 - 1908) - Memórias Póstumas de Brás Cubas - Ver mais frases


Instituto Newton C Braga
Entre em contato - Como Anunciar - Políticas do Site

Apoio Social
Lions Clube de Guarulhos Sul SOS Mater Amabilis
Advertise in Brazil
If your business is Electronics, components or devices, this site is the correct place to insert your advertisement (see more)