back to top

PicoBricks ile Robot Kol Projesi

PicoBricks ile Robot Kol Projesi

Robot kollar, endüstriyel alanda insan gücünün yerini aldı. Birçok fabrikada kullanılan robot kollar, insanların taşıyamayacağı ağırlık ve büyüklükteki nesneleri taşıma veya döndürme görevini üstleniyor. Bu kollar, milimetrenin binde biri hassasiyet ile konumlanma becerisi ile insan bedeninin sergileyebileceği hassasiyetin oldukça üzerindedir. Birçoğumuz otomobil fabrikalarındaki üretim videolarına denk gelmişizdir. Bu videolardan anladığımız üzere robot kolların endüstriyel alanlarda ne kadar hayati önem taşıdığını görürüz. Robot kolların kaç farklı yöne dönebileceği veya hareket edebileceği eksenlerle ifade edilir. Robot kollar aynı zamanda alüminyum veya benzeri metallerin oyulmasında da kullanılır. Örneğin 7 eksenli CNC Router cihazlar, adeta bir heykeltıraşın çamura şekil vermesi gibi metallere şekiller verebilir.

Robot kolların amaçlarına bağlı olarak servo veya step motorlar kullanılabilir. Bu projemizde servo motorlar kullanacağız.

Detaylar ve Algoritma

Bir nesne LDR sensör ile algılandığında RGB LED kırmızı renge dönecek ve robot kol aşağıdaki işlemleri gerçekleştirecek.

  • Tutucuyu aç.
  • Aşağı yönde hareket et.
  • Tutucuyu kapat.
  • Yukarı yönde hareket et.

Robot kol hareketini tamamladığında RGB LED yeşil renge dönecek.

Bu hareketler baz alındığında servo motorların ilk hareketleri şu şekilde olmalıdır.

  • Servo 1 Kontrol Tutucu: Kapalı pozisyonda olmalı.
  • Yukarı/Aşağı Hareketi Kontrol Eden Servo 2: Hareket yukarı yönde olmalı.

4 farklı hareket kontrolü mantığı gerekli:

  • Yukarı: 2 derecelik aralıklarla 90 derecelik bir hareket
  • Aşağı: -2 derecelik aralıklarla 90 derecelik bir hareket
  • Açık: Tutucuyu 90 derecede konumlandırma
  • Kapalı: Tutucuyu -60 derecede konumlandırma

Tüm bu hareketler esnasında sesli ve görüntülü bir geri bildirim IDE üzerinden hataların giderilmesi amacıyla gönderilecektir.

Servo motor hareketleri oldukça hızlıdır. Bu yüzden yavaşlatmak için hareketlerin 2’şer derece ve 30’ar milisaniye aralıklarında olmasını sağladık.

Bu proje için 3D baskılar alınması gerekmektedir. Gerekli parçalara buradan ulaşabilirsiniz.

Bileşenler

1x PicoBricks

2x Servo Motor

4x Kolay Bağlantı Kabloları

Jumper Kablolar

Devre Şeması

Devre Şeması

Projenin Yapım Aşamaları

Projeyi hazırlamak için pan-tilt parçalarını hazırlayın. 3D baskılarınızı, karton parçalarınızı, silikonunuzu ve makasınızı hazırlayın.

1)İlk olarak robot kolumuzun sabit kısmını hazırlayacağız. D parçasının yuvarlak kısmı için 8 cm yüksekliğindeki silindir karton parçası hazırlayın. Daha sonra D parçası ile birleştirin ve silikon ile yapıştırın.

2)Servo motor paketinden çıkan başlık parçasını biraz kısaltarak C parçasının üstüne yerleştirin. Pan-Tilt kitinin içerisinde bulunan en küçük vidalarla sabitleyin.

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

4)Servo motoru C parçasına sabitleyin. Daha sonra B parçasıyla birleştirin ve vidalar kullanarak sabitleyin.

5)Tutucu için 3D yazıcıdan aldığınız dişli baskısının ortasından, servo motor kafalarından birini kesip yerleştirin. Daha sonra bu parçayı servo motor ile birleştirin.

6) 3D baskı olan lineer dişliyi ve kolu kuvvetli bir yapıştırıcıyla birbirine sabitleyin.

7) Servo motoru 3D baskı olan tutucu ile birleştirin ve sabitleyin. Servo dişlisini lineer dişli ile birleştirirken tamamen açık olduğundan emin olun.

8) Tutucu servo sistemini B parçası ile yapıştırarak birleştirin.

9) 3. Adımda hazırladığınız parçayı 1. Adımda hazırladığınız silindir kartonun üzerinden geçirip silikon kullanarak sabitleyin.

10) Motor sürücü jumper kablolarını servo motor pinlerine takın. Tutucu servo motoru GPIO21’e ve tilt servo motorunu GPIO22 pinine bağlayın.

11)Motor sürücüyü, buzzer’ı ve RGB LED’i bir platform üzerine yerleştirin. Robot kolu diğer parçaları yerleştirdiğiniz konumlara göre yerleştirin. 3D kalem yazıcı ile projenizi istediğiniz gibi kişiselleştirebilirsiniz.

12)PicoBricks’i, üzerinde bulunan güç girişinden USB ile veya jak girişinden 3 adet kalem kalem pil ile besleyerek robot kolu kontrol edebilirsiniz.

MicroBlocks Kodları

MicroPython Kodları

Robot Kol Kodu:

from machine import Pin, PWM, ADC
from utime import sleep
from picobricks import WS2812

# Define libraries
ws = WS2812(6, brightness=0.3)
ldr = ADC(27)
buzzer = PWM(Pin(20, Pin.OUT))
servo1 = PWM(Pin(21))
servo2 = PWM(Pin(22))
# Define LDR, buzzer, and servo motor pins

servo1.freq(50)
servo2.freq(50)
buzzer.freq(440)
# Define frequencies of servo motors and buzzer

# RGB color settings
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLACK = (0, 0, 0)

angleupdown = 4770
angleupdown2 = 8200

def up():
    global angleupdown
    for i in range(45):
        angleupdown += 76
        servo2.duty_u16(angleupdown)
        sleep(0.03)
    buzzer.duty_u16(2000)
    sleep(0.1)
    buzzer.duty_u16(0)
    # Servo2 goes up at specified intervals

def down():
    global angleupdown
    for i in range(45):
        angleupdown -= 76
        servo2.duty_u16(angleupdown)
        sleep(0.03)
    buzzer.duty_u16(2000)
    sleep(0.1)
    buzzer.duty_u16(0)
    # Servo2 goes down at specified intervals

def open():
    global angleupdown2
    for i in range(45):
        angleupdown2 += 500
        servo1.duty_u16(angleupdown2)
        sleep(0.03)
    buzzer.duty_u16(2000)
    sleep(0.1)
    buzzer.duty_u16(0)
    # Servo1 works for opening the clamps

def close():
    global angleupdown2
    for i in range(45):
        angleupdown2 -= 500
        servo1.duty_u16(angleupdown2)
        sleep(0.03)
    buzzer.duty_u16(2000)
    sleep(0.1)
    buzzer.duty_u16(0)
    # Servo1 works for closing the clamps

open()
servo2.duty_u16(angleupdown)
ws.pixels_fill(BLACK)
ws.pixels_show()

while True:
    if ldr.read_u16() > 20000:
        ws.pixels_fill(RED)
        ws.pixels_show()
        sleep(1)
        buzzer.duty_u16(2000)
        sleep(1)
        buzzer.duty_u16(0)
        open()
        sleep(0.5)
        down()
        sleep(0.5)
        close()
        sleep(0.5)
        up()
        ws.pixels_fill(GREEN)
        ws.pixels_show()
        sleep(0.5)
        # According to the data received from LDR, RGB LED lights red and green and servo motors move

Robot Kol Servo Motor Kodu:

from machine import Pin, PWM

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

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

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

Arduino C Kodları

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif
#define PIN 6
#define NUMPIXELS 1
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

#include <Servo.h>
Servo myservo1;
Servo myservo2;

int angleupdown;

void setup() {
  pinMode(20, OUTPUT);
  pinMode(27, INPUT); // define input and output pins

  pixels.begin(); // Initialize the NeoPixel library.
  pixels.clear(); // Initialize all pixels to 'off'

  myservo1.attach(21);
  myservo2.attach(22); // Attach the servos.

  Open();
  angleupdown = 180;
  myservo2.write(angleupdown);
}

void loop() {
  if (analogRead(27) > 150) {
    pixels.setPixelColor(0, pixels.Color(255, 0, 0)); // Red color.
    pixels.show();
    delay(1000);
    tone(20, 700); // Sound the buzzer
    delay(1000);
    noTone(20); // Stop the buzzer
    Open();
    delay(500);
    Down();
    delay(500);
    Close();
    delay(500);
    Up();

    pixels.setPixelColor(0, pixels.Color(0, 255, 0)); // Green color.
    pixels.show();
    delay(500);

    // Clear the color after a delay.
    pixels.setPixelColor(0, pixels.Color(0, 0, 0)); // Off
    pixels.show();
    delay(500);
    Open();
    angleupdown = 180;
    myservo2.write(angleupdown); // Reset the servo position
  }
}

void Open() {
  myservo1.write(180); // Servo opens
}

void Close() {
  myservo1.write(30); // Servo closes
}

void Up() {
  for (int i = 0; i < 45; i++) {
    angleupdown += 2;
    myservo2.write(angleupdown); // Move servo up
    delay(30);
  }
}

void Down() {
  for (int i = 0; i < 45; i++) {
    angleupdown -= 2;
    myservo2.write(angleupdown); // Move servo down
    delay(30);
  }
}
Önceki İçerik
Sonraki İçerik

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz