Tag: Mpu6050

  • Manutenção Preditiva com TinyML: Quando o Motor Avisa Antes de Quebrar

    Manutenção Preditiva com TinyML: Quando o Motor Avisa Antes de Quebrar

    Todo motor elétrico conta uma história antes de quebrar. Um rolamento começa a vibrar numa frequência específica. Uma correia desalinhada produz harmônicos diferentes. Um desbalanceamento crescente aparece como um pico espectral que aumenta dia após dia. O problema é que nós, humanos, só percebemos quando o barulho fica alto demais — aí já é tarde, a peça já foi pro sacrifício. E se um microcontrolador de R$ 30 pudesse ouvir essa história e te avisar semanas antes da falha?

    Isso é manutenção preditiva. E graças ao TinyML, você não precisa de um PhD em processamento de sinais para implementá-la.

    TinyML: IA Que Cabe no Seu Bolso

    TinyML (Tiny Machine Learning) é a interseção entre machine learning e sistemas embarcados: redes neurais otimizadas para rodar em microcontroladores com kilobytes de RAM e megahertz de clock. O termo foi cunhado por Pete Warden (Google) e Matthew Stewart (Harvard) por volta de 2019, mas o campo explodiu com o lançamento do TensorFlow Lite for Microcontrollers em 2020 e, mais importante para makers, do Edge Impulse.

    O Edge Impulse é uma plataforma que abstrai todo o pipeline de ML embarcado: coleta de dados do sensor → pré-processamento digital de sinais (DSP) → treinamento da rede neural → exportação do modelo como biblioteca C++ → deploy no microcontrolador. Você não escreve uma linha de rede neural. Conecta o sensor, coleta amostras, clica em “train” e exporta o modelo compilado.

    Como Funciona a Detecção de Anomalias por Vibração

    Um motor saudável vibra de forma previsível. Sua assinatura espectral (distribuição de energia por frequência) é estável. Quando algo começa a dar errado — um rolamento desgastado, um eixo desalinhado, uma pá quebrada — essa assinatura muda.

    A abordagem clássica seria FFT (Fast Fourier Transform) + thresholds manuais. Funciona para casos simples, mas falha quando as anomalias são sutis ou quando múltiplos modos de falha coexistem. A abordagem TinyML é: treinar uma rede neural com exemplos de vibração “normal” e “anormal”, e deixar o modelo aprender sozinho quais padrões espectrais indicam problema.

    Mão na Massa: Detector de Vibração Anômala

    Materiais

    • ESP32 DevKit (~R$ 30-50)
    • MPU6050 (acelerômetro + giroscópio) (~R$ 15-25)
    • Motor DC ou ventilador para simular a máquina monitorada
    • Fita dupla-face ou suporte para fixar o MPU6050 no motor

    Passo 1: Criar Projeto no Edge Impulse

    1. Crie uma conta gratuita em edgeimpulse.com.
    2. Crie um novo projeto → “Manutenção Preditiva Motor”.
    3. Conecte seu dispositivo: instale a CLI do Edge Impulse (npm install -g edge-impulse-cli) e rode edge-impulse-data-forwarder no computador conectado ao ESP32 via serial.
    4. O Data Forwarder transmite os dados do sensor via serial → WebSocket → Edge Impulse cloud. A coleta é feita no navegador, mas o sensor está no ESP32.

    Passo 2: Firmware do ESP32 para Coleta de Dados

    Carregue este código no ESP32 usando Arduino IDE:

    #include <Wire.h>
    #include <Adafruit_MPU6050.h>
    #include <Adafruit_Sensor.h>
    
    Adafruit_MPU6050 mpu;
    
    void setup() {
      Serial.begin(115200);
      while (!Serial);
      
      if (!mpu.begin()) {
        Serial.println("Erro: MPU6050 nao encontrado");
        while (1) delay(10);
      }
      
      mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
      mpu.setFilterBandwidth(MPU6050_BAND_260_HZ);
      mpu.setGyroRange(MPU6050_RANGE_500_DEG);
      
      Serial.println("AccelX,AccelY,AccelZ,GyroX,GyroY,GyroZ");
    }
    
    void loop() {
      sensors_event_t a, g, temp;
      mpu.getEvent(&a, &g, &temp);
      
      // Imprime em CSV para o Edge Impulse Data Forwarder
      Serial.print(a.acceleration.x); Serial.print(",");
      Serial.print(a.acceleration.y); Serial.print(",");
      Serial.print(a.acceleration.z); Serial.print(",");
      Serial.print(g.gyro.x); Serial.print(",");
      Serial.print(g.gyro.y); Serial.print(",");
      Serial.println(g.gyro.z);
      
      delay(10); // ~100 Hz de amostragem
    }
    

    Passo 3: Coletar Dados de Treinamento

    No Edge Impulse, crie duas classes de dados:

    • Normal: grave 5 minutos de vibração com o motor funcionando normalmente.
    • Anomalia: cole um peso pequeno (moeda ou parafuso) na pá do ventilador para criar desbalanceamento. Grave mais 5 minutos.

    Cada amostra deve ter ~2 segundos de duração (200 amostras a 100 Hz). O Edge Impulse vai gerar automaticamente dezenas de amostras a partir das gravações longas usando janelamento.

    Passo 4: Criar o Pipeline de Processamento

    O bloco de processamento recomendado para vibração é o Spectral Analysis: ele calcula a FFT dos sinais de aceleração, extraindo as magnitudes de frequência como features. Isso transforma 200 amostras temporais em ~33 bins de frequência — uma representação muito mais informativa para a rede neural.

    Configure: eixos = AccelX, AccelY, AccelZ. FFT length = 64. Com essa configuração, cada janela de 2 segundos produz 33 features espectrais × 3 eixos = 99 features.

    Passo 5: Treinar a Rede Neural

    No Edge Impulse, vá para “Impulse Design” → “Classifier” e use a arquitetura padrão (Dense neural network com 2 camadas: 20 neurons + 10 neurons). Clique em “Start Training”. Em 30 segundos, o modelo treina na nuvem e você vê a matriz de confusão.

    Resultado típico para este experimento: >95% de acurácia. O modelo aprende que “Normal” tem baixa amplitude em todas as frequências, enquanto “Anomalia” tem picos espectrais característicos do desbalanceamento (tipicamente na frequência de rotação do motor).

    Passo 6: Deploy no ESP32

    Exporte o modelo como “Arduino library”. Baixe o ZIP, instale na Arduino IDE (Sketch → Include Library → Add .ZIP Library). Modifique o código do ESP32 para executar inferência contínua:

    #include <seu_projeto_inferencing.h>  // Biblioteca gerada pelo Edge Impulse
    
    void loop() {
      // Coleta 200 amostras do MPU6050 (~2s a 100 Hz)
      float buffer[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = {0};
      for (int i = 0; i < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; i += 3) {
        sensors_event_t a, g, temp;
        mpu.getEvent(&a, &g, &temp);
        buffer[i] = a.acceleration.x;
        buffer[i+1] = a.acceleration.y;
        buffer[i+2] = a.acceleration.z;
        delay(10);
      }
    
      // Converte sinal bruto para features (igual ao bloco de processamento)
      signal_t signal;
      numpy::signal_from_buffer(buffer, EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &signal);
      
      // Executa a inferência
      ei_impulse_result_t result;
      EI_IMPULSE_ERROR err = run_classifier(&signal, &result, false);
      
      if (err == EI_IMPULSE_OK) {
        float normal_score = result.classification[0].value;
        float anomaly_score = result.classification[1].value;
        
        Serial.print("Normal: "); Serial.print(normal_score);
        Serial.print(" | Anomalia: "); Serial.println(anomaly_score);
        
        if (anomaly_score > 0.8) {
          Serial.println("⚠️  ALERTA: Vibração anômala detectada!");
          // Aqui você pode acionar relé, enviar MQTT, notificar Telegram
        }
      }
    }
    

    Seu ESP32 agora é um detector de falhas em tempo real. A inferência roda no microcontrolador — zero latência de rede, zero dependência de nuvem. Apenas o sensor, o modelo compilado e o problema sendo resolvido.

    Onde Isso Funciona de Verdade

    Manutenção preditiva com TinyML não é só demonstração de laboratório. Empresas já usam isso em escala:

    • Bombas d’água: uma fazenda nos EUA monitora 200 bombas de irrigação com ESP32 + acelerômetros, prevendo falhas com 2 semanas de antecedência. Economia: US$ 120 mil/ano em paradas não programadas.
    • Ventiladores industriais: fábrica na Índia usa TinyML para detectar desbalanceamento em ventiladores de teto de grande porte, reduzindo consumo de energia e risco de acidentes.
    • Máquinas CNC: makers com impressoras 3D de grande porte monitoram a vibração dos motores de passo para detectar quando as correias estão frouxas ou os rolamentos desgastados.
    • Elevadores: sensores TinyML detectam padrões de vibração que precedem falhas em cabos e polias — com alerta enviado por MQTT ao painel de manutenção.

    Por Que Isso Importa para o Maker

    Manutenção preditiva democratizada significa que pequenas oficinas, fazendas familiares, makerspaces e startups podem competir com a indústria pesada em confiabilidade. Você não precisa de um contrato de US$ 50 mil com fornecedor de sensores industriais — precisa de um ESP32, um MPU6050 e uma conta gratuita no Edge Impulse.

    O sensor que detecta vibração anômala hoje é o mesmo hardware que amanhã monitora sua impressora 3D, depois sua máquina de lavar, depois o compressor do ar-condicionado. O modelo treinado é específico para cada máquina, mas o processo é o mesmo. E quando sua lavadora te avisa que a correia está frouxa antes de ela arrebentar num sábado à tarde, você vai entender o valor de ouvir as máquinas.

    Fontes e Referências

  • Sensores: Os Olhos, Ouvidos e Tato do Seu Projeto

    Sensores: Os Olhos, Ouvidos e Tato do Seu Projeto

    Um microcontrolador sem sensores é um cérebro numa cuba — processa, calcula, mas não sente o mundo. O que transforma uma placa de R$ 30 num termostato, num alarme de intrusão, num robô que se equilibra ou numa estação meteorológica são os sensores. Eles são a ponte entre o mundo físico — temperatura, luz, movimento, distância, aceleração — e o mundo digital dos bits. Escolher o sensor certo é mais importante que escolher o microcontrolador certo. E a maioria dos iniciantes escolhe errado.

    Este é o guia que eu gostaria de ter lido quando comecei: cinco sensores fundamentais, como funcionam, o que comprar, o que evitar e — crucial — como decidir entre opções parecidas.

    Sensores de Temperatura e Umidade: DHT22 vs. BME280 vs. DS18B20

    O DHT22 (AM2302) é o sensor mais usado em projetos maker de climatização. Mede temperatura (-40 a 80°C, ±0.5°C) e umidade (0-100%, ±2-5%). Comunicação digital por protocolo proprietário de um fio (one-wire). Custa R$ 15-25. É o “bom o suficiente” para 90% dos projetos.

    Mas o BME280 (Bosch) é superior em precisão de temperatura (±0.5°C), umidade (±3%) e ainda mede pressão atmosférica (±1 hPa). Comunicação I2C ou SPI. Custa R$ 20-40. Use quando você precisa de pressão (previsão do tempo, altímetro) ou quando a precisão importa.

    Se você precisa apenas de temperatura e em ambientes extremos (freezers, fornos, aquários), o DS18B20 (Maxim) é imbatível: -55 a 125°C, ±0.5°C, à prova d’água em encapsulamento de aço inox (versão “sonda”), comunicação one-wire Dallas genuína (confiável, endereçável — múltiplos sensores no mesmo fio).

    Medição de Distância: HC-SR04 vs. VL53L0X vs. LD2410

    O HC-SR04 é o sensor ultrassônico clássico: emite um pulso sonoro de 40 kHz e mede o tempo até o eco voltar. Alcance: 2 cm a 4 metros. Precisão: ~3 mm. Custa R$ 8-15. Funciona com qualquer microcontrolador usando dois pinos digitais (trigger + echo). Limitações: não funciona bem em superfícies macias/anguladas (absorvem/desviam o som), tem cone de detecção largo (~15°) e não mede distâncias menores que 2 cm.

    Código mínimo para Arduino:

    const int trig = 9, echo = 10;
    void setup() {
      Serial.begin(9600);
      pinMode(trig, OUTPUT); pinMode(echo, INPUT);
    }
    void loop() {
      digitalWrite(trig, LOW); delayMicroseconds(2);
      digitalWrite(trig, HIGH); delayMicroseconds(10);
      digitalWrite(trig, LOW);
      long duration = pulseIn(echo, HIGH);
      float distance = duration * 0.0343 / 2;
      Serial.print("Distancia: "); Serial.print(distance); Serial.println(" cm");
      delay(500);
    }
    

    O VL53L0X (STMicroelectronics) é um sensor Time-of-Flight a laser infravermelho (940 nm): mede o tempo que a luz leva para ir e voltar. Alcance: 3 cm a 2 metros. Precisão: ±3%. Comunicação I2C. Custa R$ 30-50. Vantagens: funciona em qualquer superfície, independente de cor ou textura; feixe estreito (~2°); baixíssimo consumo. É o sensor que robôs aspiradores usam para mapear ambientes.

    O LD2410 (Hi-Link) é um sensor de presença por radar de ondas milimétricas (mmWave, 24 GHz). Diferente de um PIR (infravermelho passivo) que só detecta movimento, o LD2410 detecta presença — uma pessoa parada, respirando, a 6 metros de distância, através de parede fina de gesso. Alcance: 0.75 a 6 metros configurável. Comunicação UART (serial). Custa R$ 40-60. É o santo graal da automação residencial: luz que acende quando você entra e não apaga enquanto você está parado lendo.

    Acelerômetro e Giroscópio: MPU6050

    O MPU6050 (InvenSense/TDK) é um IMU (Inertial Measurement Unit) de 6 eixos: acelerômetro de 3 eixos (±2/4/8/16 g) + giroscópio de 3 eixos (±250/500/1000/2000 °/s). Comunicação I2C. Custa R$ 15-25. É o sensor mais versátil da eletrônica maker: drones (estabilização PID), robôs que se equilibram (pêndulo invertido), pedômetros, controle gestual, detecção de queda, orientação 3D.

    Código básico com Arduino e biblioteca Adafruit MPU6050:

    #include <Adafruit_MPU6050.h>
    #include <Adafruit_Sensor.h>
    
    Adafruit_MPU6050 mpu;
    
    void setup() {
      Serial.begin(115200);
      if (!mpu.begin()) {
        Serial.println("MPU6050 nao encontrado!");
        while (1);
      }
      mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
      mpu.setGyroRange(MPU6050_RANGE_500_DEG);
      mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
    }
    
    void loop() {
      sensors_event_t a, g, temp;
      mpu.getEvent(&a, &g, &temp);
      Serial.print("Accel X:"); Serial.print(a.acceleration.x);
      Serial.print(" Y:"); Serial.print(a.acceleration.y);
      Serial.print(" Z:"); Serial.print(a.acceleration.z);
      Serial.print(" | Gyro X:"); Serial.println(g.gyro.x);
      delay(100);
    }
    

    Limitação do MPU6050: drift. O giroscópio acumula erro ao longo do tempo — em 10 segundos, a orientação calculada já divergiu. A solução é fusão de sensores: use o filtro complementar (simples) ou filtro de Kalman (preciso) para combinar acelerômetro (estável no longo prazo) com giroscópio (preciso no curto prazo). A biblioteca MadgwickAHRS implementa isso em poucas linhas.

    Tabela Comparativa Geral

    Sensor Mede Protocolo Preço (R$) Dificuldade Ideal Para
    DHT22 Temp + Umid One-wire 15-25 ★☆☆☆☆ Clima interno, termostato
    BME280 Temp + Umid + Pressão I2C/SPI 20-40 ★★☆☆☆ Estação meteorológica
    HC-SR04 Distância (US) GPIO 8-15 ★☆☆☆☆ Robô seguidor, nível de tanque
    VL53L0X Distância (ToF) I2C 30-50 ★★☆☆☆ Robô mapeador, drone altitude
    LD2410 Presença (mmWave) UART 40-60 ★★★☆☆ Automação, segurança
    MPU6050 Acel + Giro I2C 15-25 ★★★☆☆ Drones, robótica, gestos

    Como Escolher o Sensor Certo

    A regra de ouro: defina o problema antes de escolher a ferramenta. Não compre sensor por “parece legal” — compre porque seu projeto precisa medir algo específico. Pergunte-se:

    1. O que eu preciso medir? Temperatura? Presença? Distância?
    2. Qual a precisão necessária? ±5°C é aceitável ou preciso de ±0.5°C?
    3. Qual o ambiente? Outdoor (chuva, sol)? Alta temperatura? Vibração?
    4. Qual o protocolo de comunicação? Seu microcontrolador tem I2C livre? GPIOs suficientes?
    5. Qual o consumo de energia? Vai funcionar a bateria? Por quanto tempo?

    Respondidas essas perguntas, a tabela acima vai te levar ao sensor certo. E se errar, não se preocupe — errar sensor é barato (todos custam menos de R$ 60) e você ganha experiência que tutorial nenhum substitui.

    Fontes e Referências