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

Faça download da biblioteca para  utilização do módulo I2C com o display LCD 16X2:

Download NewliquidCrystal

Caso não saiba como importar bibliotecas para a IDE do Arduino, acesse a postagem Arduino – Importando bibliotecas para a IDE e em seguida retorne para continuar.

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.

 



Postagem anterior:
Próxima postagem:
Postagem feita por

Formado em Engenharia da Computação, Técnico em Eletroeletrônica, Fundador e Diretor 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 28 comentários para esta postagem
  1. Gustavo às 21:52

    Olá Euler,

    Fiz um projeto para regar automaticamente utilizando sensor de umidade de solo.

    A montagem dos demais componentes (bomba, relé e LCD) ficou exatamente igual às apresentadas neste post.

    Acontece que quando a bomba é acionada, parece que acontece alguma sobrecarga no sistema e trava tudo. O LCD começa a dar problema e o programa para de funcionar corretamente.

    Consegue me ajudar com este problema?

    Meu telefone: (12) 99193-8832 (Whatsapp)

  2. Luis às 12:35

    Olá é possível com esta montagem, em vez de accionar um relé, enviarmos um alarme via wifi?

    Obrigado!

    • Euler Oliveira Autor às 12:51

      Olá Luis.

      Agradeço pelo comentário!

      Sim, é possível.

  3. Driko às 23:44

    Boa noite.. qual é o fio? Pois nas hidromassagens possui um sensor parecido, mas ao invés de 4 fios, somente três. Teria como substituir por um sensor desse?

    • Euler Oliveira Autor às 09:19

      Olá Driko.

      Agradeço pelo comentário!

      Leia o datasheet do sensor que está na hidromassagem e veja se os pinos são compatíveis com os pinos do sensor desta postagem. Além disso, veja se as especificações são compatíveis.

  4. André Luis às 01:07

    Quero utilizá-lo em substituição a um sensor de nível convencional, com bóia e reed switch, em um automóvel. O circuito original faz acender uma luz no painel quando o reed switch está aberto e a mantém apagada quando está fechado. Considerando que a alimentação do sensor seja com a mesma tensão do circuito no qual o reed switch está conectado, posso usar esse sensor diretamente ou preciso de algum circuito que faça manipulação dos sinais, arduino etc?

    • Euler Oliveira Autor às 08:57

      Olá André Luis.

      Agradeço pelo comentário!

      Recomendo que busque mais informações sobre o XKC-Y25-PNP e veja se ele vai servir para substituir este circuito do veículo e se vai ser necessário muitas alterações no circuito do veículo para instalação do sensor.

  5. Bianca às 16:48

    Boa Tarde você poderia me falar qual programa usou para a criação do esquema em desenho de como o projeto iria funcionar?

  6. manuel castillo às 22:25

    Hola Euler, tengo este dispositivo “XKC Y25 T12V”, pero no logro hacerlos funcionar. Prende el led, detectando que hay liquido y se apaga donde no hay, pero la lectura de arduino siempre es CERO, es decir no cambia aunque este detectando al liquido. Alguna idea o un poco de ayuda?
    Estoy trabajando con un arduino UNO. Probé incluso con un convertidor de voltaje para que el pin de datos sea de 5v en un arduino MEGA.

  7. Elmo às 06:05

    What is the difference between XKC-Y25-PNP andXKC-Y25-NPN?

    • Euler Oliveira Autor às 08:33

      Hello Elmo.

      The difference is that the PNP assumes a high logic level when it detects the liquid and the NPN assumes a low logic level when it detects the liquid.

  8. Nessinho às 15:43

    Alguma sugestão de como consigo saber (medir) quantos mililitros um gato está bebendo da água de um pote cada vez que bebe água?

  9. Gustavo às 02:04

    Olá Euler, tudo bem? A um tempo pesquiso por uma solução para substituir um sistema de boia de nível para adaptar em um reservatório de radiador de carro. Consiste que, tenho uma linha de sinal (5v) – chicote, que ligado na boia com contato Reed Switch, se mantém fechado (ligado) quando tem água no recipiente. Quando a água desce, o contato abre pq a bóia com imã toca o sensor Reed switch e a energia do chicote é interrompida, alertando o painel do carro. Como que eu faria com esse sensor, a nível que quando faltasse água ele cortasse a energia da linha do chicote? Existe a possibilidade dele funcionar assim, sem na necessidade de ter que adaptar uma placa Arduino nele? Grato!

  10. Evandro às 21:29

    Não daria para usá-lo sem arduino, enviando o sinal de saída para uma válvula solenóide, por exemplo?

    • Euler Oliveira Autor às 16:20

      Olá Evandro.

      Sim, é possível.

      Basta conectar a saída do sensor ao pino de sinal da carga que deseja controlar.

      • Henrique às 11:39

        Essa plataforma poderia ser um contator? Para converter o sinal do sensor e comandar uma válvula solenoide?

        • Euler Oliveira Autor às 11:50

          Olá Henrique.

          O Sensor pode atuar junto de um módulo relé 24V, por exemplo, enviando o sinal para o relé energizar uma carga (solenoide, por exemplo).

          A saída do sensor envia HIGH ou LOW, com base neste sinal o usuário pode definir qual dispositivo será ligado ou desligado.

  11. 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.

    • Euler Oliveira Autor às 15:44

      Hi David.

      Have you checked that for this model XKC-Y25-V the “M” pin actually does an inversion of the output (yellow wire)?

      • 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.

  12. 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.

  13. Jairo às 21:15

    Obrigado pelo ardigo!!
    eu fiz uma busca aonde encontra esse sensor XKC-Y25-PNP e não encontrei, você sabe aonde que vende? obrigado.

  14. Carlos às 20:23

    Poderia-me enviar por mail ou indicar-me onde poderei encontrar a biblioteca LiquidCrystal_I2C.h ,

    Obrigado,

    Carlos Esteves