Automação Residencial

Contador de objetos com Arduino, sensor indutivo e display LCD

Saulo Aislan 9 de janeiro de 2025

Introdução

Na indústria moderna, a automação de processos é fundamental para aumentar a eficiência, precisão e segurança das operações. Uma das aplicações mais comuns da automação é a contagem de objetos, seja em linhas de produção, controle de estoques ou monitoramento de fluxo de materiais. A contagem de objetos pode ser feita utilizando vários tipos de sensores, mas o mais comum são os sensores indutivos.

Sensores indutivos são dispositivos capazes de detectar a presença de objetos metálicos sem a necessidade de contato físico, utilizando um campo eletromagnético. Quando um objeto metálico entra no campo de detecção do sensor, ocorre uma mudança na resposta do campo, permitindo que o sensor identifique o objeto que passa por ele.

Nesse artigo iremos criar um contador de objetos, utilizaremos um sensor indutivo para detectar a presença de objetos metálicos, um ESP32 para processar os dados e um display LCD para exibir o número de objetos contados em tempo real.


O que é um Sensor Indutivo?

Um sensor indutivo é um dispositivo que detecta a presença de objetos metálicos sem contato físico, utilizando o princípio da indução eletromagnética. Ele gera um campo magnético ao redor de sua área de detecção e, quando um objeto metálico entra nesse campo, o sensor registra a mudança na corrente induzida, identificando a presença do objeto. Esses sensores são altamente precisos, duráveis e resistentes a condições adversas, como poeira, umidade e vibrações, tornando-os ideais para aplicações industriais. Para mais detalhes acesse esse artigo.

Sensor indutivo

Fonte: https://eletricaesuasduvidas.blogspot.com/2013/10/sensor-indutivo.html

 


Sensores PNP ou NPN

Diferença entre Sensores PNP e NPN

Entre os sensores digitais, ou seja, que possuem apenas dois estados (ligado ou desligado), os tipos de saída mais comuns são PNP, NPN.

  • Sensores PNP (Positivo-Negativo-Positivo):
    • Os sensores PNP emitem um sinal de tensão positivo em sua(s) saída(s).
    • Quando o sensor detecta um objeto, ele fornece uma saída positiva (geralmente 3.3v ou 5v).
  • Sensor NPN (Negativo-Positivo-Negativo):
    • Os sensores NPN emitem um sinal de tensão negativo em sua(s) saída(s).
    • Quando o sensor detecta um objeto, ele fornece uma saída negativa (tensão baixa, geralmente 0V).

Ambos os sensores são igualmente úteis e não há grandes diferenças em relação ao seu funcionamento.


Esquemático

Um sensor indutivo PNP gera uma saída positiva (geralmente 3.3v ou 5v) ao detectar um objeto metálico. Como o ESP32 opera com níveis lógicos de 3.3V, o sinal do sensor PNP pode ser conectado diretamente, mas é importante verificar a compatibilidade de tensão ou usar um conversor de nível, se necessário.

Esquemático

Passo a Passo da Montagem:

  1. Conexões do sensor indutivo PNP:
    • Conecte o fio marrom do sensor ao positivo do Módulo Regulador.
    • Conecte o fio azul ao GND (terra) do Módulo Regulador.
    • O fio preto é o fio de sinal que será conectado ao pino 12 ESP32.
  2. Conexão do módulo I2C:
    • Conecte o VCC do módulo I2C do LCD ao 3.3V ou VIN do ESP32.
    • Conecte o GND ao GND do ESP32.
    • Conecte o SDA ao pino 21 do ESP32.
    • Conecte o SCL ao pino 22 do ESP32.
  3. Resistor de Pull-down:
    • Conecte um resistor de 1kΩ entre o pino de sinal do sensor e o GND para garantir leituras estáveis.
  4. Alimentação do sensor:
    • O Módulo Regulador tem que alimentar o sensor com no mínimo 6V e no máximo 36V por isso é necessário utilizar uma fonte externa.

Código

Instalação de biblioteca

Para utilizar o display LCD 16×2 com interface I2C é necessário usar a biblioteca Liquid_Crystal_I2C, se não tiver instalada na sua IDE Arduino você pode instalar seguindo os seguintes passo:

Para instalar a biblioteca, abra a IDE, vá até o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. No gerenciador de bibliotecas, busque por liquidcrystal e instale a biblioteca LiquidCrystal I2C desenvolvida por Arduino, conforme mostrado na imagem abaixo:

biblioteca LiquidCrystal

/**
 * @file Contator_de_obejto.ino
 * @author Saulo Aislan (aislansaulo@gmail.com)
 * @brief Firmware para o contador de objeto utilizando sensor indutivo.
 * @version 0.1
 * @date 2024-09-21
 *
 * @copyright Copyright (c) 2024
 *
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int sensorPin = 12; // Pino conectado ao sensor indutivo
volatile int count = 0;   // Variável para armazenar a contagem de objetos
int lastState = LOW;     // Estado anterior do sensor

// Inicialização do LCD I2C (endereço 0x27 para displays comuns)
LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(115200);

  // Iniciar o LCD
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0); // Primeira linha do LCD
  lcd.print("Contador de");
  lcd.setCursor(0, 1); // Segunda linha do LCD
  lcd.print("objetos");
  delay(2000);
  lcd.clear(); // Limpa o dislay LCD
  
  lcd.setCursor(0, 0);  // Primeira linha do LCD
  lcd.print("Aguardando");
  lcd.setCursor(0, 1);  // Segunda linha do LCD
  lcd.print("Objetos!");  
}

void loop() {
  int currentState = digitalRead(sensorPin); // Ler e atribui o valor do sensor no pino sensorPin
  
  // Detecta a mudança de estado no sensor
  if (currentState == HIGH && lastState == LOW) {
    count++; // Incrementa a contagem
    Serial.println("Objeto detectado! Contagem: " + String(count));

    // Atualiza o display LCD
    lcd.setCursor(0, 0);  // Primeira linha do LCD
    lcd.print("Total de objetos");
    lcd.setCursor(0, 1);  // Segunda linha do LCD
    lcd.print("contados: ");
    lcd.print(count);
  }

  lastState = currentState; // Atualiza o último estado
  delay(50); // Delay para evitar leituras múltiplas
}

 

Note que na linha 20 do código é usado o endereço I2C 0x3F. Se o seu display LCD tiver um endereço diferente, utilize o programa I2CScanner (demonstrado neste artigo> https://blog.eletrogate.com/guia-completo-do-display-lcd-arduino/ na seção I2C Scanner) para encontrar o endereço correto.

Funcionamento do Código

  1. Configuração Inicial: O display LCD é configurado no início, e uma mensagem “Contador de objetos” é exibida no display, em seguida irá aparecer a mensagem “Aguardando Objetos!”, com isso o ESP32 ficará aguardando algum objeto ser detectado.
  2. Contagem de Objetos: Quando o sensor detecta a presença de um objeto metálico, verifica se houve mudança de estado no sensor se sim a contagem é incrementada e o valor é exibido no display LCD.

 


Resultado e Demonstração

O resultado do projeto você pode conferir no vídeo abaixo. No vídeo é mostrado o circuito do contador de objeto. No display podemos observar o contador aumentando no momento em que passamos um objeto de metal na frente do sensor. O contador atualiza instantaneamente ao detectar o objeto metálico, a distância de detecção no nosso projeto é curta devido as características do sensor, essa distancia pode ser maior dependendo do sensor.


Conclusão

Neste projeto, combinamos a simplicidade de um sensor indutivo, o poder do ESP32 e a praticidade de um display LCD para criar um contador de objetos robusto e eficiente. A adição do display LCD permite que o usuário acompanhe em tempo real a contagem de objetos.

Este projeto pode ser facilmente expandido para incluir armazenamento de dados, conexão com a internet via Wi-Fi, integração com plataformas de IoT ou controle de outros dispositivos a partir dos dados coletados. Existem várias outras aplicações para os sensores indutivos, qual projeto vem na sua mente? Conte-nos na caixa de comentários.

Para mais materiais como esse, continue acompanhando as postagens semanais do blog e não deixe de visitar nossa loja. Lá você encontra todos os componentes necessários para desenvolver esse e muitos outros projetos!

Que a força esteja com você!

NÃO ENTREM EM PÂNICO!

Até mais!


Sobre o Autor


Saulo Aislan

Graduando em Tecnologia em Telemática pelo IFPB – Campus de Campina Grande – PB. Tenho experiência com os microcontroladores da família Arduino, ESP8266, ESP32, STM32 e microprocessador Raspberry Pi. Tenho projetos na áreas de IoTs voltada para a indústria 4.0, agroindústria e indústria aeroespacial civil utilizando LoRa, Bluetooth, ZigBee e Wi-Fi. Atualmente estudando e desenvolvendo em FreeRTOS para sistemas em tempo real com ESP32 e LoRaWan para Smart City e compartilhando alguns projetos no blog da Eletrogate.


Saulo Aislan

9 de janeiro de 2025

Graduando em Tecnologia em Telemática pelo IFPB – Campus de Campina Grande - PB. Tenho experiência com os microcontroladores da família Arduino, ESP8266, ESP32, STM32 e microprocessador Raspberry Pi. Tenho projetos na áreas de IoTs voltada para a indústria 4.0, agroindústria e indústria aeroespacial civil utilizando LoRa, Bluetooth, ZigBee e Wi-Fi. Atualmente estudando e desenvolvendo em FreeRTOS para sistemas em tempo real com ESP32 e LoRaWan para Smart City e compartilhando alguns projetos no blog da Eletrogate.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!