ArduinoMódulosNovidade

Como Monitorar a Turbidez da Água com Arduino e Sensor de Turbidez

A turbidez está relacionada à presença de partículas em suspensão na água. Quanto maior a quantidade dessas partículas, mais turva ela pode parecer. Com um sensor de turbidez e um Arduino, podemos acompanhar essa variação e criar uma classificação simples para representar diferentes condições da água.

Neste tutorial, vamos desenvolver um projeto utilizando um Arduino Uno, um Sensor de Turbidez, um Display LCD 16×2 com comunicação I2C e três LEDs. O LCD será responsável por informar o estado identificado pelo sensor, enquanto os LEDs funcionarão como uma indicação visual semelhante a um semáforo:

  • LED verde: água cristalina;
  • LED amarelo: água turva;
  • LED vermelho: água muito suja.

Para demonstrar o funcionamento, começaremos colocando o sensor em um recipiente com água limpa. Em seguida, adicionaremos gradativamente água suja ao recipiente. Conforme a turbidez aumentar, a leitura analógica será alterada e o Arduino atualizará automaticamente o estado mostrado no display e o LED correspondente.

Importante: este projeto realiza uma classificação experimental com base na leitura do sensor. Ele não determina se uma água é potável ou própria para consumo.


Materiais Necessários

Para desenvolver o projeto, serão utilizados:

Os resistores conectados aos LEDs são recomendados para limitar a corrente elétrica e proteger tanto os LEDs quanto as saídas digitais do Arduino.


Esquemático de Ligação dos Componentes

Para realizar a montagem, conecte os componentes ao Arduino Uno conforme a tabela abaixo.

ComponentePino do componenteArduino Uno
Módulo Sensor de TurbidezV – (VCC)5V
Módulo Sensor de TurbidezG – (GND)GND
Módulo Sensor de TurbidezA – (Saída analógica)A0
LCD 16×2 I2CVCC5V
LCD 16×2 I2CGNDGND
LCD 16×2 I2CSDAA4 / SDA
LCD 16×2 I2CSCLA5 / SCL
LED VerdeÂnodo (+)D5
LED AmareloÂnodo (+)D6
LED VermelhoÂnodo (+)D7
LEDsCátodo (-)GND através de resistor

Nos três LEDs, conecte o terminal negativo ao GND. O terminal positivo deve ser conectado ao respectivo pino digital utilizando um resistor limitador de corrente.

O sensor será lido pela entrada analógica A0. Já o display LCD utilizará a comunicação I2C do Arduino Uno por meio dos pinos SDA e SCL.

Figura 1 – Esquemático de ligação do Sensor de Turbidez, LCD 16×2 I2C e LEDs ao Arduino Uno.

Caso o módulo do seu sensor possua saídas identificadas como A (Analóagico) e D (Digital), neste projeto utilizamos a saída A, pois precisamos acompanhar a variação da leitura analógica.


Configurações Iniciais

Antes de carregar o programa, conecte o Arduino Uno ao computador utilizando um cabo USB e abra a Arduino IDE. Dentro do Arduino IDE, siga o caminho:

Ferramentas > Placa > Arduino AVR Boards > Arduino Uno

Figura 2 – Caminho configuração inicial Arduino.

Depois, em:

Ferramentas > Porta

selecione a porta correspondente ao Arduino conectado ao computador.


Instalando a biblioteca do LCD

O projeto utiliza a biblioteca “LiquidCrystal_I2C”, ela é responsável pela comunicação entre o Arduino e o módulo I2C conectado ao display LCD 16×2.

Na Arduino IDE, abra o Gerenciador de Bibliotecas, pesquise por LiquidCrystal_I2C e instale a biblioteca.

Figura 3 – Caminho para adicionar biblioteca.

Neste projeto, o endereço I2C utilizado para o display é o “0x27”, mas o seu pode ser diferente. Para verificar qual o endereço do seu display, acesse nosso tutorial como-utilizar-o-display-lcd-16×02-com-modulo-i2c-no-arduino.


Elaborando o Código

O programa realiza continuamente uma leitura analógica do sensor e compara o valor encontrado com três intervalos.

Foram utilizados os seguintes valores de referência:

  • Acima de 700: água cristalina;
  • Entre 601 e 700: água turva;
  • 600 ou menos: água muito suja.

Esses valores foram utilizados no teste deste projeto e podem variar de acordo com o sensor, montagem e condições utilizadas durante o experimento.

Código completo

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Endereço I2C mais comum para o display LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Pino utilizado para leitura analógica do sensor
int sensorPin = A0;

// Armazena a leitura analógica do sensor
int leitura;

// LEDs de indicação
int LedVerde = 5;
int LedAmarelo = 6;
int LedVermelho = 7;

void setup() {

  pinMode(LedVerde, OUTPUT);
  pinMode(LedAmarelo, OUTPUT);
  pinMode(LedVermelho, OUTPUT);

  lcd.init();
  lcd.backlight();
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Sensor Turbidez");

  lcd.setCursor(0, 1);
  lcd.print("Iniciando...");

  delay(1000);

  lcd.clear();
}

