Arduino
OKUDUĞUNUZ KONU
Arduino EMG Sensörü El Kontrolü
16

Arduino EMG Sensörü El Kontrolü

Yazar : Murat Duran2 Ağustos 2015

3B yazıyı teknoloji gelişmesiyle birçok protez uzuvlarında üretimi bir hayli kolaylaştı.Ayrıca robotik uzuvlar ile çalışmalarda genişledi.Şimdi arduino ve sensörlerinin yeni bir uygulama alanını göreceğiz.Robotik bir eli kendi elimiz gibi nasıl kullanabiliriz? tabiki gerekli sensörler yardımıyla.İlk uygulamalar genelde bir flex sensör ile yapılıyordu ama hassas sonuçlar vermediğinden dolayı bu yöntem ile ilgili çalışmalar sonlandırıldı diyebiliriz.

Şimdi yeni popüler ve daha sağlıklı sonuçlarda veren yöntem EMG sensörü ( Elektromiyografi) anlamı, Elektronik kas ve sinir grafisi.Aslında kas ve sinir hareketlerini ölçebilen bir yöntem.Projemizde kullanacağımız malzemeler.

1- Arduino UNO
2- EMG sensörü
3- Servo motor shild
4- Robotik El

Robotik el nasıl yapılır bunu ileri ki projelerimizde göreceğiz.Şimdi biz işin elektronik donanım ve yazılımından bahsedeceğiz.İlk yapacağınız işlem aşağıdaki kodu arduino uno kartımıza yüklüyoruz.Ardından robotik eldeki servo motor bağlantılarını shild üzerine yerleştiriyoruz.

EMG sensörümüzün problarını hareket ettireceğimiz kolumuza yapıştırıyoruz.Burada dikkat etmeniz gereken yer probların videoda ve resimlerde görüldüğü gibi kas ve sinir sistemin geçtiği kolumuzun iç kısmına yapıştırıyoruz.Sensör buradaki kasılmaları aygılayacak ve servo motorları harekete geçirecek.

EMG Robotik EL Kodları İndir

#include <Servo.h>

#define THRESHOLD 150 
#define EMGPIN 3 //Analog pin connected to Muscle Sensor V3 Board
#define LITTLEPIN  3 //Digital pin used by Little servo
#define RINGPIN    5 //Digital pin used by Ring servo
#define MIDDLEPIN  6 //Digital pin used by Middle servo
#define INDEXPIN   9 //Digital pin used by Index servo
#define THUMBPIN  10 //Digital pin used by Thumb servo

//Constants used to open and close the fingers
#define LITTLE 1 
#define RING   2
#define MIDDLE 3
#define INDEX  4
#define THUMB  5

Servo servoLittleFinger;         // Define servo fingers
Servo servoRingFinger;         // Define servo fingers
Servo servoMiddleFinger;         // Define servo fingers
Servo servoIndexFinger;         // Define servo fingers
Servo servoThumbFinger;         // Define servo fingers

int finger;

// Motion routines for handopen and handclose
void openhand(){for(finger = 1; finger < 6; finger++){openFinger(finger);}}
void closehand(){for(finger = 1; finger < 6 ; finger++){closeFinger(finger);}}


void openFinger(int finger){
  if(finger==LITTLE){servoLittleFinger.write(0);} // Little finger
  else if(finger==RING){servoRingFinger.write(170);}// Ring finger
  else if(finger==MIDDLE){servoMiddleFinger.write(170);}// Middle finger
  else if(finger==INDEX){servoIndexFinger.write(170);}// Index finger
  else if(finger==THUMB){servoThumbFinger.write(0);}//Thumb finger
}

void closeFinger(int finger){
  if(finger==LITTLE){servoLittleFinger.write(170);} // Little finger 
  else if(finger==RING){servoRingFinger.write(0);}// Ring finger
  else if(finger==MIDDLE){servoMiddleFinger.write(0);}// Middle finger
  else if(finger==INDEX){servoIndexFinger.write(0);}// Index finger
  else if(finger==THUMB){servoThumbFinger.write(170);}//Thumb finger
}

void setup(){
  
  Serial.begin(115200); 

  servoLittleFinger.attach(LITTLEPIN);  // Set Little finger servo to digital pin 3
  servoRingFinger.attach(RINGPIN);  // Set Ring finger servo to digital pin 5
  servoMiddleFinger.attach(MIDDLEPIN);  // Set Middle finger servo to digital pin 6
  servoIndexFinger.attach(INDEXPIN);  // Set Index finger servo to digital pin 9
  servoThumbFinger.attach(THUMBPIN);  // Set Thumb finger servo to digital pin 10

}//end setup

void loop() {// Nothing to do here, all is done in the interrupt function

  int value = analogRead(EMGPIN); //Sampling analog signal
  if(value>THRESHOLD) 
  {closehand();}
  else //Otherwise the hand is open
  {openhand();}
  Serial.println(value); 
}

