초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

RC카 키트 2

2016-07-22 14:15:46

개요

 

 

RC카에 생명을 불어 넣어줄 소프트웨어 튜토리얼입니다.

각 센서들에 대한 예제들은 추후 차례대로 보여드리게 될것같습니다.

이번 시간에는 블루투스 모듈을 활용하여 어플로 조종할 수 있는 방법을 알려 드리려 합니다. 

 

 

 

 

 

 

RC카 프로젝트 실습하기

 

소프트웨어 코딩 후 오렌지보드와 연결하기

 

순서         

 

     

 

  • RC카 제어를 위한 스케치 코드를 받아 오렌지 보드에 업로드 해봅시다.

  • 스마트폰 제어를 위한 안드로이드 어플을 받아 설치합니다.

  • 스마트폰과 오렌지보드와 연결해봅시다.

  • 모든 준비가 끝났으면 RC카를 멋지게 제어해봅시다.

 

 

 

 

 

 

회로 연결 시 참고사항

  • 물 묻은 손으로 만지면, 감전의 위험이 있습니다.
 
  • 부품의 극성 ( + ) , ( - )를 주의하시기 바랍니다.
  • 부품들을 제자리에 잘 고정시키기 바랍니다.
  • 전원 연결시 모터가 작동하여 움직일 수 있으니 주의하시기 바랍니다.

 

 

부품별 주의사항

  • 모터드라이버는 극성 ( + ) , ( - )를 잘 구분하여 케이블이 빠지지 않도록 드라이버로 고정시켜줍니다.
 
  • 9V 사각전원은 전지의 원부분과 소켓의 육각형부분으로 암,수를 구분하여 서로 다른 형태를 가진 부분끼리 끼워줍니다.
  • LED는 ( + ) , ( - )를 구분하여야 합니다.

 

 

 

 

 

RC카 소프트웨어 코딩

 

 

RC카 기본 코드

아래의 코드를 오렌지보드에 업로드 시켜주시기 바랍니다.

#include <SoftwareSerial.h> //블루투스를 사용하기위한 라이브러리

SoftwareSerial bSerial(12, 13); //블루투스 모듈을 연결하는 핀 지정(아날로그 핀도 사용 가능), TX에 12, RX에 13을 연결

const int motorLeftF = 11; // 왼쪽 모터의 전진 신호는 11번으로 정의
const int motorLeftB = 10; // 왼쪽 모터의 후진 신호는 10번으로 정의
const int motorRightF = 9; // 오른쪽 모터의 전진 신호는 6번으로 정의
const int motorRightB = 6; // 오른쪽 모터의 후진 신호는 9번으로 정의

boolean direction = true;

void setup() {
  bSerial.begin(9600);  // 블루투스 통신을 하기 위해 Serial 통신 속도를 9600bps로 설정
  pinMode(motorRightF, OUTPUT);
  pinMode(motorRightB, OUTPUT);
  pinMode(motorLeftF, OUTPUT);
  pinMode(motorLeftB, OUTPUT);
  // 모터 2개를 제어하기 위해 모터드라이버와 연결된 핀을 출력으로 설정
}


void loop() { 
  char readed;
  while(bSerial.available()){
    readed=bSerial.read();
    setDirection(readed); // 입력받은 문자에 맞는 동작을 실행
  }
}


void left(int d){ //왼쪽 모터 제어 
  if(d == 1){
    digitalWrite(motorLeftB, LOW);
    digitalWrite(motorLeftF, HIGH);
  } 
  else if(d == 0){ 
    digitalWrite(motorLeftB, LOW);
    digitalWrite(motorLeftF, LOW);     
  }
  else {
    digitalWrite(motorLeftB, HIGH);
    digitalWrite(motorLeftF, LOW); 
  }
}

void right(int d){ //오른쪽 모터 제어 
  if(d == 1){
    digitalWrite(motorRightB, LOW);
    digitalWrite(motorRightF, HIGH);
  } 
  else if(d == 0){
    digitalWrite(motorRightB, LOW);
    digitalWrite(motorRightF, LOW);     
  }
  else {
    digitalWrite(motorRightB, HIGH);
    digitalWrite(motorRightF, LOW);
  } 
}

void setDirection(unsigned char d){
  switch(d){
  case 'f': // f를 직진으로 정의
    left(1);   
    right(1);
    break;
  case 'b': // b를 후진으로 정의
    left(-1);   
    right(-1); 
    break;
  case 'l': // l을 좌회전으로 정의
    left(0);  //왼쪽 바퀴 정지
    right(1); //오른쪽 바퀴 회전
    break;
  case 'r': // r을 우회전으로 정의
    left(1);   
    right(0);
    break;
  case 'L': //L을 반시계방향으로 회전으로 정의
    left(-1);  
    right(1);
    break;
  case 'R': //R을 시계방향으로 회전으로 정의
    left(1);   
    right(-1); 
    break;
  case 's': //s를 정지로 정의
    left(0);
    right(0);
  }
}

 

* 위의 코드는 가장기본이 되는 블루투스를 활용하여 어플로 조종하는 소스입니다.

 

 

 

 

 

초음파센서 코드

아래의 코드를 오렌지보드에 업로드 시켜주시기 바랍니다.

const int motorLeftF = 11; // 왼쪽 모터의 전진 신호는 11번으로 정의
const int motorLeftB = 10; // 왼쪽 모터의 후진 신호는 10번으로 정의
const int motorRightF = 6; // 오른쪽 모터의 전진 신호는 6번으로 정의
const int motorRightB = 9; // 오른쪽 모터의 전진 신호는 9번으로 정의

const int trig = 2;
const int echo = 3;

void setup() {
  Serial.begin(9600);
  pinMode(motorRightF, OUTPUT);
  pinMode(motorRightB, OUTPUT);
  pinMode(motorLeftF, OUTPUT);
  pinMode(motorLeftB, OUTPUT);
  
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  ultrasonicMode();
}

void left(int d){ //왼쪽 모터 제어 
  if(d == 1){
    digitalWrite(motorLeftB, LOW);
    digitalWrite(motorLeftF, HIGH);
  } 
  else if(d == 0){ 
    digitalWrite(motorLeftB, LOW);
    digitalWrite(motorLeftF, LOW);     
  }
  else {
    digitalWrite(motorLeftB, HIGH);
    digitalWrite(motorLeftF, LOW); 
  }
}

void right(int d){ //오른쪽 모터 제어 
  if(d == 1){
    digitalWrite(motorRightB, LOW);
    digitalWrite(motorRightF, HIGH);
  } 
  else if(d == 0){
    digitalWrite(motorRightB, LOW);
    digitalWrite(motorRightF, LOW);     
  }
  else {
    digitalWrite(motorRightB, HIGH);
    digitalWrite(motorRightF, LOW);
  } 
}
void ultrasonicMode() {
  digitalWrite(trig, LOW);
  digitalWrite(echo, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);

  unsigned long duration = pulseIn(echo, HIGH);
  float distance = duration / 29.0 / 2.0;

  Serial.println(distance);

  if (distance < 50) {
    left(0);
    right(1);
    delay(100);
  } else {
    left(1);
    right(1);
  }
}

 

 * 위의 코드는 초음파센서를 이용하여 장애물이 있을 경우 회피하는 소스입니다.

 * 초음파 센서 코드일 경우, 업로드시 바퀴가 움직일 수 있으니 주의하시기 바랍니다.

 

 

 

RC카 + 초음파센서 코드

아래의 코드를 오렌지보드에 업로드 시켜주시기 바랍니다.

#include <SoftwareSerial.h> //블루투스를 사용하기위한 라이브러리

SoftwareSerial bSerial(12, 13); //블루투스 모듈을 연결하는 핀 지정(아날로그 핀도 사용 가능), TX에 12, RX에 13을 연결

const int motorLeftF = 11; // 왼쪽 모터의 전진 신호는 11번으로 정의
const int motorLeftB = 10; // 왼쪽 모터의 후진 신호는 10번으로 정의
const int motorRightF = 6; // 오른쪽 모터의 전진 신호는 6번으로 정의
const int motorRightB = 9; // 오른쪽 모터의 전진 신호는 9번으로 정의

const int trig = 2; // 초음파센서의 trig 핀을 2번으로 정의
const int echo = 3; // 초음파센서의 echo 핀을 3번으로 정의

unsigned char direction;
byte temp = 0;  // 초음파센서 모드와 RC카 모드를 구분하기 위해 변수를 설정

void setup() {
  bSerial.begin(9600);  // 블루투스 통신을 하기 위해 Serial 통신 속도를 9600bps로 설정
  pinMode(motorRightF, OUTPUT);
  pinMode(motorRightB, OUTPUT);
  pinMode(motorLeftF, OUTPUT);
  pinMode(motorLeftB, OUTPUT);
  // 모터 2개를 제어하기 위해 모터드라이버와 연결된 핀을 출력으로 설정
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  // 초음파 센서에 trig핀을 출력으로 echo핀을 입력으로 설정
}

void loop() {
  char readed;
  while (bSerial.available()) {
    readed = bSerial.read();
    if (readed == '1') {  // 초음파센서 모드를 실행할 때
      temp = 1;
    } 
    else if (readed == '2') { // RC카 모드를 실행할 때
      temp = 2;
    }
  }

  if (temp == 1) { // 초음파 센서 모드일 때
    if (readed == 's') { // 멈춤 버튼을 눌렀을 때
      left(0); 
      right(0); //멈춘다
      temp = 2; // RC카 모드로 변환
    }

    ultrasonicMode(); // 초음파 센서모드를 실행
  }
  else if (temp == 2) { // RC카 모드일 때
    direction = readed; 
    setDirection(direction); // 입력받은 명령에 맞는 동작을 실행
  }
}

void left(int d){ //왼쪽 모터 제어 
  if(d == 1){
    digitalWrite(motorLeftB, LOW);
    digitalWrite(motorLeftF, HIGH);
  } 
  else if(d == 0){ 
    digitalWrite(motorLeftB, LOW);
    digitalWrite(motorLeftF, LOW);     
  }
  else {
    digitalWrite(motorLeftB, HIGH);
    digitalWrite(motorLeftF, LOW); 
  }
}

void right(int d){ //오른쪽 모터 제어 
  if(d == 1){
    digitalWrite(motorRightB, LOW);
    digitalWrite(motorRightF, HIGH);
  } 
  else if(d == 0){
    digitalWrite(motorRightB, LOW);
    digitalWrite(motorRightF, LOW);     
  }
  else {
    digitalWrite(motorRightB, HIGH);
    digitalWrite(motorRightF, LOW);
  } 
}

void ultrasonicMode() {  // 초음파 센서 모드
  digitalWrite(trig, LOW);
  digitalWrite(echo, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  // 10ms 동안 trig핀에서 신호를 출력

  unsigned long duration = pulseIn(echo, HIGH); // 출력한 신호가 물체에 부딪쳐 올때까지의 시간 측정
  float distance = duration / 29.0 / 2.0; 
  // 초음파가 물체에 부딪쳐 올때 까지의 시간을 이용하여 거리를 측정합니다.
  // 거리 = 시간 X 속력

  if (distance < 50) { // 장애물과의 거리가 50cm이하일 때
    left(0);
    right(1);  // 좌회전
    delay(100);
  } 
  else { // 장애물과 거리가 50cm이상일 때
    left(1);
    right(1); // 직진
  }
}

void setDirection(unsigned char d) {  // RC카 모드일 때
  switch (d) {
  case 'f': // f를 직진으로 정의
    left(1);
    right(1);
    break;
  case 'b': // b를 후진으로 정의
    left(-1);
    right(-1);
    break;
  case 'l': // l을 좌회전으로 정의
    left(0);  //왼쪽 바퀴 정지
    right(1); //오른쪽 바퀴 회전
    break;
  case 'r': // r을 우회전으로 정의
    left(1);
    right(0);
    break;
  case 'L': //L을 반시계방향으로 회전으로 정의
    left(-1);
    right(1);
    break;
  case 'R': //R을 시계방향으로 회전으로 정의
    left(1);
    right(-1);
    break;
  case 's': //s를 정지로 정의
    left(0);
    right(0); //멈춘다
  }
}

 

 * 위의 코드는 어플 조종과 초음파 모드 가능한 소스입니다.

 * 아래 어플 예제를 활용 할 수 있는 소스입니다.

 

 

 

초음파센서 코드 동영상

 

 

 

 

RC카 어플 사용하기

 

 

Play 스토어 -> '블루투스 컨트롤' 검색 -> 어플 설치

   

 

 

 

스마트폰에서 블루투스 모듈 페어링 하기

변경한 블루투스 모듈 이름을 선택 1234 입력 해당 디바이스 선택

 

 

 

 

‘블루투스 컨트롤’ 어플을 이용하여 제어하기

 

장치 검색을 눌러 블루투스를 연결해 줍니다.

정해놓은 명령어를 등록해 줍니다.

RC카 기본은 f, b, r, l, s 입니다.

 

 

 


명령어 설정

RC 카 RC카 + 초음파 센서
    RC카 2
    초음파 센서 1
전진 f 전진 f
우회전 r 우회전 r
좌회전 l 좌회전 l
후진 b 후진 b
멈춤 s 멈춤 s

 

 

 

 

응용하기

 

초음파 센서 LCD 모듈 라인센서

초음파센서를 사용하여 거리를 감지하고,

장애물을 피하는 RC카를 만들 수 있습니다.

         

LCD 모듈을 활용하여 각종

데이터를 표시할 수 있습니다.

      

라인 센서를 활용하여 라인을 감지하고, 

라인을 따라 움직이도록 제어할 수 있습니다.

         

 

각자의 상상력으로 RC카에 기능을 추가하거나 외관을 재미있게 꾸밀 수 있습니다.

보다 더 창의력 넘치는 아이디어를 표현해 보세요!!!

감사합니다.

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!