[전시회]클로우 머신

작성자
이준 문재현 임민수 서현원
작성일
2022-11-17 17:29
조회
352

1. 목표

저희 클로우 머신팀은 기존에 존재하는 인형뽑기 기계를 직접 만들어 이를 기반으로 무인 가동시설에서의 정교한 로봇제어로의 응용, x-y-z축 이동을 필요로 하는 3D printer에 대한 원리 이해를 목표로 정했습니다.

2. 부품 설명

(1) 클로우



저희 팀의 클로우는 servo motor의 정방향 회전을 받은 스크류가 프레임을 따라 회전하여 직선운동을 하면 클로우가 오픈되고 역방향 회전을 받을 시 클로우가 클로즈 되는 원리로 제작하였습니다.


(2) 프레임

클로우 머신의 기본 프레임은 선배들이 남겨두신 종합설계 유산으로 진행하였습니다.


(3) x-y축 레일 및 z축 풀리



위의 사진을 보면 프레임 위에 총 3개의 레일과 3개의 step moter를 확인하실 수 있습니다. 아두이노와 CNC shield 를 이용하여 스텝모터 3개를 컨트롤 했습니다.

1) x,y,z축 이동 경로

두 개의 평행한 레일은 x축 이동 레일로서 나머지 한개의 레일인 y축 레일을 연결시켜 x축 이동은 평행한 두개의 레일 위에서의 y축레일 자체의 이동이고 y축 이동은 나머지 한개의 레일 위에서의 이동입니다.

y축레일에 연결된 도르레의 감기고 풀리는 운동이 z축 이동을 나타냅니다.

2) x,y,z축 이동 원리

평행한 2개레일 사이에 step motor와 그 반대편의 풀리를 타이밍 벨트로 연결하여 y축레일 위에 설치된 연결 파트를 타이밍 벨트가 통과하여 y축 레일을 x축 방향으로 이동시킵니다.

y축 레일 한쪽 끝에 연결된 step motor가 z축 도르레와 연결된 타이밍벨트를 이동시키면 y축 이동이 성립합니다.

y축 가운데에 연결된 step motor가 풀리랑 연결되어 풀리를 감고 풀 시 집게와 연결된 고무줄이 집게를 z축으로 이동시킵니다.

3. 코드

#include 
Servo myservo;

//step motor
#define X_step 2
#define Y_step 3
#define Z_step 4
#define X_dir  5
#define Y_dir  6
#define Z_dir  7
#define EN     8


//servo motor
#define myServo 13

void setup() {

   myservo.attach(13);
   Serial.begin(9600);
//output
  pinMode(X_step,OUTPUT);
  pinMode(X_dir,OUTPUT);
  pinMode(Y_step,OUTPUT);
  pinMode(Y_dir,OUTPUT);
  pinMode(Z_step,OUTPUT);
  pinMode(Z_dir,OUTPUT);
  pinMode(EN,OUTPUT);
  pinMode(myServo,OUTPUT);

  digitalWrite(EN,LOW);

  step(false,Z_dir,Z_step,500);//claw up
  
}

void loop() {

  int up=0;
  int down=0;
  int left=0;
  int right=0;
  char ch = ' ';
  if(Serial.available())
  {
    ch = Serial.read();
  }
  Serial.println(ch);
  int num=0;
  
  //-----joystick control part-----
  
  if(ch == 'a' || ch == 'A')
  {
    /*digitalWrite(X_dir,1);

    digitalWrite(X_step,0);
    delay(1000);
    digitalWrite(X_step,1);
    delay(1000);*/
     step(false, X_dir, X_step, 600); // x axis motor rotates CCW for 1 circle, as in 200 steps

  }

  
  if(ch == 'd'|| ch == 'D')
  {
    /*digitalWrite(X_dir,0);

    digitalWrite(X_step,0);
    delay(1000);
    digitalWrite(X_step,1);
    delay(1000);*/
    step(true, X_dir, X_step, 300); // y axis motor rotates CCW for 1 circle, as in 200 steps
  }
 
  
  if(ch == 'w'|| ch == 'W')
  {
    /*igitalWrite(Y_dir,1);

    digitalWrite(Y_step,0);
    delay(1000);
    digitalWrite(Y_step,1);
    delay(1000);*/
    step(false, Y_dir, Y_step, 300); 
  }
  
  
  if(ch == 's'|| ch == 'S')
  {
    /*digitalWrite(Y_dir,0);

    digitalWrite(Y_step,0);
    delay(1000);
    digitalWrite(Y_step,1);
    delay(1000);*/
    step(true, Y_dir, Y_step, 300); 
  }
  
  //-----button control part-----
  //열고 내려갔다가 닫고 올리
  if(ch == 'j'|| ch == 'J')
  {
    myservo.write(45);
    delay(1700);
    myservo.write(90);//claw open
   
    step(true,Z_dir,Z_step,650);//claw down

    myservo.write(145);
    delay(1700);
    myservo.write(90);//claw close

    delay(500);
    

    step(false,Z_dir,Z_step,650);//claw up

  }
  //위에서 바로 놓
  if(ch == 'k'|| ch == 'K')
  {
    
    myservo.write(45);
    delay(800);
    myservo.write(90);

    delay(300);

    myservo.write(145);
    delay(800);
    myservo.write(90);//claw close

    
    
   //gab save
    }
 
}

void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{
  digitalWrite(dirPin, dir);
  delay(50);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(800);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(800);  
  }
}

4. 참조

https://www.thingiverse.com/thing:4394283
전체 0