Skip to content

ozkurkuran/esp32_s3_cnn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESP32-S3 EMG Tabanlı El Hareketi Tanıma Sistemi

GitHub PlatformIO License

ESP32-S3-N16R8 mikrodenetleyicisi kullanarak 6 kanallı EMG sensörlerinden alınan verileri işleyen, 11 farklı el hareketini tanımlayan ve 6 servo motor ile robotik el kontrolü sağlayan kapsamlı bir sistem.

Proje Özeti

Bu proje, ESP32-S3-N16R8 mikrodenetleyicisi kullanarak 6 kanallı EMG sensörlerinden alınan verileri işleyen, 11 farklı el hareketini tanımlayan ve 6 servo motor ile robotik el kontrolü sağlayan kapsamlı bir sistemdir.

Donanım Gereksinimleri

Zorunlu Bileşenler

  • ESP32-S3-N16R8 (16MB Flash, 8MB PSRAM)
  • 6x EMG Sensörü (ADC pinlerine bağlı)
  • 6x Servo Motor (5 parmak + baş parmak ekstra motor)
  • 1x RGB LED (WS2812B veya uyumlu)

Pin Bağlantıları

EMG Sensörleri (ADC Pinleri)

  • Kanal 0: GPIO1
  • Kanal 1: GPIO2
  • Kanal 2: GPIO3
  • Kanal 3: GPIO4
  • Kanal 4: GPIO5
  • Kanal 5: GPIO6

Servo Motorlar

  • Servo 0 (Baş parmak açma/kapama): GPIO12
  • Servo 1 (Baş parmak rotasyon): GPIO13
  • Servo 2 (İşaret parmağı): GPIO14
  • Servo 3 (Orta parmak): GPIO15
  • Servo 4 (Yüzük parmağı): GPIO16
  • Servo 5 (Serçe parmak): GPIO17

RGB LED

  • Data Pin: GPIO38

Yazılım Mimarisi

Modüller

1. EMG Filter (emg_filter.h)

EMG sinyallerini filtrelemek için üç aşamalı filtre sistemi:

  • Bandpass Filter (20-450 Hz): EMG frekans bandını izole eder
  • Notch Filter (50 Hz): Elektrik şebekesi gürültüsünü filtreler
  • Moving Average Filter: Sinyal yumuşatma

Kullanım:

MultiChannelEMGFilter emg_filter;
int raw_values[6];      // Ham ADC değerleri
float filtered[6];      // Filtrelenmiş değerler
emg_filter.processAllChannels(raw_values, filtered);

2. Feature Extraction (feature_extraction.h)

Filtrelenmiş EMG sinyallerinden makine öğrenmesi özellikleri çıkarır:

  • MAV (Mean Absolute Value): Ortalama mutlak değer
  • RMS (Root Mean Square): Kök ortalama kare
  • WL (Waveform Length): Dalga formu uzunluğu
  • ZC (Zero Crossing): Sıfır geçişleri

Her kanal için 4 özellik = Toplam 24 özellik

Kullanım:

FeatureExtractor extractor;
extractor.addSample(filtered_emg);  // Her örnekleme periyodunda
if(extractor.isWindowFull()) {
    float features[24];
    extractor.extractFeatures(features);
}

3. Data Collector (data_collector.h)

Eğitim verilerini toplama ve SPIFFS'e kaydetme:

Kullanım:

DataCollector collector;
collector.begin();
collector.startCollection(gesture_id);  // 0-10 arası
// ... özellikler çıkarılır ...
collector.addSample(features);
collector.stopCollection();

4. Servo Controller (servo_controller.h)

6 servo motorun kontrolü ve hareket setleri:

Kullanım:

ServoController servos;
servos.begin();
servos.setGesture(gesture_id);  // Hareket ID'sine göre otomatik kontrol

5. Model (model.h)

TensorFlow Lite CNN model tanımı ve örnek model byte array'i.

Not: Varsayılan model örnek bir yapıdır. Gerçek kullanım için kendi eğittiğiniz modeli buraya eklemelisiniz.

6. TF Lite Wrapper (tf_lite_wrapper.h)

