Arduino İle Kablosuz Robotik El Kontrol Projesi
Kendi Robotunu Yap projelerimizin bu bölümünde arduino ile xbee kablosuz haberleşme modülü üzerinden robotik el kontrolü yapacağız.Elimize eldiven takarak parmakların hareketini robotik elin parmaklarına aktarak eş zamanlı hareket ettireceğiz.
Verici devresi için kullanılan malzemeler:
- Elastik eldiven
- LilyPad Arduino
- XBee modül – kablosuz haberleşme
- XBee shield – XBee modülün bağlanısı için
- 5 Adet flex sensör
- 5 Adet 47 KΩ direnç
- 3 Adet 1.5 V pil (LilyPad 2.7 ile 5.5 V arasında çalışmaktadır.Bize 4.5 V yeterlidir.)
- LilyPad FTDI Adaptör
Alıcı Devresi için kullanılan malzemeler:
- Arduino Uno
- XBee modül
- 5 Adet servo motor (bu projede TowerPro SG90 kullanıldı.)
- Servo motor Shield (isteğe bağlı)
- XBee shield – XBee modülün bağlanısı için
- 9V pil
Elektronik Kısım:
Verici Devresi:
Flex sensörler potansiyometre mantığıyla çalışırlar ve büküldüğünde direnç değerleri değişir.Fakat potansiyometreden daha kullanışlıdır.Flex sensörlerin negatif uçlarını arduinonun analog pinlerine ve direnç üzerinden gnd ye bağlanır.Pozitif uçlarını ise pilin artı ucuna bağlıyoruz.
XBee modülün tx pinini ardinonun rx pinine, rx pinini arduinonu tx pinine takıyoruz.Flex sensörleri aşağıdaki gibi eldivenin parmakları üzerine dikiniz.
Alıcı Devresi:
Robot kolun servo motorlarını arduino unonun dijital pinlerine takıyoruz.XBee modülünün de bağlantıların aynı şekilde yapıyoruz.Robotik elin 3d printer baskı dosyasını buradan indirebilirsiniz.
Yazılım Kısmı:
Eldivenin Yazılımı:
//Robimek Robotik Sistemler 2015 int ResThumb = A4; int ResIndex = A3; int ResMiddle = A2; int ResAnnular = A1; int ResPinky = A0; int OpenedThumb =0; int OpenedIndex =0; int OpenedMiddle =0; int OpenedAnnular =0; int OpenedPinky =0; int ClosedThumb; int ClosedIndex; int ClosedMiddle; int ClosedAnnular; int ClosedPinky; int thumb =0; int index =0; int middle =0; int annular =0; int pinky =0; void setup() { Serial.begin(9600); pinMode(ResThumb, INPUT); pinMode(ResIndex, INPUT); pinMode(ResMiddle, INPUT); pinMode(ResAnnular, INPUT); pinMode(ResPinky, INPUT); ClosedThumb = analogRead(ResThumb); ClosedIndex = analogRead(ResIndex); ClosedMiddle = analogRead(ResMiddle); ClosedAnnular = analogRead(ResAnnular); ClosedPinky = analogRead(ResPinky); } void loop() { thumb = analogRead(ResThumb); index = analogRead(ResIndex); middle = analogRead(ResMiddle); annular = analogRead(ResAnnular); pinky = analogRead(ResPinky); if(thumb > OpenedThumb) OpenedThumb = thumb; if(index > OpenedIndex) OpenedIndex = index; if(middle > OpenedMiddle) OpenedMiddle = middle; if(annular > OpenedAnnular) OpenedAnnular = annular; if(pinky > OpenedPinky) OpenedPinky = pinky; if(thumb < ClosedThumb) ClosedThumb = thumb; if(index < ClosedIndex) ClosedIndex = index; if(middle < ClosedMiddle) ClosedMiddle = middle; if(annular < ClosedAnnular) ClosedAnnular = annular; if(pinky < ClosedPinky) ClosedPinky = pinky; thumb = map(thumb ,ClosedThumb ,OpenedThumb ,0,180); index = map(index ,ClosedIndex ,OpenedIndex ,0,180); middle = map(middle ,ClosedMiddle ,OpenedMiddle ,0,180); annular = map(annular,ClosedAnnular,OpenedAnnular,0,180); pinky = map(pinky ,ClosedPinky ,OpenedPinky ,0,180); Serial.write("<"); Serial.write(thumb); Serial.write(index); Serial.write(middle); Serial.write(annular); Serial.write(pinky); delay(30); }
Robotik El Yazılımı:
//Robimek Robotik Sistemler #include <Servo.h> Servo ServoThumb, ServoIndex, ServoMiddle, ServoAnnular, ServoPinky; byte startPackage; int AngThumb = 0; int AngIndex = 0; int AngMiddle = 0; int AngAnnular = 0; int AngPinky = 0; void setup() { Serial.begin(9600); ServoThumb.attach(9); delay(300); ServoIndex.attach(8); delay(300); ServoMiddle.attach(7); delay(300); ServoAnnular.attach(6); delay(300); ServoPinky.attach(5); delay(300); Serial.println("Ready to receive"); } void loop() { if(Serial.available()) { startPackage = Serial.read(); AngThumb = Serial.read(); AngIndex = Serial.read(); AngMiddle = Serial.read(); AngAnnular = Serial.read(); AngPinky = Serial.read(); if(startPackage == '<'){ if(AngThumb!=255) ServoThumb.write(AngThumb); if(AngIndex!=255) ServoIndex.write(AngIndex); if(AngMiddle!=255) ServoMiddle.write(AngMiddle); if(AngAnnular!=255) ServoAnnular.write(AngAnnular); if(AngPinky!=255) ServoPinky.write(AngPinky); } } delay(30); }
Yazılımları da yükledikten sonra gerekli bağlantıları yaparak parmaklarımızın hareketini eş zamanlı robotik ele aktarabiliriz.
Kendi Robotunu Yap projelerimizin bu bölümünde kablosuz robotik el kontrolünü yaptık.Bir sonraki projede görüşmek üzere.
hocam servo motor shiled olup olmaması neyi değiştirir
Hocam lütfen bana bilgi veriniz ben sizin videoda yaptığınız gibi bir el yapmadım paylaşmış olduğunuz kod yaptığım elin rahat bir şekilde çalışmasını sağlarmı lütfen bilgi verin hocam
Hangi Xbee Modülleri Kullandınız?
hangi xbee modülünü kullandınız acaba yardımcı olabilecek varsa sevinirim
yardımcı olabilecek varmı
sezgin bey
kullandığınız flex sensörlerr kaç cm olduğunu öğrenebilirmiyim.
Hocam robot elin cıktısını aldık hangi vida ve somunları kullanıcaz bi bilgilendirirmisin
vida ve somuna gerek yok. baskılarda saplamalar mevcut. sadece eklem yerlerini birleştirmek için deliklerde çapına uygun ince vida veya tel kullanabilirsiniz . Ben ataç kullanmıştım. Projedeki thingiverse sitesinde yer alan parçalardan bilek kısmı ve servoların yatakları eksik. thingiverse proje linkinde açıklama kısmında ek parçalar için link mevcut.
öncelikle emeğinize sağlık ben meslek lisesinde öğretmenim arduino çalışıyoruz bu projeyi yapacaz hocam xbe yerine hc06 modülleri kullanabilirmiyiz kullanırsak kodlarda değişiklik yapacakmıyız.nasıl yapalım sagol hocam
kodlarda değişiklik yapmanıza gerek yok. fakat eldivende kullancağınız bluetooth modeli hc-05 olmalı ve bu modülü at komutları ile master moda ayarlamanız gerekir.Robot el kısmındaki hc-06 olması yeterli. ayrıca iki modülün de baudrate değerleri koddaki iletişim hızıyla aynı olmalı. onu da yine at komutları ile ayarlayabilirsiniz. at komutlarına buradaki projeden bakabilirsiniz. http://www.robimek.com/hc-05-ile-hc-06-bluetooth-modullerin-haberlesmesi/
Merhaba hocam ben proje de protez el çizimi nasıl yapılır verdi hocamız sizde varsa atabilir misiniz
Hocam dediklerinizi yaptım fakat yine olmadı mySerial kapattım yine denedim.
//master code
void setup()
{
Serial.begin(9600);
}
void loop()
{
int bas_parmak_sensor = analogRead(A0);
int isaret_parmak_sensor = analogRead(A1);
int orta_parmak_sensor = analogRead(A2);
int yuzuk_parmak_sensor = analogRead(A3);
int serce_parmak_sensor = analogRead(A4);
int bas_parmak_aci = map(bas_parmak_sensor,945,835,0,180);
int isaret_parmak_aci = map(isaret_parmak_sensor,930,810,0,180);
int orta_parmak_aci = map(orta_parmak_sensor,927,820,0,180);
int yuzuk_parmak_aci = map(yuzuk_parmak_sensor,930,860,0,180);
int serce_parmak_aci= map(serce_parmak_sensor,932,835,0,180);
if ( bas_parmak_aci180){ bas_parmak_aci = 180; }
if ( isaret_parmak_aci180){ isaret_parmak_aci = 180; }
if ( orta_parmak_aci180){ orta_parmak_aci = 180; }
if ( yuzuk_parmak_aci180){ yuzuk_parmak_aci = 180; }
if ( serce_parmak_aci180){ serce_parmak_aci = 180; }
Serial.write(“<");
Serial.write(bas_parmak_aci);
Serial.write(isaret_parmak_aci);
Serial.write(orta_parmak_aci);
Serial.write(yuzuk_parmak_aci);
Serial.write(serce_parmak_aci);
delay(100);
}
///////////////////////////////////////////////////
//slave code
#include
Servo bas_parmak;
Servo isaret_parmak;
Servo orta_parmak;
Servo yuzuk_parmak;
Servo serce_parmak;
byte startPackage;
void setup() {
Serial.begin(9600);
bas_parmak.attach(2);
isaret_parmak.attach(3);
orta_parmak.attach(4);
yuzuk_parmak.attach(5);
serce_parmak.attach(6);
}
void loop() {
if(Serial.available() > 0){
startPackage = Serial.read();
int bas= Serial.read();
int isaret= Serial.read();
int orta= Serial.read();
int yuzuk= Serial.read();
int serce= Serial.read();
delay(30);
}
}
BU İKİ KODU BÖYLE DÜZENLEDİM EN SON YİNE ATTIM BİR HAREKETLİLİK VAR HOCAM OLACAK AMA BİRŞEYLER EKSİK BULAMIYORUM EKSİĞİ. YARDIMA VESİLE OLURSANIZ SEVİNİRİM . ÇOK TEŞEKKÜRLER.
bluetooth modüllerin baudrate değerleri 9600 olduğundan emin olun. hc-05 fabrika ayarı 38400 sanırım. onu değiştirin. Ayrıca 9600 den yüksek baudrate değerini kullanın
yaptım hocam 9600 ikiside
38400 ayarladım yine olmadı
iki modülde aynı baudrate de ve iki kodda bu baudrate değerinde olmalıdır.
Hocam oldu şükür tabi bu sırada 2 flex sensör bağlantısını bozdum robot parmağın birinin hareketini sağlayan bir yer kırıldı 🙂 ama sonu mutlu bitti yardımlarınız için teşekkür ediyorum tanısaydım sizi bir büyük pasta alırdım 🙂
rica ederim . düşünmen yeterli . pastanı almış varsayalım 🙂
Ramazan merhaba bizde projemizde robotik el yapıyoruz bunun hakkında bilgi alabilirmiyim senden. Bilgi verebilirmisin. resul.kndmr.05@hotmail.com bu benim mail adresim
Hocam parmaklar abuk sabuk haraket ediyor . Flex sensörde ki bilgi sanırım karışık geliyor . Lütfen yardım ediniz tez yazıyorum .
//master code
#include
SoftwareSerial mySerial(7,8);
void setup()
{
mySerial.begin(38400);
Serial.begin(9600);
}
void loop()
{
int bas_parmak_sensor = analogRead(A0);
int isaret_parmak_sensor = analogRead(A1);
int orta_parmak_sensor = analogRead(A2);
int yuzuk_parmak_sensor = analogRead(A3);
int serce_parmak_sensor = analogRead(A4);
int bas_parmak_aci = map(bas_parmak_sensor,945,835,0,180);
int isaret_parmak_aci = map(isaret_parmak_sensor,930,810,0,180);
int orta_parmak_aci = map(orta_parmak_sensor,927,820,0,180);
int yuzuk_parmak_aci = map(yuzuk_parmak_sensor,930,860,0,180);
int serce_parmak_aci= map(serce_parmak_sensor,932,835,0,180);
if ( bas_parmak_aci180){ bas_parmak_aci = 180; }
if ( isaret_parmak_aci180){ isaret_parmak_aci = 180; }
if ( orta_parmak_aci180){ orta_parmak_aci = 180; }
if ( yuzuk_parmak_aci180){ yuzuk_parmak_aci = 180; }
if ( serce_parmak_aci180){ serce_parmak_aci = 180; }
Serial.write(“<");
Serial.write(bas_parmak_aci);
Serial.write(isaret_parmak_aci);
Serial.write(orta_parmak_aci);
Serial.write(yuzuk_parmak_aci);
Serial.write(serce_parmak_aci);
delay(100);
}
////////////////////////////////////////////
//slave code
#include
#include
SoftwareSerial mySerial(7,8);
Servo bas_parmak;
Servo isaret_parmak;
Servo orta_parmak;
Servo yuzuk_parmak;
Servo serce_parmak;
byte startPackage;
void setup() {
mySerial.begin(38400);
Serial.begin(9600);
bas_parmak.attach(2);
isaret_parmak.attach(3);
orta_parmak.attach(4);
yuzuk_parmak.attach(5);
serce_parmak.attach(6);
}
void loop() {
if(Serial.available() > 0){
startPackage = Serial.read();
int bas= Serial.read();
int isaret= Serial.read();
int orta= Serial.read();
int yuzuk= Serial.read();
int serce= Serial.read();
if(startPackage == ‘<'){
if(bas!=255)
bas_parmak.write(bas);
if(isaret!=255)
isaret_parmak.write(isaret);
if(orta!=255)
orta_parmak.write(orta);
if(yuzuk!=255)
yuzuk_parmak.write(yuzuk);
if(serce!=255)
serce_parmak.write(serce);
}
delay(30);
}
}
HOCAM KODLARIM BUNLAR HC 05 MASTER HC 06 SLAVE
hata mı var
Kodda software serialden port açmışsınız fakat verileri standart serial üzerinden gönderiyorsunuz. Yapmanız gereken bluetooth modülleri açtığınız portlara takın ve verileri gönderirken de bu port üzerinden gönderin. Koda göre örnek gönderi kodu şu:
mySerial.write(bas_parmak_aci);
Ayrıca bluetooth modüllerin baudrate değerleri koddaki değerle aynı olmalıdır.
Son olarak servo motorları uygun gerilim akımla beslemeniz gerekiyor aksi halde beklenmedik hareketler yapmasına neden olur.
Teşekkür ediyorum Hocam . Deneyip size geri döneceğim .
Hocam,selamün aleyküm öncelikle herşey için teşekkürler . Ben HC-05 ve HC 06 kullanarak yapıyorum kodları kopyalayıp yapıştırdım hc 05 modül master mod yaptım ve rx tx e tx rx e bağladım yani hiçbir sorun yok gibi görünüyor . ancak veriler gitmiyor hiçbir şey olmuyor çalıştırdığım da sistemi . sorun ne olabilir hiç bilmiyorum . 05531051480 telefon numaram . cevap verirseniz çok yardımcı olursunuz teşekkürler
merabalar hocam xbee shield in uzerindeki x bee modülü tanıtamadım eldiveni xctu ya tanıttım xbee shield v.1.1 uzerıne takılı xbee modülün baglantısı nasıl olucak yardımcı olursanız sevinirim.
Merhaba hocam. Bluetooth hc-05 modülde xbee modülden farklı bir durum olur mu? Yoksa aynı işlevi görür mü? 5 parmak aynı anda hareket ettirebilir miyiz bluetooth ile? Şimdiden teşekkürler
Aslında çok güzel bir proje ama daha yeni olduğum için karışık geldi. Acaba bunu flex sensör kullanmadan ya da daha farklı bir yöntem ile de yapabilir miyiz?
Flex sensöre bir ton para vermenize hiç gerek yok kendiniz yapın çok daha güzel çalışıyor
Haberleşme tarafını HC05 ve HC06 ile nasıl yapabiliriz ?
hocam acil yardım ! tek bir flex sensör ve servoyla denemek istiyorum programı atıyorum fakat hic bir tepki alamıyorum flex i a0 a baglıyorum servoyu 5 nci pine
hc-05 kullanıyorum 2 tane biri master biri slave rx tx nerelere baglanması gerekiyo bu kodlar için yazarmısınız
aynı kodu kullanacaksınız. tx rx standart iletişim pinlerine takılacak.
hc 05 baglantı şemasını lütfen paylasın genel olarakta zaten foruma gelenler hc-05 sormuş yardımcı olursanız sevinirim
standart iletişim pinlerine bağlayacaksınız. rx tx e tx rx e vcc ve gnd leri de bağlayın tamamdır
Mrb Hc-05 hc-05 modüllerin iletişimi içinde aynı kodu kullanabilirmiyiz
cevap verebilirmisiz lütfen veya hc 05 ile olan kodu paylasırmısınız
evet kullanabilirsiniz.
Merhabalar emg kontrollu protez uzuv kol adli projemizi yaptirabilicegimiz birilerini ariyorum.
ipek hanım mail gönderdim.
Merhaba. Xbee haricinde bu haberleşme için Nrf2401L kablosuz haberleşme modülü kullanabilirmiyiz malum xbee ler çok pahalı olduğundan
abi kablolu için kod buldum başka bir siteden buldum
int inch,
int index,
int average;
diye biyer var hata verio yuklerken ne yapmalıyım
abi flex 2.2 veya 4.5 olursa kodlarda farklılık olurmu
Değişiklik yapmayabilirsin. yine çalışılır. fakat bükme oranlarında değişiklik olur. yani bir flex yarı bükünce 180 derece tamamlanır diğer flex tam bükünce 180 dereceyi tamamlar. Bu aralığı ayarlamak istersen şöyle yap. 4.5″ flex de direnç aralığı 10 kΩ 20 kΩ iken 2.2″ flex de ise 25kΩ 100kΩ arasında değişiyor. Açık ve kapalı haldeki değerleri ölç. bunları sınır referansı olarak map komutuna aktar.
abi kablolu için bu kod olurmu
#include
Servo myservo_pollice;
Servo myservo_indice;
Servo myservo_medio;
Servo myservo_anulare;
Servo myservo_mignolo;
int pollice;
int indice;
int medio;
int anulare;
int mignolo;
void setup() {
Serial.begin(9600);
myservo_pollice.attach(9);
myservo_indice.attach(10);
myservo_medio.attach(11);
myservo_anulare.attach(12);
myservo_mignolo.attach(13);
}
void loop() {
pollice = analogRead(A0);
indice = analogRead(A1);
medio = analogRead(A2);
anulare = analogRead(A3);
mignolo = analogRead(A4);
Serial.println(mignolo);
pollice = map(pollice, 20, 40, 0, 179);
indice = map(indice, 20, 40, 0, 179);
medio = map(medio, 20, 40, 0, 179);
anulare = map(anulare, 20, 40, 0, 179);
mignolo = map(mignolo, 20, 40, 0, 179);
myservo_pollice.write(pollice);
myservo_indice.write(indice);
myservo_medio.write(medio);
myservo_anulare.write(anulare);
myservo_mignolo.write(mignolo);
delay(150);
}
olur
abi başka servo kullana bilir miyiz kullanamazsak hangi özellikteki servo motorlar olmalı
abi xbee shield var malzeme listesinde ama fotoğraflarda bağlanmamış
fotoğrafta normal modül ile bağlanmış halini attım. shield ile de aynı bağlantıları yapabilirsiniz. shield daha kolay bağlantı açısından
abi xbee bir sürü model var fark edermi iki tane alsak oluyormu
abi birde xbee olayda en karışık nokta ayarlarını nasıl yapıcaz gösterirmisin
aynı iletişim protokolü ile haberleşen modüller olması gerekir. modülü at komutları ile programlayacaksınız. bu ayarlama da modüller birbirine tanıtılmalıdır. ağ adresleri aynı tanımda olmalıdır. ve baud rate değerleri gibi 7 tane at komutu ile modüllerin ayarı yapılır. xbee at komutları diye araştırma yaparsanız bulursunuz. Kısa zaman içinde ben de paylaşmaya çalışacağım.
abi hiç xbee karıştırmasak zbeye taktığımız kabloları birbirine bağlasak ne olur
zbeye derken yanlış yazdım xbee
anlamadım ? ayrıntılı yazar mısınız.
abi öncelikle çok teşşekkür ediyorum çok iyi ilgileniyorsun yorumlarla.
Diyorum ki mesela 1.pine taktık güç kablosunu xbee bunu diğerine gönderiyor biz tekrar 1.pinden alıyoruz hiç xbee yokmuş gibi diyorum
o zaman sistem kablosuz olmaz ki . kablolu yaptığınızda da iki arduino kullanmanız gereksiz. olur zaten bu kodla direk kablolu yapamazsınız. modüller birbirine bağlandığında sistem aktif oluyor.
çok sağolun soruma cevap olmadı ama araştırıp buldum 🙂
merhaba bu projeyi hc-05 ile yapabilir miyiz? eğer oluyorsa eklenecek kod var mıdır?
yapabilirsiniz iki bluetooth dan birini master diğerini slave olarak ayarlayın. Nasıl ayarlandığına buradan bakabilirsiniz. http://www.robimek.com/hc-05-ile-hc-06-bluetooth-modullerin-haberlesmesi/
İyi günler, bu projede NRF24L01 kullanabilir miyiz?
tabiki de kullanabilirsiniz.
Merhaba.Ben bu projeyi yapmak istiyorum ancak malzemeleri sipariş etmek istedim ve xbee diye aratınca birçok ürün çıktı karşıma.Sizin kullandığınız malzemelerin isimlerini, onları kolayca bulabileceğim bir şekilde yazabilirmisiniz.Mesela modeli gibi bilgileride paylaşırmısınız.Arduinoda yeniyim kusura bakmayın.İyi çalışmalar.
herhangi xbee modül alabilirsin fakat alırken aynı series modül alman ve kullanılan protokoller aynı olmalıdır. At komutlarından da haberleşme frekansları aynı yapman lazım. Robotistanda xbee modül ürin sayfasında tüm modellerin bilgileri var. Flex 2.2 inç olanlardan kullanabilirsin. Tower Pro MG996 RC Servo Motor tavsiye ederim. pil olarak lipo kullanabilirsin. 6v akımını da servo motorların akımına göre seç. Ürünlerin linklerini paylaşamıyorum malesef.
Hocam yazılımın kütüphanesi atarmisiniz lutfen
Alıcı kısımda servo kütühanesi gerekiyor buradan indir >> http://www.robimek.com/wp-content/uploads/Servo.rar
birde devreyi ve kodları arduino lara attım ama xbee ler haberlesme saglamıyor yani daha dogrusu calışmıyor xbee lerin pan ıd lerini ve baurd ratelerini ayarladım normalde kendi aralarında haberleşiyorlar
sıkıntı nerde olablir ?
alıcı kısımdaki if(startPackage == ‘<’) buradaki satırın yerine if(startPackage == ‘<') bunu yaz siteye aktarırken < işareti değişmiş
kodların byte startpackage kısmını biraz daha ayrıntılı açıklarmısınız.
Serialden veri gelip gelmeme durumunu kontrol ediyor. Byte veri türünden değerleri alıyor
Abi bu kodun hepsini birden kopyala yapıstıt yapıcaz
selamun aleykum hocam ben xbee shield kullandım ama xbee shieldi takdıgımda xbee nin hangi pininin
hangi pinlerine baglı oldugunu anlayamadım datasheetine baktım ama yardımcı olabilir misinz?
2. pin rx 3. pin tx pinine bağla.1. pini 3.3v a 10.pinide gnd ye bağla
Birde Xbee yerine esp8266 ile yapmayı düşünüyorum bununla bir sıkıntı olur mu ?
xbee modülünü xctu programı ile ayarlarını yapman gerekiyor. Birisi verici diğeri de alıcı konumunda olmalı .Ayrıca baudrate değerleri ve maksimum haberleşme mesafelerini de bu program ile yapman gerekiyor. Wifi modülü ile kontrol etmen için arayüz yapman gerekir.
Hocam Xbeeler arasındaki iletişim kısmı hakkında biraz daha detaylı bilgi verme şansın varmı ? Mesela birisi verici durumunda olup diğeri onunlamı iletişim kuruyor gibi