[실습세미나] RC카

작성자
장원호 신상윤 김동민 최태웅
작성일
2022-05-10 20:45
조회
339
안녕하세요! 저희팀은 튜터 김민주와 팀원 장원호, 최태웅, 신상윤, 김동민으로 이루어져 있습니다. 저희 팀은 실습세미나의 네 주제 아두이노 금고, RC카, 라인트레이서, 미로찾기 중 RC카를 선택해 세미나를 진행하게 되었습니다. RC카는 블루투스 센서를 통해 핸드폰의 어플과 연동해 핸드폰의 조작에 맞게 RC카가 움직이도록 하였습니다.

RC카 설계 및 구동 원리는 다음과 같습니다.

1) RC카의 설계

RC카의 경우 아두이노 프로그램과, 아크릴 몸체, 건전지, 바퀴 등으로 구성되어있다. 아크릴 몸체를 바탕으로 프레임을 만들었고, 작은 아크릴 판과 못을 이용해서 고정하였다. 바퀴의 경우 2개를 이용해서 동작을 제어하였고, 전원은 AA건전지 4개를 이용해서 공급한다.

2) RC카의 신호 전달

RC카의 신호는 핸드폰을 이용해서 주고 받았다. 아두이노에 있는 블루투스 센서와 핸드폰 app ‘아두이노 블루투스 컨트롤러’를 블루투스를 기반으로 신호를 처리한다. 3신호를 핸드폰에서 아두이노로 보내주면 프로그램상에서 forward 함수를 작동 시킨다. 4 신호를 보내면 back ward를 수행하면서 뒤로 간다. 1 신호를 보내면 Left , 2신호를 보내면 right함수를 실행시키면서 해당방향에 맞게 진행한다. 추가로 5신호를 보내면 동작을 정지할 수 있도록 설계 하였다.

3) RC카의 동작 제어

RC카의 경우 바퀴가 양쪽으로 달려 있고, 좌우 반대로 달려 있기 때문에 서로 반대 방향으로 진행 해야 한다. 예로, 앞으로 가기 위해서는 왼쪽은 앞으로 오른쪽 모터는 뒤로 진행 시키면 된다.

이 데이터를 바탕으로 우리는 제 1공학관 지하를 한 바퀴 탐방하였고, 충격을 받으면 블루투스가 가끔 끊기는 현상은 보이지만 잘 작동하였다. RC카 제작은 성공적이었다. 참 재미 있었다. 튜터인 민주가 잘 챙겨 주었다.
#include 
#define RX 9
#define TX 8
#define motor1pin1 5
#define motor1pin2 6
#define motor2pin1 3
#define motor2pin2 11
SoftwareSerial interface_bt(TX, RX); // 블루투스 모듈

// up 블루투스 값 = 3
// left 블루투스 값 = 1
// right 블루투스 값 = 2
// down 블루투스 값 = 4
// stop 블루투스 값 = 5

void forward() { // 앞으로 움직이는 함수
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2, LOW);
  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, HIGH);
}

void left() { // 왼쪽으로 움직이는 함수
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2, LOW);
  digitalWrite(motor2pin1, HIGH);
  digitalWrite(motor2pin2, LOW);
}

void right() { // 오른쪽으로 움직이는 함수
  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, HIGH);
  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, HIGH);
}

void back() { // 뒤로 움직이는 함수
  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, HIGH);
  digitalWrite(motor2pin1, HIGH);
  digitalWrite(motor2pin2, LOW);
}

void stopIt() { // 멈춰!
  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, LOW);
  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, LOW);
}


void setup() { 
  Serial.begin(9600);
  interface_bt.begin(9600);
  Serial.println("READY!"); //마음의 준비
  pinMode(motor1pin1, OUTPUT);
  pinMode(motor1pin2, OUTPUT);
  pinMode(motor2pin1, OUTPUT);
  pinMode(motor2pin2, OUTPUT); 
}

void loop() {
  // 블루투스에서 전송된 내용이 있을 경우
  if (interface_bt.available()) {
    int input = interface_bt.read(); // 블루투스 값을 변수 input에 저장

    if (input == '3') // 입력값이 '3'인 경우 앞으로 가기
      forward();
    else if (input == '1') // 입력값이 '1'인 경우 왼쪽으로 가기
      left();
    else if (input == '2') // 입력값이 '2'인 경우 오른쪽으로 가기
      right();
    else if (input == '4') // 입력값이 '4'인 경우 뒤로 가기
      back();
    else if (input == '5') // // 입력값이 '5'인 경우 멈추기
      stopIt();
  }  
}
전체 0