artigos técnicos

Transformação digital em indústrias: da coleta ao tratamento do dado

Para que a comunicação entre um asset fabril e um sensor de coleta de dados seja eficaz e traga benefícios, é crucial ter um entendimento aprofundado do próprio equipamento. Essa comunicação permite o monitoramento em tempo real, a manutenção preditiva, a otimização e a digitalização de processos.

Os sensores são a “porta de entrada” da informação para o sistema, medindo diversas variáveis físicas ou químicas dos ativos fabris e do ambiente. Como exemplo, no setor de mineração, algumas das variáveis coletadas podem ser:

  • Temperatura (física): superaquecimento de motores em caminhões de mineração de grande porte, escavadeiras, britadores e moinhos;
  • Fluxo e vazão (física): monitoramento da vazão de água para controle de poeira, ou em processos de beneficiamento como flotação e lixiviação;
  • Qualidade do ar e gases (química): monitoramento da concentração de gases tóxicos (metano, monóxido de carbono, dióxido de carbono) e oxigênio em minas subterrâneas.
Modelo de fluxograma em uma indústria de mineração – Fonte: ResearchGate

Os dados coletados pelos sensores podem ser em formato analógico ou digital. Os sinais em formato analógico variam dentro de uma faixa, como por exemplo: tensão de 0-10V, corrente de 4-20mA. Já os sinais digitais são discretos e podem ser representados da seguinte forma: ligado/desligado, 0/1.

A forma como os dados são transmitidos do sensor para o asset fabril (ou para um sistema de controle/monitoramento) depende de vários fatores, incluindo a distância, o ambiente industrial, a velocidade de transmissão necessária e o custo. A conexão física (com fio), é a forma mais tradicional e robusta, onde os sensores são conectados a controladores, utilizando protocolos de comunicação

Já a conexão sem fio (wireless), tem sido cada vez mais utilizada pela flexibilidade, facilidade de instalação e redução de custos com cabeamento. As mais comuns incluem:

  • Wi-Fi: adaptado para uso industrial com padrões mais robustos (ex: Wi-Fi 6 para IIoT);
  • Bluetooth/BLE (Bluetooth Low Energy): para sensores pequenos e portáteis;
  • Zigbee/Z-Wave: para um grande número de sensores distribuídos;
  • LoRaWAN: para sensores em áreas amplas da fábrica;
  • 5G: para aplicações industriais críticas.

Da requisição do dado à análise: conectando a indústria

Ao contrário dos sistemas com fio, onde cada sensor precisa de um cabo físico para transmitir dados, a comunicação sem fio se baseia em ondas de rádio para enviar informações. Primeiramente, o sensor é acoplado diretamente ao asset ou posicionado para monitorar uma variável específica do seu ambiente.

Como exemplo, em um ambiente de mineração, em um sistema hidráulico utilizado em equipamentos de perfuração, escavadeiras e britadores, sensores de temperatura ajudam a evitar falhas por superaquecimento do fluido hidráulico e sensores de pressão verificam se o sistema está operando dentro dos limites seguros. Esses sensores se comunicam com um gateway ou ponto de acesso via tecnologias sem fio (Wi-Fi industrial, LoRaWAN, 5G, BLE).

A forma mais comum e robusta para coletar dados de sensores pode ser através do consumo de APIs RESTful ou de protocolos de mensagem como MQTT. Muitas plataformas de IIoT (Internet Industrial das Coisas) expõem os dados de telemetria dos equipamentos via APIs REST. O processo pode ser ilustrado da seguinte forma:

  1. Autenticação: obter credenciais (chaves de API, tokens OAuth 2.0);
  1. Endpoint: identificar o URL da API para acesso aos dados dos sensores;
  2. Requisição: fazer requisições HTTP GET (para leitura) para o endpoint;
  3. Parsing: processar a resposta, geralmente em formato JSON ou XML.
				
					import requests

# --- Configurações Essenciais ---
API_URL = "https://api.exemplo-mineracao.com/data/MINER_007/_temperature/latest"
# Em um cenário real, API_URL seria o endpoint exato que retorna o dado desejado.
# Ex: https://api.sua_plataforma.com/v1/assets/MINER_007/sensors/_temperature?limit=1

