Arduino ile Bluetooth Kontrollü Robot Kol Projesi

Robot kollar, endüstride oldukça yaygın bir kullanımı olan akıllı makinalardır.  Bu makinalar farklı şekillerde ihtiyaca göre programlanarak kullanılabilmektedir. Burada sizlere yakın zamanda yapmış olduğum HC-06 bluetooth modülü aracılığıyla android işletim sistemli cihazlardan kontrol edilebilen robot kol projesini tüm detaylarıyla aktaracağım. Projeye dair 3D printer dosyalarını, mobil uygulama aplikasyonunu ve Arduino kodlarını sayfa sonundaki linkten indirebilirsiniz.

Malzeme Listesi

4 Adet Mini Servo Motor

Arduino Uno (isteğe bağlı klon veya orijinal kullanılabilir.)

HC-06 Bluetooth Modülü

Arduino Sensor Shield (isteğe bağlıdır, kablo fazlalığından kurtarır.)

M3x10 Cıvata-Somun

 

Öncelikle projemizin mobil uygulamasını MIT APP Inventor aracılığıyla oluşturalım.

Projenin kullanıcı ara yüzünü dilediğiniz gibi oluşturabilirsiniz. Benim yapmış olduğum ara yüz bu şekilde.

Arduinoya göndereceğimiz bluetooth sinyallerini mobil uygulamada sliderlar aracılığıyla kontrol ediyoruz. Bunun için aşağıdaki gibi bütün sliderlara arduino programımızdaki sinyal değerlerini giriyoruz.

Görüldüğü gibi burada MinValue – MaxValue  değerleri Arduino programımızda belirteceğimiz sinyal aralıklarının maksimum ve minimum değerleridir. ThumbPosition ise sliderın ekrandaki başlangıç pozisyonunu belirlemeye yarayan değerdir.

Devre Şeması

Arduino Programı

Program içerisinde motorların açı değerleri mekanizmaya göre değiştirilebilir. Montaj esnasında öncelikle motorların konumlarını telefondan ayarlayıp sonra gövdeye montajını yaparsanız daha rahat bir montaj olur. Açı değerleri android cihazdan gönderilen bluetooth sinyallerinin arduino kodları içinde map fonksiyonu ile belirlenir. Örneğin “servo1 = map(servo1, 1000,1180,80,170);” fonksiyonunda görüldüğü gibi 1 numaralı servo motorun slider ile belirlediğimiz 1000-1180 bluetooth sinyal değerleri arduinoya mobil cihazdan hc-06 ile gönderildiğinde  motoru 80-170 derece arasında kontrol etmemizi sağlar. Bunun gibi diğer motorların da kontrolü bu şekilde sağlanır. Mekanizmaya göre bu açı ve sinyal değerleri değiştirilebilir. Ben kendi projemde mekanizmama deneme yanılma ile bu değerleri uygun bulduğum için kodları bu şekilde yazmayı tercih ettim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//MERT TUNAY//
//ARDUINO ILE HC-06 BLUETOOTH MODULU KONTROLLU ROBOT KOL PROJESI//
// www.teknobeyinler.com //
/////////////////////////////////////////////////////////////////////////////////////
 
#include Serial.h ; //Seri haberleşme kütüphanesini tanımlar.
#include  Servo.h ; //Servo kütüphanesini tanımlar.
 
Servo myservo1, myservo2, myservo3, myservo4; //Servoları tanımlar.
 
int bluetoothTx = 0;
int bluetoothRx = 1; //Bluetooth alıcı vericilerini tanımlar.
 
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
 
