내가 학부생이었던 90년대에만 해도 DC모터를 제어하는 간단한 실험을 하려면 마이크로프로세서나 DSP부터 먼저 공부해야 했었는데 요즘 나오는 마이컴 보드들을 보면 그런 산을 피해가게끔 해 준다는 생각이 든다. 기초적인 전기회로 지식과 간단한 프로그래밍만으로(궂이 C/C++ 도 필요 없고 python(라즈베리파이) 이나 Java Script(비글본블랙) 같은 언어도 사용 가능하다.) 예전에는 무척이나 어려운 실험이 간단하게 가능하다는게 참 신기하다.


  한편으로는 이러한 환경이 비전공자들을 많이 끌어들일 것이고 더 많은 아이디어가 실제로 구현될 것이다. 참 고무적이고도 즐거운 일이다. 필자도 라즈베리파이를 접해 보고 이전부터 막연히 구상해 왔던 물건을 틈틈이 만들기 시작했는데 전에는 무척이나 어렵게 구현해야 했던 것이 의외로 쉽게 해결되서 상당히 놀란 적이 있다.


그림: 왼쪽부터 아두이노 우노 R3, 아두이노 Due, 라즈베리파이, 비글본 블랙


  특히 아두이노의 경우 하드웨어 제어보드 중에서 거의 표준과 같은 (적어도 비전공자들에게는) 위치를 차지하고 있다는 사실을 알게 되었다. 아두이노 자체도 많이 쓰이고 있고 거기서 파생된 보드들과 (오픈소스이므로 이것을 수정한 수많은 변종 보드들이 존재한다) 또한 연결해서 사용할 수 있는 센서보드(쉴드) 등이 셀 수 없이 다양하다. AVR로 회로를 어떻게 설계해야하는지, avrstudio를 어떻게 사용해야 하는지 굳이 알지 못하더라도 적당한 보드와 필요한 입력장치 및 센서보드를 선택해서 다양한 응용제품(제어기나 로봇 같은 것들)을 쉽게 만들 수 있는 것이다. 


  비교적 높은 컴퓨팅 능력을 요하는 분야에도 사용할 수 있는 옵션이 속속 등장하고 있는 추세이다. 심지어 50달러 내외의 리눅스를 OS로 사용하는 보드들도 많다. 라즈베리파이, 비글본(블랙), 마스보드, 큐티보드 등등이다.


  결국 중요한 것은 사용자의 프로그래밍 능력이라는 결론이 나온다. 프로그래밍이 가능하다면 이러한 보드들을 이용해서 (3D프린팅도 중요한 역할을 하는 것 같음) 원하는 동작을 수행하는 물리적인 제품을 손쉽게 만들 수 있는 시대가 온 것이다.

[#00073]


Posted by 살레시오
,

 아두이노를 사용해서 프로토타잎을 만들어 실험을 하다 보면 빵판에 와이어링(wiring)을 하게 되어 있는데 회로가 조금만 복잡해져도 선이 얽히게 되어 무척이나 불편하다. 처음에는 간단한 방법으로 시제품을 만들 수 있다는 점이 신기하고 편리하게 생각되지만 이게 반복되다 보면 무척이나 번거로운 작업이 되어 버린다.


와이어링 미로 (wiring maze)


이런 단점과 학습의 편이성을 높이기 위한 방편으로 seeed 라는 회사에서 판매하고 있는 grove 시스템이라는 것이 있다. 이 모듈들은 주변 기기와의 인터페이스를 3핀이나 4핀으로 통일하는 시도를 하고 있다.

Newbundle1.jpg

상단 중앙에 있는 것이 아두이노 그로브 쉴드이고 이것을 아두이노에 끼우면 3핀이나 4핀 인터페이스로 되어 있는 모듈들을 쉽게 연결할 수 있다. 자세히 보면 모두 4핀으로만 구성된 것을 알 수 있다. 모듈은 디지털핀, 아날로그핀. 혹은 I2C, 시리얼 통신으로 제어할 수 있다. 모듈의 종류도 100가지가 넘어서 웬만한 기초적인 장치들은 다 갖추어져 있는 것 같다. 버튼이나 LED모듈과 같이 간단한 것은 디지털핀 하나와 매핑이 되어 있지만 LCD모듈과 같은 것은 시리얼통신으로 연결하여 제공되는라이브러리를 이용하여 간편하게 제어하는 식이다. 이것을 이용하면 물론 자작하는 재미는 줄어들겠지만 지저분한 점퍼선으로부터 벗어날 수 있다.


 라즈베리파이의 GPIO핀에 연결해서 사용할 수 있는 GrovePi 라는 것도 있다. GrovePi는 이러한 grove 모듈들을 라즈베리파이에서 연결해 제어할 수 있도록 하는 인터페이스 보드이다.



가장 큰 장점은 파이에서 파이썬 스크립트로 간편하게 모듈들을 제어할 수 있다는 점이다. 아마도 파이와 GrovePi 간에 I2C 통신이나 시리얼 통신으로 제어 신호를 주고 받는 식으로 되어있지 않을까 짐직이 든다.




Posted by 살레시오
,

아두이노 수업에서 실습용으로 사용할 로봇으로 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 살레시오
,

udoo neo 라는 보드가 킥스타터에서 캠페인을 진행 중이다.



라즈베리 같은 리눅스 보드인데 아두이노 호환 외부핀을 가지고 있으며 와이파이, 블루투스, 9축 가속센서를 내장하면서 $49불 정도의 가격에 판매될 거라고 한다.


개인적으로 이러한 보드들이 많이 쓰일거라 예상하는데 라즈베리파이를 쓰다보면 아두이노의 기능들이 아쉽기 때문이다.


이와 비슷한 보드로 pcduino 시리즈가 잘 알려져 있는데 있는데 이미 시판 중이다. 아래 그림은 pcduino nano 보드이다.



이 보드도 리눅스 마이컴인데 아두이노 기능과 호환 핀들을 내장하고 있다.


아두이노 호환은 아니지만 아두이노의 모든 기능을 웃도는 내장 하드웨어를 가진 리눅스 보드도 있다. 바로 beaglebone black 이다.


보면 알겠지만 GPIO핀이 넘치도록 많다. 그리고 ADC, PWM, SPI, I2C 등 아두이노의 기능들을 대부분 가지고 있다. 단점은 가격이 $65 정도로 다른 보드들보다 조금 더 비싸다는 점이다.

Posted by 살레시오
,