27 julho 2018

Contador remoto com sensor indutivo e módulo wireless HC-12

Para você que precisa de um contador remoto que pode ser adaptado para várias situações, apresentamos um projeto de contador remoto com sensor indutivo e módulo wireless HC-12, que usa Arduino e é muito fácil de montar. 

Contador remoto com sensor indutivo e módulo wireless HC-12 Arduino

O projeto apresentado usa apenas um sensor, mas pode ser alterado se você precisar de mais sensores, adaptado para ligar ou desligar equipamentos, emitir sinais sonoros, etc.

O projeto do contador remoto com HC-12


O projeto desse contador surgiu da necessidade de realizar a contagem de peças em uma máquina e enviar esses dados para uma "central", onde esses dados são mostrados em um display LCD 20x4.

Para essa configuração vamos usar duas placas Arduino, uma atuando como circuito emissor e outra como central de recebimento de dados, seguindo a configuração abaixo:

Circuito emissor: contador com sensor indutivo, Arduino Nano e módulo HC-12, que enviará os dados para a central

Circuito Central: vai receber os dados do contador, também usando um HC-12

Obs: Vou utilizar um Arduino Nano e um Uno, mas você pode adaptar facilmente o projeto para utilizar outros modelos de placas da linha Arduino.

O módulo wireless HC-12 é uma placa de comunicação que utiliza a interface serial para conversar com o microcontrolador, e já foi abordada no post Comunicação sem fio com módulo wireless HC-12 e Arduino, onde você vai encontrar mais detalhes sobre a parte de configuração. Lembre-se de que os módulos devem estar configurados na mesma frequência (entre 433 e 473MHz) para que a comunicação seja feita de forma correta.

O sensor indutivo NPN é um sensor que detecta a presença de peças metálicas, funciona com tensão entre 6 e 36VDC e foi mostrado no post Contador com sensor indutivo e Arduino.

Assim, vamos juntar esses dois componentes para montar o contador remoto com sensor indutivo e módulo wireless HC-12, ambos funcionando com Arduino.

Montagem e programa Circuito Emissor


O circuito emissor será o responsável por coletar as informações do sensor indutivo e enviá-las em intervalos regulares para o circuito central. O sensor indutivo (conectado na porta analógica A4) utiliza um resistor de 1K como pull-up ligado no pino 5V do Arduino Nano, e o módulo HC-12 está conectado nos pinos digitais 10 e 11 do Arduino.

Circuito emissor com sensor indutivo, Arduino Nano e HC-12

Repare que no circuito emissor vamos usar 2 fontes de alimentação: uma para o Arduino Nano (usei uma fonte de 5V/2A), e outra para o sensor indutivo (que aceita alimentação de 6 à 36V). No caso, utilizei para o sensor uma fonte de 24VDC.

Carregue o programa abaixo no Arduino Nano. Não estamos utilizando nenhuma biblioteca adicional para lidar com os componentes, já que o sensor indutivo usa a porta analógica A4 (pode ser uma porta digital, ok?) e o módulo wireless HC-12 fará a comunicação usando a biblioteca SoftwareSerial (já incluída no Arduino) através das portas digitais 10 e 11:

 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
//Programa: Contador remoto HC-12 e sensor indutivo - Emissor
//Autor: Arduino e Cia

#include <SoftwareSerial.h>

//Define os pinos para conexao serial do modulo wireless HC-12
SoftwareSerial mySerial(10, 11); // RX, TX

int contador = 0;
int pinosinal = A4;
int leitura = 0;

void setup()
{
  //Inicializa a serial por hardware
  Serial.begin(9600);
  //Inicializa a serial por software (comunicacao HC-12)
  mySerial.begin(9600);
  //Define o pino do sensor indutivo como entrada
  pinMode(pinosinal, INPUT);
}

void loop()
{
  //Verifica se o sensor indutivo foi acionado
  leitura = digitalRead(pinosinal);
  if (leitura != 0)
  {
    //Loop caso a peca pare em frente ao sensor
    while (digitalRead(pinosinal) != 0)
    {
      delay(100);
    }
    //Incrementa o contador e envia os dados pelo HC-12
    contador = contador + 1;
    mySerial.println(contador);
    Serial.println(contador);
  }
}

O programa não tem muito segredo. Ele checa o pino onde está ligado o sensor indutivo e, caso este seja acionado, incrementa o contador e envia os dados pelo HC-12.

Montagem e programa Circuito Central


O circuito central com Arduino é o responsável por receber as informações do emissor e exibi-las no display LCD. Ele nada mais é do que um Arduino Uno conectado à um display LCD I2C 20x4, que fica "escutando" a porta serial (pinos 10 e 11) onde está ligado o módulo wireless HC-12. Quando chega alguma informação do circuito emissor informando que o contador foi alterado, esta é repassada imediatamente para o display.

Circuito receptor/central Arduino Uno, HC-12 e display LCD e HC-12

No circuito acima você pode usar o Arduino conectado no computador ou ligado em uma fonte 9V/1A, por exemplo.

O programa usa a biblioteca LiquidCrystal_I2C, que você pode instalar a partir da IDE do Arduino, no menu Sketch -> Incluir Bibloteca -> Gerenciar Bibliotecas:

Instalação biblioteca LiquidCrystal_I2C IDE Arduino

Procure por LiquidCrystal_I2C e clique em instalar na biblioteca destacada acima. Depois disso, carregue o seguinte programa:

 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//Programa: Contador remoto HC-12 e sensor indutivo - Receptor/Central
//Autor: Arduino e Cia

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

//Define os pinos para conexao serial do modulo wireless HC-12
SoftwareSerial mySerial(10, 11); // RX, TX

//Inicializa o display no endereco 0x3F
//e define o numero de colunas e linhas do display
LiquidCrystal_I2C lcd(0x3F, 20, 4);

//Armazena os dados que chegam pela serial
String inputString = "";
//Variavel de string completa
boolean stringComplete = false;

//Dados do contador
int contador = 0;
int contador_anterior = 0;

void setup()
{
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(1, 0);
  lcd.print("Contador de pecas");
  lcd.setCursor(0, 2);
  lcd.print("Cont. parcial: 0");
  lcd.setCursor(0, 3);
}

void loop()
{
  //Recebe os dados pelo HC-12 via porta serial
  if (mySerial.available())
  {
    while (mySerial.available())
    {
      char inChar = (char)mySerial.read();
      inputString += inChar;
      if (inChar == '\n')
      {
        //Atualiza o valor do contador
        contador = inputString.toInt();
        //Mostra o valor do contador na serial
        Serial.println(contador);
        stringComplete = true;
        inputString = "";
      }
    }
  }

  //Caso o contador seja alterado, atualiza o display
  if (contador != contador_anterior)
  {
    lcd.setCursor(15, 2);
    lcd.print("    ");
    lcd.setCursor(15, 2);
    lcd.print(contador);
    contador_anterior = contador;
  }
}

A biblioteca LiquidCrystal_I2C utilizada é um pouco diferente das outras bibliotecas que eu já usei aqui no blog. Nesta biblioteca, basta você definir o endereço I2C do módulo  (no caso, 0x3F) e o tamanho do display (20x4). Estas informações estão na linha 13 do programa.

Se tudo estiver ok, basta aproximar um objeto metálico do sensor indutivo para que o contador seja ativado.

Este programa pode ser alterado para realizar contagem de lotes ou caixas, por exemplo. Você também pode adicionar um botão de reset do contador no circuito emissor ou armazenar na memória EEPROM do Arduino o valor do contador, já que quando o mesmo é desligado o contador é zerado.

4 comentários:

  1. Boa tarde! consigo utilizar este módulo um como mestre e 2 como escravos?

    ResponderExcluir
  2. Olá! Eu consigo utilizar esse sensor para desenvolver um tacômetro? A velocidade medida seria de até 80 km/h

    ResponderExcluir
    Respostas
    1. Oi Rodrigo,

      Eu não tentei nada parecido, mas a leitura do sensor é bem rápida.

      Abraço!

      Adilson

      Excluir