Arduino – Detector de Nível de Líquido sem contato com o Sensor XKC-Y25-PNP

Arduino – Detector de Nível de Líquido sem contato com o Sensor XKC-Y25-PNP

Detectar o nível de liquido em recipientes é um projeto bastante comum para ser desenvolvido com Arduino. Há diversas formas de realizar a detecção do nível de líquido e passar esta informação para o Arduino, de forma que alguma ação possa ser executada mediante o parâmetro recebido. Para esta postagem utilizei o Sensor XKC-Y25-PNP, que é uma ótima opção para detectar o nível de líquido em recipientes e ainda por cima sem necessidade de contato do sensor com a substância líquida. Ao final desta postagem, teremos o protótipo de um recipiente que vai ser abastecido com água através de uma mini bomba d’água e o mesmo será monitorado no nível mínimo e nível máximo. Algumas informações do processo serão mostradas em um display LCD.img00_arduino_detector_de_nivel_de_liquido_sem_contato_com_o_sensor_xkc-y25-pnp_agua_mode_esp8266_capacitivo

Antes de partirmos para a montagem da prática, vamos conhecer o XKC-Y25-PNP.

O Sensor XKC-Y25-PNP é um dispositivo capacitivo puramente eletrônico utilizado para detecção de nível de liquido sem necessidade de contato. O mesmo utiliza um chip com avançada tecnologia de processamento de sinal e que executa operações em alta velocidade para detecção do nível de líquido em um recipiente.

Devido ao fato do XKC-Y25-PNP não exigir contato entre a substância e o sensor para fazer a detecção de nível, o mesmo se torna ideal para ser aplicado em processos onde seja necessário detectar o nível de substâncias tóxicas, ácidos ou álcali, por exemplo. Vale ressaltar que este sensor NÃO tem capacidade de detectar líquidos que NÃO conduzam eletricidade, como, por exemplo, gasolina ou outros derivados do petróleo.

Abaixo temos as principais características do XKC-Y25-PNP:

– Pode ser alimentado com tensão na faixa de 5 a 24VDC;
– Consome aproximadamente 200µA de corrente;
– A comunicação do sensor é feita através sinal serial TTL;
– A distância máxima de detecção é de 13mm;
– Possui polaridade PNP;
– Pode trabalhar em ambiente com temperatura na faixa de 0 a 100ºC e umidade de 5 a 100%;
– O acabamento do sensor é em ABS;
– Possui certificação IP67 (à prova de poeira / protegido contra imersão temporária em até 1 metro por até 30 minutos);
– Detecta líquidos em geral (desde que o líquido tenha capacidade de conduzir eletricidade)
– Pode detectar material sólido (preciso fazer testes para confirmar);
– Capacidade de detecção em recipientes de plástico, vidro e cerâmica, por exemplo;
A cor do recipiente não influencia na detecção do sensor;
– Para recipientes metálicos é necessário um furo no recipiente e instalação de rubber plug para acoplar o sensor;
– A saída apresenta nível lógico alto (HIGH) quando detecta liquido no recipiente e se mantém em nível lógico baixo (LOW) sem detecção de líquido;
– Apesar de ser PNP, o sensor pode ter sua saída invertida (sinal LOW para detecção de líquido e HIGH sem detecção) através do pino M (MODE) que o mesmo possui;
– O sinal TLL de saída em nível alto (HIGH) é igual a tensão de alimentação do sensor (se for alimentado com 5V a saída de sinal será de 5V, se for alimentado com 10V a saída de sinal será de 10V e assim sucessivamente);
– O tempo de resposta é de aproximadamente 500 milissegundos;
– Possui alta sensibilidade;
– Possui desempenho estável;
– Possui alta durabilidade;
– Livre de interferências eletromagnéticas externas;
– Fácil de ser instalado e utilizado;
– Compatível com Arduino e outras plataformas microcontroladas;

Funcionamento do sensor:

