로봇팔에 해당하는 글 1

[아두이노] 로봇 팔 관절 제어

IOT/아두이노|2019. 9. 4. 09:00

[아두이노] 로봇 팔 관절 제어



오늘은 마지막 시간으로 인터넷 로봇팔 키트로 판매하는 제품들의 일반적 특징들을 기반으로 해서 가상시뮬레이터에서 간단히 실험 해보는 시간을 갖도록 하겠습니다.

1. 로봇 팔


시중에 판매되는 로봇 팔 키트의 구조가 아래와 같은 형태로 디자인 되어 있더군요. 편의 상 원은 Servo Motor이고 회전되는 부위라고 가정한 디자인 입니다. 실제로는 좀 다르겠지요.


  • A 지점 : Servo Motor가 수평방향으로 회전하여 로봇팔의 몸통을 회전시키게 됩니다.
  • B, C지점 : Servo Motor가 수직방향으로 회전하여 로봇팔의 움직임을 만들어 냅니다.
  • D 지점 : Servo Motor가 집게를 제어합니다.

총 4개의 Servo Motor로 로봇팔 모양을 간단히 로봇팔 모형을 만들어 키트로 판매하더군요. 이걸 한번 가상시뮬레이터에서 실험해 보면 재밌을 것 같아서 실험을 하였습니다.

만약, 로봇 손이였다면 손가락 관절을 전부 다 제어해야 하기 때문에 너무 노가다 디자인을 해야 하기 때문에 간단한 집게 로봇팔을 실험 대상으로 했네요.

2. 로봇 팔


  • 준비물 : 가변 저항 4개, Servo Motor 4개, 아두이노우노, 외부전원
  • 내용 : 디지털Pin 4개를 Servo Motor 핀에 연결하고 가변저항도 A0~A3에 연결하시오


위 그림을 보면 지난시간에 6족 보행로봇 다리를 제어하는 실험을 가상시뮬레이터에서 했던 회로도와 같습니다. 관절 제어이기 때문에 회전만 제어하는 실험이라서 회로도는 같습니다. 같은 회로도이지만 어떻게 디자인 하느냐에 따라서 달라질 뿐이죠.

참고로 가변저항은 로봇팔을 제어하는 조종기가 됩니다. 몸통 회전 A와 로봇팔 움직임 B, C와 집게 D 제어로 총 4개의 제어값을 만들어야 합니다. 그래서 4개의 가변저항을 통해 조정하게 됩니다.

만약, 조이스틱으로 한다면 조이스틱은 X,Y 값을 만들어 내는데 4개의 제어값이 필요하니깐 조이스틱을 2개 연결하면 조정이 가능 합니다. 그리고 Bluetooth를 연결한다면 무선으로 스마트폰에서 조정이 가능합니다.

가상시뮬레이터에서는 가변 저항으로 조정했지만 실제로 제작해서 한다면 조이스틱이나 스마트폰으로 무선 조정을 하면 재미있겠죠.

3. 코딩


지난 시간의 6족 보행 로봇을 제어 하려면 보행 로봇의 움직임 패턴을 만들어야 하지만 로봇 팔은 그럴 필요가 없습니다. 집게 로봇 팔은 가변저항으로 간단히 제어가 가능하기 때문에 가변저항을 읽는 부분만 코딩하시면 됩니다.

가변저항 읽기 : analogRead()함수로 간단히 가변저항 값을 읽을 수 있습니다.

Servo Motor는 0~180도 회전을 할 수 있기 때문에 아날로그 읽기 0~1023값을 map()함수로 0~180으로 변환 시키야 합니다. 아래와 같이 가변저항값을 읽으면 됩니다.

int angle1 = map(analogRead(A0),0,1023,0,180);

A 모통 회전 : Servo Motor를 가변저항 값으로 회전 시키면 됩니다.

servo[0].write(angle1);

끝! 엄청 간단하죠.

종합해보면,

#include <Servo.h>

Servo servo[4];
const byte servoPin[4] = {2,3,4,5};

void setup()
{ 
  for(int i=0;i<4;i++){
    servo[i].attach(servoPin[i]);  
    servo[i].write(90);
    
  }
  delay(1000);
}

void loop()
{
  int angle1 = map(analogRead(A0),0,1023,0,180);
  int angle2 = map(analogRead(A1),0,1023,0,180);
  int angle3 = map(analogRead(A2),0,1023,0,180);
  int angle4 = map(analogRead(A3),0,1023,0,180);
  
  servo[0].write(angle1);
  servo[1].write(angle2);
  servo[2].write(angle3);
  servo[3].write(angle4);
  delay(100);  
}

위 코딩에서 중복되는 4번의 코딩 라인을 for문으로 처리하면 코딩 라인을 최소화 할 수 있습니다. 그 부분은 여러분들이 직접 수정해 보세요.

4. 결과


사실 집게 로봇팔에 대한 가상시뮬레이터 결과를 이해하기 위해서는 실제 모형을 보고 이해해야 하는데 단순히 Servo Motor회전으로 연상이 안될 수 있습니다. 아두이노 부품 판매 사이트에 가셔서 로봇팔 제품을 보시고 그래도 이해가 안되신다면 그 제품에 대한 영상물을 Youtube로 찾아 보시면 아마 있을꺼에요. 보고 움직임을 이해하시고 머리속에서 집게 로봇팔을 좌표계에 배치하고 움직이는 이미지와 가상시뮬레이터의 Servo Motor 회전을 같이 연결하여 상상하면서 보시기 바랍니다.


마무리


오늘 post 내용은 예전에 Servo Motor 제어편에서 간단히 가변저항을 이용하여 회전 시킨 회로도 입니다. 복습 post이지만 관절에서 빠질 수 없는 내용이기에 글을 쓰게 되었네요. 한개의 Servo Motor를 4개로 늘어 났을 뿐이고 코딩도 동일합니다. 재밌는 것은 Servo Motor를 가변저항으로 조정했던 원리가 오늘 로봇팔 제어가 되었다는 것이죠.

간단한 원리도 생각하는 관점에 따라 이렇게 재밌는 표현을 할 수 있습니다. 평소 사소한 원리일지라도 잘 정리 해놓으면 이렇게 상상력을 더해 재밌는 실험을 할 수 있습니다.

댓글()