2015년 7월 22일 수요일

거미 진화 하다


레고 크레인을 만들고 나서 부랴부랴 도착한 거미 로봇을 뜯었습니다.

[처음에 만든 거미 - 건전지로 앞으로만 가죠]

처음 만들었던 거미는 모터 하나에 건전지만 끼우고 앞으로 주구장창 달려 나가는 단순한 장난감이었습니다. 그래서 거미 하나를 더 주문 했습니다.

사실 거미를 진화시키기에 부품 모두가 다시 필요한 건 아니고 모터관련된 부품과 모터 2개를 연결 시켜줄 몸통 일부가 사용 됩니다.

[모터 2개를 두번째 거미 몸통을 사요해서 연결]
이렇게 거미의 두 다리를 따로 조정할 수 있게 진화를 시켜 줬습니다.
그리고 건전지 케이스와 연결 되어있던 전선은 끊어 내고 새 전선을 연결 해 줬습니다.

그런데 모터를 기존에 있던 아두이노에 연결해 주려고 하니 제가 기존에 갖고 있던 라즈베리파이 지원 아두이노 확장 쉴드를 아무리 쳐다 봐도 모터와 연결된 전선을 연결해 줄 곳이 없었습니다.

[라즈베리파이 2 지원 아두이노 확장 쉴드]
불현듯.. 아차 싶으면서 '또 뭔가를 사야 하는구나!' 라는 생각이 들었고 이러다 '레고 마인드스톰 가격 나오는거 아냐?' 하는 생각도 동시에 밀려 왔습니다.

일단 무엇이 필요한지 알아야 해서 찾아보니 새로운 지식을 알게 되었습니다.
모터에는 서보모터 / DC모터가 있고 두 타입을 컨트롤 하는 방법은 전혀 다르다는 것.
'전혀 다르다' 는 것은 '새로운 무언가가 필요하다는 것' ㅠㅠ....
그래서 다시 링크웨이를 열심히 뒤졌습니다. 찾아보니 아래 와 같은 것이 있었는데
[로미오 올인원 컨트롤러( 아두이노 호환 Atmega-328 )]
구글링을 해보니 올인원 컨트롤러의 V2.0 이 최신인데 제가 부품을 주로 구매하는 곳에는 V1.2 밖에 없었습니다. 아쉽지만 해외 직구를 통해 배송을 기다리기에는 시간이 부족해서 구매를 했습니다.

여차저차 해서 구매한 보드와 DC 모터 2개를 달아 줬습니다.
[거미와 연결된 새로운 아두이노]
달긴 달았는데.... ㅠㅠ... 쓰는 방법을 몰랐습니다. 이놈이 하위 버젼이어서인지 기존에 구매해서 사용하던 제품과 달리 인터넷에 공유된 자료가 터무니 없이 부족했습니다.
심지어 아두이노 보드 타입도 말해주는 곳이 없었습니다.

모든 타입을 다 선택해도 연결이 안되서 자포자기 한 심정으로 Default 모드인 'Arduino Uno' 를 선택했는데!.. 동작 합니다. OMG

기쁜 마음에 스케치 코드를 올렸습니다.
동작은 '전진 -> 후진 -> 좌회전 -> 우회전' 으로 단순하게 했습니다.
//Standard PWM DC control
int E1 = 5; //M1 Speed Control
int E2 = 6; //M2 Speed Control
int M1 = 4; //M1 Direction Control
int M2 = 7; //M1 Direction Control

///For previous Romeo, please use these pins.
//int E1 = 6; //M1 Speed Control
//int E2 = 9; //M2 Speed Control
//int M1 = 7; //M1 Direction Control
//int M2 = 8; //M1 Direction Control


void stop(void) //Stop
{
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
}
void advance(char a,char b) //Move forward
{
analogWrite (E1,a); //PWM Speed Control
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void back_off (char a,char b) //Move backward
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void turn_L (char a,char b) //Turn Left
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void turn_R (char a,char b) //Turn Right
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void setup(void)
{
int i;
for(i=4;i<=7;i++)
pinMode(i, OUTPUT);
Serial.begin(19200); //Set Baud Rate
Serial.println("Run keyboard control");
}
void loop(void)
{
advance (255,255); //move forward in max speed
delay (2000);
back_off (255,255); //move back in max speed
delay (2000);
turn_R (100,100);
delay (2000);
turn_L (100,100);
delay (2000);
stop();
delay (2000);
}
 잘 동작 하는 것을 보고 시운전을 해 보기 위해 PC 와 연결된 usb 케이블을 뺴고 해 봤는데...
어라? 안 움직입니다.

[9V 배터리로 모터 전원 입력]
이렇게 보드에 불도 들어오고 당연히 힘차게 앞으로 나갈 것이라고 생각했는데 꿈쩍을 안하네요
혹시나 싶어서 usb 케이블에 외장 배터리를 연결 해 봤습니다.
[외장 배터리를 추가로 장착]
역시나! 움직입니다. 이 보드 자료가 워낙 부족해서 Power 를 2개나 입력 해야 하는지 알 길이 없었는데 이렇게 해야 하는가 보네요.

시연 영상입니다.

이렇게 하여...
아두이노에 대한 공부는 어느정도 했다고 판단하여 다음은 라즈베리 파이로 넘어 가려고 합니다.

지금까지 공부한 아두이노는 아들과 함께 할 마지막 미션인 graphical programming (마우스 로만 프로그래밍 해 주는) 으로 동작시킬 로봇을 만들고 동작시키는 게 목적 이었다면, 앞으로 공부할 라즈베리 파이는 아두이노와 연결하여 좀 더 풍부한 리소스로 동작 활용을 높여 보기 위함입니다.

생각했던 것 보다 공부할 것이 많아서 방학전에 모든 준비를 끝내지 못했지만 나머지 공부를 마치고 만들고 싶은 '레고 디자인'에 들어 가야 겠습니다. 오늘 본격적으로 방학이 시작되서 아들과 '레고 크레인'과 '거미 로봇' 을 갖고 놀았습니다.
ㅋ.. 원리는 정말 복잡한데, 갖고 놀기에는 정말 좋은 장난감 들이네요~ 한동안 노래를 부르던 터닝메카드 로봇 얘기를 요즘은 잊고 지낼정도로 ㅎㅎㅎ.

댓글 없음: