Розробка AI-системи моніторингу обладнання за вібрацією та температурою

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка AI-системи моніторингу обладнання за вібрацією та температурою
Середній
~1-2 тижні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Розробка AI-системи моніторингу обладнання з вібрації та температури

Вібрація і температура — два основні діагностичні параметри устаткування, що обертається. Вібрація несе інформацію про механічні дефекти (підшипники, дисбаланс, розцентрування), температура - про теплові аномалії (перегрів підшипника, порушення мастила, перевантаження).

Розміщення датчиків

Вібродатчики:

sensor_placement_guidelines = {
    'motor_drive_end_bearing': {
        'position': 'горизонтально на крышке подшипника',
        'sensitive_to': ['unbalance', 'misalignment', 'bearing_defects'],
        'frequency_range': '10-10000 Hz'
    },
    'motor_non_drive_end_bearing': {
        'position': 'горизонтально',
        'sensitive_to': ['rotor_asymmetry', 'bearing'],
        'frequency_range': '10-10000 Hz'
    },
    'pump_bearing': {
        'position': 'на корпусе насоса у подшипника',
        'sensitive_to': ['cavitation', 'impeller_unbalance'],
        'note': 'добавить радиальный + осевой датчики'
    },
    'gearbox': {
        'position': 'на корпусе редуктора',
        'sensitive_to': ['gear_mesh_frequency', 'tooth_defects'],
        'frequency_range': '10-20000 Hz'
    }
}

Теплові датчики:

  • PT100 / PT1000: точність ±0.1°C, для підшипників < 2 секунди реакції
  • Thermocouple: швидший відгук, підходить для гарячих точок
  • Інфрачервоні термометри: безконтактні, для періодичних обходів
  • Тепловізор: періодична інспекція, бачить "гарячі плями"

Обробка вібраційного сигналу

Діагностичні зони ISO 10816:

import numpy as np

def classify_vibration_severity(rms_velocity_mm_s, machine_class):
    """
    ISO 10816: классификация виброскорости по зонам A/B/C/D
    Класс I: малые машины < 15 кВт
    Класс II: средние машины 15-75 кВт
    Класс III: крупные машины > 75 кВт на жёстком основании
    """
    thresholds = {
        'I':   {'A': 0.28, 'B': 0.71, 'C': 1.8, 'D': float('inf')},
        'II':  {'A': 0.45, 'B': 1.12, 'C': 2.8, 'D': float('inf')},
        'III': {'A': 0.71, 'B': 1.8,  'C': 4.5, 'D': float('inf')},
        'IV':  {'A': 1.12, 'B': 2.8,  'C': 7.1, 'D': float('inf')}
    }

    t = thresholds[machine_class]
    if rms_velocity_mm_s <= t['A']:
        return 'A', 'Excellent — new machine condition'
    elif rms_velocity_mm_s <= t['B']:
        return 'B', 'Acceptable — long-term operation allowed'
    elif rms_velocity_mm_s <= t['C']:
        return 'C', 'Tolerable — short-term only, schedule maintenance'
    else:
        return 'D', 'Unacceptable — immediate shutdown risk'

Спектральний аналіз - автоматичне виявлення дефектних частот:

from scipy.fft import fft, fftfreq
import scipy.signal as signal

