본문 바로가기

로봇만들기

[라인트레이서] SRC 트렌스포터 집게 서보모터 함수 만들기

 


트렌스포터를 만들어 명령어를 삽입하다 보면 집게를 사용할 때 마다 SERVO명령을 사용하여 값들을 일일이 적어 명령어를 사용하기도 합니다. 하지만 C언어를 조금만 알고 있다면 잡기와 놓기를 함수로 만들어 사용할 수 있습니다. SRC 라인트레이서를 기본 사용하다고 보고 명령어에 쓰이는 함수를 만들어 봅시다.

#include "Proracer3.h"
int main(void)
{
Robot_Ready();
#define SPEED 60 
#define TS SPEED
#define BR SPEED
#define TB SPEED
DRIVE(4,2,0,2,4);

/***** Programming start  *****/

END(); 
return 0;
}

우선 라인트레이서 기본 문서를 열어 보면 위와 같이 쓰여 있습니다. 문서에서 서보모터를 사용하려면 SERVO_ENABLE(1); 를 삽입해야 합니다. 위치는 /***** Programming start  *****/라고 쓰여진 곳 바로 위에 쓰면 됩니다. 다음 명령들은 /***** Programming start  *****/ 아래에 작성을 합니다. 우선 함수를 만들기 전에 집게로 잡는 동작을 만들어 보겠습니다. 서보모터 중에서 집게를 잡는 모터가 SV1이라고 움직이는 각도가 40도에서 -45도라고 할 경우
 
SERVO(SV1, 23, 30);

이라고 할 수 있습니다. 여기서 25가 나온 이유는 SRC에서 쓰이는 서보 모터의 움직임이 90도에서 -90도일때 45에서 -45이고 0도는 0 이기 때문에 0도와 90도 사이의 중간은 0에서 45의 중간인 22.5가 됩니다. 그러나 이 값을 정수로 기억하기 위해 23로 일단 맞추고 만약 집게가 완전하게 양쪽이 붙지를 않으면 1씩 증가 시켜서 조절하면 됩니다.

뒤의 30이라는 숫자는 서보모터의 움직임 속도입니다. 속도역시 느리거나 빠르면 조금씩 조절을 하면 됩니다.

서보모터의 값을 주고나고 미션이 되는 물건을 잡고 나면 물건을 들어 올려야 합니다. 물건을 들어 올릴때는 SV2라는 서보모터를 하나 더 사용합니다. 0점을 기준으로 아래로는 많이 내려가지 않지만 위로는 -90도까지 올라 갈 수 있습니다. 그래서 범위가 30도에서 90도 정도로 20 에서 -45사이의 값을 조정하면 됩니다. 지금은 들어 올리는 값이 들어가야 하기 때문에 -90도인 -45값이 들어가서
SERVO(SV2, -45, 30);
이라고 할 수 있습니다.

물건을 내려 놓는 것은 위의 두개를 각도와 순서만 반대로 하면 됩니다. 다만 내리는 각도는 20으로 적게 주는 것을 잊지 말아야 합니다.
SERVO(SV2, 20, 30);
SERVO(SV1, -23, 30);

이렇게 작성이 됩니다.

물건을 옮길때 로봇이 너무 성급하게 잡아오리거나 내리면 물건이 쓰러질 우려가 있기 때문에 잡거나 놓았을 때 조금 기다려주는 명령을 주면 좋습니다. 그래서 서보SV1의 명령 다음에
DELAY_MSEC(300);
과 같이 넣으면 됩니다. 만약 기다리는 시간이 적거나 많으면 명령어 안의 값을 100단위로 조정을 하면 됩니다. 100은 0.1초 입니다.

이제 잡는 명령어를 모두 모아서 나열하면
SERVO(SV1, 23, 30);
DELAY_MSEC(300);
SERVO(SV2, 45, 30);
입니다. 이것을 함수로 만들려면

void CATCH()
{
SERVO(SV1, 23, 30);
DELAY_MSEC(300);
SERVO(SV2, 45, 30);
}

라고 쓰고 전체 문서에서 int main()위에 넣으면 됩니다. 이젠 명령 중에 물건을 잡을 때는 CATCH(); 라고 만 쓰면 자동으로 실행이 됩니다. 여기에서 CATCH라는 이름은 사용자가 임의로 정하는 것이기 때문에 C언어에서 기본으로 정의된 명령어와 라인트레이서에서 기본으로 정의된 명령어만 아니면 아무거나 사용해도 됩니다.

이제 물건을 내려 놓는 함수도 직접 한 번 만들어 보시기 바랍니다.
참고로 위에서 사용한 값들은 서보모터의 제품마다 조금씩 다를 수 있기 때문에 꼭 각도와 값을 다시 확인 하시고 그 것을 기준으로 사용하시기 바랍니다.