De forma bem simples, o funcionamento do sensor XKC-Y25-PNP se resume a comparação do valor de capacitância medido quando o líquido está dentro do raio de detecção do sensor com o valor pré definido no chip de processamento que o mesmo possui.

Na extremidade do sensor há uma capacitância estática. Quando o líquido entra no raio de detecção do sensor, uma capacitância parasita será identificada pelo mesmo e o valor desta capacitância parasita será somado a capacitância estática para gerar uma capacitância final. Este valor final de capacitância será inserido no circuito de controle do sensor para que seja processado através de um algoritmo e em seguida seja comparado com o limite pré-definido. Caso o valor final de capacitância exceda o limite pré-definido, significa que o sensor detectou a presença de líquido e a saída assume nível lógico alto (HIGH ou 1).

Na imagem abaixo temos a identificação dos terminais de conexão do sensor:

img01_arduino_detector_de_nivel_de_liquido_sem_contato_com_o_sensor_xkc-y25-pnp_agua_mode_esp8266_capacitivo

VCC (marrom): terminal para alimentação do sensor com tensão na faixa de 5 a 24VDC.

MODE (preto): terminal utilizado para inverter o sinal de saída TTL do sensor. Por padrão, o XKC-Y25-PNP terá a saída em nível alto (HIGH) quando detectar líquido no recipiente, contudo, se o terminal preto do sensor for conectado no GND do microcontrolador, quando houver detecção de liquido, a saída assumirá nível lógico baixo (LOW ou 0).

GND (azul): terminal para conexão no GND da fonte de alimentação.

OUT (amarelo): terminal de saída do sinal serial TTL. Este terminal deve ser conectado a um pino digital da plataforma microcontrolada para identificar se o sensor detectou o nível do liquido no recipiente.

Na imagem abaixo temos um exemplo de instalação e uso do sensor em recipiente não metálico:

img02_arduino_detector_de_nivel_de_liquido_sem_contato_com_o_sensor_xkc-y25-pnp_agua_mode_esp8266_capacitivo

Veja que há um sensor instalado na parte superior do recipiente para identificar o nível máximo, um outro na parte inferior para identificar o nível mínimo e ambos estão conectados a uma plataforma microcontrolada que será responsável por ligar ou desligar a bomba d’água de acordo com o nível do recipiente. Para fixação do sensor no recipiente, pode ser utilizado resina ou cola epóxi ou até mesmo goma arábica (cola utilizada para colar selos e cartas).

Na próxima imagem temos um exemplo de instalação e uso do sensor em recipiente de metal:

img03_arduino_detector_de_nivel_de_liquido_sem_contato_com_o_sensor_xkc-y25-pnp_agua_mode_esp8266_capacitivo

Note que diferente do recipiente não metálico, é necessário fazer um furo no recipiente, instalar um rubber plug e acoplar o sensor com cola ou resina.

Lembrando que independente do recipiente, a espessura do mesmo deve ser levada em consideração, pois a distância máxima de detecção do sensor é de 13mm.

Agora que você já conhece o sensor XKC-Y25-PNP, podemos partir para a montagem da prática.

A prática consiste em utilizar o XKC-Y25-PNP em conjunto com o Arduino para detectar o nível mínimo e nível máximo de um recipiente. Será instalado um sensor no nível superior do recipiente e outro sensor no nível inferior. Uma mini bomba d’água será utilizada para que a agua possa encher o recipiente que vai estar sendo monitorado. Para apresentar algumas informações será utilizado também um display LCD 16X2 com interface I2C.

A mini bomba d’água consome de 130 a 220mA, logo, será necessário alimentar ela com uma fonte que forneça a corrente necessária para o perfeito funcionamento. O acionamento da mini bomba d’água será feito por um módulo relé 5V que também vai estar sendo controlado pelo Arduino. Além disso, é importante ressaltar que a mini bomba d’água não pode funcionar a seco, portanto, sempre utilize a mesma quando estiver submersa.

Utilizei uma fonte ajustável para protoboard, pois a mesma aceita de 6,5 a 12VDC na entrada, reduzindo a saída para 3.3VDC / 5VDC e fornece uma corrente de saída de aproximadamente 700mA. Desta forma, a fonte ajustável para protoboard será responsável por alimentar todas as peças que fazem parte do circuito, inclusive o Arduino.

Abaixo está a lista dos itens necessários:

Arduino Uno R3 com Cabo USB A/B
Sensor de Nível de Líquido (sem contato) – XKC-Y25-PNP
Mini Motor DC – Bomba de Água Submersível
Módulo Relé 5V de 1 Canal
Display LCD 16X2
Interface I2C para Display LCD
Cabo Jumper Macho-macho
Cabo Jumper Macho-fêmea
Protoboard
Resistor de 10K
Fonte Ajustável 3.3V / 5V para Protoboard MB102
Fonte DC 9V 1A Bivolt Chaveada
– Mangueira de 1/2” para a mini bomba d’água

A seguir temos o esquema de ligação:

ATENÇÃO: FAÇA TODAS AS LIGAÇÕES COM SEU ARDUINO DESCONECTADO DA ALIMENTAÇÃO.

img04_arduino_detector_de_nivel_de_liquido_sem_contato_com_o_sensor_xkc-y25-pnp_agua_mode_esp8266_capacitivo

(Clique na imagem para ampliar)

Observe no esquema de ligação que o Arduino está conectado a fonte ajustável para protoboard através dos pinos VIN e GND. Note também que o terminal preto (M) dos dois XKC-Y25-PNP não está no esquema de ligação, pois não preciso inverter o nível lógico das saídas e com isso estes terminais ficam desconectados. Além disso, utilizei dois resistores de 10K para fazer o pull-down (um para cada saída), pois nos testes que fiz com o Arduino, a saída do sensor estava oscilando entre HIGH e LOW quando deveria se manter em LOW.

Utilizei água para abastecer o recipiente, contudo, você pode utilizar outros tipos de líquidos e fazer os testes de detecção.

Na galeria de imagens abaixo você pode ver como fiz a montagem desta prática:

OBS: já que se trata de um protótipo, fiz a montagem das peças diretamente no recipiente que vai ser monitorado.

Como temos dois recipientes interligados através de uma mangueira e há variação do nível de liquido entre eles, deixei a mangueira cortada e de forma que não encoste na água quando o recipiente (monitorado) estiver cheio. Desta forma, quando a mini bomba d’água estiver desligada, não corre o risco dela continuar a puxar água para o recipiente (monitorado) ou puxar água de volta para o recipiente (onde a mini bomba d’água está instalada).

Após a montagem do esquema de ligação, basta implementar as instruções para o funcionamento.

Se ainda não tem a IDE do Arduino instalada e configurada, basta acessar o link abaixo e em seguida retorne para continuar:

Arduino – Instalação e Configuração da IDE no Windows

O código para esta prática está abaixo, basta copiar o mesmo, colar na IDE, salvar e carregar:

OBS: desconecte da fonte ajustável para protoboard o pino VIN do Arduino sempre que for conectar a placa ao computador para carregar o código. Após carregar o código e desconectar a USB, basta reconectar o VIN a fonte.

Em seguida, conecte a fonte de alimentação no plug jack da fonte ajustável para protoboard e pressione o interruptor para liga-la. Considerando que o recipiente monitorado esteja vazio, inicialmente o display LCD vai apresentar a mensagem “>>>RECIPIENTE<<<” na primeira linha e na segunda linha vai aparecer “VERIFICANDO…”. Após o intervalo de 2 segundos, no display LCD será apresentado a mensagem “ABAIXO DO MIN.”, o relé será ligado e consequentemente a bomba será acionada para começar a levar água até o recipiente. Após acionamento da mini bomba d’água, no display LCD será mostrado rapidamente a mensagem “BOMBA LIGADA”. Enquanto a mini bomba d’água estiver ligada e levando água ao recipiente monitorado, no display LCD será mostrado a mensagem “ENCHENDO…”. Quando o sensor superior detectar a água, o relé será desligado (consequentemente a mini bomba d’água será desligada) e no display LCD será exibido rapidamente a mensagem “BOMBA DESLIGADA” e em seguida a mensagem “CHEIO” ficará estática no display.