try:
    # 1. Faz a requisição HTTP GET
    response = requests.get(API_URL)

    # 2. Verifica se a requisição foi bem-sucedida (status 200 OK)
    response.raise_for_status() # Levanta um erro para códigos HTTP 4xx/5xx

    # 3. Extrai o dado da resposta JSON
    # Assumimos que a resposta é um JSON simples como: {"value": 85.5, "unit": "C", "timestamp": "..."}
    data = response.json()
    temperatura = data.get("value")
    unidade = data.get("unit", "°C")

    # 4. Imprime o resultado
    print(f"Temperatura: {temperatura} {unidade}")

except requests.exceptions.RequestException as e:
    print(f"Erro ao conectar ou obter dados da API: {e}")
    if 'response' in locals() and response.text:
        print(f"Resposta da API (para depuração): {response.text}")
except Exception as e:
    print(f"Ocorreu um erro inesperado: {e}")
				
			
Código Python - Coleta de dados de sensor via API

O código Python simulou a obtenção da temperatura de um sensor de um ativo de mineração através de uma API REST, usando a biblioteca requests. Nesse sentido, há várias vantagens na coleta de dados por um sensor sem fio, como:

  • Flexibilidade: facilidade de instalação e realocação de sensores;
  • Custo reduzido: menor custo de instalação e manutenção;
  • Acesso a locais remotos: permite monitorar ativos em áreas de difícil acesso ou perigosas;
  • Mobilidade: essencial para monitorar equipamentos móveis como caminhões, escavadeiras e perfuratrizes.
  • Manutenção preditiva aprimorada: a coleta contínua de dados amplia a visão sobre o estado do equipamento e antecipa falhas.

Data cleansing e padronização: etapas essenciais antes da análise

Após a coleta de dados, é sempre necessário limpá-los, especialmente sendo em ambientes industriais, como o setor de mineração. Conhecida como “data cleansing“, essa etapa é crucial para identificar e corrigir erros e inconsistências em conjuntos de dados brutos. Esse processo garante a qualidade, precisão e confiabilidade das informações que serão usadas para análise e tomada de decisões.

A limpeza de dados envolve várias técnicas, muitas das quais podem ser implementadas com Python:

  • Tratamento de dados ausentes: remoção e imputação;
  • Detecção e tratamento de outliers: limites estatísticos, limites físicos e operacionais, remoção ou substituição;
  • Suavização de ruído: filtragem;
  • Remoção de duplicatas;
  • Padronização e normalização;
  • Verificação de consistência.

A biblioteca Pandas é a ferramenta mais popular para limpeza e manipulação de dados em Python. O exemplo a seguir demonstra algumas das técnicas mencionadas:

				
					import pandas as pd

import numpy as np

#Dados de exemplo de um sensor de temperatura

data = {

    'timestamp': pd.to_datetime(['2024-07-24 08:00', '2024-07-24 08:01', '2024-07-24 08:02', '2024-07-24 08:03', '2024-07-24 08:04', '2024-07-24 08:05', '2024-07-24 08:06']),

    'temperature_C': [85.2, 85.5, 150.0, np.nan, 86.1, 86.3, 86.0]
        }

#Criando um DataFrame

df = pd.DataFrame(data)

print("--- Dados Brutos ---")

print(df)

#--- Processo de Limpeza dos Dados ---

#Passo 1: Detecção e tratamento de outliers (limites operacionais)

#Supondo que a temperatura do motor nunca deva exceder 100°C.

#Valores acima desse limite são substituídos por NaN.

df.loc[df['temperature_C'] > 90, 'temperature_C'] = np.nan

print("\n--- Após remover o outlier (150°C) ---")

print(df)

#Passo 2: Tratamento de valores ausentes (NaN)

#Usando interpolação para preencher os valores ausentes.

df['temperature_C'] = df['temperature_C'].interpolate(method='linear')

print("\n--- Após interpolar os valores ausentes ---")

print(df)

#Passo 3: Suavização dos dados (filtragem de ruído)

#Usando uma média móvel de 3 pontos para suavizar pequenas variações.

df['temperature_C'] = df['temperature_C'].rolling(window=3, min_periods=1, center=True).mean()

print("\n--- Dados Suavizados (limpos) ---")

print(df)
				
			

Nesse caso, os dados brutos continham um outlier (150°C) e um valor ausente (nan). No passo 1, a limpeza removeu o outlier, em seguida, preencheu a lacuna com um valor interpolado e por último, suavizou a série para remover ruído. Como a limpeza é um processo iterativo, requer conhecimento do domínio (o que o sensor mede e qual o comportamento esperado do ativo) para ser feita de forma eficaz.

O próximo passo é a transformação desses dados para convertê-los em um formato mais útil e estruturado para análise, modelagem e visualização. Esse processo também pode ser realizado com a biblioteca pandas, já que oferece uma ampla gama de funções para limpar, formatar, agregar e manipular dados de séries temporais:

1. Padronização para análise: pandas + scikit-learn:

				
					import pandas as pd
from sklearn.preprocessing import MinMaxScaler

#DataFrame de exemplo com dados de temperatura e pressão
data = {'temperatura': [85, 82, 88, 85, 87],
        'pressao_psi': [1050, 1065, 1055, 1070, 1060]}
df = pd.DataFrame(data)

#Cria um objeto normalizador
scaler = MinMaxScaler()

# Aplica a normalização nas colunas desejadas
df_normalizado = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

print("--- Dados Original ---")
print(df)
print("\n--- Dados Normalizados (escala 0 a 1) ---")
print(df_normalizado)
				
			
Exemplo: normalização da temperatura para uma escala de 0 a 1.

2. Agregação: análise de tendências diárias ou semanais:

				
					import pandas as pd
import numpy as np

#DataFrame de exemplo com timestamps em granularidade de 1 minuto
timestamps = pd.date_range(start='2024-07-25 08:00', periods=60, freq='T')
temperaturas = np.random.uniform(80, 90, 60)
df = pd.DataFrame({'timestamp': timestamps, 'temperatura': temperaturas})
df = df.set_index('timestamp')

#Resampling (agregação) para calcular a média a cada 15 minutos
df_agregado = df.resample('15T').mean()

print(" --- Dados Originais (primeiras 5 linhas) --- ")
print(df.head())
print("\n --- Dados Agregados (média a cada 15 minutos) --- ")
print(df_agregado)
				
			
Cálculo da média de temperatura a cada 15 minutos a partir de dados com granularidade de 1 minuto.

3. Criação de novas informações (Feature Engineering): produção de colunas mais informativas para a análise:

				
					import pandas as pd

#DataFrame de exemplo com dados de temperatura
data = {'temperatura': [85.0, 85.5, 86.1, 87.5, 88.0, 87.2, 86.8]}
df = pd.DataFrame(data)

#Cria uma nova feature: "Taxa de variação"
#O método .diff() calcula a diferença entre uma linha e a anterior.
df['taxa_de_variacao' ] = df['temperatura' ].diff()

#Cria outra feature: "Média móvel" dos 3 últimos pontos
#O método .rolling(window=3).mean() calcula a média de 3 pontos em cada janela.
df['media_movel_3pts'] = df['temperatura'].rolling(window=3).mean()

print(" --- DataFrame com Novas Features --- ")
print(df)
				
			
Cálculo da "taxa de variação" de uma temperatura e a "média móvel" para suavizar ruídos.

Os exemplos demonstram como pandas permitem transformar e preparar dados de forma robusta e eficiente, deixando-os prontos para análise e modelagem. Assim como no caso de dados de temperatura em mineradoras, esse processo estruturado possibilita identificar padrões, antecipar riscos e fundamentar decisões técnicas e estratégicas para a indústria.

Saiba mais sobre a ST-One.

ST-One Logotipo

Baixe aqui o material completo e descubra como a ST-One já impactou positivamente parceiros em mais de 23 países.