Joystick Kontrollü Robot Kol
Proje Amacı
2 eksenli bir joystick ile 2-3 servo motoru kontrol ederek basit bir robot kolun omuz/dirsek/tutucu eklemlerini yönlendirir; joystick'in X/Y eksenleri doğrudan iki servo açısına eşlenir, kol ucunun uzaydaki gerçek konumu hesaba katılmaz (bkz. Alternatif Çözümler — ters kinematik).
Gerekli Malzemeler
- Arduino Uno
- 2 Eksenli Joystick Modülü
- 3x SG90 Servo
- Robot Kol Kaide/Kiti
- Breadboard
Gerekli Kütüphaneler
Servo — Arduino IDE ile birlikte gelir, ekstra kurulum gerekmez.
Pin Bağlantıları
| Bileşen Pini | Bağlantı |
|---|---|
| Joystick VRx | A0 |
| Joystick VRy | A1 |
| Joystick SW (buton) | D2 |
| Omuz Servo | D9 |
| Dirsek Servo | D10 |
| Tutucu Servo | D11 |
Devre Şeması
Arduino Kodu
| 1 | #include <Servo.h> |
| 2 | Servo omuz, dirsek, tutucu; |
| 3 | const int vrx=A0, vry=A1, sw=2; |
| 4 | |
| 5 | void setup(){ |
| 6 | omuz.attach(9); dirsek.attach(10); tutucu.attach(11); |
| 7 | pinMode(sw, INPUT_PULLUP); |
| 8 | omuz.write(90); dirsek.write(90); tutucu.write(0); |
| 9 | } |
| 10 | |
| 11 | void loop(){ |
| 12 | int x = analogRead(vrx); |
| 13 | int y = analogRead(vry); |
| 14 | bool butonBasili = digitalRead(sw) == LOW; |
| 15 | |
| 16 | int omuzAcisi = map(x, 0, 1023, 0, 180); |
| 17 | int dirsekAcisi = map(y, 0, 1023, 0, 180); |
| 18 | |
| 19 | omuz.write(omuzAcisi); |
| 20 | dirsek.write(dirsekAcisi); |
| 21 | tutucu.write(butonBasili ? 90 : 0); |
| 22 | |
| 23 | delay(20); |
| 24 | } |
Çalışma Açıklaması
3 servo birden Arduino 5V'undan beslenirse akım yetersiz kalabilir, servolar titreyebilir; ayrı 5V/6V güç kaynağı (ortak GND ile) önerilir. Robot kolun mekanik yapısı ayrıca temin edilmeli veya 3D yazdırılmalıdır.
Test Bilgisi
Devreyi kurun, kodu yükleyin. Joystick'i x/y yönlerinde hareket ettirip omuz ve dirsek servolarının buna orantılı döndüğünü gözlemleyin. Joystick butonuna basınca tutucu servonun kapandığını doğrulayın.
Olası Sorunlar ve Çözümleri
Servolar titriyorsa: 3 servonun aynı anda çektiği akımın Arduino 5V'unu zorladığından şüphelenin, ayrı güç kaynağı kullanın. Hareketler ters yönde oluyorsa: map() fonksiyonundaki min/max değerlerini (0,1023,0,180) ters çevirerek yön düzeltilebilir. Tutucu servo tam kapanmıyorsa: tutucu.write() değerlerini (0-90 aralığı) mekanik yapınıza göre kalibre edin. Kol zamanla (10-15 dakika sonra) yavaş yavaş hedefine gelmemeye başlıyorsa: bu ucuz SG90 klonlarında sık görülen bir dişli aşınması belirtisidir, servo ısınıp mekanik oyun (backlash) artar — metal dişlili bir servoya geçmek kalıcı çözümdür.
Alternatif Çözümler
3 eksenli basit kol yerine 4-5 servo ile daha gerçekçi bir insan koluna benzer hareket kabiliyeti eklenebilir. Joystick yerine önceden kaydedilmiş hareket dizileri (sequence/playback) ile otomatik tekrar eden hareketler programlanabilir. Ters kinematik (inverse kinematics) hesaplamalarıyla kolun ucunu belirli bir X-Y-Z koordinatına götürecek şekilde gelişmiş kontrol eklenebilir (ileri seviye matematik gerektirir).
Benzer Projeler
GPS Konum Takip Cihazı
NEO-6M GPS modülünden enlem/boylam okuyup Seri Monitör'de gösterir; modül NMEA formatında ham metin cümleleri gönderir, TinyGPS++ kütüphanesi bu cümleleri ayrıştırıp kullanılabilir sayılara çevirir.
SD Kart Veri Kayıt İstasyonu
Sıcaklık verisini zaman damgasıyla birlikte bir SD karta CSV formatında yazar — WiFi'siz bir Arduino Uno'nun veriyi 'gerçek zamanlı görmek' yerine 'sonradan analiz etmek' için nasıl kullanılabileceğinin en net örneği.
Parmak İzi ile Kapı Kilidi
R307 parmak izi sensörüyle önceden kaydedilmiş bir parmak izini tanıyıp doğrulandığında servo ile kilidi açar; tanıma işlemi sensörün kendi üzerinde yapılır, Arduino sadece sonucu okuyup kilide iletir.