Node.js + Arduino 로 Bot 만들기 : RC카 만들기

Seungwon Go
ReturnValues
Published in
6 min readApr 15, 2018

이 글은 제 첫째 아이와 한달에 하루 같이 다양한 IoT 기기를 상상하고, 그걸 같이 만드는 시간 속에 나온 결과물을 공유하는 글입니다.

아두이노를 이용해서 간단한 RC 카를 만들어 보도록 하겠습니다.

준비물 : 아두이노 나노, 브레드보드, 서보모터2개, 전선 케이블, 받침대

브레드보드에 아래와 같이 아두이노 나노를 연결합니다. (참고로 아두이노 나노는 아두이노 우노 보다 작은 사이즈이며, 가격대가 더 저렴하지만, 기능은 동일합니다.)

서보모터 2개가 각각 자동차의 뒷바퀴 역할을 할것입니다. 서보모터에는 3개의 전선케이블이 있습니다. 3개의 전선은 각각 마이너스 전기, 파워(플러스), Signal과 연결이 되어야 합니다.

  1. 아두이노 나노의 GND에 전선 한쪽을 연결하고, 다른 한쪽은 브레드 보드의 마이너스 전기 라인 아무곳이나 연결하세요.
  2. 아두이노 나노의 5V에 전선 한쪽을 연결하고, 다른 한쪽은 브레드 보드의 플러스 전기 라인 아무곳이나 연결하세요.
  3. 오른쪽 바퀴에 해당하는 서보모터의 3개의 전선 케이블 중 마이너스 전기(보통 가장 어두운 색)에 해당하는 전선을 브레드보드의 마이너스 전기 라인 아무곳이나 연결하세요.
  4. 오른쪽 바퀴에 해당하는 서보모터의 3개의 전선 케이블 중 플러스 전기(가운데 선)에 해당하는 전선을 브레드보드의 플러스전기 라인 아무곳이나 연결하세요.
  5. 오른쪽 바퀴에 해당하는 서보모터의 3개의 전선 케이블 중 Signal(나머지 선)에 해당하는 전선을 아두이노 나노의 9(D9)번에 연결하세요.
  6. 왼쪽 바퀴에 해당하는 서보모터 역시 오른쪽 서보모터와 동일하게 진행하되, Signal에 해당ㅎ는 전선을 아두이노 나노의 8(D8)번에 연결하세요.

위의 과정을 통해 간단하게 RC카를 작동시키기 위한 준비는 끝났습니다. 이제 프로그램 코드를 실행시켜 RC카를 키보드로 조정해 보도록 하겠습니다.

먼저 우리는 2개의 파일을 작성하여야 합니다.

johnny-five > lib 폴더에 kb_controller.js 파일을 생성하여 아래의 소스를 붙여넣기 한 후 저장하세요.

// sets up a simple controller using a keyboard interface to drive
// the simplebot. Assumes two servos passed in as a left and right wheel
//
var keypress = require('keypress');
var Controller = function(opts) {// assume opts is a left and right wheel object.
if (opts == undefined) {
throw "No opts provided";
}
// get the servos
this.left = opts.left || null;
this.right = opts.right || null;
// set the stop values if needed
this.LSTOPVAL = opts.lstop || 90;
this.RSTOPVAL = opts.rstop || 90;
if (this.left == null || this.right == null) {
throw "Both servos must be supplied"
}
keypress(process.stdin);process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.setRawMode(true);
console.log("Control the bot with the arrow keys, SPACE to stop, Q to quit.");process.stdin.on('keypress', function (ch, key) {if ( !key ) return;if ( key.name == 'q' ) {
console.log('Quitting');
process.exit();
} else if ( key.name == 'up' ) {
console.log('Forward');
this.left.cw();
this.right.ccw();
} else if ( key.name == 'down' ) {
console.log('Backward');
this.left.ccw();
this.right.cw();
} else if ( key.name == 'left' ) {
console.log('Left');
this.left.ccw();
this.right.ccw();
} else if ( key.name == 'right' ) {
console.log('Right');
this.left.cw();
this.right.cw();
} else if ( key.name == 'space' ) {
console.log('Stopping');
this.left.to(this.LSTOPVAL);
this.right.to(this.RSTOPVAL);
}
}.bind(this) );
};module.exports = Controller;

johnny-five > eg 폴더에 servos.js 파일을 생성 한 후 아래의 코드를 붙여넣기 한 후 저장하세요.

var five = require("johnny-five");
var Controller = require("../lib/kb_controller.js");
var opts = {};
opts.port = process.argv[2] || "";
var board = new five.Board(opts);board.on("ready", function() {console.log("Control the bot with the arrow keys, and SPACE to stop.")var controller = new Controller({
left: new five.Servo.Continuous(8),
right: new five.Servo.Continuous(9),
lstop: 90, // use these to set the stop value of the servo
rstop: 90,
});
});
board.on("error", function(err) {
console.log(err.message);
process.exit();
});

이제 프로그램을 아래와 같이 실행하면, 키보드의 방향키를 가지고 RC카를 조정할 수 있습니다.

아래의 영상은 위의 과정을 통해 구현된 RC카를 노트북의 방향키를 이용하여 조정하는 영상입니다.

--

--