19 março 2017

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.

Contador com Sensor Indutivo e Arduino

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, para detectar não só 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.

Sensor de proximidade indutivo NPN
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 16x2 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).
Circuito Arduino Uno Sensor Indutivo e display LCD 16x2 I2C


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 com sensor indutivo


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 16x2 I2C, que utiliza a biblioteca Liquid_Crystal_I2C (download). Observe que na linha 8 estamos utilizando o endereço I2C 0x27, e que o seu display 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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//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, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

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.begin (16, 2);
  //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.

5 comentários:

  1. parabéns...vai me ajudar muito, pois faz parte de um projeto.

    ResponderExcluir
  2. Oque estaria faltando declarar?
    exit status 1
    'POSITIVE' was not declared in this scope

    ResponderExcluir
  3. 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?

    ResponderExcluir
    Respostas
    1. 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!

      Excluir