원격 제어 로봇, 블루투스 모듈 하나면 충분!
페이지 정보
작성자 관리자 작성일 25-11-20 12:50 조회 286 댓글 0본문
원격 제어 로봇, 블루투스 모듈 하나면 충분!
블루투스 모듈은 스마트폰과 같은 블루투스 장치로부터 명령을 받아 아두이노에게 전달하는 '무선 통신 다리' 역할을 합니다. 덕분에 우리는 코딩과 조립에만 집중하면 됩니다.
1단계: 블루투스 RC카의 '원리' 이해하기
원격 제어 로봇은 다음과 같은 원리로 작동합니다.
명령 (스마트폰 앱): 사용자가 스마트폰 앱에서 로봇에게 내릴 명령(예: 'F' = 전진, 'B' = 후진)을 터치합니다.
무선 전송 (블루투스): 스마트폰 앱이 블루투스 통신을 통해 이 명령 문자를 무선 신호로 변환하여 보냅니다.
명령 수신 (블루투스 모듈): 로봇에 연결된 HC-05 또는 HC-06 블루투스 모듈이 이 무선 신호를 받아 아두이노가 이해할 수 있는 디지털 신호로 바꿉니다.
판단 (아두이노): 아두이노가 블루투스 모듈로부터 받은 명령(예: 'F' 문자)을 읽고, 그에 따라 어떤 움직임을 해야 할지 코드를 통해 판단합니다.
행동 (모터): 아두이노의 판단에 따라 모터 드라이버를 통해 로봇 바퀴의 모터를 제어하여 로봇을 움직입니다.
2단계: 필수 준비물 확인 및 구매
이전의 RC카 만들기 프로젝트와 대부분 동일한 준비물이 필요합니다.
컨트롤러:
아두이노 우노 R3 (Arduino Uno R3) 호환 보드: 1개
USB 케이블: 아두이노와 컴퓨터 연결용.
로봇 섀시:
2WD 로봇 자동차 섀시 키트: 1개 (모터 2개, 바퀴 2개, 프레임, 캐스터 포함)
액추에이터:
모터 드라이버 (L298N): 1개 (DC 모터 2개 제어용)
통신 모듈 (핵심 부품!):
HC-05 또는 HC-06 블루투스 모듈: 1개 (HC-06이 초보자에게 좀 더 간편합니다.)
전원:
AA 배터리 홀더 (4개용): 1개 (모터 전원용)
AA 배터리: 4개
(선택 사항) 9V 배터리 & 스냅 커넥터: 아두이노 별도 전원용.
연결 재료:
브레드보드: 1개 (선택 사항이나 테스트에 유용)
점퍼 케이블 (수-수, 수-암): 넉넉하게
공구:
드라이버 세트, 니퍼, 양면테이프 또는 글루건.
3단계: 로봇의 '몸' 조립하기 (기계적 조립)
로봇 섀시 조립: 프레임, 모터, 바퀴, 캐스터 등을 조립합니다.
아두이노/모터 드라이버 고정: 아두이노 보드와 L298N 모터 드라이버를 로봇 프레임에 단단히 고정합니다.
블루투스 모듈 고정: HC-06/HC-05 모듈을 로봇 프레임의 적절한 위치에 고정합니다 (양면테이프 이용). 모듈의 안테나 부분이 가려지지 않도록 하는 것이 좋습니다.
4단계: 로봇의 '신경망' 연결하기 (전기 배선)
4.1. 바퀴 모터와 L298N 모터 드라이버 연결
L298N OUT1, OUT2 → 왼쪽 모터
L298N OUT3, OUT4 → 오른쪽 모터
4.2. 전원부 연결
AA 배터리 홀더의 + → L298N +12V (또는 VCC) 단자에 연결.
AA 배터리 홀더의 - → L298N GND 단자에 연결.
L298N GND → 아두이노 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-05/HC-06 블루투스 모듈과 아두이노 연결 (이 부분이 핵심!)
블루투스 모듈은 SoftwareSerial 라이브러리를 사용하여 아두이노와 통신합니다.
HC-06 VCC → 아두이노 5V
HC-06 GND → 아두이노 GND
HC-06 TXD (모듈의 데이터 전송 핀) → 아두이노 핀 2 (SoftwareSerial의 RX 핀으로 사용)
HC-06 RXD (모듈의 데이터 수신 핀) → 아두이노 핀 3 (SoftwareSerial의 TX 핀으로 사용)
HC-06 RXD 핀 연결 주의사항: HC-06의 RXD 핀은 3.3V 전압 레벨에 최적화되어 있습니다. 아두이노 우노의 디지털 핀은 5V 신호를 출력하므로, HC-06의 RXD 핀과 아두이노 핀 3 사이에 **전압 분배 회로(Resistor Divider)**를 연결하여 5V 신호를 3.3V로 낮춰주는 것이 안전합니다. * 예시: 아두이노 핀 3 -- (1kΩ 저항) -- [HC-06 RXD] -- (2kΩ 저항) -- GND * (저항이 없다면 일단 직접 연결할 수도 있지만, 장기적인 모듈 보호를 위해서는 권장하지 않습니다.)
배선 시 주의사항: 모든 배선은 전원이 없는 상태에서 하고, 정확한 연결을 거듭 확인해야 합니다.
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)
// HC-06 TXD -> Arduino Pin 2 (SoftwareSerial RX)
// HC-06 RXD -> Arduino Pin 3 (SoftwareSerial TX, 저항 분배 회로 권장)
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(motor1_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(motor1_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(motor1_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(motor1_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(motor1_in2, LOW);
analogWrite(motor2_enb, 0);
}
5.3. 코드 업로드 및 스마트폰 앱 준비
코드 업로드: 위 코드를 아두이노 IDE에 복사하여 붙여넣기 합니다. 스케치(Sketch) → 컴파일/업로드(Upload)를 클릭하여 코드를 아두이노 보드에 업로드합니다.
스마트폰 앱 준비:
구글 플레이 스토어 (안드로이드) 또는 앱 스토어 (iOS)에서 Bluetooth Terminal, Serial Bluetooth Terminal 또는 Arduino Bluetooth RC 같은 앱을 검색하여 설치합니다.
앱에서 스마트폰의 블루투스를 켜고 HC-06/HC-05 모듈을 찾아 연결합니다. (모듈의 초기 페어링 비밀번호는 보통 1234 또는 0000입니다. 연결되면 모듈의 LED가 깜빡이다가 계속 켜진 상태로 멈춥니다.)
앱의 키보드 입력 기능이나 버튼(만약 앱이 지원한다면)으로 F, B, L, R, S 문자를 전송하여 로봇이 움직이는지 테스트합니다.
6단계: RC카 테스트 및 최적화
초기 테스트: 로봇에 전원을 켜고 스마트폰 앱으로 명령을 보내 로봇이 예상대로 전진/후진/좌회전/우회전/정지하는지 확인합니다.
모터 방향 확인: 만약 전진 명령에도 로봇이 뒤로 가거나, 좌회전에도 우회전하는 경우 moveForward(), moveBackward(), turnLeft(), turnRight() 함수 내의 모터 제어 로직을 수정합니다 (예: HIGH와 LOW를 바꾸거나, 모터 전선을 서로 바꿔줍니다).
속도 조절: drive_speed와 turn_speed 값을 조정하여 로봇의 주행 및 회전 속도를 원하는 대로 조절합니다 (0-255 사이).
블루투스 연결 안정성: 블루투스 연결이 불안정하다면, 스마트폰과 로봇 간의 거리를 확인하고 주변의 다른 무선 장치 간섭 여부를 확인합니다.
커스텀 앱 제작 (선택 사항): 아두이노와 블루투스 모듈 통신 방식을 이해하면, MIT App Inventor나 Android Studio 등으로 나만의 스마트폰 앱을 직접 만들어서 로봇을 조종할 수도 있습니다.
축하합니다! 이제 당신만의 블루투스 모듈 하나로 움직이는 원격 제어 로봇이 완성되었습니다!
이 프로젝트는 무선 통신의 신비로움을 직접 체험하고, 스마트폰과 로봇이 '대화'하는 원리를 배우는 아주 좋은 기회입니다. 여기서 더 나아가 로봇에 카메라를 달아 영상 스트리밍을 하거나, 다른 센서를 추가하여 장애물 감지 기능을 넣는 등 더 많은 기능을 확장해 보세요. 당신의 손으로 만든 RC카와 함께 즐거운 시간을 보내시길 바랍니다!
댓글목록 0
등록된 댓글이 없습니다.
