초급 예제

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

오렌지보드 BLE를 활용해 RC카 제작하기

2019-01-14 10:16:02

<하드웨어 제작하기>

 

개요

 

본 페이지에서는 페이퍼 RC카 제작에 필요한 외관 조립과 하드웨어 연결 정보를 확인할 수 있습니다.

 

조립에 필요한 과정은 크게 6가지로 나눌 수 있습니다.

 

 

 

본체 제작하기 ▶ 거치대 제작하기 ▶ 덮개 제작하기 ▶ 본체와 거치대 결합하기 ▶ 회로 연결하기 ▶ 덮개 결합하기

 
 

 

 

 

RC카 조립 준비물

 

 

 

 

 

 

1) 본체 제작하기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2) 거치대 제작하기

 

 

 

 

 

 

 

 

 

 

 

 

 

3) 덮개 제작하기

 

 

 

 

 

 

4) 본체와 거치대 결합하기

 

 

 

 

 

 

5) 회로 연결하기

 

 

 

 

 

 

※ 페이퍼 RC카 회로도

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6) 덮개 결합하기

 

 

 

 


 

<소프트웨어 코딩하기>

개요

페이퍼 RC카의 주기능은 총 3가지로 구현해볼 수 있습니다. 

 

원격 주행 RC카

스마트폰을 통해 무선으로 RC카의 방향을 제어합니다

자율 주행 RC카

초음파 거리 감지 센서를 통해 장애물을 회피하며 주행합니다

라인 주행 RC카

라인트레이서 센서를 통해 검은색 라인을 따라 주행합니다.

* 라인트레이서는 구성 품목이 아니며, 별매가 필요합니다

 

 

 

원격 주행 RC카 

 

1. Bluetooth_RC.ino 업로드

아래 링크를 통해 아두이노 소스코드를 다운로드 받아 오렌지보드 BLE에 업로드합니다.

#include <SoftwareSerial.h>
 
SoftwareSerial BTSerial(45);
 
int in1 = 9;
int in2 = 6;
int in3 = 10;
int in4 = 11;
 
int RSpeed = 255;
int LSpeed = 255;
 
char data;
 
void setup() {
  BTSerial.begin(9600);
}
 
void loop() {
  if (BTSerial.available()) {
    data = BTSerial.read();
 
    if (data == 'f') { //직진
      analogWrite(in1, RSpeed);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, LSpeed); 
    }
    if (data == 'r') { //우회전
      analogWrite(in1, 0);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, LSpeed);
    }
    if (data == 'l') { //좌회전
      analogWrite(in1, RSpeed);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, 0);
    }
    if (data == 'b') { //후진
      analogWrite(in1, 0);
      analogWrite(in2, RSpeed);
      analogWrite(in3, LSpeed);
      analogWrite(in4, 0);
    }
    if (data == 's') { //정지
      analogWrite(in1, 0);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, 0);
    }
  }
}
 
cs

 

 

2. 어플리케이션 다운로드 및 설정

 

링크를 이용해 어플리케이션을 스마트폰에 설치합니다.

 

 

 

 

어플리케이션 데이터 설정 테이블

전진

f

우회전

r

좌회전

l

후진

b

멈춤

s

 

 

 


 

 

자율 주행 RC카 

 

1. Ultrasonic_RC.ino 업로드

아래 링크를 통해 아두이노 소스코드를 다운로드 받아 오렌지보드 BLE에 업로드합니다.

int in1 = 9;
int in2 = 6;
int in3 = 10;
int in4 = 11;
 
int trig = 2;
int echo = 3;
 
int Lspeed = 255;
int Rspeed = 255;
 
void setup() {
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}
 
void loop() {
  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 < 8) {
    //정지
    analogWrite(in1, 0);
    analogWrite(in2, 0);
    analogWrite(in3, 0);
    analogWrite(in4, 0);
    delay(700);
 
    //후진
    analogWrite(in1, 0);
    analogWrite(in2, Rspeed);
    analogWrite(in3, Lspeed);
    analogWrite(in4, 0);
    delay(500);
 
    //좌회전
    analogWrite(in1, Rspeed);
    analogWrite(in2, 0);
    analogWrite(in3, 0);
    analogWrite(in4, 0);
    delay(800);
  }
 
  else { 
    // 직진
    analogWrite(in1, Rspeed);
    analogWrite(in2, 0);
    analogWrite(in3, 0);
    analogWrite(in4, Lspeed);
  }
}
 
cs

 

 


 

 

라인 주행 RC카 

1. Line_tracer_RC.ino 업로드

아래 링크를 통해 아두이노 소스코드를 다운로드 받아 오렌지보드 BLE에 업로드합니다.

int in1 = 9;
int in2 = 6;
int in3 = 10;
int in4 = 11;
int L = 5;
int R = 4;
 
int RSpeed = 255;
int LSpeed = 255;
 
void setup() {
  pinMode(L, INPUT);
  pinMode(R, INPUT);
}
 
void loop() {
  if (digitalRead(R) == HIGH && digitalRead(L) == LOW) {
    //우회전
      analogWrite(in1, 0);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, LSpeed);
  }
 
  if (digitalRead(R) == LOW && digitalRead(L) == HIGH) {
    //좌회전
      analogWrite(in1, RSpeed);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, 0);
  }
 
  if (digitalRead(R) == HIGH && digitalRead(L) == HIGH) {
    //직진
      analogWrite(in1, RSpeed);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, LSpeed); 
  }
 
  if (digitalRead(R) == LOW && digitalRead(L) == LOW) {
    //직진
      analogWrite(in1, RSpeed);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, LSpeed); 
  }
}
cs

 

 

 

kocoafabeditor

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