리모컨으로 조종하는 RC카, 직접 만들면 더 재밌다! > 초보자를 위한 로봇 프로젝트

본문 바로가기
사이트 내 전체검색

초보자를 위한 로봇 프로젝트

리모컨으로 조종하는 RC카, 직접 만들면 더 재밌다!

페이지 정보

profile_image
작성자 관리자
댓글 0건 조회 270회 작성일 25-11-20 12:37

본문

리모컨으로 조종하는 RC카, 직접 만들면 더 재밌다!

직접 만드는 RC카 프로젝트는 로봇의 '신경계'인 통신 기술과 '근육'인 모터 제어를 이해하는 데 최적의 기회입니다. 여기서는 스마트폰을 리모컨으로 활용하는 블루투스 RC카 만들기를 목표로 설명하겠습니다.


1단계: 블루투스 RC카의 '원리' 이해하기

블루투스 RC카는 다음과 같은 원리로 움직입니다.


명령 (스마트폰): 사용자가 스마트폰 앱에서 전진, 후진, 좌회전, 우회전, 정지 등의 명령을 누릅니다.

전송 (블루투스): 스마트폰에서 발생한 명령 데이터가 블루투스를 통해 무선으로 로봇에게 전송됩니다.

수신 (블루투스 모듈): 로봇에 장착된 블루투스 모듈이 스마트폰의 명령 데이터를 수신합니다.

판단 (컨트롤러/코드): 수신된 명령 데이터를 아두이노가 읽어들여 어떤 움직임을 해야 할지 판단합니다.

행동 (모터): 아두이노의 판단에 따라 모터 드라이버를 통해 로봇의 바퀴를 움직입니다.

2단계: 필수 준비물 확인 및 구매

컨트롤러:

아두이노 우노 R3 (Arduino Uno R3) 호환 보드: 1개

USB 케이블: 아두이노와 컴퓨터 연결용.

로봇 섀시:

2WD 로봇 자동차 섀시 키트: 1개 - 모터 2개, 바퀴 2개, 프레임, 캐스터 포함 (약 10,000원 ~ 15,000원)

액추에이터:

모터 드라이버 (L298N): 1개

통신 모듈:

HC-05 또는 HC-06 블루투스 모듈: 1개 (약 3,000원 ~ 5,000원) - HC-05는 마스터/슬레이브 모두 가능, HC-06은 슬레이브 전용. RC카에는 슬레이브 모드면 충분하므로 HC-06이 더 간편할 수 있습니다.

전원:

AA 배터리 홀더 (4개용): 1개 (모터 전원용)

AA 배터리: 4개

(선택 사항) 9V 배터리 & 스냅 커넥터: 아두이노 별도 전원용.

연결 재료:

브레드보드: 1개 (선택 사항이지만 테스트에 유용)

점퍼 케이블 (수-수, 수-암): 넉넉하게

공구:

드라이버 세트, 니퍼, 양면테이프 또는 글루건.

3단계: 로봇의 '몸' 조립하기 (기계적 조립)

라인트레이서나 장애물 회피 로봇과 유사하게 조립합니다.


로봇 섀시 조립: 프레임, 모터, 바퀴, 캐스터 등을 조립합니다.

아두이노/모터 드라이버 고정: 아두이노 보드와 모터 드라이버(L298N)를 로봇 프레임에 고정합니다.

블루투스 모듈 고정: HC-06/HC-05 모듈을 로봇 프레임의 적절한 위치에 고정합니다 (양면테이프 이용). 너무 모퉁이에 두지 않는 것이 좋습니다.

4단계: 로봇의 '신경망' 연결하기 (전기 배선 - L298N 모터 드라이버 기준)

4.1. 모터와 L298N 모터 드라이버 연결 (라인트레이서와 동일)

L298N OUT1, OUT2 → 왼쪽 모터

L298N OUT3, OUT4 → 오른쪽 모터

4.2. 전원부 연결 (라인트레이서와 동일)

AA 배터리 홀더의 + → L298N +12V (또는 VCC)

AA 배터리 홀더의 - → L298N GND

L298N GND → 아두이노 GND (가장 중요!)

아두이노 전원: USB 케이블로 컴퓨터에 연결하거나, 9V 배터리를 VIN 핀이나 DC 잭에 연결.

4.3. L298N 드라이버와 아두이노 연결 (라인트레이서와 동일)

L298N IN1 → 아두이노 핀 8

L298N IN2 → 아두이노 핀 9

L298N IN3 → 아두이노 핀 10

L298N IN4 → 아두이노 핀 11

L298N ENA → 아두이노 핀 5 (PWM 핀)

L298N ENB → 아두이노 핀 6 (PWM 핀)

4.4. HC-06/HC-05 블루투스 모듈과 아두이노 연결

블루투스 모듈은 주로 UART(직렬 통신)를 사용하여 아두이노와 통신합니다. 아두이노 우노는 하드웨어 시리얼 통신 핀(핀 0: RX, 핀 1: TX)이 있지만, 이 핀들은 컴퓨터와 아두이노 IDE 간의 통신에도 사용되므로 SoftwareSerial 라이브러리를 사용하여 다른 핀을 시리얼 통신 핀으로 설정하는 것이 일반적입니다.


HC-06 VCC → 아두이노 5V

HC-06 GND → 아두이노 GND

HC-06 TXD (Transmit) → 아두이노 핀 2 (이 핀이 SoftwareSerial의 RX 핀이 됩니다)

HC-06 RXD (Receive) → 아두이노 핀 3 (이 핀이 SoftwareSerial의 TX 핀이 됩니다)

참고: HC-06 모듈의 RXD 핀은 5V 신호를 받으면 손상될 수 있으므로, RXD 핀과 아두이노 핀 3 사이에 1k옴 저항 2개와 2k옴 저항 1개로 전압 분배 회로를 만들어 연결하는 것이 안전합니다. (예: 아두이노 핀 3 - 1k옴 저항 - HC-06 RXD / HC-06 RXD와 1k옴 저항 사이에 2k옴 저항 - GND) 하지만 초보자를 위해 여기서는 직접 연결하는 방식으로 설명하며, 블루투스 모듈의 내장 레벨 시프터를 믿거나 3.3V 전원을 사용하는 아두이노 보드(예: 3.3V 동작 라즈베리 파이 피코 등)를 사용하는 것을 고려할 수 있습니다. 가장 안전한 방법은 HC-06을 3.3V에 연결하고, TXD-RXD (아두이노)는 1k옴/2k옴 저항으로 연결하는 것입니다.


배선 시 주의사항: (라인트레이서와 동일) 모든 배선은 전원이 없는 상태에서 하고, 정확한 연결을 거듭 확인해야 합니다.


5단계: 로봇의 '명령' 프로그래밍하기 (아두이노 코딩)

이제 아두이노에 스마트폰으로부터 받은 명령에 따라 움직이도록 코드를 작성합니다.


5.1. 아두이노 IDE 설정 (라인트레이서와 동일)

5.2. 블루투스 RC카 기본 코드 예시

cpp



#include <SoftwareSerial.h> // SoftwareSerial 라이브러리 포함


// 모터 제어 핀 정의 (L298N 기준)

const int motor1_in1 = 8;

const int motor1_in2 = 9;

const int motor2_in1 = 10;

const int motor2_in2 = 11;

const int motor1_ena = 5; // 왼쪽 모터 속도 (PWM 핀)

const int motor2_enb = 6; // 오른쪽 모터 속도 (PWM 핀)


// 블루투스 모듈 연결 핀 정의 (SoftwareSerial)

// RX 핀(블루투스 TXD)을 아두이노 핀 2에, TX 핀(블루투스 RXD)을 아두이노 핀 3에 연결

SoftwareSerial btSerial(2, 3); 


// 모터 속도 (0-255)

const int drive_speed = 180; // 주행 속도

const int turn_speed = 150;  // 회전 속도


void setup() {

  // 모터 제어 핀들을 출력으로 설정

  pinMode(motor1_in1, OUTPUT);

  pinMode(motor1_in2, OUTPUT);

  pinMode(motor2_in1, OUTPUT);

  pinMode(motor2_in2, OUTPUT);

  pinMode(motor1_ena, OUTPUT);

  pinMode(motor2_enb, OUTPUT);


  Serial.begin(9600); // 컴퓨터 시리얼 모니터 시작 (디버깅용)

  btSerial.begin(9600); // 블루투스 시리얼 통신 시작 (HC-06/05의 기본 통신 속도)

  Serial.println("Bluetooth RC Car Ready!");

}


void loop() {

  char command; // 스마트폰에서 수신할 명령어 저장 변수


  // 블루투스 모듈로부터 데이터가 들어오면

  if (btSerial.available()) {

    command = btSerial.read(); // 한 글자(바이트) 읽어오기

    Serial.print("Received command: ");

    Serial.println(command);


    // 수신된 명령어에 따라 로봇 제어

    switch (command) {

      case 'F': // Forward (전진)

        moveForward();

        break;

      case 'B': // Backward (후진)

        moveBackward();

        break;

      case 'L': // Turn Left (좌회전)

        turnLeft();

        break;

      case 'R': // Turn Right (우회전)

        turnRight();

        break;

      case 'S': // Stop (정지)

        stopRobot();

        break;

      default: // 알 수 없는 명령은 무시하거나 정지

        stopRobot();

        break;

    }

  }

}


// 로봇 제어 함수들 (이전 라인트레이서와 비슷)


void moveForward() {

  digitalWrite(motor1_in1, HIGH); digitalWrite(motor1_in2, LOW);

  analogWrite(motor1_ena, drive_speed);


  digitalWrite(motor2_in1, HIGH); digitalWrite(motor2_in2, LOW);

  analogWrite(motor2_enb, drive_speed);

}


void moveBackward() {

  digitalWrite(motor1_in1, LOW); digitalWrite(motor1_in2, HIGH);

  analogWrite(motor1_ena, drive_speed);


  digitalWrite(motor2_in1, LOW); digitalWrite(motor2_in2, HIGH);

  analogWrite(motor2_enb, drive_speed);

}


void turnLeft() { // 제자리 좌회전 (왼쪽 바퀴 후진, 오른쪽 바퀴 전진)

  digitalWrite(motor1_in1, LOW); digitalWrite(motor1_in2, HIGH);

  analogWrite(motor1_ena, turn_speed);


  digitalWrite(motor2_in1, HIGH); digitalWrite(motor2_in2, LOW);

  analogWrite(motor2_enb, turn_speed);

}


void turnRight() { // 제자리 우회전 (왼쪽 바퀴 전진, 오른쪽 바퀴 후진)

  digitalWrite(motor1_in1, HIGH); digitalWrite(motor1_in2, LOW);

  analogWrite(motor1_ena, turn_speed);


  digitalWrite(motor2_in1, LOW); digitalWrite(motor2_in2, HIGH);

  analogWrite(motor2_enb, turn_speed);

}


void stopRobot() {

  digitalWrite(motor1_in1, LOW); digitalWrite(motor1_in2, LOW);

  analogWrite(motor1_ena, 0);


  digitalWrite(motor2_in1, LOW); digitalWrite(motor2_in2, LOW);

  analogWrite(motor2_enb, 0);

}

5.3. 코드 업로드 및 스마트폰 앱 준비

위 코드를 아두이노 IDE에 복사하여 붙여넣기 합니다.

스케치(Sketch) → 컴파일/업로드(Upload)를 클릭하여 코드를 아두이노 보드에 업로드합니다.

스마트폰 앱 준비: 구글 플레이 스토어 (안드로이드) 또는 앱 스토어 (iOS)에서 Bluetooth Terminal이나 Serial Bluetooth Terminal 같은 앱을 검색하여 설치합니다.

앱에서 HC-06/HC-05 모듈을 찾아 연결합니다. (초기 페어링 비밀번호는 보통 1234 또는 0000입니다.)

앱의 키보드 입력 기능으로 F, B, L, R, S 문자를 전송하여 로봇이 움직이는지 테스트합니다.

6단계: RC카 테스트 및 최적화

초기 테스트: 로봇에 전원을 켜고 스마트폰 앱으로 명령을 보내 로봇이 예상대로 전진/후진/좌회전/우회전/정지하는지 확인합니다.

모터 방향 확인: 만약 전진 명령에도 로봇이 뒤로 가거나, 좌회전에도 우회전하는 경우 moveForward(), moveBackward(), turnLeft(), turnRight() 함수 내의 모터 제어 라인을 수정합니다 (예: HIGH와 LOW를 바꾸거나, 모터 전선을 서로 바꿔줍니다).

속도 조절: drive_speed와 turn_speed 값을 조정하여 로봇의 주행 및 회전 속도를 원하는 대로 조절합니다 (0-255 사이).

블루투스 연결: 블루투스 연결이 불안정하다면, 스마트폰과 로봇 간의 거리를 확인하고 주변의 다른 무선 장치 간섭 여부를 확인합니다.

축하합니다! 이제 당신만의 블루투스 RC카가 완성되었습니다!


직접 만든 RC카는 단순한 장난감을 넘어, 하드웨어와 소프트웨어가 유기적으로 연결되는 로봇의 원리를 명확하게 보여주는 교육적인 도구입니다. 이제 이 로봇에 카메라를 달거나, 다른 센서를 추가하여 자율 주행 기능을 넣는 등 더 많은 기능을 확장해 보세요. 당신의 손으로 만든 RC카와 함께 즐거운 시간을 보내시길 바랍니다!

[이 게시물은 관리자님에 의해 2025-11-22 10:15:07 초보자를 위한 로봇 프로젝트에서 이동 됨]
[이 게시물은 관리자님에 의해 2025-11-29 13:01:12 18에서 이동 됨]

댓글목록

등록된 댓글이 없습니다.


회사소개 개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

작크와콩나무
대표:이강복 등록번호:129-30-34337 개인정보관리책임자:이경영

Copyright © https://roboman.co.kr/ All rights reserved.