본문으로 바로가기

그리퍼 제어하기

category 소프트웨어/Arduino 2026. 3. 12. 20:17

1. 그리퍼(Gripper)란?

 

물체를 집거나 놓을 수 있는, 사람의 손과 같은 역할을 하는 로봇 구성 요소로 로봇의 말단장치(End-effector) 로 쓰이며, 동작 방식과 모양에 따라 다양한 그리퍼가 있습니다.

 

 

 

2. 그리퍼의 동작 원리

 

모바일매니퓰레이터 블랙베리에 사용된 그리퍼는 서보모터가 회전하면 집게가 가이드를 따라 직선 운동을 하여 열리고 닫히는 방식입니다.

이 때, 서보모터 회전은 PWM방식으로 제어합니다.

 

 

PWM이란

Pulse Width Modulation의 약자로 펄스 폭 변조라고 합니다. 디지털 신호의 한 주기에서 High로 출력되는(활성화 되는) 비율(Duty Cycle)을 조정하여 신호를 만드는 방식이며, PWM 신호의 duty cycle을 조정함에 따라 서보모터는 특정 각도로 이동하게 됩니다.

아두이노 보드에는 PWM신호 출력을 지원하는 핀이 별도로 존재하지만 서보모터를 제어하기 위한 Servo라이브러리를 사용하면 PWM 핀이 아닌 핀에서도 서보모터를 제어하기 위한 소프트웨어 PWM 신호를 출력할 수 있습니다.

 

 

 

3. 그리퍼를 오므리고 벌리기 코딩 실습

 

 

 

(1) Pixy 카메라 모듈에 연결된 그리퍼를 제어하기 위해 Pixy2SPI_SS 라이브러리의 헤더파일을 코드에 포함시키고 Pixy2SPI_SS 클래스의 인스턴스인 pixy를 생성합니다. Pixy가 블랙베리에 SPI통신을 하도록 연결 되어있기 때문에 SPI 통신방식을 지원하는 Pixy2SPI_SS 라이브러리를 사용합니다.
 
(2) 그리퍼를 열 때와 닫을 때 값을 정의합니다.
 
(3) setup에서는 pixy를 초기화 한 후 그리퍼를 여는 자세로 초기화 합니다.
 
(4) loop에서는 pixysetServos(서보1 각도, 서보2 각도)메소드를 사용해 서보모터를 지정된 각도로 이동시켜 그리퍼를 열고 닫기를 반복합니다. 블랙베리의 그리퍼는 서보2 각도 값에 의해 제어됩니다.

블랙베리에 프로그램을 업로드하면 서보모터가 회전하여 그리퍼가 오므려지고(닫히고) 벌려지는(닫히는) 것을 확인할 수 있습니다.

 

                                 pos= 100: 그리퍼 벌림(열림)                                      pos= 650: 그리퍼 오므림(닫힘)

 

 

//////////////  픽시 카메라 모듈에 연결된 그리퍼를 오므리고 벌리기
#include <Pixy2SPI_SS.h>
Pixy2SPI_SS pixy;

#define GRIP_ANGLE_CLOSE          650  // 그리퍼 반 정도 닫히는 값(1000이 최대)
#define GRIP_ANGLE_OPEN           100  // 그리퍼 열리는 값


//////////////  메인 프로그램

void setup()
{
  Serial.begin(115200);
  
  pixy.init(); // 카메라 모듈 초기화
  pixy.setServos(1, GRIP_ANGLE_OPEN); // 그리퍼 벌리기(100) 위치로 서보 모터 이동
}

void loop()
{
  pixy.setServos(1, GRIP_ANGLE_CLOSE); // 그리퍼 오므리기(650) 위치로 서보 모터 이동
  delay(800); // 서보 모터가 설정된 위치로 이동하기 까지 시간대기
  
  pixy.setServos(1, GRIP_ANGLE_OPEN); // 그리퍼 벌리기(100) 위치로 서보 모터 이동
  delay(800); // 서보 모터가 설정된 위치로 이동하기 까지 시간대기

  delay(5000);  // 5초 대기 후 다시 반복
}

 

 

4. 그리퍼를 서서히 오므리고 벌리기 코딩 실습

 

 

 

Servo 모터를 서서히 회전시키기

  • for 루프를 사용하여 모터 각도를 서서히 증가 또는 감소 시킵니다. 증가 또는 감소 폭이 클수록 이동속도가 빠릅니다. (예) pos += 5 일 때 속도가 더 빠름
  • for 루프의 매번 단계마다 대기 시간을 적절히 넣습니다.
    대기 시간이 짧을수록 이동 속도가 빠릅니다.
    (예) delay(10) 일 때 속도가 더 빠름
 

                                 pos= 100: 그리퍼 벌림(열림)                                      pos= 650: 그리퍼 오므림(닫힘)

 

 

 

//////////////  픽시 카메라 모듈에 연결된 그리퍼를 서서히 오므렸다 벌리기
#include <Pixy2SPI_SS.h>
Pixy2SPI_SS pixy;

#define GRIP_ANGLE_CLOSE          650  // 그리퍼 반 정도 닫히는 값(1000이 최대)
#define GRIP_ANGLE_OPEN           100  // 그리퍼 열리는 값

int pos = 0; // 서보모터 제어 값 변수

//////////////  메인 프로그램

void setup()
{
  Serial.begin(115200);
  
  pixy.init(); // 카메라 모듈 초기화
  pixy.setServos(0, GRIP_ANGLE_OPEN); // 그리퍼 열기
}

void loop()
{
  // 서보 모터 제어 값을 100에서 650 까지 2씩 증가시키면서 그리퍼를 서서히 오므림
  for (pos = GRIP_ANGLE_OPEN; pos <= GRIP_ANGLE_CLOSE; pos += 2) {
    pixy.setServos(0, pos); // 서보 모터를 해당 위치(각도)로 이동
    delay(25); // 서보 모터 이동 대기 시간 (시간이 길수록 천천히 이동함)
  }
  
  // 서보 모터 제어 값을 650에서 100 까지 2씩 감소시키면서 그리퍼를 서서히 벌림
  for (pos = GRIP_ANGLE_CLOSE; pos >= GRIP_ANGLE_OPEN; pos -= 2) {
    pixy.setServos(0, pos);
    delay(25);
  }

  delay( 5000 );  // 5초 대기 후 다시 반복
}

 

 

 

728x90
728x90