fbpx

Monitor de nível de água usando o sensor de nível de água e chuva e Arduino

O sensor de nível de água e chuva é usado para detectar chuva, vazamento e transbordo em tanques ou para medir o nível de água. Este componente é formado basicamente por três partes: um conector, um resistor de 1MΩ e traços de cobre expostos, conforme Figura 1.

A imagem em questão mostra de maneira física e real um Sensor de nível de agua e chuva
Figura 1 – Sensor de nível de água e chuva

O sensor de nível de água e chuva possui uma série de dez traços de cobre expostos, sendo 5 de alimentação e 5 de detecção. Estes traços são entrelaçados em paralelo e não são conectados entre si. Quando o sensor é submerso, a água interliga os traços que atuam como um resistor variável, cuja resistência varia de acordo com o nível de água. Deste modo:

  • A mudança na resistência corresponde à distância do topo do sensor à superfície da água;
  • Quanto mais imerso o sensor estiver, maior será a condutividade e menor a resistência;
  • Quanto menos imerso o sensor estiver, menor será a condutividade e maior a resistência;
  • A tensão de saída do sensor varia de acordo com a resistência e a partir da medição da tensão podemos determinar o nível da água.

A proposta deste projeto é o desenvolvimento de um sistema de monitoramento do nível de água de um recipiente. Usaremos LEDs para indicar os níveis: o LED verde representa que o nível da água do recipiente está alto, o LED amarelo indica o nível médio e o vermelho sinaliza o nível baixo.


MATERIAIS NECESSÁRIOS


ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

Inicialmente, certifique-se que a sua placa Arduino esteja desligada. Em seguida, monte o circuito da Figura 2 utilizando o sensor de nível de água e chuva, os LEDs e os resistores.

A imagem descreve de maneira ilustrativa um circuito para monitoramento do nivel de agua em um certo recipiente
Figura 2 – Circuito para projeto de monitoramento do nível de água de um recipiente.

Ao montar seu circuito na protoboard preste atenção nos seguintes pontos:

  • Conecte o LED verde ao pino digital 12, o LED amarelo ao pino digital 11 e o LED vermelho ao pino digital 10 da placa UNO;
  • O sensor de nível possui três pinos representados por S, + e -. O pino S é a saída analógica do sensor e deve ser conectada ao pino analógico A0. O terminal representado por + é a alimentação e deve ser ligado ao 5V. Por fim, o pino – é a conexão de aterramento do sensor e precisamos conectá-lo ao GND da placa UNO.


ELABORANDO O CÓDIGO

Com o circuito montado, vamos a programação. Para que nosso sistema de monitoramento de nível de água obtenha leituras precisas, precisamos inicialmente calibrar o sensor.

A água pura não é condutora de eletricidade, mas os metais e as impurezas presentes na água a torna condutora. Portanto, o sensor de nível de água e chuva pode ser mais ou menos sensível dependendo da água utilizada. Desta forma, realizaremos a leitura analógica do sensor em 4 situações:

  • Sem imergir na água;
  • Colocando o sensor em um recipiente com água em nível baixo;
  • Colocando o sensor em um recipiente de água em nível médio;
  • Colocando o sensor em um o recipiente de água em nível alto.

Para tal, utilize o seguinte código e anote os valores lidos em cada situação.

void setup() {
  Serial.begin(9600); //Inicializa a comunicação serial
}

void loop() {
  int sensorValue = analogRead(A0); //Realiza a leitura do sensor
  Serial.print("Leitura do sensor de nível: ");
  Serial.println(sensorValue); //Imprime no monitor serial o valor lido
  delay(100); //Intervalo de 100 milissegundos
}

O resultado que obtivemos em nosso teste pode ser observado na Figura 3.

A imagem demostra de maneira ilustrativa o resultado da leitura analógica do senso de nivel de agua e chuva. Blog da Robótica.
Figura 3 – Resultado da leitura analógica do sensor de nível de água e chuva.

De posse destes resultados, podemos desenvolver a programação para o sistema de monitoramento do nível de água de um recipiente. Vamos entender a lógica de programação deste projeto a partir dos seguintes passos:

