'2018/04'에 해당되는 글 8건

  1. 2018.04.16 Google Voice Kit(RPI) 으로 레고 모터 제어 #2: Lego Motor 제어
반응형

Lego에서는 마인드스톰을 시작으로 해서 레고를 제어할수 있는 모터와 센서 등의 제품을 출시하였다. 최근에는 파워펑션 등 다양하게 움직이는 레고를 만들수 있는 제품들이 나오고 있다. 본 포스팅에서는 레고 모터 제어에 대해서 설명한다.


레고 모터는 다음의 사이트에서 확인할 수 있다.


http://www.philohome.com/motors/motorcomp.htm


이중 71427(또는 43362), NXT, PF Mediam, PF Large에 대해서 시험해 본다.


1. 71427(또는 43362)


이 모터는 Lego Mindstorm 초기 모델에 들어가 있던 모터이다. 전원을 전달하는 레고 블록을 위에 끼울수 있도록 되어 있다. 다음처럼 연결할수 있도록 선을 연결한다.


테스트를 위해서 Motor를 Motor Driver에 연결하고 Direction, PWM 핀을 각각 VoiceKit의 Servo0(GPIO26) 및 Servo2(GPIO13)에 연결한다.


실행은 node.js 로 진행한다. node.js는 raspberry pi의 GPIO를 제어할 수 있는 여러 모듈들이 있다. 본 포스팅에서는 rpio(https://www.npmjs.com/package/rpio) 를 사용한다. 다음의 명령으로 rpio module을 설치한다. (npm install rpio) 


다음은 Raspberry Pi에서 콘솔에서 키 입력을 받아서 a 및 d 키를 입력받으면 모터를 각각 다른 방향으로 회전시키고 s를 입력하면 중지하는 코드이다.

const stdin = process.stdin;

const rpio=require('rpio');

rpio.init({gpiomem:false,mapping:'gpio'})

function initMotor(inDirPin,inSpeedPin){

        rpio.open(inDirPin,rpio.OUTPUT);

        rpio.open(inSpeedPin,rpio.PWM);

        rpio.pwmSetClockDivider(8);

};

function setMotor(inDirPin,inSpeedPin,inDir,inSpeed){

        if(inDir===0) rpio.write(inDirPin,rpio.HIGH);

        else rpio.write(inDirPin,rpio.LOW);

        rpio.pwmSetData(inSpeedPin,inSpeed);

};

initMotor(26,13);

stdin.setRawMode( true );

stdin.resume();

stdin.setEncoding( 'utf8' );

stdin.on( 'data', function( key ){

  if ( key === '\u0003' ) {

    process.exit();

  }

  if(key==='a'){

        setMotor(26,13,0,100);

  } else if(key==='s'){

        setMotor(26,13,0,0);

  } else if(key==='d'){

        setMotor(26,13,1,100);

  }

  process.stdout.write( key );

});

다음은 실행 결과이다.


2. PF Medium 및 PF Large

PF Medium 및 PF Large는 Lego Technic Power Function에 들어있는 모터이다. 



이 모터는 제어하는 블록이 조금 다르다. 이 블록선의 Pintout은 다음과 같다.

이 두 모터는 C1, C2를 빼고 GND와 9+ Volt를 Motor Driver에 연결하면 된다.


다음은 PF Medium 모터 선의 GND/9+ 를 Motor Driver 상기 예제로 실행한 결과이다.


3. NXT Motor

NXT 모터는 Lego Mindstorm NXT 버전에 탑재된 모터이다. 이 모터는 회전수를 detect 할수 있는 등 정밀 제어가 가능한 모터이다.(서보 모터임) 다음처럼 전화기 잭같이 생긴 커넥터를 사용한다.

커넥터의 pin 은 다음과 같다.


일반적 모터로만 이용 가능한데, 이 경우 1,2번 핀을 Motor Driver에 일반 DC 모터처럼 연결하면 된다. Rotary encoder를 사용하는 것은 꽤 복잡하다. 다음에서 관련 정보들을 찾을 수 있다.


http://www.brickengineer.com/pages/2008/09/05/lego-nxt-motor-wiring/

http://forum.arduino.cc/index.php?topic=65022.0

https://www.wayneandlayne.com/bricktronics/design-and-theory/


그리고 arduino용 라이브러리도 찾을 수 있다.

https://github.com/sebgiles/NXTServo


다음은 앞의 예제 코드로 실행한 예제이다.


반응형
Posted by alias
,