SİZCE NASIL OLMUŞ?
Beğendim
75%
İlginç
15%
Eh İşte
4%
Anlamadım
2%
Kötü
2%
Berbat
5%
YAZAR HAKKINDA
Murat Duran
Murat Duran
Açık kaynak donanım ve yazılım geliştiricisiyim , mekanik ve robotik sistemler üzerinde çalışmalar yapmaktayım.Ayrıca bir start-up firması olan Proje Hocam 'ın kurucuyum.
16 YORUMLAR
  • MURAT ÖZTÜRK
    31 Ekim 2015 at 16:35

    Kardeşim paylaşımın için çok teşekkür ederim… gercekten guzel bır paylaşım ve ornek …

  • Yunus Can KALAYCI
    19 Kasım 2015 at 19:17

    Paylaşım için çok teşekkürler. Projede hangi motor sheildi kullandınız ismini yazarsanız sevinirim. Birde servo motorların mikro olması herhangi bi sıkıntıya sebep olurmu

    • Murat Duran
      19 Kasım 2015 at 20:41

      Projede herhangi bir shield kullanılmamış, servo motorlar dışarıdan pil ile beslenmiş ve sinyaller arduino üzerinden alınmış.Mikro servo motorlar parmakları çekecek kadar tork üretmeyebilir.

      • halit enes
        19 Ocak 2016 at 18:02

        Servoların mikro olması sıkıntı oluyor ben arduino ile kablosuz robotik proje yaptım servolar mikro tower pro sg90 servolardı parmakları hareket ettirmek için torku az geliyor bilginize

  • ezgi kabukcu
    20 Ocak 2016 at 17:02

    Merhabalar emg sensörününe pilleri yukarıda gördüğüm resimdeki gibi bağladım ama kasılmaları algılayamıyor şu anda arduino ile çalışıyorum tek servoya bağlı parmaklar şu anda. Emg sensorünü de bağladığımda serial monitorde ya sabit bi 1023 ya da 0 görüyor problemi nedir yardımcı olabilir misiniz

    • Kırık Kafa
      5 Mart 2016 at 08:28

      Bu kol sadece aç kapa yapmak için.
      Yani 0 ve 1023 degerleri yeterli
      5 parmagin 5 i kapandiktan sonra el kapanıyor.
      Eger 5 parmaktan 1 ini kapatmazsaniz el kapanmaz.
      Şöyle çalışıyor.
      1. Parmak kapaninca 1023 degerini
      2. 3 ve 4 parmak kapaninca 0 degerini
      5. Parmak kapaninca 1023 degeri EMG sensor veriyor.
      BU 5 olay bir birini sagladiginda avucu kapat deniyor.

      Tam akside avucu acmaya yarıyor.

      Çok fazla bilgim yok biraz okuyunca böyle algıladım. Yanlış varsa kusura bakmayın.

      • Kırık Kafa
        5 Mart 2016 at 08:40

        Tekrar bakinca böyle değilmiş pardon 🙂
        Herhangi bir hareket algıladığı anda kapatıyor sonra ki algiladigi harekette de açıyor. Yane 1 parmağınızı kapattiginizda sensor hareket algılarsa butun parmaklari kapatıyor.

        1023 degeri okunduguda eliniz kapaliysa butun servo motorlara çalışmasını bir dahaki 0 degerinde de aksi yöne çalışmasını söyleyeceksiniz. Kesin böyledir herhalde 🙂
        Gene yanlis yazmış ola bilirim 🙂

  • YUNUS CAN KALAYCI
    23 Ocak 2016 at 21:57

    hocam merhabalar bir sorum olacak emg sensörünü nereden temin ettiniz acaba Türkiyede bulamadık

  • Zeynep Kaya
    26 Şubat 2016 at 09:18

    ACİL!!
    Hocam emgden aldığımız sinyali nasıl yükseltebiliriz? Bizim emgmiz max. 5 V veriyor ancak çoğunlukla 2.90 da kalıyor. Bu sinyal Arduinoya yetmiyor bu sinyali nasıl yükseltebiliriz?

  • Yunus Can Kalaycı
    8 Mart 2016 at 12:21

    Merabalar ayni projeyi v1.1 kit ile yapsak kodlarda nasil bir değişiklik gerekir ?

  • gamze
    24 Aralık 2016 at 13:40

    merhaba. kullandığınız emg sensörü sparkfunın mı? gelen sinyali filtresiz direk mi gönderiyosunuz arduinoya acaba?

  • İpek Çerençeli
    17 Mart 2017 at 00:28

    Bu projeye benzer bir proje var.yaptirmak icin birilerini ariyoruz.yardimci olabilicek birileri var mi?

  • Buğra kendirli
    2 Aralık 2017 at 13:06

    hocam iyi günler projedeki motor bağlantılarını ve hangi servoshieldi kullandığınızı söyleyebilirmisiniz resimlerde servo shield ve motor bağlantıları belli olmuyor bilgisi olan varsa lütfen lütfen yardımcı olabilirmi ?

YORUM YAP