Basitleştirilmiş TensorFlow Lite arayüzü.

Not: Gerçek TensorFlow Lite Micro implementasyonu için bu wrapper geliştirilmelidir.

Çalışma Modları

1. INFERENCE Modu (Normal Çalışma)

Gerçek zamanlı hareket tanıma ve servo kontrolü.

Başlatma:

MODE INFERENCE
veya
M1

LED Durumu: Yeşil

İşleyiş:

  1. EMG sensörlerinden 1000 Hz ile veri okur
  2. Filtreleme uygular
  3. 200ms'lik pencereden özellik çıkarır
  4. CNN modeli ile hareket tahmini yapar
  5. %70 üzeri güvenle servo motorları kontrol eder

2. TRAINING Modu (Eğitim)

Eğitim verisi toplama.

Başlatma:

MODE TRAINING
veya
M2

LED Durumu: Turuncu (toplama yapılıyorsa kırmızı yanıp söner)

Komutlar:

LIST                  - Hareket listesini göster
COLLECT <0-10>        - Belirtilen hareket için veri topla
STOP                  - Veri toplamayı durdur
CLEAR                 - Tüm verileri sil
INFO                  - SPIFFS bilgilerini göster

Örnek Kullanım:

MODE TRAINING
LIST
COLLECT 1              # Yumruk hareketi için veri topla
# Hareketi yapın, 500 örnek toplanacak
STOP
COLLECT 2              # Açık el için veri topla
STOP
INFO                   # Kaydedilen verileri kontrol et

3. MONITORING Modu (İzleme)

Ham ve filtrelenmiş EMG sinyallerini seri port üzerinden izleme.

Başlatma:

MODE MONITORING
veya
M3

LED Durumu: Mavi

Çıktı Formatı:

RAW: 2048 2100 1950 2080 2000 2120 | FILTERED: 0.123 0.234 0.098 0.187 0.156 0.211

El Hareketleri

ID İngilizce Türkçe Açıklama
0 Rest Dinlenme Rahat, hafif açık el
1 Fist Yumruk Tüm parmaklar kapalı
2 Open Hand Açık El Tüm parmaklar tam açık
3 Pinch Tutma Baş parmak + işaret parmağı
4 Point İşaret Parmağı Sadece işaret parmağı açık
5 Victory Zafer İşareti İşaret + orta parmak açık
6 OK Sign Tamam İşareti Baş parmak + işaret parmağı halka
7 Thumbs Up Başparmak Yukarı Sadece baş parmak yukarı
8 Thumbs Down Başparmak Aşağı Sadece baş parmak aşağı
9 Wrist Flexion Bilek Fleksiyon Tüm parmaklar hafif kapalı
10 Wrist Extension Bilek Ekstansiyon Tüm parmaklar gergin açık

Servo Komutları

TEST SERVO              - Tüm servoları sırayla test et
DEMO                    - Tüm hareketleri sırayla göster
GESTURE <0-10>          - Belirli bir hareketi ayarla

Model Eğitimi

Adım 1: Veri Toplama

  1. ESP32-S3'e kodu yükleyin
  2. Seri monitörü açın (115200 baud)
  3. Training moduna geçin: MODE TRAINING
  4. Her hareket için veri toplayın:
COLLECT 0
# Dinlenme durumunda bekleyin (500 örnek)
STOP

COLLECT 1
# Yumruk yapın (500 örnek)
STOP

# ... Tüm hareketler için tekrarlayın (0-10)
  1. Verileri kontrol edin: INFO
  2. SPIFFS'ten CSV dosyalarını bilgisayarınıza indirin

Adım 2: Model Eğitimi (Python)

model.h dosyasında örnek Python kodu bulunmaktadır. Kısaca:

# 1. Gerekli kütüphaneler
pip install tensorflow numpy pandas scikit-learn

# 2. Verileri yükle
# emg_data_rest.csv, emg_data_fist.csv, vb.

# 3. Model oluştur ve eğit
# CNN mimarisi: Conv1D -> MaxPool -> Conv1D -> GlobalAvgPool -> Dense -> Output

