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 값 전달
후진 : 양 모터에 모두 역방향 신호 전달