Bir cümlelik özet
Robot kol, her biri bir açıyla kontrol edilen servolardan oluşur; doğru sırayla açıları değiştirdiğimizde kol bir nesneyi tutup başka bir yere bırakabilir.
Neden önemli?
Fabrikalarda kutuları taşıyan, laboratuvarda tüpleri yerleştiren, hatta uzay istasyonunda parça tutan makinelerin çoğu birer robot koldur. Karmaşık gibi görünseler de temel fikir çok tanıdıktır: her eklem bir açıyla döner, hareketler ise doğru sırayla yapılır.
Önceki derslerde robotun algıla–karar ver–uygula döngüsünü öğrendik. Çizgi izleyen robotta sensör okuyor, karar veriyor ve motorları sürüyorduk. Robot kolda ise "uygula" adımı değişiyor: tekerlek yerine servo motorları belirli açılara getiriyoruz. Bu ders, sıralı hareket mantığını kola taşıyor. Sıralamayı bir kez anladığında, "al ve bırak" (pick and place) yapan gerçek bir sistemin nasıl düşündüğünü de anlamış olacaksın.
Servo nedir ve neden açıyla çalışır?
Sıradan bir DC motor sürekli döner; ona "dur" demezsen dönmeye devam eder. Servo motor ise farklıdır: ona bir açı söylersin, o da miline bağlı kolu tam o açıya getirip orada bekler.
Çoğu küçük hobi servosu 0 ile 180 derece arasında hareket eder. 0 derece bir uç, 180 derece diğer uç, 90 derece tam orta demektir. Servonun içinde küçük bir dişli kutusu ve konumu ölçen bir devre vardır; bu sayede "90 dereceye git" dediğinde kendini oraya ayarlar.
Günlük hayattan örnek: kapı kolu
Bir kapı kolunu düşün. Aşağı bastığında belli bir açıya iner, bıraktığında geri döner. Servo da buna benzer; sadece açıyı sen belirlersin ve servo o açıda sabit durur. "Biraz döndür" değil, "35 dereceye getir" dersin. Bu, algoritma dersindeki "açık komut" kuralının aynısıdır: belirsiz değil, kesin.
Günlük hayattan örnek: kolun eklemleri
Kendi kolunu kaldırıp bir bardağı al. Farkında olmadan omuz, dirsek ve bilek açılarını ayrı ayrı ayarladın. Robot kol da tam olarak böyle düşünür. Her eklem bir servodur ve her servonun kendi açısı vardır.
Eklemli kol: her eklem bir açı
Basit bir robot kolu birkaç eklemden oluşur. Tipik bir eğitim kolunda şu eklemler bulunur:
- Taban (base): Kolu sağa-sola çevirir.
- Omuz (shoulder): Kolu yukarı-aşağı kaldırır.
- Dirsek (elbow): Kolun uzanıp bükülmesini sağlar.
- Kıskaç (gripper): Ucundaki tutucuyu açıp kapatır.
Kolun ucundaki tutucuya uç işlevci (İngilizcesi "end effector") denir. Bizim örneğimizde bu bir kıskaçtır: açık olduğunda nesneyi bırakır, kapalı olduğunda tutar.
Kolun o anki duruşunu bir açı listesi olarak yazabiliriz. Örneğin:
taban = 90 derece
omuz = 60 derece
dirsek = 120 derece
kıskaç = açık (0 derece)
Bu dört sayı, kolun uzayda tek bir duruşunu tam olarak tanımlar. Sayıları değiştirdiğimizde kol yeni bir duruşa geçer. İşte robot kolu programlamak, aslında bu açı listelerini doğru sırayla değiştirmektir.
"Al ve bırak" mantığı: hareketleri sıraya dizmek
Bir nesneyi bir noktadan alıp başka bir noktaya bırakmaya al-bırak (pick and place) denir. Bunu tek bir sıçramada yapamayız; küçük ve sıralı adımlara böleriz. Tıpkı algoritma dersindeki gibi: doğru adımlar, doğru sırada.
Bir kalemi soldan alıp sağa bırakmak isteyelim. Mantığı önce sözde kodla yazalım:
Başla
Kıskacı aç
Kolu kalemin üstüne getir (taban ve omuz açılarını ayarla)
Omuzu indir, kıskacı kalemin hizasına getir
Kıskacı kapat # kalem artık tutuluyor
Omuzu kaldır # kalemi yukarı al
Tabanı sağa çevir # kalemi yeni noktaya taşı
Omuzu indir # bırakma yüksekliğine gel
Kıskacı aç # kalem serbest kalır
Kolu güvenli duruşa döndür
Bitir
Bu adımların sırası çok önemlidir. Kıskacı kapatmadan omuzu kaldırırsan kalem yerinde kalır. Omuzu indirmeden kıskacı açarsan kalem yüksekten düşer. Sıra bozulursa görev başarısız olur; bu, "doğru sırada olmalı" kuralının robot koldaki karşılığıdır.
Neden her hareketin arasında beklemek gerekir?
Servolar açıya anında ulaşmaz; küçük bir süre gerekir. Kod, bir sonraki komuta geçmeden önce kısa bir süre beklemezse kol hareketi bitmeden yeni komut gelir ve hareket düzensiz olur. Bu yüzden her adımdan sonra küçük bir gecikme koyarız.
Servoyu kodla kontrol etmek
Şimdi mantığı gerçek bir Arduino (C++) örneğine dökelim. Tek bir servoyu 0, 90 ve 180 dereceye götürüp geri getiren küçük bir program:
#include <Servo.h>
Servo omuz; // servo nesnesi
void setup() {
omuz.attach(9); // servo sinyal ucu 9. pine bağlı
}
void loop() {
omuz.write(0); // 0 dereceye git
delay(700); // hareketi tamamlaması için bekle
omuz.write(90); // ortaya git
delay(700);
omuz.write(180); // diğer uca git
delay(700);
}
omuz.write(90) komutu servoya "90 dereceye git" der; delay(700) ise "yerine oturması için 700 milisaniye bekle" demektir. Birden fazla servo kullansaydık her biri için ayrı bir Servo nesnesi ve ayrı bir pin tanımlardık.
Servoyu doğrudan Arduino'nun 5V pininden beslemek çoğu zaman yeterli akımı sağlamaz; kol titrer veya Arduino kendini yeniden başlatır. Bu yüzden servolar için ayrı bir pil paketi kullanılır. Arduino ile pil paketinin eksi uçları (GND) birbirine bağlanır; buna ortak toprak denir. Ortak toprak olmadan Arduino'nun gönderdiği sinyal servoya anlamlı gelmez.
Mini uygulama
Bu uygulamayı bir robot kolun olmadan da yapabilirsin; amaç mantığı kurmaktır.
- Kağıda dört eklem yaz: taban, omuz, dirsek, kıskaç.
- Masanın soluna bir silgi, sağına boş bir kutu koy.
- Silgiyi alıp kutuya bırakan adımları sözde kod olarak yaz. En az sekiz adım kullan.
- Her adımın yanına o anki kıskaç durumunu ("açık" / "kapalı") not et.
- Bir arkadaşına adımları yüksek sesle okut; sen de eline geçmiş gibi hareketi taklit et. Bir adım eksikse silgi düşecek veya kutuya girmeyecektir.
İpucu: "Kıskacı kapat" komutunun, "omuzu kaldır" komutundan önce geldiğinden emin ol. Bir robot kolun varsa, önce tek servoyu yukarıdaki Arduino koduyla test et, sonra hareketleri tek tek ekle.
Sık yapılan hatalar
Kıskacı yanlış zamanda açmak
Nesneyi taşırken kıskacı erken açarsan nesne düşer. Kıskaç, ancak kol bırakma noktasına ve doğru yüksekliğe geldikten sonra açılmalıdır.
Hareketler arasında beklememek
delay koymazsan komutlar üst üste biner ve servo hedefe varamadan yeni açı gelir. Kol sarsılır. Her anlamlı hareketten sonra kısa bir bekleme ekle.
Servoyu Arduino'dan beslemeye çalışmak
Birden fazla servoyu Arduino'nun kendi pininden beslemek genelde yetersizdir. Ayrı pil paketi kullan ve ortak toprağı bağla.
Açı sınırını aşmak
Çoğu hobi servosu yalnız 0–180 derece arası çalışır. write(200) gibi bir değer vermek servoyu zorlar veya dişlileri yıpratır. Açıları bu aralıkta tut.
Ortak toprağı unutmak
Arduino ve pil paketinin GND uçlarını birbirine bağlamazsan servo düzgün çalışmaz veya hiç hareket etmez.
Güvenlik notu
Hareket eden bir robot kol güvenli görünse de dikkat ister. Eklemler ve dişliler parmak, saç ve kablo sıkıştırabilir.
- Kolu çalıştırmadan önce etrafını temizle; kırılabilecek eşyaları ve fincanları uzaklaştır.
- Parmaklarını, saçını ve kabloları eklemlerden ve dişlilerden uzak tut. Kıskaç kapanırken parmağını arasına koyma.
- İlk denemede düşük hızda ve küçük açı değişimleriyle çalış; kolun nasıl davrandığını gör.
- Servolar için ayrı, düşük gerilimli bir pil paketi kullan ve ortak toprağı bağla. Asla şebeke elektriği (priz) kullanma.
- Kol beklenmedik hareket ederse enerjiyi kes (pili ayır) ve öyle müdahale et.
- Motorlar, pil ve aletlerle çalışırken bir yetişkinden yardım al.
Ders özeti
- Servo motor, kendisine söylenen açıya gidip orada bekleyen bir motordur; çoğu 0–180 derece arasında çalışır.
- Bir robot kol, her biri bir servoyla kontrol edilen eklemlerden oluşur; kolun duruşu bir açı listesiyle tanımlanır.
- "Al ve bırak" mantığı, hareketleri doğru sırayla dizmektir; kıskaç kapanmadan kol kaldırılmaz.
- Servolar açıya anında varmaz; her hareketten sonra kısa bir bekleme gerekir.
- Servolar ayrı pil paketiyle beslenir ve Arduino ile ortak toprak paylaşılır.
Kontrol soruları
- Servo motor ile sıradan bir DC motor arasındaki temel fark nedir?
- Bir robot kolun duruşunu neyle tanımlarız?
- "Al ve bırak" görevinde kıskaç ne zaman kapatılmalıdır: nesneyi kaldırmadan önce mi, sonra mı?
- Servolar arasında neden
delay(bekleme) koyarız? - Servoları neden Arduino yerine ayrı bir pil paketinden besleriz ve "ortak toprak" ne demektir?
Cevaplar
- Sıradan DC motor sürekli döner; servo ise kendisine söylenen belirli bir açıya gider ve orada durur.
- Her eklemin açısını içeren bir açı listesiyle (örneğin taban 90, omuz 60, dirsek 120, kıskaç açık) tanımlarız.
- Nesneyi kaldırmadan önce; yani kıskaç kapanıp nesne tutulduktan sonra kol yukarı alınır. Erken açılırsa nesne düşer.
- Servo hedef açıya anında varmaz;
delayolmadan yeni komut hareket bitmeden gelir ve kol sarsılır. - Çünkü Arduino'nun pini birden fazla servoya yeterli akım veremez; ayrı pil paketi kullanılır. Ortak toprak, Arduino ile pil paketinin eksi (GND) uçlarının birbirine bağlanmasıdır; sinyalin servoya doğru ulaşması için gereklidir.
Kaynak ve doğrulama notu
“Robot Kol Mantığı” dersi için doğrulama odağı Servo nedir ve neden açıyla çalışır? ile Günlük hayattan örnek: kolun eklemleri arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Robot davranışı yalnız kodla açıklanamaz; mekanik yapı, güç sistemi, sensör konumu ve zemin koşulları birlikte değerlendirilmelidir. Test sonuçları aynı parkurda birkaç tekrar yapılarak kaydedilmelidir.
Sonraki ders
Uzaktan Kontrol: Robotu bir düğme, joystick veya telefonla uzaktan yönetmenin mantığı.