BAĞLAN

Sesli Kontrol Edilen Dört Bacaklı Robot Projesi

  • Görüntülenme 3967
  • PAYLAŞ
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  

    Kendi Robotunu Yap projelerimizin bu bölümünde dört bacaklı robotumuzu sesli komutla kablosuz kontrol edeceğiz.Robotumuzu python ve bitvoicer programlarını kullanarak iki farklı yöntemle sesli komutla yöneteceğiz.Daha önceki projemizde sesli komutla telefondan robotu kontrol etmiştik.

    Buradan  projemize bakabilirsiniz.

    Malzemeler:

    1. Dagu Quadbot Klasik Kit
    2. Dagu Spider Kontrol Karı
    3. Mini USB Kablo
    4. Bluetooth Modül HC-06
    5.  LiPo Batarya (7V-30)
    6. SRF05 Ultrasonik Sensör
    7. Bluetooth USB modül

    Robot Kitimizin Mekanik Montajı:

    Elektronik Kısım:

    Örümcek kontol kartımızın servo pin bağlatılarını yapalım.

    Ön Sol Kalça servo – 46.pin
    Ön Sağ Kalça servo – 52.pin
    Arka sol kalça Servo-28.pin
    Arka sağ kalça Servo-13.pin
    Ön Sol Diz servo – 47.pin
    Ön Sağ Diz servo  – 53.pin
    Arka sol Diz servo – 29.pin
    Arka sağ Diz servo – 12.pin

    Hc-06 Bluetooth Modülün Bağlantı Pinleri:

    GND – GND
    VCC – + 5V
    TXD – RX0 / D0 (Sinyal)
    RXD – TX0 / D1 (Sinyal)

    Yazılım Kısmı:

    #include <Servo.h> // Servo kütüphanesi
     
    // servoların başlangıç pozisyonları
    #define FLHcenter 1500
    #define FRHcenter 1500
    #define RLHcenter 1520
    #define RRHcenter 1450
     
    #define FLKcenter 1150
    #define FRKcenter 1220
    #define RLKcenter 1220
    #define RRKcenter 1210
     
    // servoların pin numaraları
     
    #define FLHpin 46 // Front Left Hip servo pin
    #define FRHpin 52 // Front Right Hip servo pin
    #define RLHpin 28 // Rear Left Hip servo pin
    #define RRHpin 13 // Rear Right Hip servo pin
     
    #define FLKpin 47 // Front Left Knee servo pin
    #define FRKpin 53 // Front Right Knee servo pin
    #define RLKpin 29 // Rear Left Knee servo pin
    #define RRKpin 12 // Rear Right Knee servo pin
     
    char INBYTE; // gelen ses komutları
     
    // led pinleri
    int led1 = 27;
    int led2 = 11;
    int led3 = 45;
    int led4 = 26;
    int Time = 90;
    int LShift = 280;
    int RShift = 280;
    int Raise = 550;
     
    // servo tanımlamaları
    Servo FLHservo;
    Servo FRHservo;
    Servo RLHservo;
    Servo RRHservo;
    Servo FLKservo;
    Servo FRKservo;
    Servo RLKservo;
    Servo RRKservo;
     
    void setup()
    {
    // Attach servos (digitally)
    FLHservo.attach(FLHpin);
    FRHservo.attach(FRHpin);
    RLHservo.attach(RLHpin);
    RRHservo.attach(RRHpin);
    FLKservo.attach(FLKpin);
    FRKservo.attach(FRKpin);
    RLKservo.attach(RLKpin);
    RRKservo.attach(RRKpin);
     
    // Attach LEDs (digitally)
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(led4, OUTPUT);
     
    Serial.begin(9600);
     
    // servolara başlangı açılarını yazdırma
    FLHservo.writeMicroseconds(FLHcenter);
    FRHservo.writeMicroseconds(FRHcenter);
    RLHservo.writeMicroseconds(RLHcenter);
    RRHservo.writeMicroseconds(RRHcenter);
    FLKservo.writeMicroseconds(FLKcenter+700);
    FRKservo.writeMicroseconds(FRKcenter+700);
    RLKservo.writeMicroseconds(RLKcenter+700);
    RRKservo.writeMicroseconds(RRKcenter+700);
    delay(500);
     
    // gelen ses komutlarının harflerle eşleştirlmesi
    Serial.println("wasd - movement");
    Serial.println("z - sleep");
    Serial.println("x - play dead");
    Serial.println("i - sit");
    Serial.println("u - stand");
    Serial.println("q - wake up");
    }
     
    void loop() {
    Serial.println("Komut almaya hazır");
    while (!Serial.available());
    INBYTE = Serial.read();
    delay(50);
     
    if (INBYTE == 'q') // Uyan
    {
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(200);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(200);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(200);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(200);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(200);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(200);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(200);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    }
    else if (INBYTE == 'z') //Uyu
    {
    FLHservo.writeMicroseconds(FLHcenter);
    FRHservo.writeMicroseconds(FRHcenter);
    RLHservo.writeMicroseconds(RLHcenter);
    RRHservo.writeMicroseconds(RRHcenter);
    FLKservo.writeMicroseconds(FLKcenter+700);
    FRKservo.writeMicroseconds(FRKcenter+700);
    RLKservo.writeMicroseconds(RLKcenter+700);
    RRKservo.writeMicroseconds(RRKcenter+700);
    delay(1000);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(200);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(200);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(200);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(200);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(200);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(200);
    }
    else if (INBYTE == 'u') // Ayağa kalk
    {
    // Center servos
    FLHservo.writeMicroseconds(FLHcenter);
    FRHservo.writeMicroseconds(FRHcenter);
    RLHservo.writeMicroseconds(RLHcenter);
    RRHservo.writeMicroseconds(RRHcenter);
    FLKservo.writeMicroseconds(FLKcenter);
    FRKservo.writeMicroseconds(FRKcenter);
    RLKservo.writeMicroseconds(RLKcenter);
    RRKservo.writeMicroseconds(RRKcenter);
    delay(1000);
    }
    else if (INBYTE == 'x') // Öl
    {
    FLHservo.writeMicroseconds(FLHcenter);
    FRHservo.writeMicroseconds(FRHcenter);
    RLHservo.writeMicroseconds(RLHcenter);
    RRHservo.writeMicroseconds(RRHcenter);
    FLKservo.writeMicroseconds(FLKcenter+700);
    FRKservo.writeMicroseconds(FRKcenter+700);
    RLKservo.writeMicroseconds(RLKcenter+700);
    RRKservo.writeMicroseconds(RRKcenter+700);
    delay(1000);
    }
    else if (INBYTE == 'i') //Otur
    {
    FLHservo.writeMicroseconds(FLHcenter);
    FRHservo.writeMicroseconds(FRHcenter);
    RLHservo.writeMicroseconds(RLHcenter-600);
    RRHservo.writeMicroseconds(RRHcenter+600);
    FLKservo.writeMicroseconds(FLKcenter);
    FRKservo.writeMicroseconds(FRKcenter);
    RLKservo.writeMicroseconds(RLKcenter+700);
    RRKservo.writeMicroseconds(RRKcenter+700);
    }
    else if (INBYTE == 'h') //El sıkış
    {
    FLHservo.writeMicroseconds(FLHcenter-600);
    FRHservo.writeMicroseconds(FRHcenter);
    RLHservo.writeMicroseconds(RLHcenter-600);
    RRHservo.writeMicroseconds(RRHcenter+600);
    FLKservo.writeMicroseconds(FLKcenter+600);
    FRKservo.writeMicroseconds(FRKcenter);
    RLKservo.writeMicroseconds(RLKcenter-700);
    RRKservo.writeMicroseconds(RRKcenter+700);
    delay(1000);
    FLKservo.writeMicroseconds(FLKcenter+300);
    delay(200);
    FLKservo.writeMicroseconds(FLKcenter+600);
    delay(200);
    FLKservo.writeMicroseconds(FLKcenter+300);
    delay(200);
    FLKservo.writeMicroseconds(FLKcenter+600);
    delay(200);
    }
    else if(INBYTE == 'w') // İleri Yürü
    {
    LShift=300;
    RShift=300;
    for(int i=0;i<5;i++)
    {
    Run();
    }
    }
    else if(INBYTE == 'a') // Sola dön
    {
    LShift=-300;
    RShift=300;
    for(int i=0;i<3;i++)
    {
    Run();
    }
    }
    else if(INBYTE == 'd') // sapa dön
    {
    LShift=300;
    RShift=-300;
    for(int i=0;i<3;i++)
    {
    Run();
    }
    }
    else if(INBYTE == 's') // Geriye yürü
    {
    LShift=-300;
    RShift=-300;
    for(int i=0;i<5;i++)
    {
    Run();
    }
    }
    }
     
    void Run()
    {
    FRKservo.writeMicroseconds(FRKcenter+Raise); // sağ ön bacak yükseltmek
    RLKservo.writeMicroseconds(RLKcenter+Raise-10); // sol ön bacak yükseltmek
    FLHservo.writeMicroseconds(FLHcenter+LShift); // geriye ön sol bacak hareketi
    RRHservo.writeMicroseconds(RRHcenter-RShift); // geriye arka sağ bacak hareketi
    delay(Time/2);
    FRHservo.writeMicroseconds(FRHcenter+RShift); // ileri ön sol bacak hareketi
    RLHservo.writeMicroseconds(RLHcenter-LShift); // ileri ön sağ bacak hareketi
    delay(Time);
    FRKservo.writeMicroseconds(FRKcenter); // Alt ön sağ bacak
    RLKservo.writeMicroseconds(RLKcenter); // Alt ön sol bacak
    delay(Time);
     
    FLKservo.writeMicroseconds(FLKcenter+Raise); // Ön sol bacağı kaldırma
    RRKservo.writeMicroseconds(RRKcenter+Raise); // Ön sağ bacağı kaldırma
    FRHservo.writeMicroseconds(FRHcenter-RShift); // arka sağ bacağı kaldırma
    RLHservo.writeMicroseconds(RLHcenter+LShift); // arka sol bacağı kaldırma
    delay(Time/2);
    FLHservo.writeMicroseconds(FLHcenter-LShift); // İleri ön sol bacak hareketi
    RRHservo.writeMicroseconds(RRHcenter+RShift); // İleri ön sağ bacak hareketi
    delay(Time);
    FLKservo.writeMicroseconds(FLKcenter); // Alt ön sol bacak
    RRKservo.writeMicroseconds(RRKcenter); // Alt ön sağ bacak
    delay(Time);
    }
    

    Bluetooth modülü bilgisayara tanıtalım aşağıdaki gibi gelen ve giden portlar oluşacaktır.Hc-06 bluetooth modülün şifresi 1234 tür.

    BitVoicer İle Sesli Kontrol:

    BitVoicer programını indirin.Programa ses tanımlamak için öncelikle dil ayarını yapmamız gerekecek.Bunu yapmak için programi yönetici olarak çalıştırın ve File >> Additional Languages bölümünden kullanacağınız dili indirin.

    Ses tanıtma için aşağıdaki adımları takip edelim.

    1. File >> New kısmından yeni dosya oluşturun.
    2. Default command data type veri türünü char yapın.
    3. Add New Sentence butonuna tıklayalım buradan komut ekliyoruz.
    4. Komut olarak örnek stand up yazdık.
    5. Yine Add New Sentence butonuna tıklayalım.
    6. İkinci komudumuz sit down  ekledik.
    7. Default command data type veri türünü char yapın.
    8. Bu şekilde istediğiniz komutu ekleyin.Data türünü char yapın.

    9. File >> Save kısmından komutları kaydedin.

    10. File >> Preferences kısmından konuşma tanıma dilimizi ve bluetooth bağlantı portumuzu seçelim ve kaydedelim.

    Python İle Sesli Kontrol:

    Python yazılımı buradan indirebilirsiniz.

    Projede için gerekli python kütüphanelerini indirelim.

    • PyBluez 0.20 – Bluetooth (setup)
    • PyAudio 0.2.8 – Ses tanımlama kütüphanesi (setup)
    • SpeechRecognition 1.1.0 – Ses tanıma(download)

    Python Yazılımı:

    # Title: Speech Controlled Quadrapod
    # Author: Adith Jagadish
    # Description: Uses Google's Speech Recognition API and python bluetooth library to control a quadrapod 
    # How to: Say "stand up" to make bot stand up and say "sit down" to make it sit. 
    # Say "stop listening to terminate the program"
     
    import bluetooth
    import speech_recognition as sr
     
    port = 1
    bd_addr = "xx:xx:xx:xx:xx:xx"
    sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM )
    sock.connect((bd_addr, port))
    r = sr.Recognizer()
    r.pause_threshold = 0.6
    r.energy_threshold = 400
    MESSAGE = "continue"
    print("Ready to accept command...\n")
    while (MESSAGE != "stop listening"):
     while (MESSAGE == "continue"):
     try:
     # use the default microphone as the audio source
     with sr.Microphone() as source:
     # listen for the first phrase and extract it into audio data
     audio = r.listen(source,timeout = None)
     # recognize speech using Google Speech Recognition 
     print("Me: " + r.recognize(audio)) 
     MESSAGE = str(r.recognize(audio))
     except LookupError:
     # speech is unintelligible 
     MESSAGE = "continue"
     print("Could not understand audio")
     if(MESSAGE == "sit down"):
     sock.send("i")
     elif(MESSAGE == "stand up"):
     sock.send("u")
     elif(MESSAGE == "stop listening"):
     break;
     MESSAGE = "continue"
    sock.close()
    print("\nProgram terminated.")

    Bluetooth ip adresinizi bd_addr = “00:14:01:23:21:78” satırına yazınız.Bluetooth ip adresini aşağıdaki ekrandaki gibi öğrenebilirsiniz.

    Robotumuzun Kontrolü:

    Robotumuzun bağlantılarını yapalım ve çalıştıralım.

    Bilgisayarınızın bluetooth’unu açın.Mikrofonun çalıştığından emin olun.

    BitVoicer veya Python programından istediğinizle tanımladığınız ses komutlarını söyleyerek robotunuzu kontrol edebilirsiniz.

    Kendi Robotunu Yap projelerimizin bu bu bölümünde de sesli kontrol edilen dört bacaklı robotumuzu tamamladık.

     


    PAYLAŞ
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    Sezgin GÜL

    Sezgin GÜL

    Makine Mühendisi, Girişimci, Maker

    Kimler Neler Demiş?

    13 Yorum - "Sesli Kontrol Edilen Dört Bacaklı Robot Projesi"

    avatar
    Sıralama:   En Yeniler | Eskiler | Beğenilenler
    ahmet
    Ziyaretçi

    kardesşim merhaba robotun plastık aksamının 3d prınter stl formatındakı dosyaları elınde varsa lınk verebılırmısın

    sami
    Ziyaretçi

    Merhaba,malzemeler şuan güncel olarak temin edebileceğim bir yer var mı üstteki yorumlarda yazan siteden bulamadım acaba bitirme tezi için çok acil lazım yardımcı olur musunuz?

    remzi
    Ziyaretçi

    merabalar öncelikle calişmalar icin tesekurler yanliş anlamıyında bu kadar seyi okulda öğrenmediniz bence 🙂
    önerebildiğiniz robotlarla ilgili sıfırdan anlatım kodlarla dahil bir kitap var mı tam olarak yapmak istediğim sey zihin gücüyle yuruyen robot yapmak ..

    Mustafa
    Ziyaretçi

    robotistan.com/Tower-Pro-SG90-RC-Mini-Servo-Motor,PR-92.html bu servo motorlar dediğin servolar dimi.

    Mustafa
    Ziyaretçi

    Çok sağolun sitenizi takipte kalıcam

    Mustafa
    Ziyaretçi

    1-) Peki bu dagi spider kartı nerden temin edebilirim.
    İnternette bulamadım?
    2-) Bu kartı daha önce hiç kullanmadım yazılımı hangi program diliyle yazı cam?
    3-) Anladığım kadarıyla 8 adet servi motor var.Bu servo motorların voltaj ve rpm hakkında bilgi verir misiniz?
    4-) Robotta olan aynı şaseyi verilen eklem yerleri için kullanılan parçaları nerden temin edebilirim?
    5-) Bu kartı kullandığım zaman herhangi bir motor sürücü devresini ihitiyacım var mı?
    6-) Tekerler için nasıl birşey kullanılmalı sizce?
    7-) Bu led aydınlatmayı yaparken gereken voltajı nerden alıyoruz

    Mustafa
    Ziyaretçi

    Bu uygulamayı ardunio ile nasıl yapabilirim.Bunun için ardunio uno uygun mudur.Ve ardunio nun yanında hangi bileşenleri kullanmam gerekli.Yardımcı olurmusunuz

    Ayça derin
    Ziyaretçi

    Merhaba,
    Bir projenin belirli bir kısmı için yardıma ihtiyacım var. Bu gerekli modul ise şöyle. karsisinda yaninda altinda veya tepesinde duran insanın bir yetişkinmi bir gencmi bir çocukmu olduğunu nasıl anlayabiliriz. Bunu yapabilecek bir yöntem mevcut mu? Alt yapıda herhangi bir microcontroler veya proccesor olabilir .
    Şimdiden teşekkürler.

    wpDiscuz

    Yeni Projeler More

    • 16 Şubat 2017
      1 hafta ÖNCE 2 Yorum

      Öğrenme Fonksiyonuna Sahip Hareket Kopyalayan Robot Kol Yapımı

      Bu projede öğrenme yoluyla hareket kopyalayan robot kol yapımından bahsedeceğim. Endüstride kullanılan robot kollar, her zaman aynı hareketleri yapmaya odaklıdır. Örneğin ürün bandından bir nesneyi alıp başka bir banda aktarımını yapan robot kollar sürekli aynı hareketi yapmaktadır. Bu hareketler önceden öğretilerek robot kola aktarılır. Burada da aynı mantıkla robot ...

    • 11 Şubat 2017
      2 hafta ÖNCE 10 Yorum

      Arduino İle Labirent Çözen Robot Yapımı

      Kendi robotunu yap projelerimizin bu bölümünde arduino ile labirent çözen robot yapacağız. Labirent çözen robot özellikle robot yarışmalarında yer almaktadır. Bir labirentin çözüm yolunu bulmak aslında tek bir etkene bağlıdır. Bu etken sağ veya sol taraftaki herhangi bir duvarı takip ettirmektir. Bu etkenden yola çıkarak robot sol veya sağ ...

    • 07 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile MLX90614 Kızılötesi Sıcaklık Sensörü Kullanımı

      Cisme temas etmeden, cismin sıcaklığını ölçen MLX90614 kızılötesi sıcaklık sensöründen bahsedeceğim. Dahili bir 17-bit ADC ve güçlü bir DSP, MLX90614'ün ölçümlerinde yüksek doğruluk ve çözünürlük verir. Vücut sıcaklığı ölçmek için uygundur. Ayrıca hareket algılamada da kullanabilirsiniz. MLX90614 Özellikler: Ortam sıcaklığı ölçme aralığı -40 ile + 125 ° C Nesne ...

    • 05 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile Yazıyı Sese Dönüştüren Emic 2 Modülü Kullanımı

      Robotunuzu konuşturmak ve neler olup bittiğini söyletmek ister misiniz ? Emic 2 yazıyı sese çeviren modülle kolaylıkla projeleriniz konuşabilir. Emic-2, Parallax tarafından, ses sentezini tamamen zahmetsiz kılmak için Grand Idea Studio ile birlikte tasarlanmıştır.

    • 31 Ocak 2017
      4 hafta ÖNCE 7 Yorum

      Arduino ile DHT22 Sıcaklık Nem Sensörü Kullanımı

      DHT sensörleri, kapasitif nem sensörü ve bir termistör olmak üzere iki parçadan oluşur. DHT11 ve DHT22 olan iki DHT modelini ele alalım. Görünüm ve pin yapısı olarak benzer görünmelerine rağmen farklı ölçüm hassasiyetlerine sahiptirler. Aşağıda iki modelin karşılaştırmasına bakalım.

    Bizi Takip Et

    Son Yorumlar

    Sezgin GÜL
    Sezgin GÜL 2017-02-25 23:01:46
    merhaba batuhan, hatanın sebebi AFMotor.h kütüphanesini yüklemediğinden kaynaklanmış. Kütüphaneyi buradan indirebilirsin http://www.robimek.com/wp-content/uploads/AFMOTOR-master.rar
    batuhan 2017-02-25 21:52:21
    sezgin bey öncelikle çok teşekkür ediyorum proje için ; Arduino ya kodu derlediğimde şöyle bir sorun ile karşılaşıyorum Arduino:1.8.1 (Windows.....
    Emin ERKMEN 2017-02-25 19:55:34
    Bu robotun üstüne ekleme yapabilir misiniz? 1 hafta içinde? Bu bizim için çok önemli.
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 19:48:46
    Çizgili olan labirenti çözen robotlarda o özellik mevcut. İlerleyen günlerde o tarz proje paylaşacağım.
    Emin ERKMEN 2017-02-25 19:34:28
    Peki bu robot. En kısa yolu nasıl bulabilir. İkinci kez aynı labirentten geçtiği zaman en kısa yoldan gitmesi için ne.....
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 18:10:10
    Kodlarda sorun yok videodaki robotta kullanılan kodlardır. Motor yönlerini doğru taktınız mı. Yön komutlarında doğru yönde dönüyorlar mı bunları da.....
    Emin ERKMEN 2017-02-25 18:03:27
    kodlarda sıkıntı yok yani?
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 17:17:46
    Bağlantılarınız doğru ve sensörlerin konumları uygun ise enerji yetersizliğinden kaynaklanabilir