# 4. TFLite'a dönüştür
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

# 5. C array'e dönüştür
xxd -i model.tflite > model_array.h

# 6. model.h dosyasını güncelleyin

Adım 3: Model Entegrasyonu

  1. Eğitilmiş modelin byte array'ini model.h dosyasındaki emg_gesture_model değişkenine kopyalayın
  2. emg_gesture_model_len değerini güncelleyin
  3. Kodu tekrar derleyin ve yükleyin

Kurulum

PlatformIO ile

# 1. Projeyi klonlayın
git clone <repo-url>
cd esp32_s3_cnn

# 2. Bağımlılıkları yükleyin (otomatik)
pio lib install

# 3. Derleyin
pio run

# 4. Yükleyin
pio run --target upload

# 5. Seri monitörü açın
pio device monitor

Arduino IDE ile

  1. ESP32 board desteğini yükleyin
  2. Gerekli kütüphaneleri yükleyin:
    • ESP32Servo
    • FastLED
  3. Tüm header dosyalarını projenize ekleyin
  4. main.cpp'yi .ino olarak kaydedin
  5. Derleyin ve yükleyin

Kalibrasyon

EMG Sensör Kalibrasyonu

  1. Monitoring moduna geçin: MODE MONITORING
  2. Kaslarınızı dinlenme durumunda tutun
  3. RAW değerlerinin ~2048 civarında olduğunu kontrol edin
  4. Gerekirse ADC referans voltajını ayarlayın

Servo Kalibrasyonu

  1. TEST SERVO komutu ile servolarıtest edin
  2. servo_controller.h dosyasındaki açı değerlerini ayarlayın:
    • MIN_ANGLE ve MAX_ANGLE (0-180)
    • OPEN_POSITION ve CLOSED_POSITION
    • Her hareket için özel açı değerleri

Sorun Giderme

EMG Sinyalleri Gürültülü

  • Topraklama bağlantısını kontrol edin
  • Elektrot yerleşimini optimize edin
  • Filtre parametrelerini ayarlayın (emg_filter.h)

Hareket Tanınmıyor

  • Daha fazla eğitim verisi toplayın (hareket başına en az 500 örnek)
  • Model eğitimini tekrarlayın
  • Özellik çıkarma parametrelerini ayarlayın
  • Güven eşiğini düşürün (varsayılan: %70)

Servolar Yanlış Hareket Ediyor

  • Servo motor bağlantılarını kontrol edin
  • servo_controller.h'deki pin tanımlarını doğrulayın
  • Kalibrasyon yapın

SPIFFS Hatası

  • ESP32-S3'ün SPIFFS bölümünü kontrol edin
  • platformio.ini'de partition scheme ayarını kontrol edin
  • SPIFFS'i format edin: CLEAR komutu

Performans Özellikleri

  • Örnekleme Hızı: 1000 Hz (1ms)
  • Özellik Penceresi: 200ms (200 örnek)
  • İnference Hızı: 5 Hz (200ms periyot)
  • Filtreleme: Gerçek zamanlı, IIR filtreler
  • Bellek Kullanımı: ~50KB (model dahil değil)
  • SPIFFS Kapasitesi: Hareket başına ~500 örnek

Güç Tüketimi

  • Normal Çalışma: ~250mA @ 5V
  • Servo Peak: +2A (6 motor aktif)
  • Önerilen Güç Kaynağı: 5V 3A

Lisans ve Katkı

Bu proje eğitim amaçlıdır. Katkıda bulunmak için pull request gönderin.

İletişim ve Destek

Sorularınız için:

  • GitHub Issues
  • E-posta: [proje e-postası]

Referanslar

Güncelleme Notları

v1.0.0 (2025)

  • İlk sürüm
  • 6 kanallı EMG okuma
  • 11 hareket tanıma
  • 3 çalışma modu
  • Servo motor kontrolü
  • RGB LED durum göstergesi
  • SPIFFS veri saklama

Not: Bu sistem prototip aşamasındadır. Tıbbi kullanım için uygun değildir. Gerçek TensorFlow Lite implementasyonu ve doğru model eğitimi gerektirir.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors