나만의 로봇 비서: 간단한 명령 수행 로봇 > 초보자를 위한 로봇 프로젝트

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

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

나만의 로봇 비서: 간단한 명령 수행 로봇

페이지 정보

profile_image
작성자 관리자
댓글 0건 조회 306회 작성일 25-11-20 14:49

본문

나만의 로봇 비서: 간단한 명령 수행 로봇

로봇 비서라고 하면 영화 속 아이언맨의 자비스(JARVIS)를 떠올리겠지만, 지금 우리가 만들 '나만의 로봇 비서'는 훨씬 더 실용적이고 귀여운 형태로 시작할 수 있습니다! 간단한 명령에 따라 움직이거나 소리를 내는 로봇을 만들면서, 음성 인식과 피지컬 컴퓨팅을 결합하는 로봇의 기본 원리를 배워볼 수 있습니다.


1단계: 로봇 비서의 '원리' 이해하기

나만의 로봇 비서는 다음과 같은 원리로 작동합니다.


명령 (음성/버튼):

음성: 사용자가 로봇에게 특정 음성 명령을 내립니다. (예: "안녕", "앞으로 가", "불 켜줘")

버튼: 로봇에 달린 버튼을 눌러 특정 명령을 내릴 수도 있습니다.

인지 (마이크/블루투스 모듈/버튼 센서):

음성 인식 앱: 스마트폰 마이크가 음성을 인식하여 텍스트로 변환한 후, 미리 약속된 문자 신호로 로봇에게 보냅니다. (블루투스 통신 활용)

버튼: 버튼이 눌렸음을 감지합니다.

판단 (컨트롤러/코드): 아두이노가 수신된 문자 신호나 버튼 상태를 읽어 어떤 명령이 내려졌는지 판단합니다.

행동 (모터/LED/버저): 아두이노의 판단에 따라 로봇이 정해진 행동을 수행합니다. (예: 전진, 특정 LED 켜기, 특정 소리 재생)

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

컨트롤러:

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

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

액추에이터:

DC 기어드 모터: 2개 (로봇 바퀴 구동용)

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

LED: 2~3개 (로봇의 '눈', '표정', '상태' 표현)

버저 (Buzzer): 1개 (로봇의 '소리' 표현)

(선택 사항) 서보 모터 (SG90): 1개 (간단한 로봇 팔이나 머리 움직임 표현)

센서/입력 장치:

HC-05 또는 HC-06 블루투스 모듈: 1개 (스마트폰 앱과 통신용)

푸시 버튼: 2개 (로봇의 '이벤트 트리거' 또는 '메뉴')

로봇 섀시:

2WD 로봇 자동차 섀시 키트: 1개 (기본 몸체)

초소형 프레임/케이스: 플라스틱 케이스, 3D 프린팅 등 (로봇 비서가 '앉아있거나' '서있는' 형태로 만들 경우)

전원:

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

AA 배터리: 4개

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

연결 재료:

브레드보드: 1개 (선택 사항)

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

저항 (220Ω, 10kΩ): 각 3개 정도 (LED용, 버튼 풀다운/업 저항용)

공구:

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

스마트폰: 음성 인식 앱 설치용.

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

로봇 비서의 형태는 로봇 자동차 형태일 수도 있고, 고정된 몸체에 팔이나 머리가 움직이는 형태일 수도 있습니다.


기본 프레임 조립:

로봇 자동차 형태: 2WD 로봇 자동차 섀시 키트를 조립합니다.

고정형/데스크탑 형태: 플라스틱 케이스, 3D 프린팅된 프레임 또는 재활용 박스 등으로 로봇의 몸체를 만들고, 그 안에 아두이노, 모터 드라이버 등을 고정합니다. (모터는 팔/머리를 움직이는 서보 모터 위주)

액추에이터/센서/입력장치 부착:

바퀴/모터: 자동차 형태일 경우 바퀴와 모터를 프레임에 부착합니다.

LED: 로봇의 '눈'이나 '상태 표시등' 역할을 할 LED를 로봇 얼굴/몸체 앞쪽에 고정합니다.

버저: 로봇의 '소리'를 낼 버저를 내부에 고정합니다.

버튼: 사용자가 쉽게 누를 수 있도록 로봇 몸체 바깥쪽에 버튼을 배치합니다.

블루투스 모듈: 로봇 몸체 내부에 고정합니다.

4단계: 로봇의 '신경망' 연결하기 (전기 배선)

4.1. 전원 공급부 연결

배터리 홀더 (AA 4개) +, - → 모터 드라이버 VCC, GND.

모터 드라이버 GND → 아두이노 GND.

아두이노 전원: USB 케이블 또는 9V 배터리.

4.2. 모터 제어부 연결 (자동차 형태 로봇 비서일 경우)

모터와 모터 드라이버: 각 모터를 L298N 모터 드라이버의 출력(OUT1~OUT4)에 연결.

모터 드라이버와 아두이노: L298N의 제어 핀(IN1~IN4, ENA, ENB)을 아두이노의 디지털/PWM 핀에 연결.

4.3. LED 연결

LED의 긴 다리(+) → 220Ω 저항 → 아두이노 디지털 핀 (예: 핀 10, 핀 9).

LED의 짧은 다리(-) → 아두이노 GND.

4.4. 버저 연결

버저의 + 핀 → 아두이노 디지털 핀 (예: 핀 8).

버저의 - 핀 → 아두이노 GND.

4.5. 푸시 버튼 연결

버튼 한쪽 → 아두이노 5V.

버튼 다른 쪽 → 10kΩ 저항 한쪽 → 아두이노 GND.

버튼 다른 쪽(10kΩ 저항과 만나는 지점) → 아두이노 디지털 핀 (예: 핀 7). (풀다운 저항 사용 예시)

4.6. 블루투스 모듈 연결 (HC-05/06)

블루투스 VCC → 아두이노 5V.

블루투스 GND → 아두이노 GND.

블루투스 TXD → 아두이노 핀 2 (SoftwareSerial RX).

블루투스 RXD → 아두이노 핀 3 (SoftwareSerial TX, 전압 분배 저항 회로 권장).

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


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

스마트폰 음성 인식 앱을 통해 받은 문자 명령에 따라 로봇이 움직이거나 반응하도록 코드를 작성합니다.


5.1. 아두이노 IDE 설정 (이전 프로젝트들과 동일)

5.2. 나만의 로봇 비서 기본 코드 (예시)

cpp



#include <SoftwareSerial.h> // 블루투스 통신용


// 모터 제어 핀 (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)


// LED 핀

const int ledPinRed = 12; // 빨간색 LED

const int ledPinGreen = 13; // 녹색 LED (아두이노 내장 LED 활용 가능)


// 버저 핀

const int buzzerPin = 7;


// 푸시 버튼 핀

const int buttonPin = 4; // 버튼에 풀다운 저항 연결 가정


// 블루투스 모듈 핀 (HC-05/06)

SoftwareSerial btSerial(2, 3); 


// 모터 속도

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);

  

  pinMode(ledPinRed, OUTPUT);

  pinMode(ledPinGreen, OUTPUT);

  pinMode(buzzerPin, OUTPUT);

  pinMode(buttonPin, INPUT); // 버튼 핀 입력 설정


  Serial.begin(9600);

  btSerial.begin(9600); // 블루투스 시리얼 통신 시작


  Serial.println("Robot Assistant Ready!");

  digitalWrite(ledPinGreen, HIGH); // 로봇 준비 완료 표시

}


void loop() {

  char command;


  // 1. 블루투스 명령 처리 (음성 인식 앱으로부터)

  if (btSerial.available()) {

    command = btSerial.read();

    Serial.print("BT Received: "); Serial.println(command);

    processCommand(command);

  }


  // 2. 버튼 명령 처리 (버튼이 눌렸을 때)

  if (digitalRead(buttonPin) == HIGH) { // 버튼이 눌리면

    Serial.println("Button PRESSED!");

    // 버튼 눌림 시 특정 동작 수행 (예: 인사말)

    sayHello(); 

    delay(500); // 채터링 방지

  }

}


// 명령을 처리하는 함수

void processCommand(char cmd) {

  switch (cmd) {

    case 'F': moveForward(); Serial.println("Forward!"); break;

    case 'B': moveBackward(); Serial.println("Backward!"); break;

    case 'L': turnLeft(); Serial.println("Turn Left!"); break;

    case 'R': turnRight(); Serial.println("Turn Right!"); break;

    case 'S': stopRobot(); Serial.println("Stop!"); break;

    case 'H': sayHello(); Serial.println("Say Hello!"); break; // 'H' 명령 시 인사

    case 'A': turnOnLed(ledPinRed); Serial.println("Red LED ON!"); break; // 'A' 명령 시 빨간 LED 켜기

    case 'D': turnOffLed(ledPinRed); Serial.println("Red LED OFF!"); break; // 'D' 명령 시 빨간 LED 끄기

    default: stopRobot(); Serial.println("Unknown command, stopping."); break;

  }

  delay(200); // 명령 수행 후 잠시 대기

}


// === 로봇 행동 함수들 ===

// 모터 제어 함수들은 이전 RC카/청소 로봇과 동일하게 구현합니다.

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 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);

}

// ... (moveBackward, turnLeft, turnRight 함수도 구현)


// 인사말 함수 (버저로 소리 내기)

void sayHello() {

  digitalWrite(ledPinGreen, LOW); // 녹색 LED 깜빡

  delay(100);

  digitalWrite(ledPinGreen, HIGH);

  tone(buzzerPin, 1000, 200); // 1000Hz 200ms 동안 소리

  delay(300);

  tone(buzzerPin, 1200, 200);

  delay(300);

  noTone(buzzerPin);

}


// LED 제어 함수

void turnOnLed(int pin) {

  digitalWrite(pin, HIGH);

}


void turnOffLed(int pin) {

  digitalWrite(pin, LOW);

}

5.3. 코드 업로드 및 스마트폰 음성 인식 앱 준비

코드 업로드: 위 코드를 아두이노 IDE에 복사하여 붙여넣기 합니다. 스케치(Sketch) → 컴파일/업로드(Upload)를 클릭하여 코드를 아두이노 보드에 업로드합니다.

스마트폰 음성 인식 앱 준비:

안드로이드 앱 스토어에서 Arduino Voice Control, Voice Control for Arduino Bluetooth 또는 Voice Bluetooth for Arduino 등의 앱을 설치합니다.

앱에서 로봇 비서와 스마트폰을 블루투스로 페어링합니다.

앱 설정에서 음성 명령과 전송될 문자를 매핑합니다.

"전진" → 'F'

"후진" → 'B'

"왼쪽" → 'L'

"오른쪽" → 'R'

"정지" → 'S'

"안녕" → 'H'

"불 켜" → 'A'

"불 꺼" → 'D'

음성 명령을 말하여 로봇이 반응하는지 테스트합니다.

6단계: 로봇 테스트 및 최적화

초기 테스트: 로봇에 전원을 켜고 음성 명령("전진", "안녕", "불 켜")을 내려 로봇이 예상대로 반응하는지 확인합니다. 버튼을 눌렀을 때도 로봇이 반응하는지 확인합니다.

명령어 정확도: 음성 인식 앱이 사용자의 명령어를 정확히 인식하고 있는지 확인합니다. 인식률이 낮다면 앱 설정에서 음성 명령 단어를 재조정하거나, 더 쉬운 단어로 바꿔봅니다.

반응 속도: 로봇이 명령에 즉시 반응하는지, 지연이 발생하지 않는지 확인합니다. 필요하다면 코드의 delay() 시간을 조절하거나, BluetoothSerial 통신의 속도(baud rate)를 높여봅니다.

다양한 명령 추가: 로봇에게 더 많은 기능을 추가하고 싶다면, 새로운 LED, 센서, 서보 모터 등을 연결하고, processCommand 함수에 새로운 case를 추가하여 다양한 명령에 반응하도록 확장할 수 있습니다.

축하합니다! 이제 나만의 로봇 비서가 탄생했습니다!


로봇 비서 프로젝트는 로봇과 사용자 간의 상호작용(음성, 터치)을 통해 로봇이 우리의 일상에 어떻게 도움을 줄 수 있는지 체험하게 합니다. 이 프로젝트를 통해 로봇에게 '목소리'를 주고 '대화'를 나눌 수 있는 친구를 만들며 로봇 공학의 재미에 푹 빠져보세요!

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

댓글목록

등록된 댓글이 없습니다.


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

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

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