Rulman Arıza Tespiti - Kestirimci Bakım ve Makine Öğrenmesi Projesi
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.
⚙️ 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 |
🎯 HedefArı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.
Veri Yükleme
Dataların sisteme yüklenmesi ve zamana bağlı grafiklerin çizdirilmesi.
Zaman Serisi Analizi
Arızalı olan rulmanda darbeler olduğu gözlemlendi.
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 - 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 - Ö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ı
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 - Confusion Matrix (Karmaşıklık Matrisi)
🛠️ Kullanılan Teknolojiler
|
🐍
Python |
📊
NumPy |
🔬
SciPy |
🤖
Scikit-learn |
📈
Matplotlib |
🐼
Pandas |
İlgili Projeler
Tümünü Gör ->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_altGö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_altTOKİ 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