SlideShare a Scribd company logo
2
Most read
4
Most read
8
Most read
Arduino Part
송치원
Bluetooth 통신 연결
HC-06 Bluetooth module (Slave)
VCC : 5V에 연결
GND : GND 에 연결
TXD : D2 에 연결
RXD : D2 에 연결
#include <SoftwareSerial.h> // 1
int blueTx=2;
int blueRx=3;
SoftwareSerial BTSerial(blueTx, blueRx); // 2
void setup() {
BTSerial.begin(9600); // 3
}
void loop() {
if(BTSerial.available() > 0) { // 4
int val = BTSerial.read();
doRemote(val); // 5
}
}
1. 블루투스 연결을 통해 시리얼 통신을 수행한다. 시리얼 통신을 소프트웨어적으로 구현하기
위해 SoftwareSerial 라이브러리를 사용한다.
2. SoftwareSerial 객체로 BTSerial을 생성한다. 이 때 TXD 와 RXD가 연결된 핀번호를
입력해 준다.
3. 통신 초기화. 시리얼 통신 채널을 열고 속도를 9600 으로 지정한다.
4. 블루투스로 부터 전달되는 신호가 있는지 확인한다.
5. 전달된 신호가 있다면 그 값을 읽어 val 변수에 저장하고, 이에 따라 컨트롤 동작을 수행
한다.
#include <SoftwareSerial.h>
const char bt_name[] = "REMOTE_CAR";
const char bt_pwd[] = "9999";
int bTx=2;
int bRx=3;
SoftwareSerial BT(bTx, bRx);
bool sendMessage(String command) {
BT.print(command);
String result = BT.readString();
if(result.startsWith("OK")) return true;
return false;
}
void loop()
{
}
void setup()
{
Serial.begin(9600);
BT.begin(9600);
String settingState;
Serial.println("Processing...");
settingState = "Handshake";
if(!sendMessage("AT")) goto ERROR;
settingState = "Set Name";
if(!sendMessage(String("AT+NAME") + bt_name)) goto ERROR;
settingState = "Set Password";
if(!sendMessage(String("AT+PIN") + bt_pwd)) goto ERROR;
// 1:1200, 2:2400, 3:4800, 4:9600, 5:19200,
// 6:28400, 7:57600, 8:115200
settingState = "Set Speed";
if(!sendMessage(String("AT+BAUD4"))) goto ERROR;
Serial.print("BT_NAME : ");
Serial.println(bt_name);
Serial.print("BT_PWD : ");
Serial.println(bt_pwd);
Serial.println("BT_BAUD : 9600");
Serial.println("Setting Complete!");
return;
ERROR:
Serial.println("Setting Fail : " + settingState);
}
HC-06 모듈은 기본값으로
- 이름 : HC06
- 비밀번호 : 1234
로 설정되어 있다.
이 값을 임의로 변경하고자 할 때
AT 명령을 통해 변경할 수 있다.
- 이름변경 : AT+NAMEREMOTE_RC
- 비번변경 : AT+PIN1234
- 속도변경 : AT_BAUD4
변경에 성공하면 OK 값을 응답받게 된다.
Servo 모터 연결 (조향장치)
SG90 Micro Servo Motor
VCC (빨) : 5V에 연결
GND (갈) : GND 에 연결
SIG (주) : D8 에 연결
#include <Servo.h> // 1
#define CENTER 90
#define LEFT 50
#define RIGHT 130
int HandlePin = 8;
Servo handle; // 2
void setup() {
handle.attach(HandlePin); // 3
handle.write(CENTER); // 4
}
void loop() {
}
void doRemote(int val) {
//HANDLE
if(val == 'l') {
handle.write(LEFT); // 5
} else if(val == 'c') {
handle.write(CENTER); // 5
} else if(val == 'r') {
handle.write(RIGHT); // 5
}
}
1. Servo 라이브러리를 사용한다.
2. Servo 객체로 handle을 생성한다.
3. 연결된 핀 번호를 지정하여 서보모터를
연결한다.
4. 초기값 설정. 초기값으로 모터의 회전 위
치를 중앙(90도)에 오도록 조정한다.
5. 명령에 따라서 핸들을 왼쪽(130도) 또는
오른쪽(50도)으로 조정한다.
DC 모터 연결 (구동장치)
H-Bridge DC Motor Driver
MOTOR A / B : 모터에 연결
VCC : 전원(+)에 연결
GND : 전원(-)에 연결
A-IA : D5 에 연결
A-IB : D6 에 연결
B-IA : D10 에 연결
B-IB : D11 에 연결
int MotorPin1 = 5;
int MotorPin2 = 6;
int MotorPin3 = 10;
int MotorPin4 = 11;
void setup() {
pinMode(MotorPin1, OUTPUT); // 1
pinMode(MotorPin2, OUTPUT);
pinMode(MotorPin3, OUTPUT);
pinMode(MotorPin4, OUTPUT);
}
void loop() {
}
void doRemote(int val) {
//MOTOR
if(val == 'f') {
digitalWrite(MotorPin1, HIGH); // 2
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
} else if(val == 's') {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
} else if(val == 'b') {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
}
}
1. 핀모드 설정
2. 제어 신호에 따라 전진, 정지, 후진을 수
행한다.
전진 : 양 모터에 모두 정방향 신호 전달
정지 : 양 모터에 모두 LOW 값 전달
후진 : 양 모터에 모두 역방향 신호 전달
전체 회로
#include <SoftwareSerial.h>
#include <Servo.h>
#define CENTER 90
#define LEFT 50
#define RIGHT 130
int blueTx=2;
int blueRx=3;
int HandlePin = 8;
int MotorPin1 = 5;
int MotorPin2 = 6;
int MotorPin3 = 10;
int MotorPin4 = 11;
Servo handle;
SoftwareSerial BTSerial(blueTx, blueRx);
void setup() {
BTSerial.begin(9600);
handle.attach(HandlePin);
pinMode(MotorPin1, OUTPUT);
pinMode(MotorPin2, OUTPUT);
pinMode(MotorPin3, OUTPUT);
pinMode(MotorPin4, OUTPUT);
handle.write(CENTER);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
}
void loop() {
if(BTSerial.available() > 0) {
int val = BTSerial.read();
doRemote(val);
}
}
void doRemote(int val) {
//HANDLE
if(val == 'l') {
handle.write(LEFT);
} else if(val == 'c') {
handle.write(CENTER);
} else if(val == 'r') {
handle.write(RIGHT);
}
//MOTOR
else if(val == 'f') {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, HIGH);
digitalWrite(MotorPin4, LOW);
} else if(val == 's') {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
} else if(val == 'b') {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
}
}
전체 소스
Mobile Part
(Android)
모바일 리모트 컨트롤러

