BAĞLAN

Sesli komutlarla kontrol edilen robot (voice control robot)

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

    Bu projemizde robotumuz söylenen komutlara göre hareket etmesi amaçlanmıştır.Android telefondan söylenen komut bluetooth ile arduinoya aktarılarak algoritmada karşılığı olan fonksiyonu gerçekleştirir.

    Projede kullanılan komponentler:

    1. Arduino mega
    2. L293b motor sürücü
    3. Robot kit
    4. HC-SR04 Ultrasonik Mesafe Sensörü
    5. RGB led
    6. HC-06 Bluetooth modul
    7. Andoid uygulama

    Devre şeması:

     

    // SESLİ KOMUTLA ROBOT KONTROL PROJESİ BY ROBİMEK
     
    #include <Servo.h>// servo motor kütüphanesi
    #include <NewPing.h>//ultrasonik sensör kütüphanesi
    String voice;
    //motor pinleri
    #define SolMotorileri 6
    #define SolMotorGeri 5
    #define SagMotorileri 8
    #define SagMotorGeri 9
    #define led 53
    #define ledmavi 51
    #define ledyesil 49
    #define ledkirmizi 45
    #define ledvcc 47
     
    //sensör pinleri
    #define USTrigger 3
    #define USEcho 2
    #define Maksimum_uzaklik 100
     
    Servo servo; //servo motor tanımlama
    NewPing sonar(USTrigger, USEcho, Maksimum_uzaklik);//ultrasonik sensör tanımlama
    //kullanılacak eleman tanımı
    unsigned int uzaklik;
    unsigned int on_uzaklik;
    unsigned int sol_uzaklik;
    unsigned int sag_uzaklik;
    unsigned int zaman;
    // program ilk çalıştığında sadece bir kez çalışacak programlar
    void setup()
    {
    Serial.begin(9600); //iletişim ayarı
    //motor çıkışları
    pinMode(SolMotorileri, OUTPUT);
    pinMode(SolMotorGeri, OUTPUT);
    pinMode(SagMotorileri, OUTPUT);
    pinMode(SagMotorGeri, OUTPUT);
    pinMode(led, OUTPUT);
    pinMode(ledkirmizi, OUTPUT);
    pinMode(ledmavi, OUTPUT);
    pinMode(ledyesil, OUTPUT);
    pinMode(ledvcc, OUTPUT);
     
    servo.attach(4); //servo pin tanımı
    }
    // sonsuz döngü
    void loop() {
    while (Serial.available()){ //Okumak için kullanılabilir bayt olup olmadığını kontrol et
    delay(10); //10 milisaniye bekle
    char c = Serial.read(); //Seri okuma
    if (c == '#') {break;} // # tespit edildiğinde döngüden çık
    voice += c; //Ses = ses + c Steno
    }
    if (voice.length() > 0) {
    Serial.println(voice);
     
    if(voice == "*ileri"||voice == "*ileri git") {ileri();}
    else if(voice == "*geri"||voice == "*geri gel"){geri();}
    else if(voice == "*sağa dön"||voice == "*sağ") {sag();}
    else if(voice == "*sola dön"||voice == "*sol") {sol();}
    else if(voice == "*dur"||voice == "*arabayı durdur") {dur();}
    else if(voice == "*sol ileri"){sol(); delay(100); ileri();}
    else if(voice == "*sağ ileri"){sag(); delay(100); ileri();}
    else if(voice == "*sol geri"){sol(); delay(100); geri();}
    else if(voice == "*sag geri"){sag(); delay(100); geri();}
    else if(voice == "*ileri git dur"||voice == "*biraz ileri git") {ileri(); delay(500); dur();}
    else if(voice == "*geri gel dur"||voice == "*biraz geri gel") {geri(); delay(500); dur();}
    else if(voice == "*sola dön dur"||voice == "*biraz sola dön") {sol(); delay(500); dur();}
    else if(voice == "*sağa dön dur"||voice == "*biraz sağa dön") {sag(); delay(500); dur();}
    else if(voice == "*sola bak"||voice == "*soluna bak") {solabak();}
    else if(voice == "*sağa bak"||voice == "*sağına bak") {sagabak();}
    else if(voice == "*önüne bak"||voice == "*öne bak") {onunebak();}
    else if(voice == "*ışığı aç"||voice == "*ledi yak") {ledyak();}
    else if(voice == "*ışığı kapat"||voice == "*ledi söndür") {digitalWrite(51,HIGH); digitalWrite(49,HIGH); digitalWrite(45,HIGH); digitalWrite(47,LOW);}
    else if(voice == "*kırmızı") {digitalWrite(45,LOW); digitalWrite(49,HIGH); digitalWrite(51,HIGH); digitalWrite(47,HIGH);}
    else if(voice == "*yeşil") {digitalWrite(49,LOW); digitalWrite(45,HIGH); digitalWrite(51,HIGH); digitalWrite(47,HIGH); }
    else if(voice == "*mavi") {digitalWrite(51,LOW); digitalWrite(49,HIGH); digitalWrite(45,HIGH); digitalWrite(47,HIGH);}
    else if(voice == "*mor") {digitalWrite(51,LOW); digitalWrite(49,HIGH); digitalWrite(45,LOW); digitalWrite(47,HIGH);}
    else if(voice == "*beyaz") {digitalWrite(51,LOW); digitalWrite(49,LOW); digitalWrite(45,LOW); digitalWrite(47,HIGH);}
    else if(voice == "*engel"||voice == "*engel algıla"){engel();}
     
    voice="";}}
     
    // robotun yön komutları
    void ileri()
    {
    digitalWrite(SolMotorGeri, LOW);
    digitalWrite(SolMotorileri, HIGH);
    digitalWrite(SagMotorGeri, LOW);
    digitalWrite(SagMotorileri, HIGH);
    }
     
    void geri()
    {
    digitalWrite(SolMotorileri, LOW);
    digitalWrite(SolMotorGeri, HIGH);
    digitalWrite(SagMotorileri, LOW);
    digitalWrite(SagMotorGeri, HIGH);
    }
     
    void sag()
    {
    digitalWrite(SolMotorileri, LOW);
    digitalWrite(SolMotorGeri, HIGH);
    digitalWrite(SagMotorGeri, LOW);
    digitalWrite(SagMotorileri, HIGH);
    }
     
    void sol()
    {
    digitalWrite(SolMotorGeri, LOW);
    digitalWrite(SolMotorileri, HIGH);
    digitalWrite(SagMotorileri, LOW);
    digitalWrite(SagMotorGeri, HIGH);
    }
     
    void dur()
    {
    digitalWrite(SolMotorGeri, LOW);
    digitalWrite(SolMotorileri, LOW);
    digitalWrite(SagMotorileri, LOW);
    digitalWrite(SagMotorGeri, LOW);
    }
    void sagabak()
    {
    servo.write(0);
    delay(100);
    }
    void solabak()
    {
    servo.write(180);
    delay(100);
    }
    void onunebak()
    {
    servo.write(90);
    delay(100);
    }
    void ledyak()
    {
    digitalWrite(53,HIGH);
    }
    void ledkapat()
    {
    digitalWrite(53,LOW);
    }
    // sensörün mesafe ölçümü
    void sensor_olcum()
    {
    delay(50);
    zaman = sonar.ping();
    uzaklik = zaman / US_ROUNDTRIP_CM;
    }
    void engel()
    {
    delay(500);
    servo.write(90);
    sensor_olcum();
    on_uzaklik = uzaklik;
    if(on_uzaklik > 35 || on_uzaklik == 0)
    {
    ileri();
    }
    else
    {
    dur();
    servo.write(180);
    delay(500);
    sensor_olcum();
    sol_uzaklik = uzaklik;
    servo.write(0);
    delay(500);
    sensor_olcum();
    sag_uzaklik = uzaklik;
    servo.write(90);
    delay(500);
    if(sag_uzaklik < sol_uzaklik)
    {
    sol();
    delay(500);
    ileri();
    }
    else if(sol_uzaklik < sag_uzaklik)
    {
    sag();
    delay(500);
    ileri();
    }
    else
    {
    geri();
    }
    }
    }

    Android uygulamayı buradan indirin. Bluetooth modülle eşleştirme yapıp bağlanın. Uygulama google tabanını kullandığı için internete bağlı olmanız gerekir. Bağlantıyı kurduktan sonra mikrofon simgesine dokunun ve konuşun. Robotunuz söylediğiniz komuta göre işlevini yapacaktır.


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

    Sezgin GÜL

    Makine Mühendisi, Girişimci, Maker

    Kimler Neler Demiş?

    74 Yorum - "Sesli komutlarla kontrol edilen robot (voice control robot)"

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

    arkadaşlar robot engel algılamıyor bilen biri varsa el atabilir mi acaba ? teşekkürler.

    niyazi
    Ziyaretçi
    Arduino:1.6.7 (Windows 7), Kart:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)” C:\Users\hp\Documents\Arduino\wfsdcvbn\wfsdcvbn.ino:2:55: fatal error: NewPing.h: No such file or directory #include //ultrasonik sensör kütüphanesi ^ compilation terminated. exit status 1 Derleme sırasında hata oluştu. Rapor daha fazla veri içermeli “Derleme sırasında ayrıntılı çıktı göster” Dosya > Tercihler’de etkinleştirilmiş. hocam bu hatayı nasıl düzeltebilirim?
    İfan yolcu
    Ziyaretçi

    Hocam android program ios için olanı varmı ?teşekkürler

    tuncay
    Ziyaretçi

    merhaba projenizi inceledim ve aynı projeyi yapıcam ama yapmak istedigim projede beni sürekli dinleyen bir uygulama istiyorum yani ben susarsam komut gönderecek ve bana anlamadım diye ger dönüş yapmaycak bir uygulamaya ihtiyacım var. eger yardımcı olursanız sevinirim tabi yardım edemeseniz de yine de çok teşekkür ederim

    Çağrı ÇAĞMAN
    Ziyaretçi

    hocam sadece sesle kapıyı açıp kapatacak şekilde bir sistemim var ama kod sıkıntısı yaşıyorum kapıyı aç komutunu sesle gönderdiğimde kapıyı 90 derece açacak şekilde nasıl yapabilirim bana yardımcı olabilir misiniz.

    Furkan ARAR
    Ziyaretçi

    Hocam merhaba, ardunio ya yüklediğimiz zaman kütüphane istediği için yüklenmiyor.Kütüphaneyi nasıl bulabilirim.

    emir altıntop
    Ziyaretçi

    HOCAM projeden bende yapmak istiyorum ama az zamanım var bu işlerden pekde anlamıyorum acaba çok zamanınızı aldımı ve ekipmanların ücreti ne kadar ?
    saygılar

    sami
    Ziyaretçi

    merhaba,engel fonksiyonunda bir sorun var return engel(); yazdığımda çalışıyor ama bundan sonra başka komut veremiyorum

    berkan özkan
    Ziyaretçi

    bunu arduino uno ile yapabilir miyiz ?

    Ali Furkan
    Ziyaretçi

    Hocam engel algıla komutunu söylediğim zaman robota çalışmaya başlıyor ama daha sonra verdiğim komutların hiçbiri çalışmıyor mesela dur dediğimde durmuyor sadece engele göre hareket ediyor bu neden olabilir acaba?

    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