O código foi definido para manter o recipiente sempre cheio, portanto, sempre que o nível de água do recipiente abaixar, o sensor superior irá detectar e a mini bomba d’água será acionada para completar o recipiente até o nível máximo.

Assista ao vídeo abaixo e veja o resultado desta prática:

Este foi um projeto bem interessante, pois mostrou como o sensor XKC-Y25-PNP é extremamente útil para detecção de nível em recipientes. Pelo fato de ser um sensor extremamente preciso, você pode utilizá-lo em uma aplicação real, como por exemplo, o monitoramento do nível mínimo e nível máximo de uma caixa d’água que abastece a residência e mostrar em uma página web as informações dos níveis. Este exemplo de monitoramento da caixa d’água é bem simples, contudo, são várias as possibilidades de aplicação do XKC-Y25-PNP.

Invertendo o nível lógico da saída:

Conforme mencionado anteriormente, para inverter o nível lógico da saída do XKC-Y25-PNP basta conectar o terminal preto (M) ao GND:

img09_arduino_detector_de_nivel_de_liquido_sem_contato_com_o_sensor_xkc-y25-pnp_agua_mode_esp8266_capacitivo

Desta forma, quando o sensor detectar o líquido a saída terá nível lógico baixo (LOW ou 0) e sem a detecção de líquido a saída terá nível lógico alto (HIGH ou 1). Obviamente é necessário alterar o código para inverter as condições. No link abaixo você pode fazer o download do código modificado para ser utilizado quando o sinal de saída do mesmo for invertido.

Download do código para o XKC-Y25-PNP com saída invertida

Em breve farei outra postagem relacionada ao XKC-Y25-PNP. Fique ligado!

Espero que tenham gostado desta postagem! Até a próxima!

Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!

Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop

Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.

Obrigado e até a próxima!

Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.

 

Arduino – Detector de Nível de Líquido sem contato com o Sensor XKC-Y25-PNP
6 votos / Média de avaliação: 5 / Pontuação: 100%


Postagem anterior:
Próxima postagem:
Postagem feita por

Formado em Engenharia da Computação pela Faculdade Presidente Antônio Carlos, fundador e CEO da MasterWalker Electronic Shop. Se preocupa com o aprendizado dos seus clientes e daqueles interessados em aprender sobre Arduino e plataformas embarcadas em geral.

Existem 10 comentários para esta postagem
  1. Jairo às 21:19

    Euler Oliveira existe formas do sensor detectar o nível baixo e alto e enviar o sinal para o Arduino e o Arduino acionar saídas relé para enviar o sinal a uma sirene ou uma chave magnética de potencia e acionar uma motobomba?
    se isso for possível eu poderia usar em minha casa..
    Obrigado.

    • Euler Oliveira Autor às 07:47

      Neste artigo é feito basicamente isto que mencionou. O sensor detecta o nível mínimo ou máximo e faz acionamento de um módulo relé que está conectado ao Arduino.

  2. David às 18:18

    Hi friend!
    Very nice post! And useful!

    I bought a liquid level sensor… but XKC-Y25-V which has logic levels at output.

    But when I connect black wire (M)ode to GND to invert output I only get 0’96V when output should be Vcc (5V in my case)

    Do you know what can happen. I haven’t found any good documentation?

    Thanks a lot!
    Sorry not writing in Portuguese… I’m Spanish.

      • David às 16:29

        I’ve found some comments in Aliexpress about the sensor I bought.
        In that comments talk about pin (M)ode and yes.. it’s for inversion. In fact it does inversion but doesn’t arrive at Vcc when high… only 0’96V. If I connect M to Vcc the output works well.

        I think it’s a problem of its internal design… perhaps an internal pullup too high.

        I have two sensors V version and both behaves equal.

        I hope my info would be useful to somebody if I’m not misunderstood pin M of my sensors.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *