Sensor de vibração com Arduino – Manutenção Preditiva

Fala galera como vocês estão? Espero que esteja tudo bem! Hoje vamos montar um projeto utilizando o sensor de vibração com Arduino! Será mais uma ideia de projeto para você praticar e quem sabe montar uma apresentação para a feira de ciências de sua região. Neste post focaremos no tema Manutenção Preditiva, você sabe o que é manutenção preditiva? Se sabe ou tem ideia do que seja, para aqui a leitura, desce até o fim deste artigo e comenta lá o que você entende por manutenção preditiva, depois volta aqui para continuarmos estudando junto.

Projeto para ser aplicado no mancal de motores
Crédito da Imagem: PIRO4D – PixaBay – Licenças Creative Commons

A manutenção preditiva é o tipo de manutenção mais inteligente na engenharia, pois além dela tem ainda a Manutenção Corretiva, a que “ajeita” o equipamento apenas quando acontece a falha, ou seja, quando quebra; e a
Manutenção Preventiva que baseado em dados históricos programa-se uma parada da máquina para realizar uma manutenção. Então, analisando esses dois tipos temos dois prejuízos, parar a máquina somente quando esta quebra,
pegando o técnico de surpresa e prejudicando a produção ou parar a máquina sem necessidade baseado em “Eu acho que tá na hora de parar para olhar.”.

Já a preditiva, um sensor é instalado no equipamento que desejamos monitorar, ele envia constantemente dados do funcionamento da máquina para a placa Arduino, este com uma boa lógica de programação aprende um padrão
de funcionamento em estado ideal do equipamento e se caso houver um desvio deste padrão, o Arduino envia um alerta que poderia ser um aviso luminoso através de LED’s, um alerta sonoro com Buzzer’s ou até mesmo uma
implementação de Internet das Coisas com envio via Wi-Fi, rede ou por e-mail do alerta da máquina.

Entenda que neste momento a máquina não quebrou, ela apenas apresentou indícios de que está com alguma desconformidade, ou seja, agora você teria tempo para analisar e definir uma parada programada do equipamento
para realizar uma manutenção que certamente será direta e eficaz.

Entendido o contexto e a ideia de nosso projeto deste artigo, vamos a programação e desenvolver uma aplicação fundamental onde a partir dela e até somado com outros artigos publicados aqui no Arduino Ômega poderá sair um
trabalho fantástico e inovador, só depende de você.

1 – Material utilizado

A lista de componentes é simples e barata, você encontra todos na loja Arduino Ômega e para facilitar vou deixar linkado todos, basta clicar e adicionar ao carrinho, são eles:

Nós temos o Kit Arduino ideal para o seu projeto! Clique aqui e confira!

2 – Montando o circuito

Agora vamos por a mão na massa, vamos para a montagem do circuito eletrônico, observe a imagem abaixo:

Montagem do circuito – Crédito da imagem: Autor

Eu optei por usar 04 baterias 18650 com seus respectivos suportes ligadas em série para alimentar o Arduino pelo pino P4, porém a alimentação você pode mudar, nada vai influenciar no projeto se você usar um cooler de 5 a 6v para fazer os testes, lembre-se que nosso projeto é o Arduino com o sensor de vibração, o motor é o elemento que vamos analisar, logo ele não deverá estar ligado ao Arduino, mas neste caso para testes do sensor e escrita deste artigo liguei o fio preto do cooler no GND e o Vermelho no Vin do Arduino.

O Arduino pode ser o UNO ou qualquer outro, também não fará diferença, porém se você optar em usar um ESP, aí sim, precisaria de alguns ajustes na programação e na ligação do hardware.

Com o circuito montado vamos para a programação e entender o funcionamento deste projeto.

3 – Mergulhando no código

Abaixo segue o código fonte completo:

#define pin_sensor 2
unsigned long current_time;
int pulses = 0;

void setup() {
  Serial.begin(9600);
  pinMode(pin_sensor, INPUT);
  current_time = millis();
}

void loop() {
  bool vibration_sensor = digitalRead(pin_sensor);
  int frequency_time = millis() - current_time;
  
  if (vibration_sensor) pulses++;
  
  if (frequency_time > 1000){
    float vibration_period = 1/pulses;
    float vibration_frequency = 1/vibration_period;
    
    if (vibration_frequency>100) {
      Serial.println("Engine with problem!");
      //Aqui voce pode ligar um led vermelho ou 
      //enviar uma mensagem via bluetooth
    }
    else Serial.println("Engine Ok!");
    
    pulses = 0;
    current_time = millis();
  }  
  //Serial.println(vibration_sensor);
}

Na primeira parte temos as declarações de variáveis:

#define pin_sensor 2
unsigned long current_time;
int pulses = 0;

No início do código linha 1, definimos que a constante pin_sensor será atribuída ao pino 2 do Arduino, na linha 2 criamos a variável current_time que será uma auxiliar na contagem do tempo usando a função millis( ) para evitar usar a função delay( ) que para o código, sabemos que isso não é bom pois ai perderíamos amostra do sensor de o programa ficar parado em uma linha do código. Já na linha 3 é declarada e inicializada a variável pulses que tem a função de contar quantas vezes foi detectado a vibração, essa contagem será um dado essencial para o cálculo da frequência de vibração e com isso saber se o equipamento está vibrando fora do padrão.

Em seguida temos o função setup:

void setup() {
  Serial.begin(9600);
  pinMode(pin_sensor, INPUT);
  current_time = millis();
}

No void setup( ) que vai da linha 5 até a linha 9 temos as configurações iniciais da placa Arduino para esta aplicação, sendo na linha 6 inicializado a comunicação serial com uma taxa de transmissão de 9600 bauds rate, na linha 7 configurado o modo de entrada para a porta 2 do Arduino ao qual está instalado o sensor de vibração e na linha 8 capturado o valor atual do millis( ) e atribuído este para a variável current_time.

Seguindo adiante temos o início da função/laço loop:

void loop() {
  bool vibration_sensor = digitalRead(pin_sensor);
  int frequency_time = millis() - current_time;
  
  if (vibration_sensor) pulses++;

Agora passamos para o laço principal do código, o void loop( ) que vai da linha 11 até a linha 32 e dividimos em duas partes, nessa primeira parte temos na linha 12 acontece a leitura do sensor de vibração, como ele é um sensor digital, sua saída é zero e um, por isso atribui o tipo de variável bool a vibration_sensor, já na linha seguinte, linha 13, ocorre a subtração do tempo de máquina atual do Arduino (millis) pela variável current_time, essa diferença é o tempo que você deseja definir para fazer a leitura do sensor, quando esse tempo estourar, o programa irá capturar novamente o millis, salvar na variável current_time e recomeçar a contagem do tempo.

Na linha 15, cada vez que o sensor detectar uma vibração ele irá acrescentar mais um na variável pulses, com isso poderei saber quantos pulsos foram dados a cada segundo, com uma fórmula básica, que veremos a seguir, descobriremos a frequência de vibração do equipamento.

Seguindo com o restante da função/laço loop:

  if (frequency_time > 1000){
    float vibration_period = 1/pulses;
    float vibration_frequency = 1/vibration_period;
    
    if (vibration_frequency>100) {
      Serial.println("Engine with problem!");
      //Aqui voce pode ligar um led vermelho ou 
      //enviar uma mensagem via bluetooth
    }
    else Serial.println("Engine Ok!");
    
    pulses = 0;
    current_time = millis();
  }  
  //Serial.println(vibration_sensor);
}

Aqui no nosso último passo é que está o segredo, na linha 17 se a variável frequency_time tiver um valor maior que 1000, ou seja 1 segundo, o programa vai entrar na condicional if( ) e na linha 18 dividir o número 1 pela quantidade de pulsos lidos pelo sensor, este resultado será a perído de cada pulso do equipamento que será atribuído a variável vibration_period. Agora, na linha 19, divide o número 1 pelo período de cada pulso e com isso iremos obter a frequência de vibração do equipamento sendo atribuído a variável vibration_frequency.


Exemplo de uma análise de vibração
Crédito da Imagem: GNU Free Documentation License

Agora ficou fácil, se a frequência de vibração da máquina for maior que 100, linha 21, o programa vai alertar que o motor está com problemas, linha 22.

Esse valor deve ser ajustado de acordo com a frequência normal de operação, no meu caso, o cooler funcionou bem gerando um valor entre 70 e 90, também depende do ajuste do trimpot, esse ajuste é que vai determinar a sensibilidade do sensor.


Ajuste da sensibilidade do Sensor
Crédito da Imagem: Edição Autor
Crédito Chave Philips: Clker – PixaBay – Licenças Creative Commons

Se não, linha 26, a mensagem de Motor Ok ficará sendo impressa a cada 1 segundo definido na linha 21.

Por último zera a contagem dos pulsos, linha 28 e captura novamente o tempo atual do Arduino através da função millis( ).

Nós temos um outro projeto aqui no blog com o sensor de vibração, que é o Sistema de Alarme Codificado!

4 – Testes

A imagem abaixo mostra o resultado e a forma que devemos fixar o sensor, porém dependendo da aplicação, você poderá encontrar outra forma de fixação que o resultado seja melhor, tudo depende de testes e ajustes.


Testes do Sensor de Vibração
Crédito da Imagem: Autor

5 – Conclusão

É isso, terminamos mais uma experiência com Arduino, porém isso não é uma solução comercial, muito tem que ser aprimorado e estudado, principalmente quando se trata de indústria, o objetivo aqui é apresentar o funcionamento do sensor de vibração, associar essa prática ao estudo da sua graduação, quem sabe, e abrir sua mente para ideias de projetos que resolvam problemas do dia a dia.

Aprimore esse projeto, faça testes e nos envie no meu Instagram @profsandromesquita e do Arduino Ômega @arduinoomega, teremos o prazer em repostar.

Qualquer dúvida estou a disposição, só comentar aqui. Até próximo artigo.

Sobre Sandro Mesquita 20 artigos
Prof. Sandro Mesquita, Msc. Eng de Software, CREA - 44680 .

2 Comentários

  1. Oi Sandro, estou tentando adaptar esse seu projeto a um ESP8266 junto com um sensor MPU6050, mas estou com muita dificuldade. Também estou tentando coletar os dados enviados pelo sensor via Wi-Fi e criar gráficos tipo cartesiano de vibração e temperatura. Se você puder me ajudar…

Deixe uma resposta

O seu endereço de email não será publicado.


*