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

2. 그리퍼의 동작 원리
모바일매니퓰레이터 블랙베리에 사용된 그리퍼는 서보모터가 회전하면 집게가 가이드를 따라 직선 운동을 하여 열리고 닫히는 방식입니다.
이 때, 서보모터 회전은 PWM방식으로 제어합니다.

PWM이란
Pulse Width Modulation의 약자로 펄스 폭 변조라고 합니다. 디지털 신호의 한 주기에서 High로 출력되는(활성화 되는) 비율(Duty Cycle)을 조정하여 신호를 만드는 방식이며, PWM 신호의 duty cycle을 조정함에 따라 서보모터는 특정 각도로 이동하게 됩니다.
아두이노 보드에는 PWM신호 출력을 지원하는 핀이 별도로 존재하지만 서보모터를 제어하기 위한 Servo라이브러리를 사용하면 PWM 핀이 아닌 핀에서도 서보모터를 제어하기 위한 소프트웨어 PWM 신호를 출력할 수 있습니다.

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

블랙베리에 프로그램을 업로드하면 서보모터가 회전하여 그리퍼가 오므려지고(닫히고) 벌려지는(닫히는) 것을 확인할 수 있습니다.
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초 대기 후 다시 반복
}
'소프트웨어 > Arduino' 카테고리의 다른 글
| 스마트 액츄에이터 (0) | 2026.03.12 |
|---|---|
| 모바일베이스(MobileBase) (0) | 2026.03.12 |
| 아두이노 보드를 사용한 RGB LED 제어 실습 (0) | 2026.03.12 |
| 아두이노 디지털 출력을 사용한 LED 제어 실습 #2 (0) | 2026.03.12 |
| 아두이노 디지털 출력을 사용한 LED 제어 실습 #1 (0) | 2026.03.11 |