İçeriğe Geç

#17 PicoBricks ile İki Eksenli Robot Kol Projesi

11 Nov 2023
#17 Two Axis Robot Arm Project With PicoBricks

Endüstriyel alanda insan gücünün yerini robot kollar aldı. Fabrikalarda robot kollar, insanın taşıyamayacağı ağırlık ve büyüklükteki yükleri taşıma ve döndürme görevlerini üstleniyor. Milimetrenin binde biri hassasiyetle konumlanabilmek, insan elinin sergileyebileceği hassasiyetin üzerindedir. Otomobil fabrikalarının üretim videolarını izlediğinizde robot kollarının ne kadar hayati olduğunu göreceksiniz. Robot olarak adlandırılmalarının nedeni aynı işi sonsuz tekrarlarla yapacak şekilde programlanabilmeleridir. Kol denmesinin nedeni kollarımız gibi eklemli bir yapıya sahip olmasıdır. Bir robot kolunun kaç farklı yöne dönebileceği ve hareket edebileceği eksenlerle ifade edilir. Robot kollar aynı zamanda alüminyum ve çeşitli metallerin oyulması ve şekillendirilmesinde de kullanılıyor. 7 eksenli CNC Router olarak adlandırılan bu cihazlar, bir heykeltıraşın çamuru şekillendirmesi gibi metallere şekil verebilmektedir.

Robot kolunun amacına bağlı olarak, step motorlar Ve Servo motorlar kullanılabilir. PicoBricks servo motorlarla proje yapmanızı sağlar. 

Ayrıntılar ve Algoritma

Ne zaman üzerinde nesne algılandı LDR sensör, RGB LED'i KIRMIZI renge dönecek ve robot kolu aşağıdaki manevraları gerçekleştirecektir:

  • tutucuyu aç
  • aşağı doğru hareket et
  • tutucuyu kapat
  • yukarı doğru hareket et

Kol hareketi tamamlandığında RGB LED YEŞİL yanacaktır.

Bu hareketlere göre iki servonun başlangıç ​​konumları şu şekilde olmalıdır:

  • Servo1 kontrol tutucusu KAPALI konumda olmalıdır
  • Servo 2 yukarı/aşağı kontrolü yapıyor hareket YUKARI konumda olmalıdır

Dört farklı hareket kontrol mantığı gereklidir:

  • YUKARI: 2 derecelik artışlarla 90 derecelik bir hareket gerçekleştirin
  • AŞAĞI: -2 derecelik artışlarla 90 derecelik bir hareket gerçekleştirin
  • AÇIK: tutucuyu 90 dereceye konumlandırın
  • KAPALI: tutucuyu -60 dereceye konumlandırın

Tüm hareketlere sesli geri bildirim eşlik edecek ve ekranda görüntülenecektir. GİTMEK sorun giderme amacıyla. Daha sonra istenirse say bloklarını kaldırabilirsiniz.

Servo motor hareketleri çok hızlıdır. Hareketi yavaşlatmak için servo motorları 30 milisaniye aralıklarla 2 derece hareket ettirerek 90 derecelik bir hareketi tamamlayacağız. Bunu tutucunun kapanması için yapmayacağız.

3D Baskı ve gerekli parçaları birleştirin Tutucu bağlantıdan Burada.

Bileşenler

1X PicoBrick
2X Servo Motorlu
4X Kolay Bağlantı Kabloları
Atlama Kabloları

Bağlantı şeması

Picobricks modüllerini kablolama olmadan kodlayabilir ve çalıştırabilirsiniz. Modülleri panodan ayırarak kullanacaksanız modül bağlantılarını grove kablolarla yapmalısınız.

Projenin İnşaat Aşamaları

Projeyi hazırlamak için Pan-Tilt kitinin parçalarını hazırlayın. 3D baskılı parçalarınızı, atık karton parçalarınızı, sıcak silikon yapıştırıcınızı ve makasınızı yanınızda taşıyın.

1) Öncelikle robot kolunun sabit kolunu hazırlayacağız. D parçasının yuvarlak kısmına 8 cm yüksekliğinde karton silindir yapın. D parçasının üzerine yerleştirip silikonla tutturun veya yapıştırın.

