Contador com sensor indutivo e Arduino
Os contadores tem inúmeras aplicações na área de automação, e podem ser acionados pelos mais variados sensores, como infravermelho, sensores de fim de curso e outros componentes. Neste post vamos ver uma aplicação de contador com sensor indutivo NPN 6-36V e Arduino, que você pode usar em aplicações de automação residencial, na indústria ou simplesmente montar para efeito de testes.
O sensor de proximidade indutivo é um sensor que detecta objetos metálicos, gerando um sinal no pino de saída que pode ser lido por um microcontrolador para tomar algum tipo de ação.
Esse tipo de sensor é muito usado em prensas, esteiras e outros equipamentos. Pode ser usado não só para detectar objetos, mas também movimentos e outras particularidades da máquina. Esse sensor é geralmente encontrado em versões de 24V para uso com CLP´s, comandos e outros tipos de controle industrial.
O sensor de proximidade que vamos usar com Arduino Uno é um sensor indutivo NPN de 3 fios, que funciona com tensões entre 6 e 36 volts DC (corrente contínua). O sinal de saída se mantém em estado alto (1) enquanto nenhum objeto estiver em frente ao sensor, e cai para nível baixo (0) quando aproximamos um objeto metálico da parte azul. Para que o objeto seja detectado, ele deve estar bem próximo, cerca de 4 à 5mm do sensor.
O sensor tem 3 fios: preto (sinal), marrom (Vcc) e azul (GND). Na parte de trás, temos também um led que se acende quando um objeto é detectado.
Usando o sensor indutivo com Arduino
Vamos montar o nosso contador utilizando componentes já conhecidos aqui do blog: Display LCD 16×2 e módulo I2C para display. Você também pode optar por adquirir um display com o módulo I2C integrado.
O circuito abaixo mostra a conexão do sensor de proximidade indutivo com Arduino Uno, com o sensor utilizando alimentação externa. Observe que nesse caso estamos interligando o GND do sensor e do Arduino (fios azuis).
No pino de sinal do sensor (fio preto), temos um resistor pull-up de 1K ligado aos 5V do Arduino. Isso vai manter o sinal de saída em nível alto enquanto não houver nenhum objeto metálico em frente ao sensor.
Programa contador
O programa faz uma leitura constante da porta digital 7, onde está ligado o pino de sinal do sensor. Na ausência de sinal do sensor, o valor 1 é enviado para a porta. Caso algum objeto metálico se aproxime do sensor, é enviado o valor 0.
Os dados são enviados para o display LCD 16×2 I2C, que utiliza a biblioteca Liquid_Crystal_I2C, instalada a partir da IDE Arduino.
Para instalar a biblioteca, abra a IDE e acesse o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. Na janela do Gerenciador de Bibliotecas, procure por liquidcristal_I2c e instale a biblioteca LiquidCrystal I2C by Frank de Brabander, conforme abaixo:
Dúvidas na instalação da biblioteca? Confira o post Como instalar uma biblioteca na IDE Arduino.
Observe que na linha 8 do programa estamos utilizando o endereço I2C 0x27, e que o seu display LCD pode ter um endereço diferente. Neste caso, utilize o programa I2CScanner (que eu mostro neste post) para identificar o endereço correto.
No loop, realizamos a leitura do pino digital 7 e, caso haja uma alteração para o valor 0, o contador é incrementado, o valor desse contador é enviado para o display e também mostrado no serial monitor.
//Programa: Contador com sensor indutivo e Arduino //Autor: Arduino e Cia #include <Wire.h> #include <LiquidCrystal_I2C.h> // Inicializa o display no endereco 0x27 LiquidCrystal_I2C lcd(0x27, 16,2); int pino_sensor = 7; int valor = 1; //Variavel leitura sensor int contador = 0; void setup() { Serial.begin(9600); //Define o pino do sensor como entrada pinMode(pino_sensor, INPUT); //Inicializa o display LCD 16x2 I2C lcd.init(); //informacoes iniciais lcd.setCursor(0, 0); lcd.print("Sensor indutivo"); lcd.setCursor(0, 1); lcd.print("Contador: 0"); Serial.println("Contador com sensor indutivo"); } void loop() { //Le o pino do sensor valor = digitalRead(pino_sensor); //Verifica se algum objeto foi detectado (valor = 0) if (valor == 0) { //Incrementa o contador contador++; //Mostra o valor do contador no display lcd.setCursor(10, 1); lcd.print(contador); //Mostra o valor do contador no serial monitor Serial.print("Contador: "); Serial.println(contador); //Loop caso o objeto fique parado em frente ao sensor while (digitalRead(pino_sensor) == 0) { delay(100); } } }
Você pode alterar o programa para que o display mostre outras informações, como um contador diário total, um contador parcial de peças (de 10 em 10, por exemplo), implantar funções de reset, contador regressivo, etc. São inúmeras aplicações para esse tipo de sensor.
Confira também outro post aqui no Arduino e Cia sobre como montar um Contador Remoto com Sensor Indutivo e módulo wireless HC-12.
parabéns…vai me ajudar muito, pois faz parte de um projeto.
Valeu… 🙂
Abraço!
Adilson
onde encontro um sensor intuitivo de maior distancia. E como eu ligo ele a um monitor de 7 segmentos para mostrar velocidade média de um carrinho…
Oque estaria faltando declarar?
exit status 1
'POSITIVE' was not declared in this scope
Eu estava com esse erro por conta de falha na instalação da biblioteca, tente instalar extraindo o zip!
Oi amigo, sou um iniciante, então tenho algumas deficiências em alguns conceitos básicos da elétrica/eletrônica. Por isso tenho uma dúvida que pode parecer simples, mas vai me ajudar bastante. O que você usa como fonte de alimentação elétrica para este sensor? Tem que ser uma bateria de 36v? Ou pode ser alguma que forneça a tensão entre 6 e 36v?
Oi Juca,
Pode ser alguma fonte de tensão que forneça entre 6 e 36VDC. Eu usei uma fonte de 9V/1A.
Abraço!
Não poderia ser usado o resistor interno de pull up do arduino? Inclusive vou testar isso agr, mas queria uma resposta de vcs.
Oi Eduardo,
Não testei, mas creio que não teria problema.
Abraço!
Adilson
tu pode tambem usar uma fomte de pc usada.
pode tambem usar para o seu projeto uma fonte de pc usada que esteja funcionandook.
Olá,
Como faço para acionar um relé em um determinado valor atingido pelo contador e tbm como faço para zera-lo num determinado valor atingido? Grato e Parabéns.
Quando o contador chega em 31 mil (aproximadamente) ele comeca a efetuar contagem regressiva. Alguem sabe como resolver esse problema?
Oi José,
Isso provavelmente é por causa do tipo de varíavel utilizado (INT), na linha 12, tente usar long ou unsigned long, fica assim:
long contador = 0;
Abraço!
Adilson
Tudo ok Adilson. Ao mudar a linha 12 para long contador =0, o projeto nao limitou o número de ciclos.
Obrigado!!
Oi José!
Legal, obrigado pelo retorno. 🙂
Abraço!
Adilson
qual a diferença no codigo se eu usar um pnp em vez do npn
Oi Matheus,
A diferença na verdade é mais "elétrica" do que no código, pq no caso do NPN você está conectando o pino ao GND quando o sensor é acionado. No caso do PNP, quando você acionar o sensor vai jogar tensão para dentro do Arduino, então é bom tomar cuidado com a diferença de alimentação do sensor e da tensão suportada pela porta do Arduino, que no caso do Uno é de 5V.
Abraço!
Adilson
Como faço para medir o deslocamento e não apenas o contato e não contato com o metal, Obrigado.
como posso fazer para colocar 4 contadores ???
O sinal desse sensor não precisa ser limitado a corrente dele na entrada do arduino?
O sinal desse sensor precisa ser limitado para ligar ele na entrada do Arduino?
Oi Adilson,
Não precisa, por ser um sensor NPN. Se fosse um PNP, você precisaria limitar, com certeza.
Abraço!
Adilson
Obrigado, eu li algo sobre limitar corrente em um post aqui na internet, acabei ficando na dúvida.
Obrigado pelo esclarecimento.
Abraço.
A duvida neste caso fica até pela descrição acima, pois conforme o seu artigo acima "O sinal de saída se mantém em estado alto (1) enquanto nenhum objeto estiver em frente ao sensor", sendo assim se o sensor estiver usando 9V o nível lógico 1 não seria 9V? No caso o seu pull up seria para circuito aberto e não nível lógico 1. Todos os sensores NPN terão esta características de ficar aberto?
Boa noite,
É, realmente ficou um pouco confuso, acho que o ideal seria dizer que a porta fica acionada (ou seja, conectada ao GND) quando há algum objeto em frente ao sensor, e desligada (com tensão de 5V devido ao pull up), quando não há objeto em frente ao sensor.
Abraço!
Adilson
como faço para adicionar um botão para resetar o contador
como faço para contar até 10 e zerar pra contar de novo, no caso eu quero que toda vez que atingir 10 ou outro numero acione o rele, com isso zerando e iniciando a contagem de novo me ajudem
como fica uma esquema de circuito eletrico sem esse modulo ? so com o arduino sensor e display
Boa tarde pessoal … Eu preciso de um codigo para usar essa sensor indutivo em um motor de passo (Motor de Passo com Driver ULN2003)… para que passe um metal ele vire para direita e certo tempo volta para posição inicial pra esquerda
Boa tarde pessoal … estou precisando controlar um motor de passo (Motor de Passo com Driver ULN200) com sensor indutivo … para que quando passar o metal e gire pra direita e certo tempo volta pra esquerda.
So conseguirem me ajudar agradeço muitoo …Abraços
Boa tarde!
O sensor não vai retornar um sinal alto (6 ~36V) como você fez para não queimar a entrada do arduino, que é de 5v?
Oi Lucas,
Não. Como é um sensor NPN, ele será "ativo" em 0V. Se fosse um sensor PNP, aí sim ele mandaria um sinal correspondente para o Arduino.
Abraço!
Adilson
Amigo vou usar um sensor óptico que funciona da mesma forma, so uma duvida porque o resistor fazendo o serviço de pull app ( sou novo no mundo da eletrônica e tenho algumas dificuldades )
Boa noite,
É para manter o pino do Arduino em estado alto (1) na ausencia de sinal do sensor. Sem o resistor, podem ocorrer falsos acionamentos.
Abraço!
Adilson
Bom dia, como faço para colocar um botão de reset usando um modulo rfid?
Oi Sergio,
Não entendi a sua pergunta. É neste mesmo post?
Abraço!
Adilson
então estou trabalhando um projeto de um contador, até a parte que vc mostrou ai no seu tutorial eu fui bem, mais eu queria limitar o contador em 250. por exemplo ele vai contando e quando chegar em 250 ele para a contagem e aparece um frase pedindo para resetar, e esse reset eu queria fazer através do modulo RFID passando a tag ou cartão. entende?
exato já montei o circuito esta funcionando, mais precisava colocar um reset, no caso comprei uma plaquinha rfid, queria usar ele como se fosse um botão de pulso para resetar a contagem, e queria travar a contagem em 250
alguem pode me ajudar estou fazendo uma lixeira seletiva usando dois sensor indutivo e capacitivo com dois servos,,,assim quando coloco uma lata o sensor atua e o servo abre a porta da direita e quando coloco um plastico o sensor atua e o servo abre a porta da esquerda,,,,por favor ajuda a galera fiz um programa mais esta atuando os dois sensores juntos….
#include
Servo servo1;
Servo servo2;
int leitura;
void setup (void) {
Serial.begin (9600);
servo1.attach (9); // servo no pino digital 9
servo1.write (0); // ponto inicial para servo
servo2.attach (10); // servo no pino digital 10
servo2.write (0); // ponto inicial para servo
}
void loop (void) {
leitura = analogRead (A0); // anexado ao analógico 0
Serial.print ("Valor do sensor1 =");
Serial.println (leitura);
int valor1 = map (leitura, 0, 1023, 0, 255);
servo1.write (valor1);
delay (50);
leitura = analogRead (A1); // anexado ao analógico 0
Serial.print ("Valor do sensor2 =");
Serial.println (leitura);
int valor2 = map (leitura, 0, 1023, 0, 255);
servo2.write (valor2);
delay (50);
}
Boa tarde! Esse sensor consegue detectar moedas por exemplo? Eu queria fazer aqueles cat coin bank (cofrinho em que você coloca a moeda e abre a caixa e o gato empurra a moeda pra dentro do cofre).
Boa tarde!
Funciona sim, testei com algumas moedas que tenho aqui (5 e 10 centavos, e de 1 Real). 🙂
Abraço!
Adilson
Bom dia, qual a frequência máxima de leitura deste sensor? Estou tendo problemas com leituras acima de 30hz. Isso é normal deste sensor?
Boa noite,
Vou ficar te devendo essa informação por enquanto. Não achei o datasheet do sensor.
Abraço!
Adilson
hola me podrías decir donde hiciste tu simulación para el diagrama
Hola hago en Fritzing. Usted puede descargar el programa en fritzing.org.
Saludos!
Adilson
oque posso utilizar para alimentar o sensor ? fonte de 12v da ? pff preciso dessa informação
Oi Victor,
Este sensor funciona com alimentação de 6 a 36V. Testei com uma fonte de 12V, e funcionou bem.
Abraço!
Adilson
Boa noite,
Gostaria que me ajudasse em uma dúvida.
É possível fazer um contador com dois sensores indutivos para adicionar e subtrair automaticamente sem eu ter que colocar uma chave seletora para definir um sensor ou outro?
Deixa eu explicar melhor: Tenho uma rondana (patesca) com dois sensores indutivos, um contador de cabo COEL Mod: HWKT, quando eu rodo para um lado ela soma, mas para eu subtrair preciso mudar a chave seletora ligando o outro sensor.
Será que existe a possibilidade de colocar esses sensores no Arduino e fazer essa contagem de forma automática.
Att,
Bom dia,
Existe sim. Se precisar de desenvolvimento de uma solução nesse sentido, entre em contato utilizando o formulário de contato no lado direito aqui do blog, aí conversamos.
Abraço!
Adilson
boa tarde!!
estou com projeto e estou com dificuldades e quem puder me ajudar agradeço!!
preciso que um motor de passo gire 90ºC quando o sensor de proximidade contar 2 peças e o motor deve retornar a sua posiçao inicial quando nao houver peças na frente do sensor.
ja tentei de tudo e nao consegui, desde ja agradeço quem puder me ajudar e peço por favor!!
boa tarde!!
estou com projeto e estou com dificuldades e quem puder me ajudar agradeço!!
preciso que um motor de passo gire 90ºC quando o sensor de proximidade contar 2 peças e o motor deve retornar a sua posiçao inicial quando nao houver peças na frente do sensor.
ja tentei de tudo e nao consegui, desde ja agradeço quem puder me ajudar e peço por favor!!
boa tarde!
gostaria de saber se e possível que o sensor indutivo enviar corrente quando acionado e quando não acionado também?
Ex: estou com um sensor ativado por um braco metálico, porem quando eu perco o contato com o braco eu precisaria que ele enviasse um pulso pra desativar também. pois ele so envia quando esta acionado, e possível?
Bom dia,
Você pode programar isso no próprio Arduino ou outro microcontrolador onde o sensor está conectado. Teria apenas que configurar qual seria a condição para que o pulso de desativar fosse acionado (tempo, por exemplo?)
Abraço!
Adilson
[…] Confira também o outro post sobre contador com sensor indutivo e Arduino, onde explico os conceitos básico desse […]
Boa Tarde, fiz tudo certinho como demonstrado no site. Porém meu sensor fica contando sozinho, oque pode ser e como arrumar isso ?
Oi Victor?
Vc usou o resistor que está no circuito? Sem ele o valor da porta pode ficar “flutuando” e apresentar falsos positivos (no seu caso, falsas contagens).
Abraço!
Adilson
Olá, somos alunas do colégio Tiradentes de Curvelo, estamos fazendo um trabalho de matemática em que precisamos de um contador de movimentos para contar quantas vezes as hélices do nosso ventilador girou do início do ano até o final, quemos saber quantas casas numéricas cabem no contador da pesquisa. Agrademos a atenção!
Oi Lara,
Respondi pra vcs via email, mas pelo que eu vi vocês podem usar um LCD 16×2 sem problemas.
Abraço!
Adilson