아두이노 수업에서 실습용으로 사용할 로봇으로 makeblock 의 robot kit v2 을 선택해서 두 학기동안 운영해 보았다. 여기서 그 후기를 간단히 기록하고자 한다.


무환궤도 방식으로 조립한 로봇


  장점부터 설명하면 프레임이 깔금하게 마감되어 있고 바퀴로봇과 무한궤도 방식의 로봇 둘다 만들 수 있다는 점이다. 레고의 치수에 맞추어진 깔끔한 알루미늄 기구부가 일단 인상적이다. 표면 처리도 잘 되어있고 무엇보다 원하는 형태로 자유자재로 결합되도록 설계가 되어있다. 조립 난이도도 그리 높지 않다. 모터 드라이브가 내장된 커스텀 아두이노 보드를 제어기로 사용하므로 아두이노 IDE를 사용하여 제어 프로그램을 작성할 수 있다. 아두이노 라이브러리도 제공한다. 적외선 리모콘 세트와 초음파 센서도 포함되어 있다.



전용 제어기


  단점은 전용 제어보드의 인터페이스가 특이해서 뭔가를 더 붙여서 확장하는 것이 불가능하다는 것이다. 그리고 전용 라이브러리도 제공되는 기능 외에 더 추가한다든가 하는 것이 힘들다. 모터와 전선의 연결부가 헐거워서 빠지기 쉬워서 결국 납땜을 하였다. 무환궤도도 그냥 일자철심을 끼워서 연결하는 방식인데 로봇이 가다가 이게 잘 빠진다.


  그래서 실수업에서는 전용 제어기를 빼고 아두이노 우노와 모터쉴드(R3)를 조합하여 모터를 구동하는 식으로 진행하였다. 이 로봇에 포함된 모터가 6V/2A 의 모터라 BA6208이나 LM1630 같은 IC등은 구동 전류를 충분히 내지 못해서 모터의 토크가 약해진다. 모터 한 개당 BA6208 두 개를 병렬로 연결하여 제어해 보았으나 크게 성능이 향상되지는 않았다.


  개인적인 결론은 혼자서 가지고 놀기에는 적당하지만 아두이노 수업 교재용으로는 적절하지 않다는 생각이다.

[#00077]


Posted by 살레시오
,

  이전 포스트에서 말한 바와 같이 일반적인 아두이노 우노와 모터쉴드(R3)를 사용하여 모터를 구동해 보기로 하였다. 이 로봇에 포함된 모터가 6V/2A 의 모터라 BA6208이나 LM1630 같은 IC등은 구동 전류를 충분히 내지 못해서 모터의 토크가 약해진다. 모터 한 개당 BA6208 두 개를 병렬로 연결하여 제어해 보았으나 크게 성능이 향상되지는 않았다. 모터쉴드에 대한 설명은 아래 포스트를 참조하면 된다.


    - 아두이노 모터 쉴드 R3


다음 사진은 모터 쉴드에 DC모터 전원선을 연결한 것이다. 밑에 아두이노 우노가 있고 모터 쉴드를 얹어서 모터에 연결하였고 전원은 1.5V AA건전지 6개(9V)를 사용한다.



첫 번째 실험으로 2초 동안 전진하고 2초 동안 후진하기를 무한 반복하는 간단한 예제이다. 프로그램 소스는 다음과 같다. 실험할 때 한가지 주의할 점은 반드시 외부전원(건전지나 변압기)를 보드에 연결하여야 한다는 것이다 USB만으로 모터를 구동시키려다가 PC보드가 손상될 수도 있다.




소스 코드:

───────────────────────────────

    #define PWM_RIGHT 3

    #define DIR_RIGHT 12

    #define BRAKE_RIGHT 9

    #define PWM_LEFT 11

    #define DIR_LEFT 13

    #define BRAKE_LEFT 8


    void setup() {

        pinMode(PWM_LEFT, OUTPUT);

        pinMode(DIR_LEFT, OUTPUT);

        pinMode(BRAKE_LEFT, OUTPUT);

        pinMode(PWM_RIGHT, OUTPUT);

        pinMode(DIR_RIGHT, OUTPUT);

        pinMode(BRAKE_RIGHT, OUTPUT);

        analogWrite(PWM_LEFT,0);

        analogWrite(PWM_RIGHT,0);

    }


    void loop() {

        digitalWrite(DIR_LEFT, LOW);

        digitalWrite(DIR_RIGHT,LOW);

        analogWrite(PWM_LEFT, 255);

        analogWrite(PWM_RIGHT, 255);

        delay(2000);


        digitalWrite(DIR_LEFT, HIGH);

        digitalWrite(DIR_RIGHT, HIGH);

        analogWrite(PWM_LEFT, 255);

        analogWrite(PWM_RIGHT, 255);

        delay(2000);

    }

───────────────────────────────

[#00079]


Posted by 살레시오
,