2) Servo motor paketinden çıkan başlığı biraz kısaltarak C kısmının üzerine yerleştiriniz. Pan Tilt kitindeki en küçük vidalarla sabitleyin.

 

two axis robot arm with rasperry pi


3) A ve C parçalarını 2 sivri uçlu vidayla birbirine sabitleyin.

4) Servo motoru dahili olarak C parçasına takın. Daha sonra servo motoru B parçasının üzerine yerleştirin ve vidalayın.

5) Tutucu için 3D yazıcıda yazdırdığınız dişli kısmının ortasından servo motor kafalarından birini kesip dişlinin içine yerleştirin. Daha sonra bunu servo motora vidalayın.

6) 3D baskılı Lineer dişliyi ve kolu güçlü bir yapıştırıcıyla birbirine yapıştırın.

7) Servoyu 3D yazıcı tutucusuna yerleştirin ve sabitleyin. Bunu sıcak silikonla veya vidalayarak yapabilirsiniz. Servo dişliyi lineer dişlinin üzerine yerleştirirken tamamen açık olduğundan emin olun.

8) Tutma servo sistemini silikonla B kısmına takın.

9) 3. adımda hazırladığımız parçayı ilk adımda kartondan hazırladığımız silindirin üzerinden geçirip silikonla sabitleyin.

10) Motor sürücü jumper'larını Servo pinlerine takın. Tutma servosunun kablosunu GPIO21'e ve devirme servosunun kablosunu GPIO22'ye bağlayın.

11) Yerleştirin motor sürücüsü, zil, LDR ve RGB LED modülünü bir platform üzerine yerleştirin ve robot kolunu buna göre platform üzerine yerleştirin. 3D Pen yazıcı ile projenizi dilediğiniz gibi özelleştirebilirsiniz.

Mikroblok Çalıştırma Sekmesi

 

PicoBricks'in MicroPython Kodları

Robot Kol Kodu:

 

makineden içe aktarma Pin, PWM, ADC
utime içe aktarma uykusundan
picobricks'ten WS2812'yi içe aktarın

# Kitaplıkları tanımlayın
ws = WS2812(6, parlaklık=0,3)
ldr = ADC(27)
buzzer = PWM(Pin(20, Pin.OUT))
servo1 = PWM(Pin(21))
servo2 = PWM(Pin(22))
# LDR, buzzer ve servo motor pinlerini tanımlayın

servo1.freq(50)
servo2.freq(50)
buzzer.freq(440)
# Servo motorların ve buzzerın frekanslarını tanımlayın

# RGB renk ayarları
KIRMIZI = (255, 0, 0)
YEŞİL = (0, 255, 0)
SİYAH = (0, 0, 0)

açıyukarıaşağı = 4770
açıyukarıaşağı2 = 8200

Def up():
    küresel açıyukarıaşağı
    (45) aralığındaki i için:
        açıyukarıaşağı += 76
        servo2.duty_u16(açıyukarıaşağı)
        uyku(0,03)
    buzzer.duty_u16(2000)
    uyku(0,1)
    buzzer.duty_u16(0)
    # Servo2 belirli aralıklarla yükseliyor

def aşağı():
    küresel açıyukarıaşağı
    (45) aralığındaki i için:
        açıyukarıaşağı -= 76
        servo2.duty_u16(açıyukarıaşağı)
        uyku(0,03)
    buzzer.duty_u16(2000)
    uyku(0,1)
    buzzer.duty_u16(0)
    # Servo2 belirli aralıklarla kapanıyor

def açık():
    küresel açıyukarıaşağı2
    (45) aralığındaki i için:
        açıyukarıaşağı2 += 500
        servo1.duty_u16(açıyukarıaşağı2)
        uyku(0,03)
    buzzer.duty_u16(2000)
    uyku(0,1)
    buzzer.duty_u16(0)
    # Servo1 kelepçeleri açmak için çalışıyor

def kapat():
    küresel açıyukarıaşağı2
    (45) aralığındaki i için:
        açıyukarıaşağı2 -= 500
        servo1.duty_u16(açıyukarıaşağı2)
        uyku(0,03)
    buzzer.duty_u16(2000)
    uyku(0,1)
    buzzer.duty_u16(0)
    # Servo1 kelepçeleri kapatmak için çalışıyor

açık()
servo2.duty_u16(açıyukarıaşağı)
ws.pixels_fill(SİYAH)
ws.pixels_show()

Doğru iken:
    ldr.read_u16() > 20000 ise:
        ws.pixels_fill(KIRMIZI)
        ws.pixels_show()
        uyku(1)
        buzzer.duty_u16(2000)
        uyku(1)
        buzzer.duty_u16(0)
        açık()
        uyku(0,5)
        aşağı()
        uyku(0,5)
        kapalı()
        uyku(0,5)
        yukarı()
        ws.pixels_fill(YEŞİL)
        ws.pixels_show()
        uyku(0,5)
        # LDR'den alınan bilgiye göre RGB LED kırmızı ve yeşil yanıyor ve servo motorlar hareket ediyor

Robot Kolu Servo Kodu:

 

makineden içe aktarma Pimi, PWM

servo1 = PWM(Pin(21))
servo2 = PWM(Pin(22))

servo1.freq(50)
servo2.freq(50)

servo1.duty_u16(8200) # 180 derece
servo2.duty_u16(4770) # 90 derece

PicoBricks'in Arduino C Kodları

#include 
#ifdef __AVR__
  #include 
#endif
#PIN 6'yı tanımla
#NUMPIXELS 1'i tanımlayın
Adafruit_NeoPixel pikselleri(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Pikseller arasında duraklama süresi (milisaniye cinsinden)

#include 
Servo myservo1;
Servo myservo2;

int açıyukarıaşağı;

geçersiz kurulum() {
  pinMode(20, ÇIKIŞ);
  pinMode(27, INPUT); //giriş ve çıkış pinlerini tanımlıyoruz

  piksel.begin(); // NeoPixel kütüphanesini başlatıyoruz.
  piksel.clear(); // Tüm pikselleri 'kapalı' olarak başlat

  myservo1.attach(21);
  myservo2.attach(22); // Servoları ekleyin.

  Açık();
  açıyukarıaşağı = 180;
  myservo2.write(açıyukarıaşağı);
}

geçersiz döngü () {
  if (analogOkuma(27) > 150) {
    piksel.setPixelColor(0, piksel.Color(255, 0, 0)); // Kırmızı renk.
    piksel.show();
    gecikme(1000);
    ton(20, 700); // Zil sesini çal
    gecikme(1000);
    ton yok(20); // Zil sesini durdur
    Açık();
    gecikme(500);
    Aşağı();
    gecikme(500);
    Kapalı();
    gecikme(500);
    Yukarı();

    piksel.setPixelColor(0, piksel.Color(0, 255, 0)); // Yeşil renk.
    piksel.show();
    gecikme(500);

    // Bir gecikmeden sonra rengi temizle.
    piksel.setPixelColor(0, piksel.Color(0, 0, 0)); // Kapalı
    piksel.show();
    gecikme(500);
    Açık();
    açıyukarıaşağı = 180;
    myservo2.write(açıyukarıaşağı); // Servo pozisyonunu sıfırla
  }
}

void Açık() {
  myservo1.write(180); //Servo açılıyor
}

void Kapat() {
  myservo1.write(30); // Servo kapanır
}

geçersiz kılma() {
  for (int i = 0; i < 45; i++) {
    açıyukarıaşağı += 2;
    myservo2.write(açıyukarıaşağı); //Servoyu yukarı taşı
    gecikme(30);
  }
}

geçersiz Aşağı() {
  for (int i = 0; i < 45; i++) {
    açıyukarıaşağı -= 2;
    myservo2.write(açıyukarıaşağı); //Servoyu aşağı taşı
    gecikme(30);
  }
}

GitHub Proje Sayfası
Önceki Gönderi
Sıradaki Gönderi

Abone olduğun için teşekkürler!

Bu e-posta kaydedildi!

Görünümü satın alın
Seçenekleri Seçin

Seçeneği Düzenle

Stok Bildirimi

Karşılaştır

Ürün Stok KoduDeğerlendirmeAçıklama Kategori Uygunluk Ürün Tipi Diğer Detaylar
this is just a warning
Giriş Yap
Alışveriş Sepeti
0 Ürünler
Same Day Shipping No Extra Costs
Easy Returns Guarantee Return with Ease
Secure Checkout Secure Payment