모터에 혼을 연결하기

이제 드디어 모터에 혼을 연결할 수 있게 되었습니다. 그리고 스틱은 그 혼에 연결되 있는 상태이지요. 모터를 90도 위치로 이동하라고 명령을 내리자 모터는 제 위치를 찾았습니다. 겉으로 봤을 때 그냥 똑같아 보이지만 지잉 소리를 내면서 살짝 움직였고, 그리고 정 중앙을 가리키고 있을 것입니다.

왜 90도가 정 중앙인가요?

일반적으로 서보모터는 180도 구동을 합니다. 사실 정확하게 180도는 아니고 제조사별로 조금씩 차이가 나긴 합니다. 이 것들을 모두 맞춰주기에는 우리가 배워야 할 것들이 너무 많습니다. 서보모터를 구동시키기위한 라이브러리는 0~180도까지 움직일 수 있도록 미리 셋팅을 해 두었습니다. 비록 180도를 가라고 하거나 0도를 가라고 한다고 하더라도 정확하게 그 지점까지 가지 않는다거나 더 갈 수 있다고 치더라도 우리에게 그렇게 심각한 일은 아닙니다. 우리가 만드는 로봇이 엄청난 정확도를 요구하는 로봇이 아니라 드럼을 치는 로봇이니까요. 적당히 드럼의 높이에 맞춰서 각도를 찾아내고, 경험적으로 그 값을 찾아내면 됩니다.

라이브러리가 무엇인가요?

라이브러리는 말 그대로 "도서관", "서재" 입니다. 인간 두뇌에는 기억의 한계가 있기 때문에 모든 것을 기억하고 있을 수는 없을 뿐더러 모든 지식을 알고 있을 수도 없습니다. 게다가 우리가 직접 일일이 모든 수학 공식과 공학 지식 등을 만들어 낼 순 없는 것이지요. 세상에는 많은 사람들이 미리 만들어 놓은 지식들이 있고 그 것들을 책이란 형태로 도서관에 보관되어 있습니다. 우리는 그 때 그 때 필요할 때 도서관을 찾아서 필요한 지식을 찾아 활용하면 되는 것입니다. 프로그램도 마찬가지입니다. 세상에는 이미 잘 만들어진 소프트웨어 코드들이 많이 있습니다. 게다가 오픈소스로 공개를 한 소스들이 많습니다. 이런 소스드를 사용하면 우리 개개인이 직접 개발해야 하는 코드들이 줄어들게 되고 우리는 우리가 할 일만 집중해서 할 수 있습니다. 바퀴를 다시 발명할 필요가 없는 것이지요.

아래 코드에서 어떤 것이 라이브러리를 사용한다는 것일까요?

#include <Servo.h>

Servo myservo1;  // 첫 번째 서보모터 (왼쪽 모터)
Servo myservo2;  // 두 번째 서보모터 (오른쪽 모터)

void setup() {
  myservo1.attach(9);   // 9번 핀을 서보1번이라는 이름으로 컨트롤 하겠음 (왼쪽 모터)
  myservo2.attach(10);  // 9번 핀을 서보2번이라는 이름으로 컨트롤 하겠음 (오른쪽 모터)
}

void loop() {
  myservo1.write(90); // 서보 1번에게 90도로 이동하라고 명령 (왼쪽 모터)
  myservo2.write(90); // 서보 1번에게 90도로 이동하라고 명령 (오른쪽 모터)
}

바로 첫 번째 줄입니다. 말 그대로 include : 포함하라는 것입니다. 어떤 책을 포함해라, 즉, 어떤 소스코드를 포함해서 나는 그 소스코드를 사용하겠다 라는 개념입니다. 자세한 것은 C나 C++ 언어를 배우시면 알 수 있지만 여기서는 이정도로 넘어가겠습니다.

혼을 모터에 어떻게 꽂나요?

혼을 모터 톱니기어에 꽂고 볼트를 조여 줍니다. 모터를 구매할 때 함께 들어있었던 볼트를 사용하면 꼭 맞게 들어갑니다. 십자 드라이버를 사용해서 조여주는데요, 이 때 힘을 너무 많이 주면 십자 드라이버가 볼트 머리를 마모시킬 수 있으니 주의하셔야 합니다. 일단 살살 조여보시고, 로봇이 잘 풀린다 하면 그 때 가서 다시 좀 더 힘을 줘서 조여주면 됩니다. 이런 식으로 조심조심 조여주는 것이 좋습니다.

우리는 두 모터들에게 90도로 가라고 명령했습니다. 모터의 톱니는 멈춰 있고 이제 "앞으로 나란히" 같은 자세가 되도록 로봇에 두 스틱을 꽂을 것입니다. 각도가 살짝 위로 올라가거나 아래로 향할 수 있습니다. 이 것은 우리가 소프트웨어적으로 해결할 수 있습니다. 이런 개념을 offset 이라고 합니다. 모터를 생산할 때 모두 똑같이 만들 수는 없나봅니다. 아주 조금씩 차이가 있는데요, 이런 차이를 극복하기 위해서 우리는 소프트웨어에서 그에 알맞은 보상을 합니다. 예를 들어 오른 팔은 90도로 가라고 했는데 89도로 갔다고 해 보면, 우리는 1도 만큼 더 가도록 프로그램을 수정할 수 있습니다. 그러면 180도를 가라고 하는 상황에서는 181도를 가라고 해야 할텐데요, 그것은 어쩔 수 없이 포기해야 하는 것입니다. 안심하세요, 그 범위까지 잘 쓰지 않습니다. 하지만 이 개념을 알고 있으면 프로그램을 코딩할 때 로봇의 동작 범위를 offset 감안해서 작성할 수 있겠지요! 10~170도 정도로요.

<결과 사진>

results matching ""

    No results matching ""