1. Declarar as variáveis:
Iniciamos o código declarando as variáveis verde, amarelo e vermelho, correspondentes aos pinos digitais em que os LEDs se encontram conectados. Em seguida, atribuímos o pino analógico A0 à variável sensorPin. Declaramos também a variável leitura, que será responsável por armazenar a leitura do sensor de nível.

2. Inicializar a comunicação serial, definir portas de saída e configurações iniciais:
A comunicação serial foi inicializada por meio da instrução: Serial.begin(9600);.

As variáveis verde, amarelo e vermelho foram definidas como saída (OUTPUT). Para que os LEDs iniciem desligados, inicializamos estas variáveis em nível lógico baixo (LOW).

3. Realizar a leitura do sensor de nível e imprimir no monitor serial:
Iniciamos o loop() realizando a leitura da porta analógica A0 (sensorPin), para isso utilizaremos a função analogRead(ldr), e armazenaremos este valor na variável leitura. Em seguida, imprimiremos o valor no monitor serial por meio da instrução Serial.println(leitura);.

4. Realizar a comparação:
Utilizaremos a lógica do if…else para comparar a leitura do sensor de nível com a leitura obtida na calibração, de modo que:

  • Quando a leitura for menor ou igual a 500, o monitor serial exibirá a mensagem “Nível de água: Baixo” e o LED vermelho será ligado;
  • Quando a leitura estiver entre 500 e 700, o monitor serial exibirá “Nível de água: Médio” e o LED amarelo será acionado;
  • Quando a leitura for maior que 700, o monitor serial mostrará a mensagem “Nível de água: baixo” e o LED verde será ligado.

Ao final, o Sketch deste projeto ficará da seguinte maneira:

/*
  =   MONITOR DE NÍVEL DE ÁGUA USANDO ARDUINO   =
  ===============================================
  == BLOG DA ROBOTICA - www.blogdarobotica.com ==
  ===============================================
  Autor: Carol Correia Viana
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  ===============================================
  == CASA DA ROBOTICA - www.casadarobotica.com ==
  ===============================================
  Facebook: facebook.com/casadaroboticaoficial
  Instagram:@casadarobotica
  ===============================================
*/

// Declaração dos pinos em que os LEDs estão conectados
#define vermelho 10
#define amarelo 11
#define verde 12
#define sensorPin A0 // Pino de leitura do sensor
int leitura; // Variável para armazenar a leitura do sensor

void setup() {
  Serial.begin(9600); // Inicialização da comunicação serial
  // Seta os LEDs como saída
  pinMode(vermelho, OUTPUT);
  pinMode(amarelo, OUTPUT);
  pinMode(verde, OUTPUT);
  // Inicializa com os LEDs desligados
  digitalWrite(vermelho, LOW);
  digitalWrite(amarelo, LOW);
  digitalWrite(verde, LOW);
  Serial.println("----- MONITORAMENTO DO NÍVEL DE ÁGUA ----");
}

void loop() {
  Serial.print("Leitura do Sensor de Nível: ");
  leitura = analogRead(sensorPin); //Realiza a leitura do sensor
  Serial.println(leitura); //Imprime a leitura
  //Nível baixo - leitura menor que 500
  if (leitura <= 500) {
    Serial.println("Nível de água: Baixo");
    digitalWrite(vermelho, HIGH);
    digitalWrite(amarelo, LOW);
    digitalWrite(verde, LOW);
  }
  //Nível médio - leitura entre 501 e 700
  else if (leitura > 500 && leitura <= 700) {
    Serial.println("Nível de água: Médio");
    digitalWrite(vermelho, LOW);
    digitalWrite(amarelo, HIGH);
    digitalWrite(verde, LOW);
  }
  //Nível alto - leitura maior que 700
  else if (leitura > 700) {
    Serial.println("Nível de água: Alto");
    digitalWrite(vermelho, LOW);
    digitalWrite(amarelo, LOW);
    digitalWrite(verde, HIGH);
  }
  delay(1000);
}

Espero ter ajudado,

Obrigada a todos e em caso de dúvidas deixe seu comentário abaixo!

Att. Carol Correia Viana

Dúvidas? Deixe seu comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.