
makine öğrenmesi (ML) ile beyin dalgalarını analiz ederek protezi kişiselleştiren gelişmiş bir BCI destekli protez kontrol sistemidir.
📌 Özellikler:
✅ Makine öğrenmesi (ML) modeli, kullanıcının beyin dalgalarını kişiselleştirerek analiz eder.
✅ Kullanıcının beyin dalgalarını gerçek zamanlı olarak takip eder ve protezin hareketlerini öğrenir.
✅ Scikit-learn ve TensorFlow kullanarak, beta dalgalarındaki değişimlere göre yürüyüş stilini belirler.
🔹 1. Makine Öğrenmesi ile BCI Protez Kontrolü (Python)
pythonKopyalaDüzenleimport numpy as np
import serial
import time
import joblib # Modeli kaydetmek ve yüklemek için
from brainflow.board_shim import BoardShim, BrainFlowInputParams, BoardIds
from brainflow.data_filter import DataFilter, FilterTypes
from sklearn.ensemble import RandomForestClassifier # Makine öğrenmesi modeli
# **1. EEG CİHAZI BAĞLANTISI**
params = BrainFlowInputParams()
params.serial_port = "COM3" # OpenBCI için seri port
board = BoardShim(BoardIds.CYTON_BOARD.value, params)
board.prepare_session()
board.start_stream()
time.sleep(2)
# **2. ARDUINO BAĞLANTISI**
arduino = serial.Serial('COM5', 115200) # Arduino veya ESP32 için port
# **3. MODELİN YÜKLENMESİ VEYA YENİDEN EĞİTİLMESİ**
try:
model = joblib.load("brainwave_model.pkl") # Önceden eğitilmiş model yükle
print("📌 Model yüklendi!")
except:
model = RandomForestClassifier(n_estimators=50) # Yeni model oluştur
print("⚠️ Yeni model eğitilecek!")
# **4. EEG VERİLERİNİN ALINMASI VE FİLTRELENMESİ**
def get_eeg_features():
data = board.get_board_data()
eeg_channels = BoardShim.get_eeg_channels(BoardIds.CYTON_BOARD.value)
alpha_waves, beta_waves = [], []
for ch in eeg_channels:
DataFilter.detrend(data[ch], 3)
DataFilter.perform_bandpass(data[ch], 250, 8.0, 12.0, 4, FilterTypes.BUTTERWORTH.value, 0) # Alpha (8-12 Hz)
DataFilter.perform_bandpass(data[ch], 250, 12.0, 30.0, 4, FilterTypes.BUTTERWORTH.value, 0) # Beta (12-30 Hz)
alpha_waves.append(np.mean(data[ch]))
beta_waves.append(np.mean(data[ch]))
return np.mean(alpha_waves), np.mean(beta_waves)
# **5. MODELİN ÖĞRENMESİ & PROTEZ KONTROLÜ**
def train_and_control():
training_data = []
labels = []
while True:
alpha, beta = get_eeg_features()
print(f"Alpha: {alpha}, Beta: {beta}")
if beta > 20:
print("📌 Komut: YÜRÜ!")
arduino.write(b'1')
training_data.append([alpha, beta])
labels.append(1) # Yürüme etiketi
elif alpha > 15:
print("📌 Komut: DUR!")
arduino.write(b'0')
training_data.append([alpha, beta])
labels.append(0) # Dur etiketi
else:
print("⏳ Beyin dalgaları analizi devam ediyor...")
# **Makine öğrenmesi modelini eğitme**
if len(training_data) > 50:
model.fit(training_data, labels)
joblib.dump(model, "brainwave_model.pkl") # Modeli kaydet
print("✅ Model güncellendi!")
training_data, labels = [], [] # Veri setini sıfırla
time.sleep(0.5)
# **6. BAŞLATMA**
try:
train_and_control()
except KeyboardInterrupt:
board.stop_stream()
board.release_session()
arduino.close()
print("🔌 Bağlantılar kapatıldı!")
🔹 2. Protez Hareketini Kontrol Eden Arduino Kodu
cppKopyalaDüzenle#include <Servo.h>
Servo kneeServo; // Diz eklemi için servo motor
Servo ankleServo; // Ayak bileği için servo motor
void setup() {
Serial.begin(115200);
kneeServo.attach(9);
ankleServo.attach(10);
}
void loop() {
if (Serial.available()) {
char command = Serial.read();
if (command == '1') { // Yürüme komutu
kneeServo.write(90); // Dizi bük
ankleServo.write(45); // Ayak bileğini kaldır
delay(500);
kneeServo.write(0); // Diz aç
ankleServo.write(0); // Ayak düz
}
else if (command == '0') { // Durdurma komutu
kneeServo.write(0);
ankleServo.write(0);
}
}
}
🔹 Çalışma Mantığı
1️⃣ Makine Öğrenmesi ile Öğrenme:
- RandomForestClassifier kullanarak, kullanıcı beyin dalgalarına göre protezin hareketlerini kişiselleştirir.
- Beta dalgaları yükseldiğinde yürüme komutu, alpha yükseldiğinde dur komutu verilir.
- Model, zamanla kullanıcının beyin aktivitesini öğrenerek daha iyi kararlar verir.
2️⃣ EEG Sensörlerinden Veri Alımı:
- OpenBCI veya Neurosky gibi EEG cihazları ile alpha & beta dalgaları ölçülür.
- Python kodu beyin dalgalarını filtreler ve Arduino’ya komut gönderir.
3️⃣ Arduino Üzerinde Protez Kontrolü:
- Servo motorlar, Arduino üzerinden beyin sinyallerine göre hareket eder.
- Makine öğrenmesi, kullanıcının yürüme stilini öğrenir ve zamanla daha akıcı bir hareket sağlar.
🔹 Sonuç
✅ Protez makine öğrenmesi ile kullanıcının beyin sinyallerini analiz eder.
✅ Zamanla kullanıcının yürüyüş alışkanlıklarını öğrenir ve optimize eder.
✅ Gerçek zamanlı beyin dalgası analizi ile yürüyüş komutları kişiselleştirilir.