def diagnose_from_spectrum(vibration_signal, sampling_rate, shaft_rpm,
                            bearing_freqs, gear_mesh_freq=None):
    """
    Автоматическая диагностика по спектру вибрации
    """
    n = len(vibration_signal)
    freqs = fftfreq(n, 1/sampling_rate)[:n//2]
    magnitude = np.abs(fft(vibration_signal))[:n//2]

    shaft_freq = shaft_rpm / 60
    diagnoses = []

    # Дисбаланс: доминирование 1x оборотной частоты
    idx_1x = np.argmin(np.abs(freqs - shaft_freq))
    if magnitude[idx_1x] > np.mean(magnitude) * 10:
        diagnoses.append({'fault': 'unbalance', 'severity': 'medium',
                          'evidence': f'1x amplitude = {magnitude[idx_1x]:.2f}'})

    # Расцентровка: высокие 2x + осевая составляющая
    idx_2x = np.argmin(np.abs(freqs - 2 * shaft_freq))
    if magnitude[idx_2x] > magnitude[idx_1x] * 0.5:
        diagnoses.append({'fault': 'misalignment', 'severity': 'medium',
                          'evidence': f'2x/1x ratio = {magnitude[idx_2x]/magnitude[idx_1x]:.2f}'})

    # Подшипниковые дефекты: BPFO, BPFI
    for bearing_name, bf in bearing_freqs.items():
        for fault_name, freq in [('bpfo', bf['bpfo']), ('bpfi', bf['bpfi'])]:
            idx = np.argmin(np.abs(freqs - freq))
            local_mean = magnitude[max(0, idx-10):idx+10].mean()
            if magnitude[idx] > local_mean * 5:
                diagnoses.append({
                    'fault': f'{fault_name}_{bearing_name}',
                    'severity': 'high',
                    'evidence': f'Amplitude at {freq:.1f}Hz = {magnitude[idx]:.2f}'
                })

    return diagnoses

Температурний моніторинг

Baseline та аномалії:

class TemperatureMonitor:
    def __init__(self, baseline_window_hours=24):
        self.baseline = {}
        self.alert_thresholds = {}

    def set_baseline(self, equipment_id, temperature_history):
        """
        Baseline: медианная температура в нормальном режиме
        Учитывает нагрузку: температура нормальна при высокой нагрузке
        """
        self.baseline[equipment_id] = {
            'overall_median': np.median(temperature_history),
            'load_corrected': self._fit_load_temperature_curve(temperature_history)
        }

    def check_temperature(self, equipment_id, current_temp, current_load):
        baseline = self.baseline[equipment_id]
        expected_temp = baseline['load_corrected'].predict([[current_load]])[0]

        deviation = current_temp - expected_temp

        if deviation > 20:
            return 'CRITICAL', f'Temperature {deviation:.1f}°C above expected'
        elif deviation > 10:
            return 'WARNING', f'Temperature {deviation:.1f}°C above expected'
        elif deviation > 5:
            return 'CAUTION', f'Slight temperature elevation: {deviation:.1f}°C'
        else:
            return 'NORMAL', None

Тренд-аналіз температури:

def analyze_temperature_trend(temperature_series, window_days=7):
    """
    Постепенный рост температуры = деградация подшипника или нарушение смазки
    """
    recent = temperature_series.last(f'{window_days}D')
    trend = np.polyfit(range(len(recent)), recent.values, 1)[0]

    rate_per_day = trend
    if rate_per_day > 1.0:  # > 1°C в день = красный флаг
        return 'ACCELERATING', rate_per_day
    elif rate_per_day > 0.3:
        return 'GRADUAL_RISE', rate_per_day
    else:
        return 'STABLE', rate_per_day

Кореляція вібрації та температури

Multi-sensor fusion:

def correlate_vibration_temperature(vibration_features, temperature_features, time_lag_hours=2):
    """
    Тепловые признаки могут запаздывать за вибрационными на 1-4 часа
    (тепло распространяется медленнее вибрации)
    """
    # Lag correlation
    combined_score = 0

    # Оба показателя выше нормы = усиленный сигнал
    if vibration_features['kurtosis'] > 3 and temperature_features['deviation'] > 5:
        combined_score = max(
            vibration_features['anomaly_score'],
            temperature_features['anomaly_score']
        ) * 1.3  # усиление при подтверждении двумя сенсорами

    # Температура без вибрации = возможно смазки/охлаждение
    elif temperature_features['deviation'] > 10 and vibration_features['kurtosis'] < 2:
        return 'lubrication_or_cooling_issue'

    return combined_score

Dashboard та аллертинг

Real-time Grafana дашборд:

  • Live waveform: останні 10 секунд вібросигналу
  • FFT спектр: оновлюється кожні 5 хвилин
  • Trending: RMS та kurtosis за 30 днів
  • ISO зона: колірна індикація A/B/C/D
  • Temperature heatmap: усі точки вимірювання на схемі обладнання

Alert Matrix:

alert_matrix = {
    ('D', 'CRITICAL'): 'immediate_shutdown',  # ISO зона D + критическая температура
    ('D', 'WARNING'): 'urgent_inspection',
    ('C', 'CRITICAL'): 'urgent_inspection',
    ('C', 'WARNING'): 'schedule_next_shift',
    ('B', 'CAUTION'): 'monitor_closely',
    ('A', 'NORMAL'): 'routine'
}

Терміни: датчики + OPC-UA/Modbus + базовий vibration RMS + ISO класифікація + temperature alerts + Grafana - 3-4 тижні. Спектральна діагностика, envelope analysis, тренд-аналіз температури, multi-sensor fusion, mobile alerts - 2-3 місяці.