Rulman Arıza Tespiti - Kestirimci Bakım ve Makine Öğrenmesi Projesi

Yayın: 29.11.2025 • 00:00 Süre: 4 DAKİKA

CWRU titreşim verileri kullanılarak rulman arızalarının FFT sinyal işleme ve Random Forest makine öğrenmesi ile %100 doğrulukla tespit edilmesi projesi.

Rulman Arıza Tespiti - Kestirimci Bakım ve Makine Öğrenmesi Projesi

⚙️ KESİTİRİMCİ BAKIM PROJESİ

Rulman Arıza Tespiti ve Sınıflandırması

FFT Sinyal İşleme ve Random Forest Makine Öğrenmesi ile Predictive Maintenance

%100
Doğruluk
12kHz
Örnekleme
FFT
Sinyal Analizi
RF
Random Forest
🎯

1.1 Projenin Genel Amacı

Savunma sanayiinde ve ağır sanayi koşullarında kullanılan araçların yürüyen aksamlarının (rulman, şanzıman vb.) sürdürülebilirliği açısından analiz edilmesi gerekmektedir. Geleneksel bakım yöntemleri yerine sensör verileri kullanılarak durum bazlı kestirimci bakım (Predictive Maintenance) yapılması planlanmaktadır.

📊 Veri Kaynağı

Case Western Reserve University (CWRU) laboratuvar verileri

🎯 Hedef

Arızanın önceden tespit edilmesi ve sınıflandırılması

📈

2.1 Sinyal İşleme ve Frekans Analizi Aşaması

Analiz aşamasında CWRU sitesinden temin edilen 12k Drive End verileri kullanılmıştır. Sinyallerin analizi ve işlenmesi işlemleri için Python programlama dili kullanılmıştır.

 
1

Veri Yükleme

Dataların sisteme yüklenmesi ve zamana bağlı grafiklerin çizdirilmesi.

2

Zaman Serisi Analizi

Arızalı olan rulmanda darbeler olduğu gözlemlendi.

3

FFT (Hızlı Fourier Dönüşümü)

Darbelerin frekansını bulmak amacıyla sinyallere FFT işlemi uygulandı. Arızalı sinyalde 160 Hz civarında enerji artışı tespit edildi.

✅ Sonuç: Bu frekansların teorik hesaplamalarla örtüştüğü görülmüştür.

💻 Sinyal İşleme Kodu

# Source - https://stackoverflow.com/q (Modified by Community, CC BY-SA 4.0)

import scipy.io
import matplotlib.pyplot as plt
import numpy as np
from scipy.fft import fft, fftfreq

# Dataları yükleme kısmı
mat = scipy.io.loadmat('arizali.mat')
sinyal = mat['X105_DE_time'].reshape(-1)

# Perform FFT with SciPy
N = len(sinyal)
fs = 12000
yf = fft(sinyal)
xf = fftfreq(N, 1/fs)

# Pozitif frekansları alma
idx_max = N // 2

# Grafik Çizimi
plt.figure(figsize=(10, 6))
plt.plot(xf[:idx_max], np.abs(yf[:idx_max]))
plt.title('Arızalı Rulman Frekans Spektrumu')
plt.grid()
plt.show()

figure-1

📊 Figure 1 - Zaman Serisi Analizi | Figure 2 - Frekans Spektrumu

🔬

3.1 Öznitelik Çıkarımı ve Yapay Zeka Uygulaması

Ham sinyallerin direk analizi zor olduğu için sinyallerden öznitelik çıkarımı yapılması kararlaştırılmıştır. Sinyaller 1000'lik parçalara bölünerek her parça için aşağıdaki öznitelikler hesaplanmıştır:

Öznitelik Formül Açıklama
RMS √(mean(x²)) Sinyalin etkin değeri
Kurtosis scipy.stats.kurtosis() Dağılımın sivrilik ölçüsü
Max Value max(|x|) Maksimum mutlak değer

📊 Gözlem: Sağlam ve arızalı veriler RMS değerleri üzerinden hesaplandığında birbirinden ayrıldığı grafikte görülmüştür.

💻 Öznitelik Çıkarım Kodu

# Source - StackOverflow (CC BY-SA 4.0)
import pandas as pd
from scipy.stats import kurtosis

def ozellik_cikar(sinyal, etiket):
    ozellikler = []
    parca_boyutu = 1000
    for i in range(0, len(sinyal) - parca_boyutu, parca_boyutu):
        parca = sinyal[i : i + parca_boyutu]
        
        # RMS ve diğer özellikler hesaplanıyor
        rms = np.sqrt(np.mean(parca**2))
        kurt = kurtosis(parca)
        max_val = np.max(np.abs(parca))
        
        ozellikler.append([rms, max_val, kurt, etiket])
    return ozellikler

# DataFrame oluşturma
df_features = pd.DataFrame(ozellikler, 
    columns=['RMS', 'Max_Value', 'Kurtosis', 'Label'])

figure-3

📊 Figure 3 - Özellik Ayrımı (RMS)

🏆

4.1 Sonuçların Değerlendirilmesi

Elde edilen öznitelik dataları Random Forest algoritması kullanılarak eğitilmiştir.

%100
Doğruluk (Accuracy)
80/20
Eğitim/Test Oranı

📈 Feature Importance: En önemli özelliğin Maksimum Değer ve RMS olduğu analiz sonucunda görülmüştür.

🔍 Confusion Matrix Sonuçları

  Tahmin: Sağlam Tahmin: Arızalı
Gerçek: Sağlam ✓ Doğru 0
Gerçek: Arızalı 0 ✓ Doğru

Model sağlam ve arızalı parçaları hatasız ayırmıştır.

💻 Model Eğitim Kodu

# Source - StackOverflow (CC BY-SA 4.0)
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

# Split Data
X = df_features[['RMS', 'Max_Value', 'Kurtosis']]
y = df_features['Label']
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42)

# Model Training
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)

# Prediction
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print(f"Model Accuracy: {acc*100:.2f}")

figure-4

📊 Figure 4 - Confusion Matrix (Karmaşıklık Matrisi)

🛠️ Kullanılan Teknolojiler

🐍
Python
📊
NumPy
🔬
SciPy
🤖
Scikit-learn
📈
Matplotlib
🐼
Pandas

İlgili Projeler

SkyTrace - Python Tabanlı Roket Yörünge Simülasyonu

Newton hareket yasaları ve aerodinamik sürüklenme prensipleriyle geliştirilen parametrik roket s...

Projeyi Gör arrow_right_alt

Gözcü İHA - YOLOv8 ile Gerçek Zamanlı Tank ve Zırhlı Araç Tespiti

Savunma sanayii için YOLOv8 tabanlı otonom tehdit tespit sistemi. Drone görüntülerinden tank ve...

Projeyi Gör arrow_right_alt

TOKİ Kura Sonuçları Sorgulama Platformu - Sosyal Sorumluluk Projesi

11 Ağustos 2025'te bir canlı yayın fikrinden doğan, Python OCR ve CesiumJS 3D harita ile on binl...

Projeyi Gör arrow_right_alt