void setup()
{
 myservo1.attach(5); // Sağ taraftaki servo.İleri-Geri gitmeyi sağlayan servo.
 myservo2.attach(6); // Sol taraftaki servo.Yukarı-Aşağı hareketi sağlar.
 myservo3.attach(7); // Açma-Kapama yapan servo.
 myservo4.attach(8); // Alt taraftaki servo. Sağ-Sol hareketi sağlar.
 
 Serial.begin(9600); // Seri haberleşme hızı.
 bluetooth.begin(9600); // Bluetooth modülü üzerinden 9600 baundluk bir haberleşme tanımlar.
}
void loop()
{
////////////////// BLUETOOTH HABERLEŞMESİ //////////////////////////////////////////////////////////////
  if(bluetooth.available()>= 2 )                       /////////////////////////////////////////////////
  {                                                    //
    unsigned int servopos = bluetooth.read();          //  Bluetooth ile gönderilen veri 2bytelıktır.
    unsigned int servopos1 = bluetooth.read();         //  Gelen veri okunur ve Serial ekrana yazdırılır.
    unsigned int data = (servopos1 *256) + servopos;   // 
    Serial.println(data);                              /////////////////////////////////////////////////
 
/////////////////// SERVO KONTROLLERİ //////////////////////////////////////////////////////////////////
    if (data >=1000 && data <1180) ///////////////////////////////////////////////// { // int servo1 = data; // Gelen veri 1000-1180 arasında ise gelen veri servo1 = map(servo1, 1000,1180,80,170); // map fonksiyonu ile 80-170 arasına sığdırılır myservo1.write(servo1); // ve servo1 isimli servoya o değer verilir delay(10); // } ///////////////////////////////////////////////// if (data >=2000 && data <2180) ///////////////////////////////////////////////// { // int servo2 = data; // Gelen veri 2000-2180 arasında ise gelen veri servo2 = map(servo2,2000,2180,30,120); // map fonksiyonu ile 30-120 arasına sığdırılır myservo2.write(servo2); // ve servo2 isimli servoya o değer verilir. delay(10); // } ///////////////////////////////////////////////// if (data >=3000 && data <3180) ///////////////////////////////////////////////// { // int servo3 = data; // Gelen veri 3000-3180 arasında ise gelen veri servo3 = map(servo3, 3000,3180,80,140); // map fonksiyonu ile 80-140 arasına sığdırılır myservo3.write(servo3); // ve servo3 isimli servoya o değer verilir. delay(10); // } //////////////////////////////////////////////// if (data >=4000 && data <4180)                     ////////////////////////////////////////////////
    {                                                  //
      int servo4 = data;                               // Gelen veri 4000-4180 arasında ise gelen veri
      servo4 = map(servo4, 4000, 4180,30,90);          // map fonksiyonu ile 30-90 arasına sığdırılır
      myservo4.write(servo4);                          // ve servo4 isimli servoya o değer verilir.
      delay(10);                                       //
    }                                                  /////////////////////////////////////////////////
  }
}

Projeye ait Arduino kodları, devre şeması, mobil uygulama aplikasyonu ve gövdeye ait çizim dosyalarına buradan ulaşabilirsiniz. İster 3D printer ile isterseniz de lazer kesim ile robotun gövdesini oluşturabilirsiniz.

Çalışma Videosu

“Arduino ile Bluetooth Kontrollü Robot Kol Projesi” için 23 yanıt

    1. Merhabalar. Bu projede kullanmış olduğum robot kol gövdesi “Mearm” ismindeki robot kol gövdesidir. Aşağıdaki linkte Mearm robot kolun kullanma kılavuzu bulunmakta. Bu robot kol gövdesini yapmak isterseniz yardımcı olacaktır. Aynı şekilde diğer linkte de görsel olarak Mearm robot kolun montajı anlatılıyor dilerseniz oradan da faydalanabilirsiniz. Benim tavsiyem eğer Mearm yapacaksanız 3d baskı ile değil lazer kesim ile yaparsanız maliyetiniz yarı yarıya düşecektir ve daha düzgün parçalar elde edersiniz.Ancak Mearm biraz basit bir robot kol gövdesi bir kere kullandıktan sonra bir daha kullanmadım biraz sarsıntılı çalışıyor bunu kesmek için alttaki parçayı minyatür rulmanla yataklamak yeterli olabilir ama bir seviye üstü diyebileceğim Eezybotarm robot kol gövdesini tavsiye ederim. Gayet sağlam ve düzgün çalışan bir robot kol gövdesi küçük çaplı uygulamalarda MG90 servo motoruyla hiç sorun yaşamadan kullandığım için onu daha çok beğeniyorum. Karar sizin. Ayrıca dilerseniz 3d baskı konusunda da yardımcı olabiliriz. Şimdiden kolay gelsin.
      https://learn.mime.co.uk/assets/docs/control-your-mearm-from-arduino/MeArm_v1.0_Manual_for_Arduino_v1.0.pdf
      http://www.instructables.com/id/Pocket-Sized-Robot-Arm-meArm-V04/

  1. merhabalar servo motorlar kaç mah akım çekiyor ve çalışma aralıkları 5v değilmi 9v zarar vermiyormu ayrıca 9v pilden arduinoya neden besleme alıyoruz, hem arduinoyu hemde servoları 9v pilmi besliyor ?

    1. Merhabalar bu projede mearm robot kol gövdesi kullanılmıştı bundan dolayı SG90 servo motorları yeterli olduğundan onları kullandık. SG90 servo motorlar 4.8V-6V arası çalışma gerilimine sahiptir. Yanılmıyorsam bir adet SG90 servonun çalışma akımı da 220mA diye biliyorum. Arduino da 6V-20V arası besleme gerilimiyle çalıştığı için 9V pil kısa süreli de olsa besleme için yeterli oluyor bu projede. Çalışma videosunda görebileceğiniz üzere beslemeyi laptop üzerinden yapmıştık ancak powerbank veya 18650 pil kullanarak besleme yapılırsa daha verimli olacaktır. Bu projede Arduino sensor shield kullanıldığı için servo motorlar beslemeyi Arduino üzerinden alıyor. Arduino bir adet SG90 bağlandığında sorunsuz çalıştırabiliyor ancak birden fazla bağlandığı takdirde titremeler veya hareketlerde kararsızlıklar oluşabiliyor. Bu gibi durumlarda servoların harici beslenmesi gerekiyor. Ancak biz bu projede zaten her bir servoyu ayrı ayrı kontrol ettiğimiz için aynı anda birden fazla servo çalışmıyor ve bu titremeler kararsızlıklar meydana gelmiyor. Arduino sensor shield vasıtasıyla servolar Arduino üzerinden rahatlıkla beslenebiliyor. Sensor shield kullanmadan devreyi kurmak isterseniz 9V pil yetersiz kalabilir servolar kararsız çalışabilir. Bunun önüne geçmek için servoları harici beslemeniz gerekir. Devre şemasındaki 9V pil gösterimi şematik olarak temsilen bir gösterimdir. O şekilde de devre sorunsuz çalışacaktır ancak 9V piller verimsiz olduğu için çok uzun süreli bir çalışma olmayacaktır.

      1. Mert bey ben de bu projeyi yaptım. Fakat tek besleme kullandım. 12 v adaptör kullandım. Ayrıca 5v-3a regulator kart kullandım. Breadbord üzerinde yaptım. Sağ sol hareket düzgün çalışıyor. Ilerigeri ve yukarı aşağıda sıkıntı yaşıyorum hareket olmuyor yada çok az bi hareket oluyor. Düzenli değil yani. Ayrıca bazen titremeler de oluyor. Herhalde projemi sizin almanıza bakarak tekrar düzeltmem gerekecek. Zahmet olmazsa app inventor dosyasını mail olarak atabilir misiniz bana. Bitirme projem haftaya kadr düzeltmem gerek. mail adresim: mahmuttosun4792@gmail.com.

  2. tekrar merhaba sensör shield tam olarak nasıl çalışıyor yani beslemeyi dışarıdan veremiyormuyuz bu kite ,

    1. Bu projede Arduino Uno Sensor Shield v4.0 kullanıldı. Sensor Shield beslemesini Arduinonun besleme pinlerinden alıyor. Harici besleme ile kullanmak isterseniz Sensor Shield v5.0 daha pratik olur beslemeyi klemenslerden verebilirsiniz direk. Sonuç olarak ikisi de Arduinoya takılarak kullanılıyor ve kablo kalabalığından kurtarmak için üretilmiş devreler. Beslemeyi dışarıdan vermek yine kablo kalabalığı yaratacaktır ve sensor shield kullanmanın bir anlamı kalmaz. Tabi ki hangi projede nasıl kullanacağınız ile alakalı bir durum ancak Arduinoya takarak kullanmak kablo fazlalığından kurtardığı için daha pratik bir kullanım sunuyor. Tercih sizin.

  3. merhaba kardeşim. aynı projeyi yaptım ancak bende çalışmadı.
    arduinoda serial monitörde sadece 1000-1180 arasındaki değerleri görebiliyorum sliderı oynatınca. diğer 2000-3000-4000li değerler değişmiyor oynatsamda slider’ı aynı kalıyor onlar. sorunun sebebi nedir sence?

    1. merhabalar anladığım kadarıyla yüksek ihtimal AppInventorde slider min value max value değerlerinde bir hata var oradaki sıralamayı yazılımdaki gibi girerseniz bu problem düzelecektir anlattığınızdan anladığım kadarıyla. Bunun için AppInventorde ekrana eklediğiniz her slider için min value ve max value değerlerini yazılımda olduğu gibi girmeniz gereklidir. Bunu doğru yaptığınızda sorununuz düzelecektir. Tabi ki elektronik bağlantılarınızı da kontrol etmenizde fayda var. Kolay gelsin.

      1. Value degerlerinde bir problem yok 2000 2180 3000 3180 4000 4180 yapmistim anlattiginiz gibi.
        1130 1080 v.s degerleri aliyorum ve o servoda hareketlenme oluyor ancak diger 3 servoda sliderlari kaydirsamda sadece 2180 3180 4180 gorunuyor, küsüratli degerlere gecis yapmiyor. Baglantilarda da problem oldugunu sanmiyorum kontrol ettim ama. Birde bluetooth modulu baglantisini kendi kesiyor bi sure sonra. Bunlarin nedeni ne olabilir

        1. Bluetooth modülünü direk bağladıysanız bir de gerilim bölücü uygulayarak bağlamayı deneyin hc-06 bluetooth modülleri haberleşmesinde sıkıntı çok çıkıyor. Eğer AppInventorde her slider için value değerleri doğruysa yazılımda problem yok çalışması lazım. Belki bir haberleşme problemi olmuş olabilir. Serial port üzerinden de değerleri kontrol ederek bluetooth modülünü gerilim bölücü yaparak devreyi tekrar bir kurun. Ayrıca servoların beslemesini de harici veya arduinodan bir dc-dc gerilim yükselteci kullanarak verin yoksa servolara arduinonun beslemesi yetmeyebilir bu da stabil çalışmamasına sebep olacaktır. Kolay gelsin.

  4. hocam biz mühendislik son sınıf öğrencisiyiz sizin attığınız bu apk arayüzünde teknobeyinler yazan kısmı değitirmemiz gerekiyor hocalar kabul etmez bize mail attığınız apk yıda mit inverter sitesinde açamadık aca o teknobeyinler.com yazısını nasıl silebiliriz

    1. .aia uzantılı AppInventor proje dosyası mail adresinize gönderilmiştir istediğiniz düzenlemeleri üzerinde yapabilirsiniz.

        1. Yoğunluğumdan dolayı ancak gördüm yorumunuzu mail olarak tüm sorularınızı yanıtlayacağım. Kolay gelsin…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.