void loop() {

  // Realiza a leitura analógica do sensor
  leitura = analogRead(sensorPin);

  lcd.setCursor(0, 0);
  lcd.print("Estado da Agua:");

  // Água cristalina
  if (leitura > 700) {

    lcd.setCursor(0, 1);
    lcd.print("Cristalina      ");

    digitalWrite(LedVermelho, LOW);
    digitalWrite(LedAmarelo, LOW);
    digitalWrite(LedVerde, HIGH);
  }

  // Água turva
  else if (leitura > 600) {

    lcd.setCursor(0, 1);
    lcd.print("Turva           ");

    digitalWrite(LedVermelho, LOW);
    digitalWrite(LedVerde, LOW);
    digitalWrite(LedAmarelo, HIGH);
  }

  // Água muito suja
  else {

    lcd.setCursor(0, 1);
    lcd.print("Muito Suja      ");

    digitalWrite(LedAmarelo, LOW);
    digitalWrite(LedVerde, LOW);
    digitalWrite(LedVermelho, HIGH);
  }

  delay(500);
}

Entendendo o código

Primeiramente, são incluídas as bibliotecas necessárias para o funcionamento da comunicação I2C e do display:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

Em seguida, configuramos o LCD como um display de 16 colunas e 2 linhas, utilizando o endereço I2C 0x27:

LiquidCrystal_I2C lcd(0x27, 16, 2); //UTILIZE O ENDEREÇO DO SEU DISPLAY

O Sensor de Turbidez será conectado à entrada analógica A0:

int sensorPin = A0;

Também definimos os pinos utilizados pelos LEDs:

int LedVerde = 5;
int LedAmarelo = 6;
int LedVermelho = 7;

No setup(), os três pinos são configurados como saídas:

pinMode(LedVerde, OUTPUT);
pinMode(LedAmarelo, OUTPUT);
pinMode(LedVermelho, OUTPUT);

Depois, inicializamos o display e ativamos sua iluminação:

lcd.init();
lcd.backlight();

Ao ligar o projeto, uma mensagem é apresentada durante aproximadamente um segundo:

lcd.setCursor(0, 0);
lcd.print("Sensor Turbidez");

lcd.setCursor(0, 1);
lcd.print("Iniciando...");

Depois dessa inicialização, o Arduino passa a executar continuamente o conteúdo da função loop().


Realizando a leitura do sensor

A leitura analógica é realizada com:

leitura = analogRead(sensorPin);

Esse valor é armazenado na variável leitura e utilizado para determinar qual estado será apresentado.


Água cristalina

Quando a leitura for superior a 700, o programa classifica a água como Cristalina:

if (leitura > 700)

O display mostrará: “Cristalina”, e somente o LED verde permanece aceso.


Água turva

Quando a leitura estiver acima de 600 e não for maior que 700, a água será classificada como Turva:

else if (leitura > 600)

Nesse estado, o LED verde é desligado e o LED amarelo é aceso.


Água muito suja

Para valores iguais ou inferiores a 600, o programa entra na última condição:

else

O display apresentará: “Muito Suja”, e somente o LED vermelho ficará aceso.


Tempo entre as medições

Ao final do programa temos:

delay(500);

Isso faz com que uma nova atualização seja realizada aproximadamente a cada meio segundo, evitando que a informação apresentada no display seja alterada rapidamente demais.


Vídeo demonstrativo

“VÍDEO”

Dessa maneira, é possível observar visualmente a alteração da água e acompanhar simultaneamente a resposta do sensor, do LCD e dos LEDs.


Ajustando os valores do Sensor de Turbidez

Os limites 700 e 600 utilizados no programa foram definidos a partir do comportamento observado durante este experimento.

Isso significa que eles não devem ser considerados valores universais para todos os sensores ou amostras de água.

Se você estiver reproduzindo o projeto, pode realizar seus próprios testes com água limpa e água progressivamente mais turva para encontrar os valores que funcionam melhor com o seu sensor.

Por exemplo, os valores podem ser alterados diretamente nestas linhas:

if (leitura > 700)

e:

else if (leitura > 600)

Alterando esses números, você modifica os pontos nos quais o programa muda entre os estados Cristalina, Turva e Muito Suja.

Essa é também uma ótima forma de experimentar com o projeto e compreender melhor como uma leitura analógica pode ser transformada em informações úteis pelo Arduino.


Aplicações e Possíveis Melhorias

O projeto apresentado é uma forma prática de estudar sensores analógicos, leitura de dados e representação de informações utilizando Arduino.

Como evolução do projeto, é possível:

  • realizar uma calibração mais detalhada do sensor;
  • mostrar no LCD também o valor da leitura analógica;
  • utilizar mais faixas de classificação;
  • armazenar as leituras para acompanhar as alterações ao longo do tempo;
  • adicionar alertas sonoros com um Buzzer;
  • utilizar uma placa com conectividade para acompanhar os valores remotamente (IoT).

É importante lembrar que a classificação utilizada neste tutorial tem finalidade experimental e educacional. A indicação “Cristalina”, por exemplo, representa apenas a faixa de leitura definida no programa e não comprova que uma amostra seja própria para consumo.

Espero que tenha gostado do tutorial. Caso tenha dúvidas ou sugestões, deixe um comentário abaixo.

Valeu!

Graduando em Engenharia da Computação.

Matheus Caires

Graduando em Engenharia da Computação.

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

Visão geral de privacidade

Este site usa cookies para que possamos oferecer a melhor experiência de usuário possível. As informações dos cookies são armazenadas em seu navegador e executam funções como reconhecê-lo quando você retorna ao nosso site e ajudar nossa equipe a entender quais seções do site você considera mais interessantes e úteis.