More Related Content

PPTX
PDF
창조경제 IoT 해커톤 교육 4일차
PPTX
메이커 페어 서울 2018 - 측우자격루(개발자용)
PPTX
#아두이노 초급연수
PDF
Arduino 소개, RC카 만들기
PPTX
움직이는 장치 만들기
PPTX
[가상편] 하드웨어에 생명을 주는 아두이노
PPTX
DIY의 끝판왕 3D 프린터
창조경제 IoT 해커톤 교육 4일차
메이커 페어 서울 2018 - 측우자격루(개발자용)
#아두이노 초급연수
Arduino 소개, RC카 만들기
움직이는 장치 만들기
[가상편] 하드웨어에 생명을 주는 아두이노
DIY의 끝판왕 3D 프린터

Similar to 아두이노 RC카 만들기 (20)

PDF
아두이노 bluetooth
PPTX
아두이노로 배우는 피지컬 컴퓨팅(중급)
PDF
원준갓의 IoT 수업
PPT
Arduino Basic Programming
PDF
아두이노 2015-2 한동대학교 공학설계입문
PPTX
Smart rover 통신 분석
PDF
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
DOCX
Test-SDIC2018-1(Answer)
DOCX
TestBCD2016-2(Answer)
PPTX
[엄마정치 메이커팀] 두번째 모임_2018_01_27
PDF
Arduino
DOCX
TestSDIC2017-1(answer)
PDF
IoT 해커톤 교육 3일차
PDF
강의자료 코딩클럽 아두이노 워크샵-2015.4.11
PDF
허봉춘씨의 파란만장한 IoT 보드 만들기
PDF
배푸 창의로봇 Sw교육 4. 아두이노 맛보기
PPTX
3D 프린터와 아두이노
DOCX
TestSDIC2015-1(Answer)
DOCX
TestBCD2018-2(answer)
DOCX
TestSDIC2015-2(Answer)
아두이노 bluetooth
아두이노로 배우는 피지컬 컴퓨팅(중급)
원준갓의 IoT 수업
Arduino Basic Programming
아두이노 2015-2 한동대학교 공학설계입문
Smart rover 통신 분석
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
Test-SDIC2018-1(Answer)
TestBCD2016-2(Answer)
[엄마정치 메이커팀] 두번째 모임_2018_01_27
Arduino
TestSDIC2017-1(answer)
IoT 해커톤 교육 3일차
강의자료 코딩클럽 아두이노 워크샵-2015.4.11
허봉춘씨의 파란만장한 IoT 보드 만들기
배푸 창의로봇 Sw교육 4. 아두이노 맛보기
3D 프린터와 아두이노
TestSDIC2015-1(Answer)
TestBCD2018-2(answer)
TestSDIC2015-2(Answer)
Ad

More from Chiwon Song (20)

PDF
20250425_AI가 코딩하는 시대에 개발자가 되겠다구요_.pdf
PDF
20250210_AI가 코딩하는시대에 개발자 되기 - Google Slides.pdf
PDF
20240330_고급진 코드를 위한 exception 다루기
PDF
요즘 유행하는 AI 나도 해보자 (feat. CoreML)
PDF
20220716_만들면서 느껴보는 POP
PDF
20210812 컴퓨터는 어떻게 동작하는가?
PDF
20201121 코드 삼분지계
PDF
20200815 inversions
PDF
20191116 custom operators in swift
PDF
[20190601] 직업훈련교사_수업의실행_교안
PPTX
[20190601] 직업훈련교사_수업의실행
PDF
20190330 immutable data
PPTX
20190306 만들면서 배우는 IoT / IoT의 이해
PDF
20181020 advanced higher-order function
PDF
20180721 code defragment
PDF
20180310 functional programming
PDF
20171104 FRP 패러다임
PDF
스크래치로 시작하는 코딩
PPTX
메이커운동과 아두이노
PPTX
[5] 아두이노로 만드는 IoT
20250425_AI가 코딩하는 시대에 개발자가 되겠다구요_.pdf
20250210_AI가 코딩하는시대에 개발자 되기 - Google Slides.pdf
20240330_고급진 코드를 위한 exception 다루기
요즘 유행하는 AI 나도 해보자 (feat. CoreML)
20220716_만들면서 느껴보는 POP
20210812 컴퓨터는 어떻게 동작하는가?
20201121 코드 삼분지계
20200815 inversions
20191116 custom operators in swift
[20190601] 직업훈련교사_수업의실행_교안
[20190601] 직업훈련교사_수업의실행
20190330 immutable data
20190306 만들면서 배우는 IoT / IoT의 이해
20181020 advanced higher-order function
20180721 code defragment
20180310 functional programming
20171104 FRP 패러다임
스크래치로 시작하는 코딩
메이커운동과 아두이노
[5] 아두이노로 만드는 IoT
Ad

아두이노 RC카 만들기

  • 2. Bluetooth 통신 연결 HC-06 Bluetooth module (Slave) VCC : 5V에 연결 GND : GND 에 연결 TXD : D2 에 연결 RXD : D2 에 연결
  • 3. #include <SoftwareSerial.h> // 1 int blueTx=2; int blueRx=3; SoftwareSerial BTSerial(blueTx, blueRx); // 2 void setup() { BTSerial.begin(9600); // 3 } void loop() { if(BTSerial.available() > 0) { // 4 int val = BTSerial.read(); doRemote(val); // 5 } } 1. 블루투스 연결을 통해 시리얼 통신을 수행한다. 시리얼 통신을 소프트웨어적으로 구현하기 위해 SoftwareSerial 라이브러리를 사용한다. 2. SoftwareSerial 객체로 BTSerial을 생성한다. 이 때 TXD 와 RXD가 연결된 핀번호를 입력해 준다. 3. 통신 초기화. 시리얼 통신 채널을 열고 속도를 9600 으로 지정한다. 4. 블루투스로 부터 전달되는 신호가 있는지 확인한다. 5. 전달된 신호가 있다면 그 값을 읽어 val 변수에 저장하고, 이에 따라 컨트롤 동작을 수행 한다.
  • 4. #include <SoftwareSerial.h> const char bt_name[] = "REMOTE_CAR"; const char bt_pwd[] = "9999"; int bTx=2; int bRx=3; SoftwareSerial BT(bTx, bRx); bool sendMessage(String command) { BT.print(command); String result = BT.readString(); if(result.startsWith("OK")) return true; return false; } void loop() { } void setup() { Serial.begin(9600); BT.begin(9600); String settingState; Serial.println("Processing..."); settingState = "Handshake"; if(!sendMessage("AT")) goto ERROR; settingState = "Set Name"; if(!sendMessage(String("AT+NAME") + bt_name)) goto ERROR; settingState = "Set Password"; if(!sendMessage(String("AT+PIN") + bt_pwd)) goto ERROR; // 1:1200, 2:2400, 3:4800, 4:9600, 5:19200, // 6:28400, 7:57600, 8:115200 settingState = "Set Speed"; if(!sendMessage(String("AT+BAUD4"))) goto ERROR; Serial.print("BT_NAME : "); Serial.println(bt_name); Serial.print("BT_PWD : "); Serial.println(bt_pwd); Serial.println("BT_BAUD : 9600"); Serial.println("Setting Complete!"); return; ERROR: Serial.println("Setting Fail : " + settingState); } HC-06 모듈은 기본값으로 - 이름 : HC06 - 비밀번호 : 1234 로 설정되어 있다. 이 값을 임의로 변경하고자 할 때 AT 명령을 통해 변경할 수 있다. - 이름변경 : AT+NAMEREMOTE_RC - 비번변경 : AT+PIN1234 - 속도변경 : AT_BAUD4 변경에 성공하면 OK 값을 응답받게 된다.
  • 5. Servo 모터 연결 (조향장치) SG90 Micro Servo Motor VCC (빨) : 5V에 연결 GND (갈) : GND 에 연결 SIG (주) : D8 에 연결
  • 6. #include <Servo.h> // 1 #define CENTER 90 #define LEFT 50 #define RIGHT 130 int HandlePin = 8; Servo handle; // 2 void setup() { handle.attach(HandlePin); // 3 handle.write(CENTER); // 4 } void loop() { } void doRemote(int val) { //HANDLE if(val == 'l') { handle.write(LEFT); // 5 } else if(val == 'c') { handle.write(CENTER); // 5 } else if(val == 'r') { handle.write(RIGHT); // 5 } } 1. Servo 라이브러리를 사용한다. 2. Servo 객체로 handle을 생성한다. 3. 연결된 핀 번호를 지정하여 서보모터를 연결한다. 4. 초기값 설정. 초기값으로 모터의 회전 위 치를 중앙(90도)에 오도록 조정한다. 5. 명령에 따라서 핸들을 왼쪽(130도) 또는 오른쪽(50도)으로 조정한다.
  • 7. DC 모터 연결 (구동장치) H-Bridge DC Motor Driver MOTOR A / B : 모터에 연결 VCC : 전원(+)에 연결 GND : 전원(-)에 연결 A-IA : D5 에 연결 A-IB : D6 에 연결 B-IA : D10 에 연결 B-IB : D11 에 연결
  • 8. int MotorPin1 = 5; int MotorPin2 = 6; int MotorPin3 = 10; int MotorPin4 = 11; void setup() { pinMode(MotorPin1, OUTPUT); // 1 pinMode(MotorPin2, OUTPUT); pinMode(MotorPin3, OUTPUT); pinMode(MotorPin4, OUTPUT); } void loop() { } void doRemote(int val) { //MOTOR if(val == 'f') { digitalWrite(MotorPin1, HIGH); // 2 digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, HIGH); digitalWrite(MotorPin4, LOW); } else if(val == 's') { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, LOW); } else if(val == 'b') { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, HIGH); } } 1. 핀모드 설정 2. 제어 신호에 따라 전진, 정지, 후진을 수 행한다. 전진 : 양 모터에 모두 정방향 신호 전달 정지 : 양 모터에 모두 LOW 값 전달 후진 : 양 모터에 모두 역방향 신호 전달
  • 10. #include <SoftwareSerial.h> #include <Servo.h> #define CENTER 90 #define LEFT 50 #define RIGHT 130 int blueTx=2; int blueRx=3; int HandlePin = 8; int MotorPin1 = 5; int MotorPin2 = 6; int MotorPin3 = 10; int MotorPin4 = 11; Servo handle; SoftwareSerial BTSerial(blueTx, blueRx); void setup() { BTSerial.begin(9600); handle.attach(HandlePin); pinMode(MotorPin1, OUTPUT); pinMode(MotorPin2, OUTPUT); pinMode(MotorPin3, OUTPUT); pinMode(MotorPin4, OUTPUT); handle.write(CENTER); digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, LOW); } void loop() { if(BTSerial.available() > 0) { int val = BTSerial.read(); doRemote(val); } } void doRemote(int val) { //HANDLE if(val == 'l') { handle.write(LEFT); } else if(val == 'c') { handle.write(CENTER); } else if(val == 'r') { handle.write(RIGHT); } //MOTOR else if(val == 'f') { digitalWrite(MotorPin1, HIGH); digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, HIGH); digitalWrite(MotorPin4, LOW); } else if(val == 's') { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, LOW); } else if(val == 'b') { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, HIGH); } } 전체 소스