Ligando um Sensor de Nível de Líquidos ao Arduino
Esse post é parte de um projeto um pouco maior, mas que não consegui montar ainda simplesmente pela falta de peças. Então vou começar falando apenas do sensor de nível de líquidos (abaixo).
Este é um sensor feito de material plástico (PP, segundo o fabricante), composto de uma haste na qual desliza um cilindro feito de material flutuante.
Esse cilindro possui um ímã que aciona um sensor magnético no meio da haste. Esta haste por sua vez fecha o contato dos 2 fios que saem do sensor. Isso mesmo. É uma boia com fios.
Como funciona o sensor
Veja na imagem abaixo que o cilindro possui internamente apenas uma pequena parte preenchida com o ímã, o que torna possível invertermos o cilindro. Assim podemo ter um contato normal aberto ou normal fechado, adaptando o sensor às nossas necessidades:
Sozinho, pode por exemplo ser usado como uma chave que é acionada quando um reservatório está cheio (colocando o sensor na parte de cima do reservatório), ou vazio (colocando o sensor na parte de baixo).
Com mais sensores, eu posso controlar vários níveis em um tanque, indicando ao Arduino se o meu tanque está cheio, se está pela metade ou se está (quase) vazio.
Sensor de nível de líquidos com Arduino
Uma ligação básica com apenas um sensor pode ser feita montando o circuito abaixo, onde usei dois leds para representar reservatório cheio (led verde aceso) ou reservatório vazio (led vermelho aceso).
…e carregando esse programa, que não utiliza nenhuma biblioteca especial mas faz o monitoramento da porta digital 3, onde ligamos o sensor de nível de líquidos, e aciona as portas 6 e 7 onde os leds estão conectados:
//Programa: Teste sensor liquido Arduino //Autor: Arduino e Cia //Pino ligado ao sensor de nivel de liquido int pinosensor = 3; //Led verde int pino_led_cheio = 6; //Led vermelho int pino_led_vazio = 7; void setup() { Serial.begin(9600); pinMode(pinosensor, INPUT); pinMode(pino_led_cheio, OUTPUT); pinMode(pino_led_vazio, OUTPUT); } void loop() { int estado = digitalRead(pinosensor); Serial.print("Estado sensor : "); Serial.println(estado); switch(estado) { case 0: digitalWrite(pino_led_vazio, LOW); digitalWrite(pino_led_cheio, HIGH); break; case 1: digitalWrite(pino_led_vazio, HIGH); digitalWrite(pino_led_cheio, LOW); break; } delay(100); }
Gostou de usar o sensor de nível de líquidos? Então confira também outro post onde utilizo esse sensor, o Monitore sua caixa dágua usando arduino. Até lá!
Boa tarde, gostaria de saber onde adquirir esse sensor para implementar o experimento em sala de aula.
Grato,
Boa noite,
Utilize o formulário de contato no lado direito da página, assim conversamos por email.
Abraço !
Boa tarde,
Não entendi porquê a colocação do resistor e ground no sensor.
Pode explicar?
Obrigado!
Rui Ponte
Boa noite Rui,
Esse resistor nós chamamos de pull-down. Tentando explicar de uma maneira bem simples, ele serve para manter o sinal que vem do sensor em nível baixo. Se não ligarmos o pino do Arduino em nenhuma tensão de referência, ele pode interpretar ruídos como 0 ou 1, o que vai acabar acionando os leds de maneira errada.
Você pode ter mais informações sobre resistores pull-down e pull-up nesse artigo :
http://www.arduinoecia.com.br/2013/02/resistor-de-elevacao.html
Abraço !
E como ficaria a programação com 3 sensores? e posso usar sensor ICOS?
Boa tarde Bruno,
Você pode alterar esse mesmo programa, definindo outros pinos para os sensores e depois testando o valor de cada uma das chaves.
Quanto ao ICOS, eu ainda não usei, mas creio que o procedimento seja o mesmo.
Abraço.
Prezado . Parabéns pelo seu trabalho, seu Blog se tornou uma fonte de conhecimento sobre Arduino.
Gostaria de perguntar, com tanats versões novas do IDE Arduino, como converter skethcs criadas com extenão .pde para .ino. Tenho alguns sketchs (.pde) e não consigo usar com a nova versão 1.6.3.Esta correto isso?
Já experimentei deixar instalado as versões mais antigas na mesma máquina, mas quando vou compilar sempre aparece um tipo de erro (launch4j—–An Error Occurred While Starting The Application).
As versões que instalei são estas, todas ao mesmo tempo na mesma máquina.
1.0.3; 1.5.8; 1.6.0; 1.6.1; 1.0.4;1.0.5; 1.0.6; 1.5.3-intel 1.0.4;1.5.3-intel 1.0.3;1.5.8;
Desde já grato pela ajuda….o que fiz de errrado?
Roberto Carlos
Boa tarde Roberto,
Eu utilizo várias versões da IDE também, mas não costumo ter muitos problemas, a não ser com as bibliotecas, que preciso copiar de uma IDE para a outra.
Mas com relação aos programas, utilizo normalmente.
Abraço e obrigado !
Olá, gostaria de saber se os sensores podem ser submergidos e se isso pode vir a causar algum problema! Grato!
Bom dia,
Pode sim, eles são lacrados.
Abraço !
Boa tarde!
Como ficaria esta ligação no Arduino Mega?
Bom dia,
Você pode utilizar o mesmo esquema de ligação.
Abraço !
Qual o valor dos resistores? O meu ficou louco gerando 0 e 1 na porta aleatoriamente
Oi Denilson,
Pela descrição, o seu problema realmente é o resistor (ou melhor, a falta dele). Você pode usar valores como 470 ohms, 1 K ou 10K, ou outros valores nessa faixa.
Abraço!
Olá! Coloquei os resistores conforme mencionado acima, porém estou usando Raspberry PI B. Se eu coloco os resistores de valores mencionados acima meu sensor não varia nunca. Preciso de um resistor menor para Raspberry PI ?
Qual a tolerancia em temperatura que este sensor suporta?
Ola,
Fiz a ligação exatamente como mostrado, copiei o codigo, mas, o led verde fica ligado constantemente e o led vermelho não é acionado quando o recipiente é preenchido com água.
Boa noite Diego,
Você consegue testar esse sensor com um multimetro, para verificar se ele está fechando contato ?
Abraço!
Boa noite, fiz o teste com o multímetro e o sensor estar funcionando perfeitamente. Mas, o problema continua, suspeito que seja o resistor que estou utilizando.
Qual é o resistor correto para este sensor? Quantos ohms?
O sensor que estou usando é este mesmo do tutorial, só que horizontal.
Muito obrigado pela ajuda!
Diego Duarte
Boa noite Diego,
Será que o seu sensor não está funcionando ao contrário não ? Tente inverter essa parte do código. Onde está LOW, você muda para HIGH, e onde está HIGH, você muda para LOW:
case 0:
digitalWrite(pino_led_vazio, LOW);
digitalWrite(pino_led_cheio, HIGH);
break;
case 1:
digitalWrite(pino_led_vazio, HIGH);
digitalWrite(pino_led_cheio, LOW);
Abraço!
eu nao manjo muito de programação, mais estou fazendo um projeto integrador que tenho de entregar nesta terca dia 24, que é justamente este, mais com 2 boias.. tentei de varias forma fazer a programação mais nao obtive exito, entao tentei adaptar esta programação dizendo que os leds seria um motor e o outro uma valvula, adcionei mais um sensor e o programa ficou assi:
int pinosensor = 2;
int sensor = 8;
int motor = 7;
int valvula = 12;
void setup()
{
Serial.begin(9600);
pinMode (sensor, OUTPUT);
pinMode(pinosensor, INPUT);
pinMode(motor, OUTPUT);
pinMode(valvula, INPUT);
}
void loop()
{
int estado = digitalRead(pinosensor);
Serial.print("Estado sensor : ");
Serial.println(estado);
switch(estado)
{
case 0:
digitalWrite(valvula, HIGH);
digitalWrite(motor, LOW);
digitalWrite(sensor, LOW);
break;
case 1:
digitalWrite(valvula, LOW);
digitalWrite(motor, HIGH);
digitalWrite(sensor,HIGH);
break;
}
delay(100);
}
sera que vai dar certo?
int pinosensor = 2;
int sensor = 8;
int motor = 7;
int valvula = 12;
void setup()
{
Serial.begin(9600);
pinMode (sensor, OUTPUT);
pinMode(pinosensor, INPUT);
pinMode(motor, OUTPUT);
pinMode(valvula, INPUT);
}
void loop()
{
int estado = digitalRead(pinosensor);
Serial.print("Estado sensor : ");
Serial.println(estado);
switch(estado)
{
case 0:
digitalWrite(valvula, HIGH);
digitalWrite(motor, LOW);
digitalWrite(sensor, LOW);
break;
case 1:
digitalWrite(valvula, LOW);
digitalWrite(motor, HIGH);
digitalWrite(sensor,HIGH);
break;
}
delay(100);
}
Como fazer o desenho? No fritzin não tem esse sensor.
porque vc usou serial.begin(9600) ?
Bom dia,
Usamos esse comando para inicializar a comunicação serial e enviar dados para o Serial Monitor com o comando Serial.print().
Abraço!
Por gentileza, gostaria de saber a especificação do sensor utilizado.
Bom dia Gabrielle,
Infelizmente esse sensor tem pouquíssima documentação… vc precisa de algum dado específico ?
Abraço!
Bom dia, estou fazendo esse sistema, porem o reservatorio fica a 70metros longe da onde ficara o arduino, se eu ligar no 5v e gnd do arduino eu nao vou ter problema?O que voce me aconselha?
Boa noite,
Eu usaria alguma solução com rede wifi, como o ESP8266.
Abraço!
Booa Tarde , Gostaria de saber como eu faço para adicionar + 2 sensores de e + 4 leds .. é para um projeto meu poderia me ajudar ????
Gostaria de saber posso botar 3 sensores e 3 leds , por exemplo .. 1 sensor pra marca nivel cheio , 1 sensor marca niivel medio e outro sesnsor pra marcaa nivel baixo , qdo o recipiente estiver cheio as 3 leds acende, quando estiver nivel medio 2 leds acende , e quando estiver no nivel baixo fica 1 led piscando .. Poderia me ajudar com esse codigo , Ficaria mutio agradecido !!!
Booa Tarde , Gostaria de saber se vcs poderia me ajudar com 1 codigo , para 3 sensores e 3 leds .. por exemplo : quando o recipiente estiver cheio todas as leds ficara ligada , quando estiver no nivel medio , 2 leds ficaram ligadas e quando estiver nivel baixo 1 fica ligada e piscando tipo que avisando q precisar encher , Sera q poderia me ajudar com esse Codigo ? Ficaria muito agradecido !!
O sensor mede apenas se o reservatório está cheio ou vazio ou ele pode medir a quantidade de água?
Boa noite,
Se está cheio/vazio, mas vc pode usar sensores intermediários para verificar a quantidade (aproximada) de água no reservatório.
Abraço!
Boa tarde,
Estou pretendo fazer a montagem desse circuito ai no Fritzing, mas utilizando três destes sensores de nível de água, porém no encontrei no pacote do referido software, onde eu encontro-o??
tbm procuro e não consigo achar
Boa noite
Você poderia me dizer como é o nome do sensor no fritzing, por que não estou conseguindo achar para montar.
olhando as especificacoes no site https://www.makerhero.com/produto/sensor-de-nivel-de-agua/ diz q é 100V DC…duvida, isso quer dizer q posso ligar na rede eletrica 110? tipo tenho uma valvula selonoide ligada a rede eletrica (110), queria colocar esse sensor de nivel para acionar essa valvula, funcionaria?
Esse sensor pode ser utilizado para medir nível de combustíveis(diesel, gasolina , álcool)?
Oi Marcos,
Eu já vi algumas pessoas usando esse sensor para medir outros líquidos (ex, gasolina), mas creio que por ser plástico (PP), não terá muita durabilidade.
Abraço!
Adilson
eu fiz esse projetinho, meus leds ficaram alternando, uma hora um acendia dps de poucos segundos o outro acendia sem eu mexer no sensor!!
Como resolvo?
Bom dia,
Você colocou os resistores junto aos fios dos sensores?
Abraço!
Adilson
Vc tem o código do sensor de líquido para que este seja montado no frietzing como no vídeo ?
Bom dia.
Este sensor no caso seria apenas para fechar o circuito certo? Então poderia fazer com sondas de cabo elétrico?
Boa noite amigo, como eu poderia está realizando a plotagem do gráfico nível x tempo utilizando esse tipo de sensor?
Boa noite,
Você pode gravar os dados de medição em um cartão SD e depois descarregar isso no computador, gerando um gráfico em Excel.
Abraço!
Adilson
Queria saber como q eu faço pra colocar os resultados no LCD 16×2
Oi Leandro,
Nesse post aqui tem o que você precisa: https://www.arduinoecia.com.br/2017/09/monitore-sua-caixa-dagua-usando-arduino.html
Abraço!
Adilson
Hola, muchas gracias por compartir tu conocimiento. Tengo una duda y espero me puedas ayudar. Necesito que cuando el sensor detecte que esta bajo el nivel, accione una minibomba, que opera desde 3,5v a 6v. Me puedes ayudar?
¡Hola Manuel!
Todavía no tengo este esquema de conexión, pero busque aquí en el sitio por artículos usando el módulo relé. Puede utilizar este módulo para accionar la bomba.
Saludos!
Adilson
Bom dia.
Segue abaixo o código para 3 bóias:
//Código alterado pelas professoras Michelle Rezende e Marilia Avila – Volta Redonda/RJ
int pinosensorverde = 3;// Pino sensor verde
int pinosensoramarelo = 4;// Pino sensor amarelo
int pinosensorvermelho = 5; // Pino sensor vermelho
int pino_ledverde_cheio = 6;// Led verde
int pino_ledamarelo_cheio = 7;// Led amarelo
int pino_ledvermelho_cheio = 8;//Led vermelho
void setup()
{
Serial.begin(9600);
pinMode(pinosensorverde, INPUT);
pinMode(pinosensoramarelo, INPUT);
pinMode(pinosensorvermelho, INPUT);
pinMode(pino_ledverde_cheio, OUTPUT);
pinMode(pino_ledamarelo_cheio, OUTPUT);
pinMode(pino_ledvermelho_cheio, OUTPUT);
}
void loop()
{
int estado = digitalRead(pinosensorverde);
Serial.print("Estado sensor : ");
Serial.println(estado);
switch(estado)
{
case 0:
digitalWrite(pino_ledverde_cheio, LOW);
break;
case 1:
digitalWrite(pino_ledverde_cheio, HIGH);
break;
}
int estado1 = digitalRead(pinosensoramarelo);
Serial.print("Estado sensor 1: ");
Serial.println(estado1);
switch(estado1)
{
case 0:
digitalWrite(pino_ledamarelo_cheio, LOW);
break;
case 1:
digitalWrite(pino_ledamarelo_cheio, HIGH);
break;
}
delay(100);
int estado2 = digitalRead(pinosensorvermelho);
Serial.print("Estado sensor 2: ");
Serial.println(estado2);
switch(estado2)
{
case 0:
digitalWrite(pino_ledvermelho_cheio, LOW);
break;
case 1:
digitalWrite(pino_ledvermelho_cheio, HIGH);
break;
}
delay(100);
}
esse código funcionou?? pois necessito fazer uma ligação para um trabalho integrador semelhante, que justamente necessita de tres sensores..
muito bom amigo
mas gostaria de saber se tem como acender o vazio em uma posição exata por exemplo na metade continuar verde e quando se encontrar próximo o final marcar vazio ? utilizarei uma boia de carro no meu projeto
Oi Leonardo,
Você pode colocar um sensor de nível no fundo do recipiente. Vai fazer exatamente o que você quer. 🙂
Abraço!
Adilson
Consigo utilizar esse sensor sem um microcontrolador? Apenas para acionar e desacionar um Relè?
Oi Allan,
Provavelmente você vai precisar de algum circuito eletrônico auxiliar para acionar o relé, mas é possível usar sem microcontrolador sim. Esse sensor de nível de líquidos funciona como se fosse uma “chave”.
Abraço!
Adilson
Gostaria do datasheet deste sensor, vocês podem me disponibilizar?
Oi Pedro,
Vou ficar te devendo essa. Vamos ver se algum outro leitor consegue te ajudar.
Abraço!
Adilson
Todos os projetos sao interessantes.
Ja vi muitos projetos utilizando sensores de nivel.
Tenho um tanque de cultivo ( aquaponia ) e gostaria de substituir o meu sistema de sifao por um que se utilize de sensores de nivel de agua e reles junto com o arduino por controlador. Nao consigo encontrar nada como o que quero.
E tao simples: um tanque com dois sensores, um no fundo e o outro mais acima. quando o tanque se enche de agua o sensor do topo liga o rele que aciona uma bomba dagua. A agua sai do tanque ate o momento que o segungo sensor que no caso esta no fundo do tanque desliga a bomba que para de funcionar. A agua gradualmente volta a subir ate o momento que o sensor no topo aciona novamente a bomba. Assim o processo se repete. Nao preciso controlar a entrada de agua, mas somente o ligar e desligar da bomba dagua. Criando assim um efeito mare que e importante na aquaponia.
Alguem poderia me ajudar? Tenho o arduino o rele e todas as outras coisas. O que me falta e o codigo. Tenho pouca esperiencia.